码农行者 码农行者
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

DeanWu

软件工程师
首页
  • Python

    • 语言特性
    • Django相关
    • Tornado
    • Celery
  • Golang

    • golang学习笔记
    • 对比python学习go
    • 模块学习
  • JavaScript

    • Javascript
  • 数据结构预算法笔记
  • ATS
  • Mongodb
  • Git
云原生
运维
垃圾佬的快乐
  • 数据库
  • 机器学习
  • 杂谈
  • 面试
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Linux 下 磁盘速度测试

    • 测试硬盘读速度:hdparm
      • 测试硬盘读写速度:dd
        • 专业的硬盘压测工具:FIO
          • a.参数说明
          • b.4K 随机写,队列深度为1,10g的数据,测试线程数为1,测试时间 60s
          • c.测试 1M 顺序读,队列深度为1,10g的数据,测试线程数为1,测试时间 60s:
          • d.结果参数解析
      • 运维
      • 常见问题记录
      jiakaxi
      2023-06-16
      目录

      Linux 下 磁盘速度测试

      原文:https://blog.csdn.net/qq_52604591/article/details/129040324

      # 测试硬盘读速度:hdparm

      硬盘在读写在过程中部分数据通过buffer和cache缓存在内存中从而提高读写速度,hdparm对两种缓存做了区分。

      cache缓存:硬盘cache的目的是提高硬盘读/写信息的速度,在硬盘进行读写工作状态下,让更多的数据存储在缓存中,以提高硬盘的访问速度。

      buffer缓存:从硬盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去硬盘中读取,这样就可以减少硬盘的读写次数,计算机对缓冲区的操作大大快于对硬盘的操作,故应用缓冲区可大大提高计算机的运行速度

      a.测试buffer缓存下硬盘的读取速度

      [root@localhost ~]# hdparm -t /dev/sda
      
      /dev/sda:
      
      Timing buffered disk reads: 1118 MB in 3.01 seconds = 371.97 MB/sec
      
      1
      2
      3
      4
      5

      b.测试cache缓存下硬盘读取速度

      [root@localhost ~]# hdparm -T /dev/sda
      
      /dev/sda:
      
      Timing buffered disk reads: 1118 MB in 3.01 seconds = 371.97 MB/sec
      
      1
      2
      3
      4
      5

      c.测试不用buffer缓存情况下,读取10g数据的速度,默认一个offset =1G速度

      [root@localhost ~]# hdparm -t --direct --offset 10 /dev/sda
      
      /dev/sda:
      
      Timing O_DIRECT disk reads (offset 10 GB): 1808 MB in 3.00 seconds = 602.32 MB/sec
      
      1
      2
      3
      4
      5

      # 测试硬盘读写速度:dd

      dd用于复制,从if读出,写到of,测试出的结果均为顺序读写速度

      if=/dev/zero不产生IO,因此可以用来测试纯写速度

      同理of=/dev/null不产生IO,可以用来测试纯读速度

      bs是每次读或写的大小,即一个块的大小,count是读写块的数量

      a.测试纯写速度,8k的块大小写125000次

      [root@localhost ~]# dd if=/dev/zero of=test bs=8k count=125000
      
      125000+0 records in
      
      125000+0 records out
      
      1024000000 bytes (1.0 GB) copied, 5.10565 s, 201 MB/s
      
      1
      2
      3
      4
      5
      6
      7

      b.测试纯读速度,8k的块大小写125000次

      [root@localhost ~]# dd if=test of=/dev/null bs=8k count=125000
      
      125000+0 records in
      
      125000+0 records out
      
      1024000000 bytes (1.0 GB) copied, 0.361756 s, 2.8 GB/s
      
      1
      2
      3
      4
      5
      6
      7

      c.上述dd命令完成前并没有让系统真正把文件写到硬盘上,dd先把数据写到操作系统“写缓存”,就完成了写操作。需要调用sync函数,把“写缓存”中的数据刷入硬盘。

      • 1、-fsync是将数据已经写入硬盘,但是是在经过缓存后最后再写入硬盘
      [root@localhost ~]# dd if=/dev/zero of=test bs=8k count=125000 conv=fsync
      
      125000+0 records in
      
      125000+0 records out
      
      1024000000 bytes (1.0 GB) copied, 5.31894 s, 193 MB/s
      
      1
      2
      3
      4
      5
      6
      7
      • 2、 -dsync 可以当成是模拟数据库插入操作,在/dev/zone中读出一条数据就立即写入硬盘,速度会很慢
      [root@localhost ~]# dd if=/dev/zero of=test bs=8k count=1250 oflag=dsync
      
      1250+0 records in
      
      1250+0 records out
      
      10240000 bytes (10 MB) copied, 1.18191 s, 8.7 MB/s
      
      1
      2
      3
      4
      5
      6
      7

      # 专业的硬盘压测工具:FIO

      利用fio进行测试时,需要将旧的硬盘先卸载掉然后格式化。或者添加一块新硬盘后格式化。如果磁盘已经挂载,执行fio会提示/dev/sdb appears mounted, and 'allow_mounted_write' isn't set. Aborting.

      umount /dev/sdb # 卸载硬盘

      mkfs.ext4 /dev/sdb # 格式化硬盘

      # a.参数说明

      filename=/dev/sdb 测试文件名称,通常选择需要测试的盘的data目录。

      direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。

      rw=randwrite 测试随机写的I/O

      rw=randrw 测试随机写和读的I/O

      bs=16k 单次io的块文件大小为16k,如不写默认为4k

      size=1g 测试文件大小为1g

      iodepth 测试的io深度

      numjobs=1 本次的测试线程数

      runtime=60 测试时间为60秒

      ioengine=psync io引擎使用pync方式

      rwmixwrite=30 在混合读写的模式下,写占30%

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

      # b.4K 随机写,队列深度为1,10g的数据,测试线程数为1,测试时间 60s

      fio -name=fiotest -filename=/dev/sdb -group_reporting -direct=1 -ioengine=libaio -iodepth=1 -size=1g -rw=randwrite -bs=4k -numjobs=1 -runtime=60

      # c.测试 1M 顺序读,队列深度为1,10g的数据,测试线程数为1,测试时间 60s:

      fio -name=fiotest -filename=/dev/vdb -group_reporting -direct=1 -ioengine=libaio -iodepth=1 -size=1g -rw=read -bs=1M -numjobs=1 -runtime=60

      # d.结果参数解析

      磁盘的吞吐量bw,这个是顺序读写主要关注的参数

      磁盘的每秒读写次数iops,这个是随机读写主要关注的参数

      io=执行了多少M的IO

      bw=平均IO带宽

      iops=IOPS

      runt=线程运行时间

      slat=提交延迟

      clat=完成延迟

      lat=响应时间

      bw=带宽

      cpu=利用率

      IO depths=io队列

      IO submit=单个IO提交要提交的IO数

      IO latencies=IO完延迟的分布

      io=总共执行了多少size的IO

      aggrb=group总带宽

      minb=最小.平均带宽.

      maxb=最大平均带宽.

      mint=group中线程的最短运行时间.

      maxt=group中线程的最长运行时间.

      ios=所有group总共执行的IO数.

      merge=总共发生的IO合并数.

      ticks=Number of ticks we kept the disk busy.

      io_queue=花费在队列上的总共时间.

      util=磁盘利用率

      #disk test speed
      上次更新: 2023/06/19, 10:24:02
      最近更新
      01
      chromebox/chromebook 刷bios步骤
      03-01
      02
      redis 集群介绍
      11-28
      03
      go语法题二
      10-09
      更多文章>
      Theme by Vdoing | Copyright © 2015-2024 DeanWu | 遵循CC 4.0 BY-SA版权协议
      • 跟随系统
      • 浅色模式
      • 深色模式
      • 阅读模式