  In recent years, SSDs have gained tremendous attention in computing and
storage systems due to significant performance improvement over HDDs. The cost
per capacity of SSDs, however, prevents them from entirely replacing HDDs in
such systems. One approach to effectively take advantage of SSDs is to use them
as a caching layer to store performance critical data blocks to reduce the
number of accesses to disk subsystem. Due to characteristics of Flash-based
SSDs such as limited write endurance and long latency on write operations,
employing caching algorithms at the Operating System (OS) level necessitates to
take such characteristics into consideration. Previous caching techniques are
optimized towards only one type of application, which affects both generality
and applicability. In addition, they are not adaptive when the workload pattern
changes over time. This paper presents an efficient Reconfigurable Cache
Architecture (ReCA) for storage systems using a comprehensive workload
characterization to find an optimal cache configuration for I/O intensive
applications. For this purpose, we first investigate various types of I/O
workloads and classify them into five major classes. Based on this
characterization, an optimal cache configuration is presented for each class of
workloads. Then, using the main features of each class, we continuously monitor
the characteristics of an application during system runtime and the cache
organization is reconfigured if the application changes from one class to
another class of workloads. The cache reconfiguration is done online and
workload classes can be extended to emerging I/O workloads in order to maintain
its efficiency with the characteristics of I/O requests. Experimental results
obtained by implementing ReCA in a server running Linux show that the proposed
architecture improves performance and lifetime up to 24\% and 33\%,
respectively.
