Linux和Unix使用dd命令测试磁盘I/O性能
如何在Linux上使用dd命令来测试硬盘驱动器的I/O性能?
如何检查硬盘性能,包括Linux操作系统上的读写速度?
在Linux I/O性能测试下如何使用dd命令?
您可以在Linux或类似Unix的系统上使用以下命令进行"简单的顺序I/O性能测试":
dd
命令:用于监视Linux和类Unix系统上磁盘设备的写入性能。hdparm
命令:它用于获取/设置硬盘参数,包括测试基于Linux的系统上磁盘设备的读取和缓存性能。
在本教程中,您将学习如何使用dd命令测试磁盘I/O性能。
使用dd命令来监视磁盘设备的读写性能:
- 打开一个shell提示符。
- 或通过ssh登录到远程服务器。
- 使用dd命令来测量"服务器吞吐量"(写入速度)。
dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync
- 使用dd命令测量
server delay``dd if =/dev/zero of =/tmp/test2.img bs = 512 count = 1000 oflag = dsync
dd命令有助于找出"简单的顺序I/O性能"。
了解dd命令选项
在此示例中,Im使用在Ubuntu Linux 14.04 LTS服务器上运行的RAID-10(带有SAS SSD的Adaptec 5405Z)阵列。
基本语法如下,以找出"服务器吞吐量":
dd if=/dev/input.file of=/path/to/output.file bs=block-size count=number-of-blocks oflag=dsync ## GNU dd syntax ## ########################################################## ##***[Adjust bs and count as per your needs and setup]**## ########################################################## dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync dd if=/dev/zero of=/tmp/test2.img bs=64M count=1 oflag=dsync dd if=/dev/zero of=/tmp/test3.img bs=1M count=256 conv=fdatasync dd if=/dev/zero of=/tmp/test4.img bs=8k count=10k dd if=/dev/zero of=/tmp/test4.img bs=512 count=1000 oflag=dsync ## OR alternate syntax for GNU/dd ## dd if=/dev/zero of=/tmp/testALT.img bs=1G count=1 conv=fdatasync
请注意,该测试写入了1 GB的数据,该测试的服务器吞吐量为135 MB/s。
其中:
if =/dev/zero
(if =/dev/input.file
):要从中读取数据的输入文件的名称。of=/tmp/test1.img
(of=/path/to/output.file
):要dd将input.file写入的输出文件的名称。bs=1G
(bs=block-size
) :设置要让dd使用的块的大小。 1 GB用于测试。请注意,Linux将需要1GB的可用空间。如果您的测试系统没有足够的RAM,请为bs使用较小的参数(例如128MB或64MB等)。count = 1
(count = block-of-blocks
):您想让dd读取的块数。oflag=dsync
(oflag=dsync
):对数据使用同步的I/O。不要跳过此选项。该选项消除了缓存,并为您提供了良好而准确的结果conv = fdatasyn
:同样,它告诉dd在退出之前要求一次完整的同步。这个选项等同于oflag = dsync
。
查找服务器等待时间
在此示例中,一千次写入512字节以获取RAID10服务器等待时间:
dd if=/dev/zero of=/tmp/test2.img bs=512 count=1000 oflag=dsync
输出示例:
1000+0 records in 1000+0 records out 512000 bytes (512 kB) copied, 0.60362 s, 848 kB/s
请注意,服务器的吞吐量和延迟时间也取决于服务器/应用程序的负载。
因此,我建议您在新重启的服务器上以及高峰时间运行这些测试,以更好地了解您的工作负载。
现在,您可以将这些数字与所有设备进行比较。
但是,为什么服务器的吞吐量和延迟时间如此之低?
较低的值并不表示您使用的是慢速硬件。
由于HARDWARE RAID10控制器缓存,该值可能较低。
使用hdparm命令查看缓冲和缓存的磁盘读取速度
我建议您运行2或3次以下命令,以执行设备读取的计时,以进行基准测试和比较:
### Buffered disk read test for /dev/sda ## hdparm -t /dev/sda1 ## 或者 hdparm -t /dev/sda
要为基准和比较目的执行高速缓存读取的计时,请再次运行2-3次以下命令(注意-T
选项):
## Cache read benchmark for /dev/sda ### hdparm -T /dev/sda1 ## 或者 hdparm -T /dev/sda
或结合两个测试:
hdparm -Tt /dev/sda
Linux hdparm命令测试读取和缓存磁盘性能
再次注意,由于文件系统在文件操作上进行缓存,因此您总是会看到很高的读取率。
在Linux上使用dd命令测试读取速度
为了获得准确的读取测试数据,请在运行测试之前先丢弃高速缓存,然后运行以下命令:
flush echo 3 | sudo tee /proc/sys/vm/drop_caches time dd if=/path/to/bigfile of=/dev/null bs=8k
Linux笔记本电脑示例
运行以下命令:
### Debian Laptop Throughput With Cache ## dd if=/dev/zero of=/tmp/laptop.bin bs=1G count=1 oflag=direct ### Deactivate the cache ### hdparm -W0 /dev/sda ### Debian Laptop Throughput Without Cache ## dd if=/dev/zero of=/tmp/laptop.bin bs=1G count=1 oflag=direct
Apple OS X Unix(Macbook pro)示例
GNU dd有更多选项,但是OS X/BSD和类Unix dd命令需要按以下方式运行以测试实际磁盘I/O,而不是如下所示的memory add sync选项:
## Run command 2-3 times to get good results ### time sh -c "dd if=/dev/zero of=/tmp/testfile bs=100k count=1k && sync"
输出示例:
1024+0 records in 1024+0 records out 104857600 bytes transferred in 0.165040 secs (635346520 bytes/sec) real 0m0.241s user 0m0.004s sys 0m0.113s