首页 > 系统相关 >Linux 硬盘性能测试

Linux 硬盘性能测试

时间:2023-10-17 19:01:22浏览次数:36  
标签:rw 测试 -- numjobs 1G Linux fio 硬盘

在Linux系统中,测试硬盘的性能一般使用fio工具实现,fio是Flexible I/O Tester的缩写。是一个常受欢迎的、用于测试存储性能的工具,而且还可以模拟多种不同的I/O模式和工作负载。

一般我们要测试一块硬盘的性能,一般需要进行随机写入测试、随机读取测试、顺序写入测试、顺序读取测试和混合读写测试这五步。


fio的使用

这个工具不是Linux发行版自带的,需要自己手动安装才行。

# ubuntu
sudo apt install fio

# centos
sudo yum install fio

使用fio测试硬盘的写性能时,很容易就会造成系统上的数据丢失。主要就两种情况:

  • 未指定文件名:不指定文件名会直接对硬盘进行测试。这样的操作将覆盖设备上的数据,包括文件系统、分区表等。这将导致整个设备上的数据丢失。

  • 文件名重合:指定了文件名但与已存在的文件重合,写操作将会覆盖这个文件的内容,导致原有数据丢失。


随机写入性能测试

不绕过缓存

此时会受到会受到操作系统的页面缓存(page cache)的影响,即操作系统通常会缓存读写操作,这可能会导致不真实的高性能读写结果。使用直接I/O可以得到没有缓存效应的真实磁盘性能。

fio --name=testfile --directory=/home/ehigh/test_dir --size=1G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1

表示在 /home/ehigh/test_dir 目录中创建一个大小为1G的测试文件testfile,使用随机写入的模式进行测试,每次读/写的数据量是4KB。在30s的时间内,通过启动一个工作进程或线程来进行测试。

说明:

  • --name=testfile指定生成的测试文件名称,不指定就会会直接对硬盘进行测试,可能会造成数据丢失

  • --directory指定测试文件存放路径,不指定就是在当前路径下

  • --numjobs指定测试线程的数量,模拟单线程或单任务工作负载,不测试并发造成的额外压力,设置为1就可以了

  • --runtime指定测试时间,短时测试一般30s差不多了,可以快速评估和比较不同配置或硬件的性能

  • --size指定测试文件的大小,一般1G差不多就可以了

  • --rw指定测试的模式,andwrite是随机写入模式

  • --bs指定每个每个IO操作将使用4KB的大小

  • --end_fsync指定测试结束时,确保所有写入都同步到磁,这样更能确保测试数据的准确

 write: IOPS=11.3k, BW=43.0MiB/s  
 	# 在测试期间,平均每秒钟完成了11.3k次独立的IO写操作,这些写操作的总带宽是1825KiB每秒(即表示每秒钟的数据写入速度)

# slat:提交延迟 clat:完成延迟 lat:总延迟
	# slat:指应用程序提交I/O到操作系统,到操作系统接收并开始处理这个I/O所需的时间。  平均的提交延迟为2.68微秒。
	# clat:指操作系统开始处理I/O,到I/O操作真正完成所需的时间。完成延迟为1326.67微秒,即约1.326毫秒。
	# lat:应用程序提交I/O到I/O操作真正完成所需的时间。这里的总延迟的标准偏差为167,993.51微秒,即约168毫秒
	# clat percentiles (usec):不同百分位数下的完成延迟,可以通过这个来确定迟的分布
	# 99.99th=[  545] 如果99th百分位数的延迟远高于平均延迟(clat的avg值),这可能意味着存在一些异常高的延迟。

cpu:测试过程中用户空间和内核空间的CPU使用率,usr表示用户空间。sys表示内核空间

# 这个是写操作的摘要信息
Run status group 0 (all jobs):
  WRITE: bw=43.0MiB/s (46.1MB/s), 43.0MiB/s-43.0MiB/s (46.1MB/s-46.1MB/s), io=2048MiB (2147MB), run=46558-46558msec
	#  bw=43.0MiB/s :平均带宽,每秒钟数据写入的速度
	# io=2048MiB (2147MB): 在整个测试过程中写入的总数据量。

Disk stats (read/write):
  sda: ios=2/7271, merge=0/348, ticks=1637/389056, in_queue=409371, util=95.63%
	# ios=2/7271: 读/写的I/O操作数,进行了2次读操作和7271次写操作
	# util=95.63%,测试过程中设备的利用率,接近100%的值通常意味着磁盘是瓶颈。

绕过缓存

通过 -direct=1 参数 在 fio 中用于启用直接I/O模式,数据直接从用户空间传输到磁盘,或从磁盘传输到用户空间,而不经过操作系统的缓存。

fio --name=testfile --directory=/home/ehigh/test_dir --size=1G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1 -direct=1

可以明显看到,绕过缓存后瞬间就降下来了。


多线程测试

--numjobs 参数在 fio 中用于指定测试中应使用的任务(线程或进程)数量,可以用来测试并发度,吞吐量、延迟等内容。

因为多个线程执行时,可能导致更高的 I/O 压力和更高的设备利用率、高延迟等。这样更加能模拟涉及到多线程或多进程并发访问存储的情况。

fio --name=testfile --directory=/home/ehigh/test_dir --size=1G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=16 --numjobs=4 --runtime=30 --time_based --end_fsync=1 -direct=1

随机读取测试

fio --name=randread --directory=/home/ehigh/test_dir --size=1G --rw=randread --bs=4k --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1

顺序写入测试

 fio --name=seqwrite --directory=/home/ehigh/test_dir --size=1G --rw=write --bs=1M --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1	

顺序读取测试:

fio --name=seqread --directory=/home/ehigh/test_dir --size=1G --rw=read --bs=1M --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1

混合读写测试

fio --name=mixedrw --rw=rw --rwmixread=70 --bs=4k --numjobs=1 --ioengine=libaio --iodepth=16 --runtime=60 --size=1G --filename=testfile --directory=/home/ehigh/test_dir

标签:rw,测试,--,numjobs,1G,Linux,fio,硬盘
From: https://www.cnblogs.com/heyongshen/p/17770440.html

相关文章

  • 网盘拜拜!东芝N300 20T NAS机械硬盘上手:20T告别容量焦虑
    对于创作者、摄影师、小工作室等有着大量数据存储和传输的群体来说,NAS几乎不可或缺。而对于NAS这样7x24小时不间断运行的设备,机械硬盘的稳定性和可靠性至关重要。然而消费级的PC台式电脑机械硬盘在长时间连续运行的稳定性以及传输速度上显然不足以让有专业存储需求的用户得到安......
  • 【发现一个问题】macos m2 下无法使用 x86_64-linux-musl-gcc 链接含有 avx512 指令
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯一开始是使用golang中的cgo来编译:envCC=cCGO_ENABLED=1GOOS=linuxGOARCH=amd64\CGO_CFLAGS="-mavx-mavx2-mavx512f-mavx512vl-mavx512bw-O2"\gobu......
  • 集成测试
            ......
  • 系统测试
             ......
  • 软件测试用例设计方法
    设计测试用例是软件开发过程中非常重要的一项工作。通过有效的测试用例设计,我们可以检验软件是否符合预期功能,并尽早发现和修复潜在的问题。下面将介绍一些常用的方法来设计测试用例。1.边界值分析法边界值分析法是一种常用且简单的测试用例设计方法。其基本原理是通过测试程序......
  • 单元测试
         ......
  • C++ 获取文件信息(Linux)
    stat函数头文件:#include<sys/stat.h>intstat(constchar*restrictpathname,structstat*restrictbuf);第一个参数pathname:文件名,需要获取该文件的信息第二个参数buf:stat函数将pathname对应的文件信息,填入buf指向的stat结构中返回值:0成功;-1出错structstat{......
  • 2023年石门中学NOIP模拟测试(2023.10.17)
    原题大战,还是\(4\)道计数...放个头图:一蓝一紫两黑,简单且原题0.o?出模拟赛搬原题演都不演了,他真的我哭死。那这总结不写也罢T1\(n\leq10^3\)。简单来说,要选出子序列满足相同颜色连续的方案数。签到题,但写了\(\text{1h}\)的我是sb。直接大力状压,设\(dp_{i,s,c}\)表......
  • linux定时任务crontab的使用
    linuxcron是不到秒的。crontab参数列表-e#编辑定时任务-l#查看定时任务(其实没用,相当于cat)-r#删除定时任务-u#指定其他用户常用的是crontab-e;表示编辑定时任务。crontab-e和vim/etc/crontab的区别这两种都是编辑定时任务文件。crontab-e相当于cd/var/spool/cro......
  • 使用docker搭建drogon windows10,linux,mac下开发环境
    2023年10月13日14:52:26本机环境Windows10专业版22H2操作内核19045.2965如果直接在windows,linux,mac上直接搭建环境确实有一点难度,之前drogon官方并未提供官方镜像,现在有了docker镜像确实方便了,其实我是最近才有简述安装dockerdesktop,windows的虚拟化有2个方案hyper-v和w......