You need to enable JavaScript to run this app.
文档中心
云服务器

云服务器

复制全文
下载 pdf
性能测试
测试存储性能
复制全文
下载 pdf
测试存储性能
本文介绍如何使用FIO工具测试Linux实例的存储性能,包括IO延迟、IOPS和带宽。​
背景信息​
推荐使用FIO工具测试块存储IO延迟的性能,FIO是一个对硬件进行压力测试和验证的I/O工具,是一款Linux平台上较为推荐的磁盘性能测试工具。​
FIO分为两种运行方式,本文中测试示例均使用fio jobfile方式,即通过一个job文件来描述待仿真的IO负载,一个job文件可以控制产生任意数目的线程和文件,典型的job文件包含一个global段(定义共享参数)和一个或多个job段(描述具体要产生的job)。​
前提条件​
您已将待测试的云盘挂载到实例上。​
注意​
  • 强烈建议您不要将操作系统所在的系统盘或含有数据的数据盘作为测试对象,因为含有分区、文件系统以及其他数据的云盘,直接使用FIO压测会导致文件系统异常以及数据丢失。​
  • 建议您在新创建的空数据盘上使用工具测试云盘性能。若您需要在保存业务数据的云盘上开展测试,请按照以下建议操作:​
  • 在测试命令中将filename参数指定到某个具体文件而不是整个磁盘设备,例如-filename=/data/fiotest。​
操作步骤​
说明​
本文以指定filename参数为某个具体文件为例,为您介绍云盘性能的测试方法。​
  1. 从FIO官网下载安装包并传输到实例。数据上传操作请参见本地数据上传。​
  1. 执行以下命令解压缩安装包。​
  • ​
    tar -zxvf fio-*.tar.gz​
    ​
  1. 执行以下命令,安装FIO。​
  • ​
    cd fio-*​
    ./configure​
    make​
    make install​
    ​
  1. 依次执行以下命令,安装libaio。​
  • ​
    sudo yum -y install libaio​
    sudo yum -y install libaio-devel​
    ​
  1. 执行以下命令查看存储设备是否已经4KiB对齐。如果不是4KiB对齐,则对性能影响较大。​
  • ​
    fdisk -lu​
    ​
  • 如果各云硬盘的Start值能够被8整除则表示4KiB对齐。​
  1. 创建测试文件并挂载。​
  1. 依次执行以下命令,创建data目录并将磁盘设备挂载至该目录。​
  • ​
    mkdir /data​
    mount /dev/vdb /data​
    ​
  1. 在data目录下创建fiotest文件。​
  • ​
    vim /data/fiotest​
    ​
  • 按Esc键退出插入模式,然后输入:wq并回车,保存并退出vim编辑器。​
  1. 运行性能测试命令,具体请参见测试命令示例。​
测试命令示例​
测试IO延迟性能​
​
测试随机读IO延迟
测试随机写IO延迟
​
创建job_file文件测试随机读的IO延迟,文件内容如下。创建后,执行命令fio job_file查看测试结果。​
​
[global]​
ioengine=libaio​
userspace_reap​
runtime=60​
direct=1​
group_reporting​
randrepeat=0​
norandommap​
ramp_time=6​
iodepth=1​
numjobs=1​
exitall​
[randread4k]​
filename=/data/fiotest​
rw=randread​
bs=4K​
size=10G​
​
​
​
测试IOPS性能​
​
测试随机读IOPS
测试随机写IOPS
​
创建job_file文件测试随机读的IOPS,文件内容如下。创建后,执行命令fio job_file查看测试结果。​
​
[global]​
ioengine=libaio​
userspace_reap​
time_based​
runtime=60​
direct=1​
group_reporting​
randrepeat=0​
norandommap​
ramp_time=6​
iodepth=128​
numjobs=8​
exitall​
[randread4k]​
filename=/data/fiotest​
rw=randread​
bs=4k​
size=10G​
​
​
​
测试带宽​
推荐使用dd命令测试块存储带宽的性能。dd命令用于从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备。根据传输的时间,可以计算存储带宽。​
​
测试顺序读带宽
测试顺序写带宽
​
执行以下命令:​
​
dd if=/data/fiotest of=/dev/null bs=16M count=1024 iflag=direct​
​
​
​
参数说明​
​
FIO参数说明
dd命令参数说明
​
​
参数​
说明​
[global]​
表示job的名称。global名称不可修改,其中描述了job file中各个job的默认配置值。​
ioengine=libaio​
定义FIO使用哪种IO引擎,支持同步或异步I/O,此处建议使用libaio(异步I/O),表示一次性提交一批I/O请求,等待一批完成后再提交下一批,可以减少交互次数,提高效率。​
userspace_reap​
与libaio配合,提高异步IO的收割速度。​
time_based​
表示如果在runtime指定的时间还没到时文件就被读写完成,将继续重复读写直到runtime时间结束。​
runtime=60​
指定在多少秒后停止进程,建议设置为60s。​
direct=1​
是否使用direct I/O,取值:​
  • 1(默认):使用direct I/O,忽略I/O缓存,数据直写。​
  • 0:不使用direct I/O。​
group_reporting​
表示汇总每个(线程/进程)的信息显示结果。​
randrepeat=0​
随机序列是否可重复,取值:​
  • True(1):表示随机序列可重复。​
  • False(0):表示随机序列不可重复,推荐设置为0。​
norandommap​
一般情况下,FIO执行随机IO时,将会覆盖文件的每一个块,即FIO会使用一段内存来记录是不是随机到重复的位置,如果随机到重复的位置,那么FIO会再去找一个不重复的位置。设置这个选项后,FIO将不会查询过去的历史,实现真正意义上的随机读写。​
ramp_time=6​
用于指定测试开始阶段的渐进时间。建议设置为6,表示等待6s性能稳定后,再记录日志结果,可以减少生成稳定结果需要的运行时间。​
iodepth=1​
设置IO队列的深度,表示使用异步I/O时,同时发出的I/O数上限。​
numjobs=1​
推荐使用CPU核心数,例如云服务器CPU核数为8,则numjobs推荐取值为8。​
exitall​
表示一个job完成,就停止所有的job。​
[randread4k]、[randwrite4k]​
用于具体定义测试任务的相关配置。​
  • [randread4k]:代表对磁盘进行4K大小数据块的随机读测试。​
  • [randwrite4k]:代表对磁盘进行4K大小数据块的随机写测试。​
filename=/data/fiotest​
待测试的文件路径。如果是整盘测试,取值为磁盘设备名。​
rw​
测试时的读写策略。​
  • randread:随机读。​
  • randwrite:随机写。​
bs=4k​
I/O单元的块大小(block size),默认值:4 KiB。​
读取和写入的值可以以read、write格式单独指定,其中任何一个都可以为空以将该值保留为其默认值。​
size=10G​
测试文件的大小。FIO会将指定的文件大小全部读/写完成,然后才停止测试,除非受到其它选项(例如runtime)的限制。​
该参数取值可以是带单位的数字,例如size=10G,表示读/写的数据量为10GiB也可以是百分数,例如size=20%,FIO将使用给定文件或设备完整大小的20%空间。如果未指定该参数,FIO将使用给定文件或设备的完整大小。​
​
​
​
​
最近更新时间:2026.10.19 19:42:54
这个页面对您有帮助吗?
有用
有用
无用
无用