Linux测试磁盘读写性能
1、安装必要的工具:
确保系统上已经安装了必要的工具,hdparm
和fio
。使用以下命令来安装它们:
sudo yum install hdparm fio -y
2、使用hdparm测试磁盘读性能:
hdparm
是用于测试磁盘性能的简单工具。使用以下命令测试磁盘的读性能:
sudo hdparm -Tt /dev/vda1
/dev/vda1
是我要测试的实际磁盘设备名称。该命令将显示磁盘的缓存和读性能。
3、使用fio测试磁盘写性能:
fio
是一个更强大的工具,可用于测试磁盘的写性能。创建一个fio
配置文件,例如在/opt
下创建文件disk_test.fio
,并在其中定义写性能测试任务。以下是一个示例配置文件:
[write-test]
rw=write
filename=/opt/testfile
size=5G
rw=write
表示执行写入测试。filename
指定要写入的文件的路径。size
指定要写入的数据大小。
然后运行命令进行测试:
sudo fio disk_test.fio
4、使用dd
命令测试磁盘写性能:
运行以下dd
命令,将数据写入到/opt/testfile
文件中:
sudo dd if=/dev/zero of=/opt/testfile bs=1M count=5000 conv=fdatasync
解释一下这个命令:
if=/dev/zero
指定输入文件为/dev/zero
,这是一个特殊的设备文件,它会提供无限的零字节数据,用于测试写入性能。of=/opt/testfile
指定输出文件为您之前创建的/opt/testfile
。bs=1M
设置块大小为1MB,这是每次写入的数据块大小。count=5000
设置要写入的块数量,这里是5000个1MB块,总共写入5GB的数据。conv=fdatasync
强制dd
在每次写入后调用fdatasync
以确保数据真正写入磁盘。
命令执行完后,dd
将显示写入操作的性能统计信息,包括写入速度和用时。
可以使用ls -lh /opt/testfile
命令来验证文件的大小是否为5GB,以确保测试成功。
请注意,这只是一个基本的磁盘写入性能测试示例。如果您需要更详细的性能数据或更复杂的测试场景,fio
可能是更强大的工具,但dd
可以用于快速的基本测试。在执行这些测试时,请谨慎操作以避免不必要的数据损失或对磁盘的不良影响。
5、执行fio
和dd
测试结果如下:
root@ecs-8e73-0001.novalocal:/opt#sudo fio disk_test.fio
write-test: (g=0): rw=write, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.7
Starting 1 process
write-test: Laying out IO file (1 file / 5120MiB)
Jobs: 1 (f=1): [W(1)][100.0%][r=0KiB/s,w=1386MiB/s][r=0,w=355k IOPS][eta 00m:00s]
write-test: (groupid=0, jobs=1): err= 0: pid=51004: Tue Sep 5 18:26:47 2023
write: IOPS=358k, BW=1397MiB/s (1465MB/s)(5120MiB/3665msec)
clat (nsec): min=1280, max=145687, avg=2038.07, stdev=923.48
lat (nsec): min=1445, max=145856, avg=2207.73, stdev=944.24
clat percentiles (nsec):
| 1.00th=[ 1592], 5.00th=[ 1624], 10.00th=[ 1640], 20.00th=[ 1656],
| 30.00th=[ 1688], 40.00th=[ 1720], 50.00th=[ 1768], 60.00th=[ 1880],
| 70.00th=[ 2064], 80.00th=[ 2256], 90.00th=[ 2640], 95.00th=[ 3152],
| 99.00th=[ 4576], 99.50th=[ 5920], 99.90th=[10304], 99.95th=[11072],
| 99.99th=[14144]
bw ( MiB/s): min= 1320, max= 1479, per=100.00%, avg=1400.88, stdev=59.90, samples=7
iops : min=337972, max=378664, avg=358625.86, stdev=15333.74, samples=7
lat (usec) : 2=66.61%, 4=31.42%, 10=1.83%, 20=0.13%, 50=0.01%
lat (usec) : 100=0.01%, 250=0.01%
cpu : usr=15.61%, sys=84.25%, ctx=59, majf=0, minf=32
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.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.0%, >=64=0.0%
issued rwts: total=0,1310720,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1
Run status group 0 (all jobs):
WRITE: bw=1397MiB/s (1465MB/s), 1397MiB/s-1397MiB/s (1465MB/s-1465MB/s), io=5120MiB (5369MB), run=3665-3665msec
Disk stats (read/write):
dm-0: ios=0/7583, merge=0/0, ticks=0/330535, in_queue=338409, util=58.68%, aggrios=0/7741, aggrmerge=0/0, aggrticks=0/346394, aggrin_queue=346394, aggrutil=56.98%
vda: ios=0/7741, merge=0/0, ticks=0/346394, in_queue=346394, util=56.98%
root@ecs-8e73-0001.novalocal:/opt#sudo dd if=/dev/zero of=/opt/testfile bs=1M count=5000 conv=fdatasync
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB) copied, 2.97053 s, 1.8 GB/s
root@ecs-8e73-0001.novalocal:/opt#ls -lh /opt/testfile
-rw-r--r-- 1 root root 4.9G Sep 5 18:26 /opt/testfile
root@ecs-8e73-0001.novalocal:/opt#
fio测试解读:
- IOPS(每秒写入操作数):358,000
- 带宽(吞吐量):1,397 MiB/s(约1.4 GB/s)
- 用时(总时间)run=3665msec(约3.67秒)
- 平均延迟(latency):约2微秒(平均),最大延迟约145,687纳秒
dd测试解读:
- 写入速度:1.8 GB/s
ls
命令显示/opt/testfile
的大小为4.9GB,这是用dd
命令创建的那个5GB的文件。
从结果来看,这个磁盘的写性能非常不错,可以达到高达1.8 GB/s的写入速度,而且IOPS也很高,平均延迟非常低。这表明您的磁盘在处理大量写入操作时表现良好。(因为有SSD做缓存加速,因此这个时间是写入到SSD的时间,不是真正存储到磁盘的时间,数据先记录到SSD中,再由SSD慢慢写入到硬盘中)
性能测试的结果可能会受到多种因素的影响,包括硬件、磁盘类型、文件系统等。因此,性能测试的目的是了解磁盘的潜在性能,并帮助您确定是否需要进一步的优化或更改硬件配置。
6、4K随机读写性能测试:
上面是关于磁盘的随机写入性能测试。要执行随机读写测试(默认4K),你需要编辑disk_test.fio
配置文件,将测试模式更改为随机读写(randrw
)并重新运行测试。修改配置文件以执行随机读写测试的步骤如下:
- 打开
disk_test.fio
配置文件:sudo vim /opt/disk_test.fio
- 修改配置文件的内容,将测试模式更改为随机读写:
[randrw-test]
rw=randrw
filename=/opt/testfile
size=5G
rw=randrw
表示执行随机读写测试。- 其余配置项保持不变,包括
filename
(测试文件路径)和size
(测试文件大小)。
保存并退出编辑器。
现在,使用
fio
运行修改后的配置文件进行随机读写测试:sudo fio /opt/disk_test.fio
这将执行随机读写测试并提供与随机读写性能相关的结果,包括随机读取和随机写入的IOPS、带宽和延迟等信息。
- 过程如下:
root@ecs-8e73-0001.novalocal:/opt#sudo fio /opt/disk_test.fio
write-test: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.7
Starting 1 process
write-test: Laying out IO file (1 file / 5120MiB)
Jobs: 1 (f=1): [m(1)][13.6%][r=4388KiB/s,w=4308KiB/s][r=1097,w=1077 IOPS][eta 08m:46s]过程解读,正在执行混合的随机读写测试,测试文件大小为5GB,已经完成了13.6%的任务。读取速度约为4388KiB/s,写入速度约为4308KiB/s。读取IOPS约为1097,写入IOPS约为1077。测试预计将在剩余的8分钟和46秒内完成。这些指标将帮助您了解磁盘的随机读写性能。
最后的结果如下:
root@ecs-8e73-0001.novalocal:/opt#sudo fio /opt/disk_test.fio
write-test: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=psync, iodepth=1
fio-3.7
Starting 1 process
write-test: Laying out IO file (1 file / 5120MiB)
Jobs: 1 (f=1): [m(1)][100.0%][r=4540KiB/s,w=4564KiB/s][r=1135,w=1141 IOPS][eta 00m:00s]
write-test: (groupid=0, jobs=1): err= 0: pid=58231: Tue Sep 5 18:51:37 2023
read: IOPS=1037, BW=4149KiB/s (4249kB/s)(2561MiB/632135msec)
clat (usec): min=254, max=338111, avg=957.69, stdev=3045.60
lat (usec): min=254, max=338111, avg=957.88, stdev=3045.60
clat percentiles (usec):
| 1.00th=[ 668], 5.00th=[ 709], 10.00th=[ 734], 20.00th=[ 775],
| 30.00th=[ 799], 40.00th=[ 824], 50.00th=[ 857], 60.00th=[ 881],
| 70.00th=[ 922], 80.00th=[ 971], 90.00th=[ 1074], 95.00th=[ 1221],
| 99.00th=[ 2089], 99.50th=[ 3097], 99.90th=[ 7767], 99.95th=[ 11076],
| 99.99th=[206570]
bw ( KiB/s): min= 920, max= 4952, per=100.00%, avg=4148.16, stdev=599.48, samples=1264
iops : min= 230, max= 1238, avg=1037.00, stdev=149.87, samples=1264
write: IOPS=1036, BW=4145KiB/s (4244kB/s)(2559MiB/632135msec)
clat (nsec): min=1367, max=116379, avg=3415.12, stdev=1474.56
lat (nsec): min=1535, max=116591, avg=3623.44, stdev=1519.50
clat percentiles (nsec):
| 1.00th=[ 1896], 5.00th=[ 2064], 10.00th=[ 2160], 20.00th=[ 2352],
| 30.00th=[ 2576], 40.00th=[ 2832], 50.00th=[ 3120], 60.00th=[ 3440],
| 70.00th=[ 3760], 80.00th=[ 4128], 90.00th=[ 4832], 95.00th=[ 5664],
| 99.00th=[ 9152], 99.50th=[11072], 99.90th=[14144], 99.95th=[15808],
| 99.99th=[21376]
bw ( KiB/s): min= 992, max= 5488, per=100.00%, avg=4144.40, stdev=660.02, samples=1264
iops : min= 248, max= 1372, avg=1036.06, stdev=165.00, samples=1264
lat (usec) : 2=1.55%, 4=36.68%, 10=11.36%, 20=0.38%, 50=0.01%
lat (usec) : 100=0.01%, 250=0.01%, 500=0.01%, 750=6.70%, 1000=35.26%
lat (msec) : 2=7.51%, 4=0.39%, 10=0.13%, 20=0.02%, 50=0.01%
lat (msec) : 100=0.01%, 250=0.01%, 500=0.01%
cpu : usr=0.24%, sys=1.74%, ctx=656045, majf=0, minf=36
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.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.0%, >=64=0.0%
issued rwts: total=655676,655044,0,0 short=0,0,0,0 dropped=0,0,0,0
latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs):
READ: bw=4149KiB/s (4249kB/s), 4149KiB/s-4149KiB/s (4249kB/s-4249kB/s), io=2561MiB (2686MB), run=632135-632135msec
WRITE: bw=4145KiB/s (4244kB/s), 4145KiB/s-4145KiB/s (4244kB/s-4244kB/s), io=2559MiB (2683MB), run=632135-632135msec Disk stats (read/write):
dm-0: ios=655401/592963, merge=0/0, ticks=622124/2297686, in_queue=2920059, util=98.50%, aggrios=655983/593644, aggrmerge=11/160, aggrticks=622303/2290813, aggrin_queue=2913116, aggrutil=99.86%
vda: ios=655983/593644, merge=11/160, ticks=622303/2290813, in_queue=2913116, util=99.86%
root@ecs-8e73-0001.novalocal:/opt#这份
fio
测试结果总结如下:测试配置:
- 测试类型:随机读写(randrw)
- 块大小:4096字节
- I/O引擎:psync
- I/O深度:1
任务进度:
- 单个测试任务在一个混合读写(randrw)场景下执行。
- 测试任务已完成,进度为100%。
- 在测试结果中,读取任务的运行时间(
run
)为632135毫秒。这相当于632.135秒或约0.17小时(大约10分钟)。
读取任务性能:
- 平均读取速度:4149KiB/s(约4.05MB/s)
- 平均读取IOPS:1037
- 延迟范围:最小254微秒,最大338111微秒(约0.3毫秒至338毫秒)
- 读取任务的延迟百分位数:99%的读取操作在7767微秒(约7.8毫秒)以下完成。
写入任务性能:
- 平均写入速度:4145KiB/s(约4.05MB/s)
- 平均写入IOPS:1036
- 延迟范围:最小1367纳秒,最大116379纳秒(约1.4微秒至116毫秒)
- 写入任务的延迟百分位数:99%的写入操作在14144纳秒(约0.01毫秒)以下完成。
CPU利用率:
- 用户态CPU利用率:0.24%
- 内核态CPU利用率:1.74%
I/O深度:
- 100%的I/O操作深度为1。
磁盘统计:
- 磁盘
dm-0
和vda
的统计信息,包括I/O操作数量、合并操作、CPU时间和磁盘利用率等。
- 磁盘
上面是这台主机有关磁盘4K随机读写性能的详细信息,包括读取和写入速度、延迟、分布情况以及CPU利用率。(这次是因为读取无法被SSD精准加速,因此读取的性能可以看做是直接读硬盘的性能)这样做可以评估系统的磁盘性能和潜在瓶颈,并根据需要进行性能优化或调整配置。
如果你想测试10线程可以这样配置
[random-rw-test]
rw=randrw
bs=4k
iodepth=10
numjobs=10
size=5G
filename=/opt/testfile
使用了10个进程(jobs=10)并且每个进程的IO深度(iodepth)设置为10。这意味着您在同时运行10个IO操作,并且每个进程将在磁盘上维护10个IO请求的深度。这是一个典型的并发测试场景,用于模拟多个IO操作同时进行的情况。
请注意,具体的性能指标可能会因硬件、文件系统和测试负载而异
Linux测试磁盘读写性能的更多相关文章
- Linux如何查看与测试磁盘IO性能
1. 查看磁盘 IO 性能 1.1 top 命令 top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 ...
- Linux测试硬盘读性能的常用工具-hdparm和dd俩搭档
Linux测试硬盘读性能的常用工具-hdparm和dd俩搭档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.hparm # 它用来在基于 Linux的系统上获取或 ...
- [记录]FIO测试磁盘iops性能
FIO测试磁盘iops性能 1.SATA和SAS盘原生IOPS如下: 2.RAID磁盘阵列对应的写惩罚级别: 3.计算功能性IOPS公式如下: 功能性 IOPS=(((总原生 IOPS×写 %))/( ...
- 【Linux】磁盘读写 测试
一.如何查看当前磁盘的IO使用情况 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DI ...
- Linux 下测试磁盘读写 I/O 速度的方法汇总
在分布式异构存储系统中,我们经常会需要测量获取不同节点中硬盘/磁盘的读写 I/O 速度,下面是 Linux 系统下一些常用测试方法(之后不定期更新): 1.使用 hdparm 命令这是一个是用来获取A ...
- DD测磁盘读写性能
1.测试磁盘的纯写入性能 dd if=/dev/zero of=/file [oracle@11g ~]$ touch ddTest[oracle@11g ~]$ time dd if=/dev/ze ...
- Linux查看磁盘读写
---------- 查看磁盘读写---------iostat -k 1 SQL> ho iostatLinux 2.6.32-279.el6.x86_64 (server-92) 08/1 ...
- linux磁盘读写性能优化
在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文 ...
- Centos 检查磁盘读写性能
启动Tomcat发现deploy war的速度明显变慢, 怀疑磁盘出问题 测试写入 [tomcat@localhost ~]$ dd if=/dev/zero of=kwxgd bs=64k coun ...
- iometer测试磁盘IO性能
of Outstanding I/Os per target – 被选中worker的每个磁盘一次所允许的未处理的异步I/O的数量.模拟测试多个应用向 IO 请求读写,默认是 1.通常不用这个参数,除 ...
随机推荐
- 一种对数据库友好的GUID的变种使用方法
概述 .NET生成的GUID唯一性很好,用之方便,但是,缺少像雪花算法那样的有序性.虽然分布式系统中做不到绝对的有序,但是,相对的有序对于目前数据库而言,索引效率等方面的提升还是有明显效果的(当然,我 ...
- 使用Blazor WASM实现可取消的多文件带校验并发分片上传
前言 上传大文件时,原始HTTP文件上传功能可能会影响使用体验,此时使用分片上传功能可以有效避免原始上传的弊端.由于分片上传不是HTTP标准的一部分,所以只能自行开发相互配合的服务端和客户端.文件分片 ...
- 教育法学第九章单元测试MOOC
第九章单元测试 返回 本次得分为:100.00/100.00, 本次测试的提交时间为:2020-09-06, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 单选(5分) 作为教师最基本的 ...
- Java内部类与匿名类
内部类 定义: 一个类的内部又完整的嵌套了另一个类结构,被嵌套的类就被我们称为内部类,嵌套内部类的类被我们称为外部类 //外部类 class Outer { //内部类 class Inner { } ...
- OpenJDK里的AsmTools简介
前言 转自:http://hengyunabc.github.io/openjdk-asmtools/ https://wiki.openjdk.java.net/display/CodeTools/ ...
- Util应用框架基础(三) - 面向切面编程(AspectCore AOP)
本节介绍Util应用框架对AspectCore AOP的使用. 概述 有些问题需要在系统中全局处理,比如记录异常错误日志. 如果在每个出现问题的地方进行处理,不仅费力,还可能产生大量冗余代码,并打断业 ...
- 23. 从零用Rust编写正反向代理,流控小姐姐的温柔一刀!
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现 ...
- Centos7.5镜像获取
Centos.7.5镜像可从以下地址获取 镜像源地址:https://mirrors.tuna.tsinghua.edu.cn/ 1.下拉找到cc目录下的centos-vault 2.点击进入下一级目 ...
- 探讨C语言中数组、元素内存地址之间的关系
最近一直在研究C语言,总结出一个结论:C开发者就是和内存与数据结构在打交道. 这篇文章先整理一下内存这块学习到的知识以免后面忘记了. 我们先讨论下数组和指针之间的关系,代码如下: #include & ...
- [WPF]浅析资源引用(pack URI)
WPF中我们引用资源时常常提到一个概念:pack URI,这是WPF标识和引用资源最常见的方式,但不是唯一的方式.本文将介绍WPF中引用资源的几种方式,并回顾一下pack URI标识引用在不同位置的资 ...