欢迎点击蓝字关注我
扫二维码回复“加群”加入飞腾爱好者交流群
接着之前的网口性能测试(E2000Q 4网口iperf测试过程记录)继续往下测。
下面记录下针对I/O存储接口设备(NVME、U盘、eMMC)的性能测试工具fio的调试使用。
一、测试硬件环境
NVME接口3个,使用了E2000Q的PCIe0 x4、PCIe1 x1、PCIe2 x1。
USB接口5个,使用了E2000Q的5个USB2.0,即P0-P4。
eMMC接口1个,eMMC存储容量32G。
二、软件环境
E2000Q固件采用Uboot,系统使用飞腾gitee上的buildroot生成了内核文件Image (版本5.10)、根文件系统文件rootfs.tar。自己根据硬件环境生成了板子对应的设备树dtb。
这里说明一下,fio测试磁盘性能时,通常有两种方式:一种是直接测试裸设备(例如硬盘或分区),另一种是测试文件系统。对于裸设备的测试,不需要对磁盘进行分区和格式化,因为fio会直接对指定的设备进行I/O操作。但是,这样做会破坏磁盘上的所有数据。
我这里按照测试裸设备的方式进行,这就要求各个存储设备不能进行mount操作,如果已经被挂载了,需要卸载umount掉。
同时,这里记录一下进行分区和格式化存储的方法。
各个NVME使用如下命令进行了分区(分为两个区,一个区占2G空间,剩下的空间为另一个区),以nvme0盘为例:
分区完成后使用命令对两个区进行格式化,格式化为ext4格式:
mkfs.ext4 /dev/nvme0n1p1
mkfs.ext4 /dev/nvme0n1p2
E2000Q上linux系统的fio采用版本fio-3.32.tar.gz,可以关注公众号,回复“fio3.32”获取,新版本可以在github上自行下载,地址https://github.com/axboe/fio
三、测试步骤
3.1 E2000Q系统fio安装
安装fio的操作命令依次为:
#fio3.32安装命令
./configure
make -j 4
make install
#无报错安装完成后,可以通过如下命令查看fio版本,校验是否安装完成
fio -v
正常打印为:
fio-3.32
3.2 fio测试
系统下使用“fdisk -l”命令可以查看到所有的存储设备。
其中3个NVME系统下的设备名为/dev/nvme0xxxxx(xxxx会是类似n1p1、n1p2这种字符)、dev/nvme1xxxx、/dev/nvme2xxxx。因为我采用测试裸设备的方式,同时系统在/dev/nvme0xxxx中,所以我就只测试dev/nvme1xxxx、/dev/nvme2xxxx两个盘。
5个U盘系统下的设备名为/dev/sda1、/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1。
eMMC系统下的设备名为/dev/mmcblk0。
我们下面以测试/dev/sda1为例,要是测试其他存储,只需要将/dev/sda1替换为要测试的设备名就好,比如/dev/nvme2n1p1、/dev/sdd1、/dev/mmcblk0这样。
#以下为测试/dev/sda1设备
#读测试指令:
#-f或-filename:指定测试的文件名或设备名。在这个例子中,/dev/sda1表示测试将直接在磁盘分区上进行,而不是在文件系统上。
# ps:要测哪个设备,就在这里-filename=后面换对应的设备名就好了
#-ioengine:指定I/O引擎。libaio是Linux异步I/O的一个实现,它允许应用程序同时发起多个I/O请求而不需要等待它们完成。
#-direct=1:告诉fio直接与存储设备交互,绕过文件系统缓存。这可以提供更准确的存储设备性能测试结果。
#-rw代表runtime:指定测试的读写模式。read 表示只进行读取测试。
#-bs代表blocksize:指定块大小,即每次 I/O 操作的大小。在这个例子中,块大小为 128KB。
#-size:指定测试的总数据量。在这个例子中,测试将使用 128GB 的数据。
#-numjobs:指定并发作业的数量。在这个例子中,将有2个并发作业同时运行。
#-runtime:指定测试的运行时间。在这个例子中,测试将持续10秒。
#-group_reporting:指定报告的聚合级别。使用group_reporting,fio将为每个作业组提供汇总报告,而不是为每个线程单独报告。
#-name:为测试指定一个名称。在这个例子中,测试的名称是fio_test。
fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=read -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test
#写测试指令:
#-rw代表runtime:设置测试的读写模式。在这个例子中,write表示执行写入测试。
fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=write -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test
#随机读测试指令:
#-rw代表runtime:设置测试的读写模式。在这个例子中,randread表示执行随机读取测试。
fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=randread -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test
#随机写测试指令:
#-rw代表runtime:设置测试的读写模式。在这个例子中,randwrite表示执行随机写入测试。
fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=randwrite -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test
#混合随机测试指令:
#-rw代表runtime:设置测试的读写模式。在这个例子中,randrw-rwmixread=50表示执行随机读写混合测试,其中50%的操作是读取,50%的操作是写入。
fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=randrw-rwmixread=50 -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test
OK,如上操作,就可以对各个存储设备进行fio测试了。
欢迎点击“点赞、收藏、在看”,分享给更多人看到
扫二维码回复“加群”加入飞腾爱好者交流群
往期文章
欢迎飞腾爱好者加入微信交流群。 群内大家可以在群内交流遇到的问题,分享自己的调试心得。 希望大家共建飞腾友谊!