如何检查硬盘性能
如何检查硬盘的性能(通过终端或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磁盘实用程序
- 或者,通过运行
- 在左窗格中选择您的硬盘。
- 现在单击右窗格中的“基准 – 测量驱动器性能”按钮。
- 打开一个带有图表的新窗口。您将找到两个按钮。 一个是“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
因为它是基于软件的,并且像猪一样慢。 最好在ramdisk上获取大量随机数据。 在硬盘上测试随机无关紧要,因为每个字节都按原样写入(也在带有dd的ssd上)。 但是,如果我们使用纯零或随机数据测试重复数据删除的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。
快乐的基准,
如果要实时监视磁盘读写速度,可以使用iotop工具。
这对于获取有关磁盘如何针对特定应用程序或任务执行的确切信息非常有用。 输出将显示每个进程的读/写速度,以及服务器的总读/写速度,与top
类似。
要安装iotop:
sudo apt-get install iotop
要运行它:
sudo iotop
bonnie ++是我所知道的linux的终极基准实用程序。
(我正在准备一个linux livecd与bonnie ++一起工作,用它来测试我们基于Windows的机器!)
它负责缓存,同步,随机数据,磁盘上的随机位置,小尺寸更新,大型更新,读取,写入等。比较usbkey,硬盘(旋转),固态驱动器和基于ram的内存文件系统可以为新手提供非常丰富的信息。
我不知道它是否包含在Ubuntu中,但您可以轻松地从源代码编译它。
写速度
$ 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"
现在读取在write test中创建的文件:
$ 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
再说一点: SIMPLE BONNIE ++示例 。
如果你想要准确,你应该使用fio
。 它需要阅读手册( man fio
),但它会给你准确的结果。 请注意,对于任何准确性,您需要准确指定要测量的内容。 一些例子:
使用大块的顺序读取速度 (这应该接近您在驱动器规格中看到的数字):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting
具有大块的顺序WRITE速度 (这应该接近您在驱动器规格中看到的数字):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --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
参数以增加文件大小。 根据驱动器技术和固件,使用更大的文件可能会减少您获得的数量。 小文件会为旋转介质提供“太好”的结果,因为读头不需要移动那么多。 如果您的设备接近空,使用大到足以填满驱动器的文件将为您提供每个测试的最坏情况行为。 在SSD的情况下,文件大小并不重要。
请注意, fio
将在首次运行时创建所需的临时文件。 它将填充随机数据,以避免在将数据写入永久存储之前通过压缩数据来欺骗设备。 在上面的示例中,临时文件将被称为fio-tempfile.dat
,并存储在当前工作目录中。 因此,您应首先更改到要测试的设备上安装的目录。