E2000 I/O接口性能测试工具fio

文摘   科技   2024-10-25 00:54   江苏  


欢迎点击蓝字关注我

扫二维码回复“加群”加入飞腾爱好者交流群


接着之前的网口性能测试(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格式:

  1. mkfs.ext4 /dev/nvme0n1p1

  2. 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的操作命令依次为:

  1. #fio3.32安装命令

  2. ./configure

  3. make -j 4

  4. make install

  5. #无报错安装完成后,可以通过如下命令查看fio版本,校验是否安装完成

  6. fio -v

  7. 正常打印为:

  8. 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这样。

  1. #以下为测试/dev/sda1设备

  2. #读测试指令:

  3. #-f或-filename:指定测试的文件名或设备名。在这个例子中,/dev/sda1表示测试将直接在磁盘分区上进行,而不是在文件系统上。

  4. # ps:要测哪个设备,就在这里-filename=后面换对应的设备名就好了

  5. #-ioengine:指定I/O引擎。libaio是Linux异步I/O的一个实现,它允许应用程序同时发起多个I/O请求而不需要等待它们完成。

  6. #-direct=1:告诉fio直接与存储设备交互,绕过文件系统缓存。这可以提供更准确的存储设备性能测试结果。

  7. #-rw代表runtime:指定测试的读写模式。read 表示只进行读取测试。

  8. #-bs代表blocksize:指定块大小,即每次 I/O 操作的大小。在这个例子中,块大小为 128KB。

  9. #-size:指定测试的总数据量。在这个例子中,测试将使用 128GB 的数据。

  10. #-numjobs:指定并发作业的数量。在这个例子中,将有2个并发作业同时运行。

  11. #-runtime:指定测试的运行时间。在这个例子中,测试将持续10秒。

  12. #-group_reporting:指定报告的聚合级别。使用group_reporting,fio将为每个作业组提供汇总报告,而不是为每个线程单独报告。

  13. #-name:为测试指定一个名称。在这个例子中,测试的名称是fio_test。

  14. fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=read -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test

  15. #写测试指令:

  16. #-rw代表runtime:设置测试的读写模式。在这个例子中,write表示执行写入测试。

  17. fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=write -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test

  18. #随机读测试指令:

  19. #-rw代表runtime:设置测试的读写模式。在这个例子中,randread表示执行随机读取测试。

  20. fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=randread -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test

  21. #随机写测试指令:

  22. #-rw代表runtime:设置测试的读写模式。在这个例子中,randwrite表示执行随机写入测试。

  23. fio -filename=/dev/sda1 -ioengine=libaio -direct=1 -rw=randwrite -bs=128k -size=128G -numjobs=2 -runtime=10 -group_reporting -name=fio_test

  24. #混合随机测试指令:

  25. #-rw代表runtime:设置测试的读写模式。在这个例子中,randrw-rwmixread=50表示执行随机读写混合测试,其中50%的操作是读取,50%的操作是写入。

  26. 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测试了。



欢迎点击“点赞、收藏、在看”,分享给更多人看到

扫二维码回复“加群”加入飞腾爱好者交流群


往期文章

交流群:
PSPA:
硬件:
固件:
调试:

欢迎飞腾爱好者加入微信交流群。 群内大家可以在群内交流遇到的问题,分享自己的调试心得。 希望大家共建飞腾友谊!

乌拉大喵喵
建立了飞腾爱好者技术交流群,公众号文章扫码进群,或私信加vx进群。
 最新文章