跳转至

io

一、hdparm 命令

hdparm 命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数,注意该命令**只能测试磁盘的读取**速率。

例如,测试 sda 磁盘的读取速率:

[root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol

/dev/polex_pv/varvol:
 Timing cached reads:   15588 MB in  2.00 seconds = 7803.05 MB/sec
 Timing buffered disk reads: 1128 MB in  3.01 seconds = 374.90 MB/sec

从测试结果看出,带有缓存的读取速率为:7803.05MB/s ,磁盘的实际读取速率为:374.90 MB/s 。

二、dd 命令

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

我们可以利用 dd 命令的复制功能,测试某个磁盘的 IO 性能,须要注意的是 dd 命令只能大致测出磁盘的 IO 性能,不是非常准确

测试写性能命令:

[root@server-68.2.stage.polex.io var ]$ time dd if=/dev/zero of=test.file bs=1G count=2 oflag=direct
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB) copied, 13.5487 s, 159 MB/s

real    0m13.556s
user    0m0.000s
sys    0m0.888s 

可以看到,该分区磁盘写入速率为 159M/s,其中:

  • /dev/zero 伪设备,会产生空字符流,对它不会产生 IO 。
  • if 参数用来指定 dd 命令读取的文件。
  • of 参数用来指定 dd 命令写入的文件。
  • bs 参数代表每次写入的块的大小。
  • count 参数用来指定写入的块的个数。
  • offlag=direc 参数测试 IO 时必须指定,代表直接写如磁盘,不使用 cache 。

测试读性能命令:

[root@server-68.2.stage.polex.io var ]$ dd if=test.file of=/dev/null  iflag=direct
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 4.87976 s, 440 MB/s

可以看到,该分区的读取速率为 440MB/s

三、fio 命令

fio 命令是专门测试 iops 的命令,比 dd 命令准确,fio 命令的参数很多,这里举几个例子供大家参考:

# 顺序读
fio -filename=/data/io.dbf -direct=1 -iodepth 1 -thread \
  -rw=read -ioengine=psync \
  -bs=16k -size=2G -numjobs=10 -runtime=60 \
  -group_reporting -name=test_r

# 随机写
fio -filename=/data/io.dbf -direct=1 -iodepth 1 -thread \
  -rw=randwrite -ioengine=psync \
  -bs=16k -size=2G -numjobs=10 -runtime=60 \
  -group_reporting -name=test_randw

# 顺序写
fio -filename=/data/io.dbf -direct=1 -iodepth 1 -thread \
  -rw=write -ioengine=psync \
  -bs=16k -size=2G -numjobs=10 -runtime=60 \
  -group_reporting -name=test_w

# 混合随机读写
fio -filename=/data/io.dbf -direct=1 -iodepth 1 -thread \
  -rw=randrw -rwmixread=70 -ioengine=psync \
  -bs=16k -size=2G -numjobs=10 -runtime=60 \
  -group_reporting -name=test_r_w -ioscheduler=noop