• No se han encontrado resultados

Capítulo 4. Bolivia, entre crisis y migración

4.2.1 La democracia de los pactos

To the best of our knowledge, there is no existing work that provides a flexible frame- work for efficiently implementing advanced static-content caching on flash. However, RIPQ sits at the intersection of several heavily-researched fields: RAM-based caching, Flash-based storage, Flash performance studies, and priority queues.

RAM-based Caching Caching has been an important research topic since the early days of computer science and many algorithms have been proposed to better capture the characteristics of different workloads. Some well-known features include recency (LRU, MRU) [27], frequency (LFU) [65], inter-reference time (LIRS) [49], and size (SIZE) [8]. There have also been a plethora of more advanced algorithms that consider multiple features, such as Multi-Queue [89] and Segmented LRU [54] for both recency and frequency, Greedy-Dual [88] and its variants like Greedy-Dual-Size [22] (GDS) and Greedy-Dual-Size-Frequency [26] (GDSF) for a more general method to compose the expected miss cost and minimize it.

While more advanced algorithms can potentially yield significant performance im- provements, such as Segmented-LRU and GDSF for Facebook photo workload, a gap still remains for efficient implementations on top of flash devices because most algo- rithms are hardware-agnostic: they implicitly assume data can be moved and overwritten with little overhead. Such assumptions do not hold on modern flash due to its asymmet- ric costs for reads and writes and the performance deterioration caused by its internal garbage collection.

Recently more flash-aware caching algorithms have also been proposed [74, 58, 59, 83, 45]. While most of them still treat flash as the back-end storage of a RAM cache and focus on shaping the cache-storage workload to be more flash-friendly, a few can only implement a single algorithm on flash with no flexibility. Other recent work has used flash as a write-back block cache [60]. Our work on RIPQ and SIPQ provides an efficient way to directly manage the entire flash capacity as the caching space, which is crucial for scenarios such as static-content delivery systems with large working-sets, and also provides flexibility in the choice of caching algorithm.

Flash-based Store Many flash-based storage systems, especially key-value stores have been recently proposed to work efficiently on flash hardware. Systems such as FAWN-KV [12], SILT [64], LevelDB [4], and RocksDB [7] group write operations from an upper layer and only flush to the device using sequential writes. However, being de- signed to cater to read-heavy workloads and other performance/application metrics such as memory footprints and range-query efficiencies, these systems make trade-offs (such as conducting on-flash data sorting and merges), that would yield high device overhead for write-heavy workloads. In contrast, RIPQ and SIPQ are specifically optimized for a (random) write-heavy workload and only support caching-required interfaces. Our nar- rowly scoped scenario gives RIPQ and SIPQ great flexibility to avoid device overhead as demonstrated in the dissertation.

Because caching algorithms can be built on top of more general flash-based storage systems, we chose RocksDB [7] as a sample baseline in evaluation to demonstrate its disadvantages for our scenario explicitly: (1) items are not grouped by their caching priorities like RIPQ, and (2) the key-value store interface does not provide the flexibility to access items that are marked removable but not removed yet as in SIPQ. These two disadvantages result in a worse trade-off space between caching performance and write- amplification compared to the RIPQ and SIPQ frameworks.

Study on Flash Performance and Interface While flash hardware itself is also an im- portant topic, studies that examine the application perceived performance and interface are more related to our work. For instance, previous research [53, 18, 80, 67] that reports the random write performance deterioration on flash helps verify our observations in the flash performance study.

proposed at different levels, such as separating the treatment of cold and hot data in the FTL by LAST [62], and the similar technique in filesystem by SFS [67]. These ap- proaches work well for skewed write workloads where only a small subset of the data is hot and updated often, and thus can be grouped together for garbage collection with lower overhead. In RIPQ, cached contents are explicitly tagged with priority values that indicate their hotness, and are co-located within the same device block if their prior- ity values are close. In a sense, such priorities provide a prior for identifying content hotness.

Recently, a more holistic approach known as Software-Defined Flash [71] (SDF) has also been proposed to improve the performance of flash hardware for specialized workloads. SDF takes a step back from the FTL and exposes the internal flash structure to make explicit data arrangement controllable by the application. Leveraging SDF-like interfaces would enable RIPQ to further reduce its memory consumption.

Priority Queue Both RIPQ and SIPQ rely on the priority queue abstract data type and the design of priority queues with different performance characteristics have been a classic topic in theoretical computer science as well [10, 35, 24]. Instead of building an exact priority queue, RIPQ uses an approximation to trade algorithm fidelity for flash- aware optimization.