背景和问题
随着非易失性存储器设备(如英特尔®傲腾™持久内存)在数据中心的应用增加,主机CPU在高工作负载下成为瓶颈,尤其是在使用App Direct(AD)模式的PMEM设备时。传统HDD/SSD模式下,CPU资源有限,而PMEM设备具备DMA能力,可减轻CPU负担。因此,如何通过卸载技术从CPU卸载工作,同时在PMEM上高效操作成为关键需求。
解决方案
提出利用基于硬件的内存卸载设备(如英特尔的IOAT或数据流加速器(DSA))来卸载CPU工作,支持在PMEM上执行DRAM和PMEM之间的内存移动操作。解决方案包括:
- 在存储性能开发套件(SPDK)中集成IOAT/DSA,通过SPDK框架加速应用程序。
- 集成DML库驱动DSA,在Ceph中加速PMEM操作。
使用案例
Case 1:在SPDK中启用内存卸载技术
- 设计并实现了一个新的bdev(pmem_accel),基于SPDK加速框架(accel_fw)和DSA,以减少CPU参与开销。
- 该bdev提供同步API接口,直接使用/dev/dax*设备,通过DSA卸载基于PMEM的bdev操作。
- 当前状况下,文件系统无法直接在字符设备上查看,但提供了正在进行的补丁进展。
Case 2:在Ceph中启用内存卸载技术
- 阶段1:卸载Bluestore中的PMEM操作
- 使用DML中的同步API卸载CPU操作,预期通过改进性能并缓解CPU压力。
- 使用DML中的异步API卸载CPU操作,预期功能可以工作,状态接近完成。
- 阶段2:在Seastore卸载PMEM操作
- 利用Seastar框架的异步行为,使用DSA以异步方式优化Seastore中PMEM上的操作。
- 使用DSA卸载内存操作,如双播、复制、crc32c。
结论
- 内存操作卸载引擎(如IOAT/DSA)可有效卸载CPU工作,提高PMEM性能。
- 通过SPDK加速框架和DML驱动DSA,实现了在PMEM上的高效数据操作。
- 未来将继续基于DSA卸载引擎提高PMEM性能,包括在基于PMEM的bdev上卸载操作,以及在Ceph中卸载PMEM操作。
- 数据操作“在内存之间(持久)”与“在内存和设备之间进行数据操作”有所不同,后者设备具备DMA能力,减轻CPU负载。