SPDK低时延性能测试
01 什么是SPDK
1.1 SPDK:(storage performance development kit)
Linux对机械盘做了很多的优化,采用中断方式进行I/O处理(OS kernel请求一组数据,硬盘回应“没问题”,但机械硬盘较慢,需要一定时间将数据放入硬盘缓存;等数据准备好,给CPU发中断信号“数据准备好了,来取吧”)这种方式主要是基于机械硬盘速度远远低于计算机系统其它组件,比如RAM和CPU,需要较长的数据处理准备时间,如果CPU在这段时间一直处理等待状态,就会造成CPU等资源的浪费,所以采用了中断的机制。
随着SSD盘推出,其存取速度远远高于机械硬盘,当系统请求一组数据后,SSD盘在很小延时就准备好了数据给CPU发中断信号,如果CPU处于在执行其他大量的计算任务或者很繁忙的时候,这个中断信号就永远到不了,CPU很久都不会取准备好的数据,这会造成SSD性能的降低。
这时,瓶颈从硬件(机械硬盘)移动到了软件(中断+内核)。为了充分发挥SSD的存储性能,Intel开发了一套基于NVMe-SSD的SPDK, 旨在通过使用UIO和poling这两项关键技术将固态存储介质功效发挥到极致。
1.2 UIO&Polling
● UIO: Userspace I/O, 在Linux系统中,一般设备的驱动都是运行在内核空间中,而UIO将设备驱动代码很少一部分运行在内核空间中,在用户态运行大部分的功能,避免了内核上下文切换和中断,节省大量的处理开销,允许更多的时钟周期来做实际的数据存储;
● Polling(轮询模式):在传统I/O模式,应用程序提交读写请求后进入睡眠状态,一旦I/O完成,中断就会将其唤醒。在机械硬盘时代,中断开销只占整个I/O时间很小的百分比,因此这种方式可以给系统带来较高的效率,但到了SSD时代,由于SSD的低延迟,系统能够每秒处理数百万个I/O,这样导致中断的叠加时延是很大的,在整个I/O中变为不可忽视,为了消除数百万个事务的这种开销,尽可能减少等待时间,使时延更低,采用轮询方式,轮询则是应用程序提交读写请求后继续执行其他工作,一定时间间隔回头检查I/O是否完成。
02 SPDK性能测试
备注:需要安装的具体版本可以参考下载的SPDK工具如下路径
SPDK/examples/nvme/fio_plugin/README.md文件,以下安装步骤也是以一个安装实例的版本来描述,不覆盖所有环境。
2.1 SPDK性能测试环境搭建
1) 下载并安装fio
git clone
cd fio && git checkout fio-3.15
make
2) 下载并编译SPDK
git clone http://github.com/spdk/spdk
git submodule update –init
cd spdk
./configure --with-fio=/path/to/fio/repo(步骤1中安装fio工具的路径)
make
3) 启动SPDK
环境接管:执行脚本./spdk/scripts/setup.sh无报错
显示状态:执行脚本./spdk/scripts/setup.sh status无报错,可以正常显示nvme ssd测试设备的BDF号
解除SPDK,切换到内核态:./spdk/scripts/setup.sh reset,命令下发成功,无报错,之后下发nvme list可以扫描到盘。
以上三步骤完成表示SPDK环境安装成功。
2.2 SPDK低时延性能测试
1) ./spdk/scripts/setup.sh切换到SPDK用户态环境
2)确定测试设备filename参数,该参数数据为待测设备BDF,
filename=trtype=PCIe traddr=0000.01.00.0 ns=1(注意要将”:”换为”.”)
3)配置执行文件&下发测试命令
配置单job 4k随机读、写时延配置文件:
下发fio命令:
spdk_fio_build_dir:fio插件路径/examples/nvme/fio_plugin/fio_plugin
fio_path:fio测试工具的安装路径
config_file: 配置单job 4k随机读、写时延配置文件
LD_PRELOAD=$spdk_fio_build_dir $fio_path -f $config_file
2.3 XL 750G SPDK实测数据:
1)4k randwrite lat实测数据:8.801us
2)4k seqwrite lat实测数据:8.981us
3)4k randread lat实测数据:24.163us
4)4k seqread lat实测数据:24.175us
CQ9作为拥有前沿技术的存储企业之一,在过去五年多年的发展中,一直都致力于推出先进优越的存储产品和解决方案,而SPDK的应用势必会进一步提升SSD整体系统的性能,使得产品在同类配置中具有较高的优势。同时CQ9也对SPDK的部分模块做了相应修改,以更符合实际的业务场景的需求,打造高效且差异化的存储服务。