EuroSys 2023 Paper 论文阅读笔记整理
问题
现代NVMe SSD和RDMA网络提供了更高的带宽和并发性,但现有的网络存储系统(例如,基于结构的NVMe),由于存储订购保证效率低下,无法充分利用这些新设备。在这些系统中,存储顺序的严格同步执行会使CPU和I/O设备停滞,并降低存储系统的CPU和I/O性能效率。
存储顺序指示数据块到存储介质的特定持久性顺序,广泛用于存储一致性机制(例如,数据库事务[37,39]、软更新[31]和文件系统日志[4,20]),以确保在系统崩溃的情况下确定和正确的磁盘状态。传统的网络存储系统使用昂贵的方法来确保存储顺序,在之前的请求完成并且相关数据块持久划之前,无法处理之后的有序写入请求。这种同步方法会使NIC和SSD未得到充分利用,CPU处于空闲状态,如图按序执行显著降低吞吐量。
现有方法局限性
现有方法阻碍了CPU、I/O设备或两者的优化使用,提供了次优的CPU和I/O效率,并难以扩展到多个服务器。例如,Horae[28],引入了用于存储顺序的专用控制路径。然而,控制路径是同步的,并且在数据路径之前执行,浪费了相当多的CPU周期,并进一步降低了I/O吞吐量。
本文方法
本文提出了Rio,一种远程存储访问的新存储顺序。核心思路是软件堆栈的分层设计,以及并发和异步网络和存储设备,使存储堆栈在概念上类似于CPU管道。受CPU管道乱序执行和按顺序提交的启发,Rio引入了I/O管道。
-
在I/O管道中,本文引入了按序提交和完成,合并连续的有序请求,并利用网络协议的按顺序交付,以减少临时的无序执行,从而消除不确定性,并为应用程序提供最终完整的存储顺序。
-
提出异步崩溃恢复算法,可以快速将系统恢复到有序状态。
-
这些技术的关键原理是称为排序属性的特殊结构,它是每个有序写入请求的标识,并跟踪相邻的有序写入请求。它嵌入在原始请求中,并在整个存储堆栈中携带。因此,尽管是异步的,但每个有序写入请求都能够收集分散的有序属性,并使用上述技术随时重建原始存储顺序。
本文在RDMA堆栈上的Linux NVMe中实现了Rio,并在Rio之上进一步构建了RioFS文件系统。评估表明,Rio在有序写入请求的吞吐量方面分别比RDMA和最先进的存储堆栈Horae高出两个数量级和4.9倍。与Ext4和HoraeFS相比,RioFS平均将RocksDB的吞吐量分别提高了1.9倍和1.5倍。
实验
实验环境:三个物理服务器,一个是启动器,另外两个是目标服务器。每个服务器有2个Intel Xeon Gold 5220 CPU,每个CPU有18个内核,运行频率2.20 GHz。三种类型SSD,目标服务器1有一个三星PM981闪存和一个英特尔905P Optane固态硬盘。目标服务器2有一个三星PM981闪存和一个英特尔P4800X Optane固态硬盘。为每个目标服务器使用2 MB PMR,将32B排序属性持久化到PMR大约需要0.6μs。服务器通过200 Gbps Mellanox ConnectX-6 RDMA NIC相互连接。
数据集:随机写,Filebench [40]的Varmail,RocksDB的db_bench
实验对比:CPU效率=吞吐量/CPU利用率,操作数,延迟,吞吐量,故障恢复时间。线程数,写的块大小
总结
针对网络存储系统由于顺序执行导致CPU和IO性能下降。本文提出Rio,一个保序网络存储堆栈。允许异步处理有序写入、合并连续有序请求、使用顺序保留技术来强制执行持久性顺序。原理是添加了特殊结构,嵌入在原始请求中,使乱序执行的请求随时可以重建原始顺序。
提出两个建议:I/O堆栈应该利用现代NIC和SSD的异步接口(即多个深层硬件队列和异步DMA引擎),以充分利用其高带宽;尽管块合并对于超低延迟SSD上的本地I/O堆栈来说是昂贵的,但值得在块合并中投入一些CPU周期,以显著减少网络上的控制操作(例如,RDMA SEND),并进一步提高CPU和I/O效率。