问题描述
如何检查硬盘的性能(通过终端或GUI)。写入速度。读取速度。缓存大小和速度。随机速度。
最佳解决思路
终端方法
hdparm
是一个很好的开始。
sudo hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 12540 MB in 2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in 3.00 seconds = 77.98 MB/sec
sudo hdparm -v /dev/sda
也会提供信息。
dd
会给你写入速度的信息。
如果驱动器没有文件系统(并且只有此文件系统),请使用of=/dev/sda
。
否则,将其挂载到/tmp并写入,然后删除测试输出文件。
dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output
10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s
图形方法
-
转到系统 – >管理 – >磁盘工具。
-
或者,通过运行
gnome-disks
从命令行启动Gnome磁盘实用程序
-
-
在左侧窗格中选择您的硬盘。
-
现在点击右侧窗格中的“Benchmark – Measure Drive Performance”按钮。
-
带有图表的新窗口打开。您会找到两个按钮。一个是“Start Read Only Benchmark”,另一个是“Start Read /Write Benchmark”。当你点击任何一个按钮时,它就开始对硬盘进行基准测试。
如何基准磁盘I /O
有更多你想要的东西吗?
次佳解决思路
Suominen是对的,我们应该使用某种同步;但有一个更简单的方法,conv = fdatasync将完成这项工作:
dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s
第三种解决思路
我不会推荐使用/dev/urandom
,因为它基于软件并且像猪一样慢。最好在虚拟硬盘上取出大量随机数据。在硬盘上进行随机测试并不重要,因为每个字节都是按照原样写入的(同样在SSD上使用dd)。但是,如果我们使用纯零或随机数据测试重复数据删除的zfs池,则存在巨大的性能差异。
另一个观点必须是同步时间包含;所有现代文件系统都使用缓存文件操作。
要真正衡量磁盘速度而不是内存,我们必须同步文件系统以摆脱缓存效果。这可以通过以下方式轻松完成:
time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"
用这种方法你会得到输出:
sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync" ; rm testfile
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s
real 0m0.441s
user 0m0.004s
sys 0m0.124s
因此磁盘数据速率仅为104857600 /0.441 = 237772335 B /s – > 237MB /S
这比缓存低了100MB /s以上。
快乐基准测试,
第四种思路
如果要监视磁盘的读写速度real-time,可以使用iotop工具。
这对获取有关特定应用程序或任务的磁盘执行情况的确切信息很有用。输出将显示每个进程的读/写速度,以及服务器的总读/写速度,与top
非常相似。
要安装iotop:
sudo apt-get install iotop
运行它:
sudo iotop
第五种思路
bonnie ++是我对linux认识的终极基准测试工具。
(目前我正在准备一个使用bonnie ++的linux livecd来测试我们的windows-based机器!)
它处理缓存,同步,随机数据,磁盘上的随机位置,小尺寸更新,大型更新,读取,写入等。比较usbkey,硬盘(旋转),solid-state驱动器和ram-based文件系统可以非常为新手提供信息。
我不知道它是否包含在Ubuntu中,但可以轻松地从源代码编译它。
http://www.coker.com.au/bonnie++/
CORTO
第六种思路
写入速度
$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s
块大小实际上相当大。你可以尝试使用更小的尺寸,比如64k甚至4k。
阅读速度
运行以下命令清除内存缓存
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
现在阅读在写测试中创建的文件:
$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s
第七种思路
关于如何使用bonnie ++的一些提示
bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER]
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james
第八种思路
如果你想要的准确性,你应该使用fio
。它需要阅读手册(man fio
),但它会给你准确的结果。请注意,对于任何准确度,您需要准确指定要测量的内容。一些例子:
大块连续读取速度(这应该接近您在驱动器规格中看到的数字):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=2048k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
用大块顺序写入速度(这应该接近您在驱动器规格中看到的数字):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=2048k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
随机4K读取QD1(这是真正影响真实世界性能的数字,除非你知道的更好):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
混合随机4K读取和写入同步的QD1(这是您的驱动器期望的最差数字,通常为规格表中列出的数量的1-10%):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting
增加--size
参数以增加文件大小。使用更大的文件可能会减少取决于驱动器技术和固件的数量。小文件将为旋转媒体提供”too good”结果,因为读取头不需要移动那么多。如果您的设备接近空白,使用大到几乎填满驱动器的文件将会导致每次测试的最坏情况。对于SSD,文件大小无关紧要。
请注意,fio
将在首次运行时创建所需的临时文件。它会被随机数据填满,以避免在将数据写入永久存储器之前通过压缩数据来欺骗那些欺骗设备。在上面的例子中,临时文件将被称为fio-tempfile.dat
并存储在当前工作目录中。因此,您应该首先转到您要测试的设备上安装的目录。