1、安装必要的工具

确保系统上已经安装了必要的工具,hdparmfio。使用以下命令来安装它们:

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、执行fiodd测试结果如下:

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)并重新运行测试。修改配置文件以执行随机读写测试的步骤如下:

  1. 打开disk_test.fio配置文件:

    sudo vim /opt/disk_test.fio
  2. 修改配置文件的内容,将测试模式更改为随机读写:
    [randrw-test]
    rw=randrw
    filename=/opt/testfile
    size=5G
  • rw=randrw 表示执行随机读写测试。
  • 其余配置项保持不变,包括filename(测试文件路径)和size(测试文件大小)。
  1. 保存并退出编辑器。

  2. 现在,使用fio运行修改后的配置文件进行随机读写测试:

    sudo fio /opt/disk_test.fio

    这将执行随机读写测试并提供与随机读写性能相关的结果,包括随机读取和随机写入的IOPS、带宽和延迟等信息。

  3. 过程如下:
    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秒内完成。这些指标将帮助您了解磁盘的随机读写性能。

  4. 最后的结果如下:

    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测试结果总结如下:

    1. 测试配置

      • 测试类型:随机读写(randrw)
      • 块大小:4096字节
      • I/O引擎:psync
      • I/O深度:1
    2. 任务进度

      • 单个测试任务在一个混合读写(randrw)场景下执行。
      • 测试任务已完成,进度为100%。
      • 在测试结果中,读取任务的运行时间(run)为632135毫秒。这相当于632.135秒或约0.17小时(大约10分钟)。
    3. 读取任务性能

      • 平均读取速度:4149KiB/s(约4.05MB/s)
      • 平均读取IOPS:1037
      • 延迟范围:最小254微秒,最大338111微秒(约0.3毫秒至338毫秒)
      • 读取任务的延迟百分位数:99%的读取操作在7767微秒(约7.8毫秒)以下完成。
    4. 写入任务性能

      • 平均写入速度:4145KiB/s(约4.05MB/s)
      • 平均写入IOPS:1036
      • 延迟范围:最小1367纳秒,最大116379纳秒(约1.4微秒至116毫秒)
      • 写入任务的延迟百分位数:99%的写入操作在14144纳秒(约0.01毫秒)以下完成。
    5. CPU利用率

      • 用户态CPU利用率:0.24%
      • 内核态CPU利用率:1.74%
    6. I/O深度

      • 100%的I/O操作深度为1。
    7. 磁盘统计

      • 磁盘dm-0vda的统计信息,包括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测试磁盘读写性能的更多相关文章

  1. Linux如何查看与测试磁盘IO性能

    1. 查看磁盘 IO 性能 1.1 top 命令 top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 ...

  2. Linux测试硬盘读性能的常用工具-hdparm和dd俩搭档

    Linux测试硬盘读性能的常用工具-hdparm和dd俩搭档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.hparm        # 它用来在基于 Linux的系统上获取或 ...

  3. [记录]FIO测试磁盘iops性能

    FIO测试磁盘iops性能 1.SATA和SAS盘原生IOPS如下: 2.RAID磁盘阵列对应的写惩罚级别: 3.计算功能性IOPS公式如下: 功能性 IOPS=(((总原生 IOPS×写 %))/( ...

  4. 【Linux】磁盘读写 测试

    一.如何查看当前磁盘的IO使用情况 使用命令:iotop Total DISK READ: 3.89 K/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DI ...

  5. Linux 下测试磁盘读写 I/O 速度的方法汇总

    在分布式异构存储系统中,我们经常会需要测量获取不同节点中硬盘/磁盘的读写 I/O 速度,下面是 Linux 系统下一些常用测试方法(之后不定期更新): 1.使用 hdparm 命令这是一个是用来获取A ...

  6. DD测磁盘读写性能

    1.测试磁盘的纯写入性能 dd if=/dev/zero of=/file [oracle@11g ~]$ touch ddTest[oracle@11g ~]$ time dd if=/dev/ze ...

  7. Linux查看磁盘读写

    ---------- 查看磁盘读写---------iostat -k 1 SQL> ho iostatLinux 2.6.32-279.el6.x86_64 (server-92)  08/1 ...

  8. linux磁盘读写性能优化

    在LINUX系统中,如果有大量读请求,默认的请求队列或许应付不过来,我们可以 动态调整请求队列数来提高效率,默认的请求队列数存放在/sys/block/xvda/queue/nr_requests 文 ...

  9. Centos 检查磁盘读写性能

    启动Tomcat发现deploy war的速度明显变慢, 怀疑磁盘出问题 测试写入 [tomcat@localhost ~]$ dd if=/dev/zero of=kwxgd bs=64k coun ...

  10. iometer测试磁盘IO性能

    of Outstanding I/Os per target – 被选中worker的每个磁盘一次所允许的未处理的异步I/O的数量.模拟测试多个应用向 IO 请求读写,默认是 1.通常不用这个参数,除 ...

随机推荐

  1. JDK21来了!附重要更新说明

    JDK21 计划23年9月19日正式发布,虽然一直以来都是"版本随便出,换 8 算我输",但这么多年这么多版本的折腾,如果说之前的 LTS版本JDK17你还觉得不香,那 JDK21 ...

  2. SpringCloud搭建保姆级教程

    一.搭建服务注册与发现中⼼ 使⽤Spring Cloud Netflix 中的 Eureka 搭建服务注册与发现中⼼ 1.创建SpringBoot应用添加依赖 1.spring web 2.eurek ...

  3. Solution Set -「CF 1539」

    我是傻逼. 「CF 1539A」Contest Start Link. 答案是 \(\sum_{i=1}^{n-1}\min\{i,\lfloor\frac{t}{x}\rfloor\}\),等差数列 ...

  4. Solution -「YunoOI 2007」rfplca

    Description Link. Given is a rooted tree with the \(\sf1\)-th node as the root. The tree will be giv ...

  5. Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘

    写在前面 Python中有许多有趣和强大的模块,其中一个非常有趣的模块就是pynupt.pynupt是基于pynput模块的一个封装,用于控制鼠标和键盘.它可以实现自动化操作和游戏外挂等功能. 本文将 ...

  6. JS逆向实战23 某市wss URL加密+请求头+ws收发

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 本文首发链接为: http ...

  7. go语言 包依赖管理-构建完整的依赖项目:目录结构及包的调用

    目录结构: <home>/ |-- greetings/ |-- hello/1.分别进入对应目录创建以上目录结构 //bash切换到用户主目录 cd $HOMEPAHT$ //bash新 ...

  8. 关于C++拷贝控制

    通常来说,对于类内动态分配资源的类需要进行拷贝控制:要在拷贝构造函数.拷贝赋值运算符.析构函数中实现安全高效的操作来管理内存.但是资源管理并不是一个类需要定义自己的拷贝控制成员的唯一原因.C++ Pr ...

  9. Chrome Extensions v3 迁移清单

    一.前置问题 1.1为什么需要迁移 v3? Chrome 计划完全停止 v2 版本维护,后续 v2 版本将无法上架谷歌插件商店,除此之外,未来新版本 Chrome 对于 v2 版本插件的限制会越来越大 ...

  10. 基本操作:vscode-git使用和命令

      Git简介     GIt /git/ 是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到很大的项目版本管理:      通俗的说,解决的问题是: 正常开发,一个团队需要很多人来共同开发 ...