本文主要介绍磁盘性能评估的方法,针对用户态驱动SPDK与Kernel,并且对常见问题做出总结。
一. 通过fio工具测试磁盘性能
SPDK采用异步I/O(Asynchronous I/O)加轮询(Polling)的工作模式,通常与Kernel的异步I/O作为对比。在此,主要介绍通过使用fio评估
1. fio评估kernel异步I/O(AIO)
fio支持多种模式的I/O引擎,同时也包含了测试异步I/O的引擎,即libaio。在测试异步I/O的时候,只需将fio启动配置文件中的ioengine设为libaio即可。通常在做异步I/O的时候,I/O请求会发送到相应的队列中,等待被处理,因此队列深度将会影响磁盘性能。所以在测试异步I/O的时候根据磁盘的特性指定相应的队列深度(iodepth)。
测试Kernel异步I/O的fio配置参数示例如下:
[Global]
参数详解
ioengine:指定I/O引擎,在这里测试Kernel的异步I/O,因此指定I/O引擎为libaio;
direct: 指定direct模式O_DIRECT,I/O会绕过系统的page buffer;
rw:读写模式,这里指定randrw表示混合随机读写;
rwmixread:混合随机读写模式下read请求所占比例;
thread:指定使用线程模式。
由于spdk fio_plugin只支持线程模式,因此与Kernel对比时,通常都统一指定线程模式来对比;
norandommap:指定I/O时,每次都获取一个新的随机offset,防止额外的CPU使用消耗;
time_based:指定采用时间模式;
runtime:测试时长;ramp_time:统计性能之前所运行的时间,为了防止没有进行稳态而造成的性能虚高带来的影响;
bs:I/O块大小;
iodepth:队列深度;numjobs:worker的个数;
filename:指定测试的对象。
2. 基于NVMe的fio_plugin
安装步骤
a. 下载编译fio:
git clone https : //github . com/axboe/fio
b.下载编译SPDK:
git clone https : //github . com/spdk/spdk
注意:由于fio_plugin要依赖fio中提供的一些依赖包,因此在运行configure时,必须指定fio目录,否则默认fio_plugin不会编译
测试方法
a. 使用fio_plugin测试裸盘,需要引入fio_plugin路径,因此在运行fio时,在fio命令之前加如下参数:
LD_PRELOAD=