问题
键值(KV)存储支持许多关键的应用程序和服务,可以执行快速的内存处理,但仍经常受到I/O性能的限制。最新的非易失性存储快速固态驱动器(NVMe SSD)推动了新的KV系统设计,利用其超低延迟和高带宽。
挑战
-
当前基于LSM树的KV存储无法充分利用NVMe SSD的潜力,常见KV存储设计的I/O路径使用NVMe SSD严重不足,尤其是对于小型写入。这尤其损害了预写日志记录(WAL)[57],其位于写入的关键路径上,容易出现瓶颈[36]。
-
现有的KV请求处理假设设备速度较慢,工作流设计嵌入了高软件开销,或者如果切换到快速的、基于轮询的I/O,则会浪费CPU周期。
-
NVMe接口也有访问限制(例如要求绑定整个设备进行SPDK访问,或者将线程固定到内核)。这使KV设计复杂化,并使当前的常见做法(如同步请求处理)效率较低。
-
像Optane这样的顶级固态硬盘对于大规模部署来说成本高昂。但大型、写密集型KV存储拥有大量冷数据,因此在这些相对较小且昂贵的设备上托管所有数据可能超出用户或云数据库服务提供商的预算。
本文方法
本文提出了SpanDB,一种基于LSM树的KV存储,适用于流行的RocksDB系统,以选择性的利用高速SSD。
-
允许用户将大部分数据托管在更便宜、更大的SSD上(甚至是硬盘驱动器),容量磁盘(CD)。将预写日志(WAL)和LSM树的顶层重新定位到更小、更快的NVMe SSD上,速度磁盘(SD)。
-
为了更好的利用SD,通过SPDK提供高速、并行的WAL写入。使用基于轮询的I/O的异步请求处理管道,消除了不必要的同步,使I/O等待与内存处理重叠,并自适应地协调前台/后台I/O。
-
根据实际的KV工作负载自适应地划分数据,积极利用CD的I/O资源,以缓解写放大。
-
为了简化SD和CD之间的实时数据迁移,引入了TopFS,一种精简的文件系统,在SPDK I/O之上提供了文件接口包装。
评估表明,SpanDB将RocksDB的吞吐量提高了8.8倍,延迟降低了9.5–58.3%。与专为高端固态硬盘设计的KVell系统相比,SpanDB以更便宜的存储配置实现了96–140%的吞吐量,延迟降低了2.3–21.6倍。
总结
针对如何利用NVMe SSD提升基于LSM树的KV存储。本文提出了SpanDB,适用于流行的RocksDB系统,以选择性的利用高速SSD。包括3个创新点:(1)协同利用DRAM、NVMe SSD和SATA SSD,将MemTable存储在DRAM,将预写日志(WAL)和LSM树顶层存储在NVMe SSD(速度磁盘,SD),将LSM树底层存储在SATA SSD(容量磁盘,SD)。(2)通过SPDK提供高速、并行的WAL写入。使用基于轮询I/O的异步请求处理,消除了不必要的同步,使I/O等待与内存处理重叠,自适应地协调前台/后台I/O。(3)为了简化SD和CD之间的数据迁移,引入TopFS,一种精简的文件系统,在SPDK I/O之上提供了文件接口包装。