磁盘性能测试工具-FIO的安装及使用

这篇具有很好参考价值的文章主要介绍了磁盘性能测试工具-FIO的安装及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

FIO介绍

FIO是一款测试IOPS的工具,用于对磁盘进行压力测试和验证,磁盘I/O是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类,FIO可产生很多线程或进程并执行用户指定的特定类型的I/O操作,典型用途是编写和模拟I/O负载匹配的作业文件,也就是说FIO是一个多线程I/O生成工具,可以生成多种I/O模式,用来测试磁盘设备的性能

FIO安装

本次是在CentOS 8.3中安装fio-3.32版本

在线安装

执行以下命令即可

yum install libaio-devel -y	# 安装libaio开发包
yum install fio -y			# 安装fio
fio -v		# 查看fio版本

如果执行fio命令,报fio: engine libaio not loadable fio: failed to load engine错误,则是libaio-devel未安装成功,重新安装成功后即可解决

离线安装
  1. 需先具备gcc环境,gcc安装请参考此文章

  2. 在此平台下载相应操作系统的libaio开发包,下载后上传至服务器,执行以下命令进行安装

    rpm -ivh libaio-devel-0.3.112-1.el8.x86_64.rpm	# 安装libaio开发包
    
  3. 在官网下载fio安装包,下载后上传至服务器,执行以下命令进行安装

    tar -xzf fio-3.32.tar.gz	# 解压
    cd fio-3.32/				# 进入解压后的目录
    ./configure					# 配置环境
    make && make install		# 编码后安装
    

    之后就可以使用fio命令啦

磁盘测试

新建两个磁盘,格式化后挂载到指定目录

lsblk				# 查看磁盘,可以看到磁盘名称、磁盘大小、磁盘类型。挂载点等信息
mkfs.ext4 /dev/sdb	# 将sdb的块设备格式化为ext4文件系统的标准磁盘
mkfs.ext4 /dev/sdc	# 将sdc的块设备格式化为ext4文件系统的标准磁盘
mount /dev/sdb T1/	# 将sdb挂载到T1目录
mount /dev/sdc T2/	# 将sdc挂载到T2目录
df -Th | grep ext4 	# 查看使用ext4类型的文件系统,可以看到容量、挂载点、使用量等信息,或者还使用lsblk查看

fio: engine libaio not loadable,linux,服务器,centos,测试工具

命令行方式

意思是使用libaio异步引擎测试磁盘文件/dev/sdb随机写入操作,测试配置为使用非缓存I/O,1个线程,I/O深度为2,汇总输出一份报告,允许写入磁盘,每次写入4k,总共写入1G,运行时间60秒,本次测试命名为fioTest

fio -filename=/dev/sdb -ioengine=libaio -direct=1 -thread=1 -iodepth=2 -group_reporting  -rw=randwrite -allow_mounted_write=1 -bs=4k -size=1G -runtime=60 -name=fioTest
测试结果说明
fioTest: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=2
fio-3.32
Starting 1 thread
Jobs: 1 (f=1): [w(1)][100.0%][w=26.8MiB/s][w=6873 IOPS][eta 00m:00s]
fioTest: (groupid=0, jobs=1): err= 0: pid=1949: Sun Oct 23 19:50:16 2022
# ↓写入测试结果,IOPS是每秒执行的平均I/O,BW是平均带宽速率,以2的n次幂为基础得到的值,括号内是以10的n次幂未基础得到的值),最后括号内的值是以2的n次幂为基础计算得到的总I/O和该线程的运行时长
  write: IOPS=6928, BW=27.1MiB/s (28.4MB/s)(1024MiB/37833msec); 0 zone resets
  	# ↓slat是submit latency的缩写, 表示I/O的提交延时(同步I/O时不显示此项),单位是微秒(us),结果展示最小、最大、平均和标准偏差
    slat (usec): min=24, max=7873, avg=101.91, stdev=37.68
    # ↓clat是complete latency的缩写,表示I/O的完成延时,单位纳秒(ns)
    clat (usec): min=28, max=8590, avg=183.87, stdev=119.90
     # ↓lat是latency的缩写,表示I/O的总延时,单位也是微秒(us)
     lat (usec): min=63, max=8885, avg=285.78, stdev=125.51
    # ↓clat percentiles表示I/O完成延时百分位的数值,单位是微秒(us)
    clat percentiles (usec):
     |  1.00th=[   78],  5.00th=[   94], 10.00th=[  108], 20.00th=[  139],
     | 30.00th=[  149], 40.00th=[  155], 50.00th=[  163], 60.00th=[  172],
     | 70.00th=[  182], 80.00th=[  200], 90.00th=[  239], 95.00th=[  310],
     | 99.00th=[  742], 99.50th=[  898], 99.90th=[ 1270], 99.95th=[ 1483],
     | 99.99th=[ 2343]
   # ↓bw表示对采集到的样本的带宽统计,单位是(KiB/s),结果展示最小、最大、该线程在其组中接收总带宽的百分比、平均、标准偏差及本次测试采样数
   bw (  KiB/s): min=25848, max=35609, per=100.00%, avg=27741.13, stdev=1890.47, samples=75
   # ↓iops表示对采集到的样本每秒的输入/输出操作的统计,结果展示最小、最大、平均、标准偏差及本次测试采样数
   iops        : min= 6462, max= 8902, avg=6935.04, stdev=472.65, samples=75
  # ↓延时分布,表示I/O总延时的分布范围,如下表示小于50us的有0.15%,在50~100us中的有7.17%,……
  lat (usec)   : 50=0.15%, 100=7.17%, 250=84.05%, 500=6.06%, 750=1.61%
  lat (usec)   : 1000=0.65%
  lat (msec)   : 2=0.29%, 4=0.01%, 10=0.01%
  # ↓CPU利用率,用户(usr)和系统(sys)的占比,ctx指该线程上下文切换次数,majf指主要页面错误数,minf指次要页面错误数。CPU利用率取的是平均值,上下文切换次数和错误数则是相加求和后的结果
  cpu          : usr=0.28%, sys=74.03%, ctx=101519, majf=0, minf=2
  # ↓depth、submit和complete三者所涵盖的范围可以不同
  	 # ↓I/O深度在整个工作周期中的分布,数值划分为2的n次幂,每个条目覆盖从该值到下一个条目的深度,例如:2=100%表示覆盖从2到4的深度
  IO depths    : 1=0.1%, 2=100.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
  	 # ↓一个提交调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中提交了0~4个I/O
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     # ↓一个完成调用中要提交的I/O,每个条目覆盖从该值到上一个条目为止,例如4=100%表示每个提交调用中完成了0~4个I/O
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     # ↓总共发出读取/写入/修剪/?请求的数量,及其中有多少个请求被缩短或丢弃(第4个s不清楚表示什么,等后续官方文档更新吧)
     issued rwts: total=0,262144,0,0 short=0,0,0,0 dropped=0,0,0,0
     # ↓用于latency_target和相关选项,打印满足指定延迟目标所需的I/O深度
     latency   : target=0, window=0, percentile=100.00%, depth=2

# ↓输出各组统计信息
Run status group 0 (all jobs):
  # ↓bw指该组中线程的总带宽,然后是该组中所有线程的最小和最大带宽,I/O指该组中所有线程执行的聚合I/O,括号外的值是2的幂形式,括号内是10的幂的形式,run指运行时间
  WRITE: bw=27.1MiB/s (28.4MB/s), 27.1MiB/s-27.1MiB/s (28.4MB/s-28.4MB/s), io=1024MiB (1074MB), run=37833-37833msec

# ↓输出磁盘状态
Disk stats (read/write):
  # ios表示所有组执行的I/O数,merge表示I/O调度程序执行的合并数,ticks表示处理I/O的总时间,in_queue表示在磁盘队列中花费的总时间,util表示磁盘利用率,若值为100%则表示磁盘一直处于繁忙状态
  sdb: ios=4/260966, merge=0/0, ticks=6/55631, in_queue=1141, util=99.85%

通常查看结果中IOPS、带宽和延时是否满足需求,从上面的测试结果可知,本次测试随机写入操作的结果:IOPS为6928,带宽为27.1MiB/s,延时为285.78微秒(0.28578毫秒)

fio: engine libaio not loadable,linux,服务器,centos,测试工具

具体测试参数配置请根据实际环境修改

# 测试单个磁盘文件
fio -filename=/dev/sdb -ioengine=libaio -direct=1 -iodepth=1 -thread=1 -numjobs=2 -group_reporting -allow_mounted_write=1 -rw=randwrite -bs=4k -size=1G -runtime=60 -name=fioTest
# 测试多个磁盘文件
fio -filename=/dev/sdb:/dev/sdc -ioengine=libaio -direct=1 -iodepth=1 -thread=1 -numjobs=2 -group_reporting -allow_mounted_write=1 -rw=rw -rwmixwrite=30 -bs=4k -size=1G -runtime=60 -name=fioTest
# 通过挂载目录测试磁盘,多个挂载点用:分隔
fio -directory=/root/T1:/root/T2 -ioengine=libaio -direct=1 -iodepth=1 -thread=1 -numjobs=2 -group_reporting -allow_mounted_write=1 -rw=randrw -rwmixread=70 -bs=4k -size=1G -runtime=60 -name=fioTest
命令参数说明

命令参数说明如下表所示,更详细的参数及说明见请查看官方文档

参数 解释
directory=/root/T1 被测文件挂载的目录,多个目录使用:符号分割
filename=/dev/sdb 被测文件名,多个文件则使用:符号分割
direct=1 使用非缓存I/O,使测试磁盘的结果更真实,默认为False,可以用0和1表示
rw=read 顺序读(100%顺序读)
rw=write 顺序写(100%顺序写)
rw=randread 随机读写(100%随机读)
rw=randwrite 随机写(100%随机写)
rw=randrw 随机读写(读写各占50%)
rw=rw, rwmixread=70 顺序读写(读写占比为7:3,占比可自行修改)
rw=randrw, rwmixwrite=30 随机读写,读写占比为7:3
rw=trim/randtrim/trimwrite 磁盘修剪,需要磁盘支持此功能,可根据读写一样进行配置
bs=4k 单次I/O的块大小,默认4k
bs=4k,8K 单次以4k块大小读取,以8k写入和修剪
bs=16k,32K, 单次以16k读取,以32k大小写入,以默认大小4k修剪
bsrange=8k-1M 与bs功能相同,只是使用范围表示单次I/O的块大小
size=1G 每个线程读写的数据量为1GB
thread=1 使用pthread_create创建线程,默认使用fork创建
numjobs=2 克隆此次测试的线程/进程数量,可用于设置更多执行相同操作的线程/进程
group_reporting 每个线程的测试结果汇总后输出,糖厂和
allow_mounted_write=1 允许写入操作,某些平台可能即使有此参数也无法写入
runtime=100 测试时间,若测试提取完成则提前结束并输出结果,若到达时间后测试尚未完成则会强制结束并输出结果
ramp_time=10 在测试开始前先执行10秒,可以理解为忽略前10秒的测试结果,有助于得到更稳定的测试数据
ioengine=libaio|sync|自定义 指定io引擎,可自定义,官方也提供了多种方式
iodepth=2 队列深度为2,默认为1
name=fioTest 定义本次测试任务名称
output=testRestult 输出测试结果到指定文件中
lockmem=1G 只使用1G内存进行测试,模拟较少内存时使用
stonewall 等待上一个测试任务结束,再启动此当前任务

频繁测试可能会报file:filesetup.c:455, func=fstat, error=Structure needs cleaning 错误

这个是因为在测试写入操作时,实际上会真的写入一个指定size的文件,频繁测试最终导致磁盘满了,可以删除这些文件后再测试,或者重新格式化并挂载后再进行测试

配置文件方式

方式一

若嫌命令太长,可以将命令写入文件,使用shell命令执行此文件即可,比如,创建文件vim fiotest,写入如下命令

fio -directory=/root/T1:/root/T2 -ioengine=libaio -direct=1 -iodepth=1 -thread=2 -numjobs=2 -group_reporting -allow_mounted_write=1 -rw=randrw -rwmixread=70 -bs=4k -size=1G -runtime=60 -name=fioTest

执行文件中的命令sh fiotest

方式二

也可以使用配置文件的方式进行测试,每个文件中都可以进行全局配置(global),然后在下面配置要执行的任务,每个任务都共享全局配置信息。如下示例,创建vim dydtest文件,根据实际情况修改以下信息,保存退出

# ↓全局配置信息
[global]
directory=/root/T1:/root/T2
ioengine=libaio
size=1G
direct=1
thread=1
group_reporting

# ↓测试顺序读,单次I/O为4k
[4k-read]
bs=4k
iodepth=64
rw=read
stonewall
# ↓测试顺序写,单次I/O为4k
[4k-write]
bs=8k
iodepth=64
rw=write
allow_mounted_write=1
stonewall
# ↓测试随机70%的读,30%的写,单次I/O为16k
[8k-randrw]
bs=16k
iodepth=128
rw=rw
rwmixread=70
allow_mounted_write=1
stonewall

执行命令fio dydtest开始测试,测试结果如下

4k-read: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
4k-write: (g=1): rw=write, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=libaio, iodepth=64
8k-randrw: (g=2): rw=rw, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=libaio, iodepth=128
fio-3.32
Starting 3 threads
Jobs: 1 (f=1): [_(2),M(1)][100.0%][r=116MiB/s,w=48.7MiB/s][r=7436,w=3114 IOPS][eta 00m:00s]
4k-read: (groupid=0, jobs=1): err= 0: pid=1785: Sun Oct 23 22:52:43 2022
  read: IOPS=11.1k, BW=43.5MiB/s (45.6MB/s)(1024MiB/23549msec)
    slat (nsec): min=999, max=4417.0k, avg=84200.85, stdev=40409.01
    clat (usec): min=1741, max=13340, avg=5662.03, stdev=1148.72
     lat (usec): min=1765, max=13442, avg=5746.24, stdev=1163.61
    clat percentiles (usec):
     |  1.00th=[ 3195],  5.00th=[ 3982], 10.00th=[ 4359], 20.00th=[ 4883],
     | 30.00th=[ 5211], 40.00th=[ 5473], 50.00th=[ 5669], 60.00th=[ 5800],
     | 70.00th=[ 5932], 80.00th=[ 6063], 90.00th=[ 6980], 95.00th=[ 8291],
     | 99.00th=[ 9110], 99.50th=[ 9372], 99.90th=[10945], 99.95th=[11469],
     | 99.99th=[12518]
   bw (  KiB/s): min=31256, max=54448, per=99.90%, avg=44484.49, stdev=4808.79, samples=45
   iops        : min= 7814, max=13612, avg=11121.02, stdev=1202.24, samples=45
  lat (msec)   : 2=0.07%, 4=5.22%, 10=94.50%, 20=0.21%
  cpu          : usr=0.70%, sys=87.45%, ctx=1093, majf=0, minf=66
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
     issued rwts: total=262144,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64
4k-write: (groupid=1, jobs=1): err= 0: pid=1786: Sun Oct 23 22:52:43 2022
  write: IOPS=9557, BW=74.7MiB/s (78.3MB/s)(1024MiB/13714msec); 0 zone resets
    slat (nsec): min=1223, max=4289.9k, avg=98801.06, stdev=41816.87
    clat (usec): min=131, max=12273, avg=6594.02, stdev=906.57
     lat (usec): min=216, max=12526, avg=6692.82, stdev=916.59
    clat percentiles (usec):
     |  1.00th=[ 4015],  5.00th=[ 5145], 10.00th=[ 5473], 20.00th=[ 5932],
     | 30.00th=[ 6325], 40.00th=[ 6521], 50.00th=[ 6652], 60.00th=[ 6849],
     | 70.00th=[ 6980], 80.00th=[ 7177], 90.00th=[ 7504], 95.00th=[ 7832],
     | 99.00th=[ 9110], 99.50th=[ 9896], 99.90th=[11338], 99.95th=[11731],
     | 99.99th=[11994]
   bw (  KiB/s): min=71839, max=85408, per=99.95%, avg=76422.23, stdev=3043.87, samples=26
   iops        : min= 8979, max=10676, avg=9552.58, stdev=380.58, samples=26
  lat (usec)   : 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.01%, 4=0.97%, 10=98.57%, 20=0.44%
  cpu          : usr=0.55%, sys=97.56%, ctx=245, majf=0, minf=1
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
     issued rwts: total=0,131072,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64
8k-randrw: (groupid=2, jobs=1): err= 0: pid=1787: Sun Oct 23 22:52:43 2022
  read: IOPS=7422, BW=116MiB/s (122MB/s)(718MiB/6194msec)
    slat (nsec): min=1328, max=2224.6k, avg=81351.07, stdev=35817.74
    clat (usec): min=32, max=19985, avg=11954.61, stdev=1424.43
     lat (usec): min=119, max=20072, avg=12035.97, stdev=1430.48
    clat percentiles (usec):
     |  1.00th=[ 7701],  5.00th=[ 9896], 10.00th=[10421], 20.00th=[10945],
     | 30.00th=[11338], 40.00th=[11731], 50.00th=[11994], 60.00th=[12256],
     | 70.00th=[12649], 80.00th=[13042], 90.00th=[13435], 95.00th=[13829],
     | 99.00th=[15533], 99.50th=[16450], 99.90th=[18220], 99.95th=[19006],
     | 99.99th=[20055]
   bw (  KiB/s): min=113216, max=124288, per=99.99%, avg=118743.83, stdev=3382.82, samples=12
   iops        : min= 7076, max= 7768, avg=7421.58, stdev=211.44, samples=12
  write: IOPS=3158, BW=49.4MiB/s (51.7MB/s)(306MiB/6194msec); 0 zone resets
    slat (usec): min=4, max=1595, avg=105.72, stdev=39.79
    clat (usec): min=525, max=25257, avg=12095.70, stdev=1629.26
     lat (usec): min=660, max=25534, avg=12201.42, stdev=1637.94
    clat percentiles (usec):
     |  1.00th=[ 7832],  5.00th=[ 9896], 10.00th=[10421], 20.00th=[11076],
     | 30.00th=[11469], 40.00th=[11731], 50.00th=[11994], 60.00th=[12387],
     | 70.00th=[12780], 80.00th=[13173], 90.00th=[13566], 95.00th=[13960],
     | 99.00th=[17957], 99.50th=[19530], 99.90th=[23462], 99.95th=[23987],
     | 99.99th=[25297]
   bw (  KiB/s): min=46944, max=53600, per=100.00%, avg=50545.58, stdev=1980.76, samples=12
   iops        : min= 2934, max= 3350, avg=3158.92, stdev=123.89, samples=12
  lat (usec)   : 50=0.01%, 250=0.01%, 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.02%, 4=0.10%, 10=5.58%, 20=94.17%, 50=0.11%
  cpu          : usr=0.60%, sys=97.45%, ctx=112, majf=0, minf=1
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=99.9%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
     issued rwts: total=45972,19564,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=128

Run status group 0 (all jobs):
   READ: bw=43.5MiB/s (45.6MB/s), 43.5MiB/s-43.5MiB/s (45.6MB/s-45.6MB/s), io=1024MiB (1074MB), run=23549-23549msec

Run status group 1 (all jobs):
  WRITE: bw=74.7MiB/s (78.3MB/s), 74.7MiB/s-74.7MiB/s (78.3MB/s-78.3MB/s), io=1024MiB (1074MB), run=13714-13714msec

Run status group 2 (all jobs):
   READ: bw=116MiB/s (122MB/s), 116MiB/s-116MiB/s (122MB/s-122MB/s), io=718MiB (753MB), run=6194-6194msec
  WRITE: bw=49.4MiB/s (51.7MB/s), 49.4MiB/s-49.4MiB/s (51.7MB/s-51.7MB/s), io=306MiB (321MB), run=6194-6194msec

Disk stats (read/write):
    dm-0: ios=307812/150496, merge=0/0, ticks=52792/31791, in_queue=84583, util=98.77%, aggrios=307369/150427, aggrmerge=747/212, aggrticks=50102/31622, aggrin_queue=2169, aggrutil=98.69%
  sda: ios=307369/150427, merge=747/212, ticks=50102/31622, in_queue=2169, util=98.69%

注意:不要用FIO工具测试系统盘的写入操作,会把系统搞崩溃的,仅测试读取的性能时对系统盘没什么影响,如果是在测试环境进行的,可以在开测前先快照备份系统,测试写入操作后再恢复备份,若只是简单测试磁盘的读写速度,可以使用下面介绍的dd命令进行测试

dd命令介绍

dd命令主要是用于文件读取、格式转换和数据拷贝的,它与cp命令不同,dd命令是对块进行复制操作,可以将原始数据按照数据源的格式原封不动的拷贝至目的地,而cp命令是对文件或目录进行复制操作,将文件和目录拷贝到目的地后会按照目的地的格式重新排列数据,因此通过dd命令的复制速度就能够知道磁盘的读写速度

使用方法

如下命令是备份/dev/sda全盘数据,并压缩后保存到到/root/目录下,压缩包命名为sdb_bak.gz

dd if=/dev/sdb | gzip > /root/sdb_bak.gz

常用参数说明如下,更多参数解释说明请执行命令man dd,查看帮助文档

参数 解释
if=dev/sda 从文件中读取
of=/dev/sdb 写入到文件中
bs=4k 单次读取/写入的字节数,默认512
count=1000 读取/写入字节的次数
skip=10 从文件中读取时跳过前10次的次数,即忽略前10次的测试结果,有助于得到更稳定的数据
seek=10 写入到文件时跳过前10次的次数,同样有利于得到更稳定的测试数据
iflag=direct 在执行从文件中读取数据时使用非缓存I/O
oflag=direct 在执行写入到文件操作时使用非缓存I/O
oflag=dsync 在执行写入到文件操作时每次都会进行同步操作,比如每次读取4k后就要先把这4k写入到磁盘
conv=fsync 执行到最后会再执行一次同步操作,在命令结束前再同步data和metadata
conv=sync,noerror 同步I/O和元数据,出现读取错误仍继续操作
time 计时功能
  1. 磁盘写入测试

    在linux中存在一个/dev/zero文件,它是一个输入设备,会不断的输出0字节,因此并不会产生I/O,所以可用来测试写入速度,如下命令,意思是以每次4k大小从/dev/zero读取数据向/dyd_w文件中写入,共写入1G(4096*256000)并记录时间

    time dd if=/dev/zero of=/dyd_w bs=4k count=256000
    

    因为/dev/zero不会产生I/O,所以I/O只产生在了dyd_w文件上,因此该命令相当于测试磁盘的写入能力。此命令也可以理解为清空磁盘,因为/dev/zero只会不断的返回0字节,of文件中的数据都会变成空字符,所以,别of到重要的磁盘或文件哦

    fio: engine libaio not loadable,linux,服务器,centos,测试工具

  2. 磁盘读取测试

    在linux中还有存在一个 /dev/null文件,它是一个空设备,被称为回收站或无底洞,将数据输出到该设备下也不会产生I/O,所以可用来测试读取速度,如下命令,意思是从/dev/sda读取数据向/dev/null中写入,共写入1G(8192*128000)并记录时间

    time dd if=/dev/sda of=/dev/null bs=8k count=128000
    

    因为/dev/sda是一个物理分区,对它的读取会产生I/O,而输出到/dev/null则不会产生I/O,所以,I/O只产生在了/dev/sda上,因此该命令相当于测试磁盘的读取能力

    fio: engine libaio not loadable,linux,服务器,centos,测试工具

  3. 同时读写测试

    如下命令,指使用fsync同步方式,以每次16k大小从/dev/sda读取数据向dyd_rw文件中写入,共写入1G(16k*128000)并记录时间

    time dd if=/dev/sda of=/dyd_rw bs=16k count=64000 conv=fsync
    

    因为/dev/sda是一个物理分区,而/dyd_rw是一个普通的文件,若它们在同一个磁盘中,则对它们的读写操作都会产生I/O,所以该命令相当于测试磁盘的同时读写能力

    fio: engine libaio not loadable,linux,服务器,centos,测试工具

dd命令不能实现随机读写测试,对于测试磁盘性能方面相较于FIO工具而言,具有局限性,但dd命令也是一款功能很强大的工具,能够备份数据、数据恢复、磁盘清理、生成随机文件、文件格式转换、数据大小写转换、制作U盘启动盘等功能,此处就不介绍啦,自行了解吧!文章来源地址https://www.toymoban.com/news/detail-795192.html

到了这里,关于磁盘性能测试工具-FIO的安装及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • fio性能测试-环境搭建,功能介绍,测试讲解

    fio性能测试-环境搭建,功能介绍,测试讲解 Fio介绍:FIO(Flexible I/O Tester)是一个用于测试磁盘、文件系统、块设备和网络设备性能的工具。它可以模拟不同类型的I/O负载,包括随机或顺序读写、混合读写、随机或顺序访问等。FIO提供了丰富的选项和参数,可以对测试进行高

    2023年04月13日
    浏览(41)
  • Fio工具详解【强大的IO性能压测工具】

    [time] runtime=time ​ 告诉fio在指定的时间段后终止处理。很难确定指定作业将运行多长时间,因此此参数可以方便的将总运行时间限制为给定时间。当省略单位时间,该数值以秒为单位进行解释。 time_based ​ 如果设置,即使文件被完全读取或写入,fio也将在指定的运行期间运行

    2024年02月01日
    浏览(40)
  • ​Linux开源存储漫谈(2)IO性能测试利器fio

    fio(Flexible I/O Tester)正是非常常用的文件系统和磁盘 I/O 性能基准测试工具。提供了大量的可定制化选项,可以用来测试,裸盘、一个单独的分区或者文件系统在各种场景下的 I/O 性能,包括了不同块大小、不同 I/O 引擎以及是否使用缓存等场景。   ubuntu安装fio非常简单 fio选

    2024年02月04日
    浏览(43)
  • fio工具及使用

    在实际测试中需要对硬盘有较为完整的测试,之前一直使用IOzone,但发现测试结果并不能完全反映出硬盘的整体性能,所以开始使用fio进行测试,fio测试参数过多,现写出我实际中使用的参数,文末附有在其他论坛查看到的较为完整的fio参数解读 FIO是一个非常简单好用的性能

    2024年02月05日
    浏览(48)
  • 手机APP性能测试工具PerfDog性能狗安装教程及简单使用

            PerfDog是一个由腾讯研发的主流性能测试软件。可以提高软件和游戏的运行效率,支持iOS/安卓在移动平台上的性能测试和分析,快速定位和分析性能问题等。无需安装,即插即用,减少繁琐的测试障碍,安卓设备不需要ROOT,iOS设备也不需要越狱,有效解决安卓和i

    2024年02月11日
    浏览(53)
  • 【DockerCE】使用Docker安装运行性能测试工具-RunnerGo

    一、安装环境 CentOS-7.9 / Docker-CE-23.0.1 / Docker-compose-2.17.2 二、资源配置 4核8G(官方建议8核16GB) 三、安装运行 从Github下载安装所需的文件包(版本1.0.3),这里选择的是tar.gz包  将压缩包里面的runnergo目录上传到本地虚拟机/data目录下,目录结构如下所示: 备注:runnergo.yaml是

    2023年04月23日
    浏览(52)
  • 【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解

    目录 nmon nmon下载 解压安装 启动 数据采集配置 生成图形结果 nmon报告中的参数含义  资料获取方法 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_analyzer工具产

    2024年02月13日
    浏览(54)
  • FIO 安装方法

            yum安装,不同版本的OS会根据仓库里的fio版本来安装         使用异步模式,需要下载libaio         查看fio版本 2.1、进入官网: fio tools 2.2、上传至Linux中,也可以使用wget命令来下载 2.3、安装编译环境gcc 2.4、下载后进行解压,在指定目录安装 注:--prefix   

    2024年02月08日
    浏览(37)
  • Linux下Python脚本的编写解析fio测试log(四)

    在我们平常的测试盘的过程中,fio是一款业界最为通用的工具,通过Fio可以只知道一个盘具体的带宽,iops,延迟等等.比如下面这段fio的log 这里边需要拿出log里的一些参数 做成表格 如下: 下面说下如何用Python解析log并做成表格 1 同样是用到Python中文件函数open,调用四个模块sy

    2024年02月08日
    浏览(45)
  • jmeter 性能测试工具的使用(Web性能测试)

    1、下载 该软件不用安装,直接解压打开即可使用。 2、使用 这里就在win下进行,图形界面较为方便 在目录apache-jmeter-2.13bin 下可以见到一个jmeter.bat文件,双击此文件,即看到JMeter控制面板。主界面如下: 3、创建线程组 测试计划--右键——》添加——》hreads——》线程组 设

    2024年02月10日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包