Internal Cache Layer¶
In this page, we will explain how we design and implement I/O buffer model (data cache), named Internal Cache Layer - ICL.
ICL provides abstract class, so you can implement your own data buffer model by inherit the class.
By default, we provide
GenericCache, which implements set-associative cache.
AbstractCache class is defined in
It defines five virtual functions (+ three virtual functions derived from
ICL get I/O requests from each virtual function and buffer I/O with own algorithm. Pass I/O to FTL when data eviction needed or flush request arrived.
Data buffer in SSD is very important for hiding slow NAND I/O performance. Small changes to the buffer algorithm introduces big performance changes.
We provides set-associative cache, which defined as
Following parameters are customizable.
For more detailed description, check sample configuration file.
CacheSize: Buffer capacity.
CacheWaySize: Set associativity of cache. Set size will automatically calculated.
EnableReadCache: Enable read data caching.
EnableReadPrefetch: Enable read-ahead and prefetch.
ReadPrefetchMode: Specify how many data should be read-ahead/prefetch.
ReadPrefetchCount: Threshold for read-ahead/prefetch (# of sequential I/O).
ReadPrefetchRatio: Threshold for read-ahead/prefetch (data size of sequential I/O).
EnableWriteCache: enable write data caching.
EvictPolicy: Specify which algorithm to use to select victim cache line.
EvictMode: Specify how many data should be evicted when cache is full.
CacheLatency: Set cache metadata access latency.