EuroSys 2024 Paper 论文阅读笔记整理
问题
高性能存储设备,如具有GB/s级I/O带宽的NVMe SSD,已被广泛应用于企业服务器中。对于处理大量数据,在RAID配置中使用多个SSD很有吸引力,这可以提高I/O性能、可靠性和容量。尽管多个SSD为存储系统提供了各种优势,但当前的Linux存储堆栈对于多个SSD的可扩展性较差。
如图1所示,当使用多个SSD时,为应用程序[27]提供许多优势的缓冲I/O会阻碍SSD的可扩展性。
根据性能分析,观察到两个关键瓶颈:
-
页面缓存的数据结构(即XArray)的粗粒度锁spinlock,多个线程插入和删除导致高锁争用。例如,多个应用程序线程利用粗粒度锁,同时在页面缓存中插入和删除页面,以进行I/O操作和页面回收。
-
延迟和串行化的flush操作。多个应用线程被阻塞等待flush时,只有一个flush线程将脏页推送到存储设备。
本文方法
本文提出了称为ScaleCache的可扩展页面缓存,来提升SSD可扩展性。
-
提出了基于XArray的页面缓存并发数据结构(ccXArray),以实现对页面缓存的无锁并发访问和更新。
-
提出了一种直接页面刷新(dflush),以并行和机会主义的方式将页面直接推送到存储设备。例如,当脏页的比率高时,线程会在不影响一致性的情况下直接将页推送到存储设备。
开源代码:GitHub - syslab-cau/ScaleCache: EuroSys'24 conference ScaleCache source code and test scripts
在Linux内核中使用两种技术实现了ScaleCache,并在具有八个NVMe SSD的64核机器上对其进行了评估。评估表明,与现有方案和可扩展方案相比,ScaleCache分别将Linux系统的性能提高了6.81倍和4.50倍。
总结
随着SSD数量的增加,Linux存储栈中的页面缓存会限制SSD的并行性,瓶颈在于XArray中锁开销和串行化的脏页flush操作。本文提出ScaleCache,用于提升SSD可扩展性,主要包括两个技术:(1)提出基于XArray的页面缓存并发数据结构(ccXArray),以实现对页面缓存的无锁并发访问和更新。(2)提出直接页面刷新(dflush),以并行和机会主义的方式将脏页推送到存储设备。