资讯

展开

SSD硬件测试

作者:快盘下载 人气:

//

SSD硬件测试

//

这两天有一个临时性的小任务,使用fio工具对SSD磁盘进行硬件测试,fio这个工具之前没有用过,这两天简单研究了一下这个工具,把一些常用的参数在这里说明一下。

fio工具可以对磁盘进行压力测试,通常情况下,我们比较关心的磁盘的性能指标有:

l IOPS(每秒执行的IO次数)

l bw(带宽,每秒吞吐量)

l lat(延迟,每次IO操作的延迟)

这里插入一个mysql方向的知识点,在MySQL中innodb_io_capacity这个参数是告诉innodb你的磁盘io能力的,官方文档的介绍是:

也就是说它直接代表innodb的刷盘IOPS值,所以如果你的磁盘是SSD的,可以适当调大这个值,来让你的MySQL服务性能更好。

下面来看fio这个命令基本用法:

fio -filename=$filename -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest

其中,每个参数的意义如下:

filename

测试文件名称,通常选择需要测试的盘的data目录下面的一个文件

direct

测试过程绕过机器自带的buffer,直接从磁盘读取数据

iodepth

请求的IO队列深度

thread

fio默认会使用fork()创建job,如果这个选项设置的话,fio将使用pthread_create来创建线程

rw

测试的IO模式(顺序读、随机读、顺序写、随机写)

bs

单次io的块文件大小,机械盘常用大小4k、16k,SSD常用1Mb

size

单次写入的总数据量,4T硬盘可以写入100G数据进行测试

ioengine

io引擎类型,通常为psync引擎和libaio引擎

runtime

测试时间,IO写入时间,如果不设置,则写入size大小

group_reporting

关于显示结果的,汇总每个进程的信息

这里,我拿到线上某台测试服务器的一个测试报告做下结果的简单分析:

[root@  data1]# fio -filename=/data1/a.txt -direct=1 -iodepth 1 -thread -rw=randrw -ioengine=psync -bs=16k -size=500M -numjobs=10 -runtime=10 -group_reporting -name=mytest
mytest: (g=0): rw=randrw, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=psync, iodepth=1
...
fio-3.7
Starting 10 threads
mytest: Laying out IO file (1 file / 500MiB)
Jobs: 10 (f=10): [m(10)][100.0%][r=371MiB/s,w=370MiB/s][r=23.7k,w=23.7k IOPS][eta 00m:00s] # 进度100%
mytest: (groupid=0, jobs=10): err= 0: pid=17828: Tue Oct 20 14:56:01 2020
   -------------------读---------
   read: IOPS=23.9k, BW=374MiB/s (392MB/s)(2500MiB/6685msec)  #BW代表平均IO带宽,bandwidth
    clat (usec): min=32, max=2592, avg=265.90, stdev=174.83   #完成延时,命令提交到kernel到IO做完之间的时间
     lat (usec): min=32, max=2593, avg=266.25, stdev=174.85   #响应时间,从IO结构体创建时刻开始,直到紧接着clat完成
    clat percentiles (usec):                                  # 完成延迟百分比
     |  1.00th=[   79],  5.00th=[   85], 10.00th=[   89], 20.00th=[   99],
     | 30.00th=[  111], 40.00th=[  151], 50.00th=[  235], 60.00th=[  302],
     | 70.00th=[  359], 80.00th=[  424], 90.00th=[  510], 95.00th=[  578],
     | 99.00th=[  734], 99.50th=[  799], 99.90th=[  955], 99.95th=[ 1037],
     | 99.99th=[ 1827]
   bw (  KiB/s): min=36480, max=40736, per=10.01%, avg=38339.94, stdev=930.12, samples=130
   iops        : min= 2280, max= 2546, avg=2396.25, stdev=58.13, samples=130
  -------------------写---------
  write: IOPS=23.9k, BW=374MiB/s (392MB/s)(2500MiB/6685msec)
    clat (usec): min=19, max=2488, avg=144.87, stdev=155.51
     lat (usec): min=20, max=2489, avg=145.89, stdev=155.59
    clat percentiles (usec): 
     |  1.00th=[   25],  5.00th=[   27], 10.00th=[   28], 20.00th=[   30],
     | 30.00th=[   32], 40.00th=[   35], 50.00th=[   39], 60.00th=[  106],
     | 70.00th=[  223], 80.00th=[  297], 90.00th=[  383], 95.00th=[  449],
     | 99.00th=[  578], 99.50th=[  627], 99.90th=[  742], 99.95th=[  791],
     | 99.99th=[  963]
   bw (  KiB/s): min=35296, max=41344, per=10.01%, avg=38340.68, stdev=1225.39, samples=130
   iops        : min= 2206, max= 2584, avg=2396.28, stdev=76.59, samples=130
  ---------------------------------
  lat (usec)   : 20=0.01%, 50=28.61%, 100=11.84%, 250=22.36%, 500=30.43%   # 说明百分之30.43%的request延迟小于500 us(微妙)
  lat (usec)   : 750=6.30%, 1000=0.42%                                     # 6.30%的延迟小于750微秒   
  lat (msec)   : 2=0.03%, 4=0.01%                                          # 0.03%的延迟大于750微妙小于2000微妙
  cpu          : usr=1.95%, sys=10.77%, ctx=583855, majf=0, minf=19        # CPU利用率,用户/系统CPU占用率,进程上下文切换(context switch)次数,主要和次要(major and minor)页面错误数量(page faults)。由于测试是配置成使用直接IO,page faults数量应该极少。
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% # IO队列,iodepth设置,用来控制同一时刻发送给OS多少个IO
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% # 单个IO提交要提交的IO数
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% # IO提交完成数
     # submit和complete代表同一时间段内fio发送上去和已完成的IO数量,对于这个测试用例来说,iodepth是默认值1,所以100%的IO在同一时刻发送1次,放在1-4栏位里。
     # 通常来说,只有iodepth大于1才需要关注这一部分数据
     issued rwts: total=159977,160023,0,0 short=0,0,0,0 dropped=0,0,0,0  # total=r=2621440/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=1   # 延时
     # Fio可以配置一个延迟目标值,这个值可以调节吞吐量直到达到预设的延迟目标。
     # 在基于时间或和容量的测试中,这行通常看起来一样。四个值分别代表预设的latency_target, latency_window, latency_percentile和iodepth。

Run status group 0 (all jobs):
   READ: bw=374MiB/s (392MB/s), 374MiB/s-374MiB/s (392MB/s-392MB/s), io=2500MiB (2621MB), run=6685-6685msec
  WRITE: bw=374MiB/s (392MB/s), 374MiB/s-374MiB/s (392MB/s-392MB/s), io=2500MiB (2622MB), run=6685-6685msec
    Fio支持把不同的测试聚合。例如,我可以用一个配置文件混合包含SSD和HDD,但是设置分组(group)把IO单独汇总。我现在还没涉及这个功能,但未来会用到。

Disk stats (read/write):
  nvme0n1: ios=155494/155498, merge=0/1, ticks=23069/2451, in_queue=25521, util=93.15%

关于这个结果的分析,都在上面的代码段里面了。

更加详细的参数分析,请使用man fio命令来查看fio命令手册。

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!