Pan*_*her 523
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
gnome-disks
你还有什么想要的吗?
Tel*_*ele 122
索米宁是对的,我们应该使用某种同步;但有一个更简单的方法, 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
Run Code Online (Sandbox Code Playgroud)
Mik*_*nen 76
如果你想要准确性,你应该使用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
Run Code Online (Sandbox Code Playgroud)
大块的顺序写入速度(这应该接近您在驱动器规格中看到的数字):
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
Run Code Online (Sandbox Code Playgroud)
随机 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
Run Code Online (Sandbox Code Playgroud)
混合随机 4K 读写 QD1 与同步(这是您应该从驱动器中期望得到的最坏情况数字,通常不到规格表中列出的数字的 1%):
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
Run Code Online (Sandbox Code Playgroud)
增加--size参数以增加文件大小。根据驱动器技术和固件,使用更大的文件可能会减少您获得的数量。对于旋转介质,小文件将给出“太好”的结果,因为读取头不需要移动那么多。如果您的设备几乎是空的,使用大到几乎填满驱动器的文件将使您在每次测试中出现最坏的情况。在 SSD 的情况下,文件大小无关紧要。
但是,请注意,对于某些存储介质,文件的大小不如短时间内写入的总字节数重要. 例如,某些 SSD 具有预擦除块的显着更快的性能,或者它可能具有用作写入缓存的小 SLC 闪存区域,并且一旦 SLC 缓存已满,性能就会发生变化(例如,具有 20-50 GB SLC 缓存的三星 EVO 系列) . 再举一个例子,希捷 SMR 硬盘有大约 20 GB 的 PMR 缓存区域,具有相当高的性能,但一旦满了,直接写入 SMR 区域可能会使性能比原来降低 10%。看到这种性能下降的唯一方法是首先尽可能快地写入 20+ GB,然后立即继续进行真正的测试。当然,这一切都取决于您的工作负载:如果您的写入访问是突发的,并且有较长的延迟,允许设备清理内部缓存,则较短的测试序列将更好地反映您的真实世界性能。--io_size和--runtime参数。请注意,某些介质(例如,最便宜的闪存设备)会受到此类测试的影响,因为闪存芯片非常差,磨损得非常快。在我看来,如果任何设备差到无法处理此类测试,则无论如何都不应该使用它来保存任何有价值的数据。也就是说,不要重复大写测试 1000 次,因为所有闪存单元在写入时都会有一定程度的磨损。
此外,一些高质量的 SSD 设备可能有更智能的磨损均衡算法,其中内部 SLC 缓存有足够的智能来替换数据,如果数据仍在 SLC 缓存中时被重写。对于此类设备,如果测试文件小于设备的总 SLC 缓存,则完整测试始终仅写入 SLC 缓存,并且您获得的性能数字高于设备支持更大写入的性能。因此,对于此类设备,文件大小再次变得重要。如果您知道您的实际工作负载,最好使用您在现实生活中实际看到的文件大小进行测试。
请注意,这fio将在首次运行时创建所需的临时文件。它将填充随机数据,以避免从试图通过在将数据写入永久存储之前压缩数据来欺骗基准测试的设备获得太多好的数字。临时文件将fio-tempfile.dat在上面的示例中被调用并存储在当前工作目录中。所以你应该首先切换到你要测试的设备上挂载的目录。该fio还支持使用直接媒体作为测试目标,但我肯定建议尝试,由于一个错字可以覆盖你的整个操作系统当人们使用直接存储介质访问(例如不小心写OS设备,而不是测试设备)之前阅读手册页。
如果您有一个好的 SSD 并希望看到更高的数字,请--numjobs在上面增加。这定义了读取和写入的并发性。上面的例子都numjobs设置为 ,1所以测试是关于单线程进程的读写(可能队列深度或 QD 设置为iodepth)。高端 SSD(例如 Intel Optane 905p)即使没有增加numjobs很多也应该获得很高的数字(例如4应该足以获得最高的规格数字)但一些“企业”SSD 需要范围32-128以获得规格数字,因为内部延迟这些设备的数量更高,但整体吞吐量是疯狂的。注意增加numbjobs 设置为高值通常会增加最终的性能数字,但很少以任何方式反映现实世界的性能。
小智 60
我不推荐使用,/dev/urandom因为它是基于软件的,而且慢得像猪一样。最好在 ramdisk 上获取大量随机数据。在硬盘上随机测试无关紧要,因为每个字节都是按原样写入的(也在带有 dd 的 ssd 上)。但是如果我们用纯零数据或随机数据测试去重复的 zfs 池,就会有巨大的性能差异。
另一个观点必须是同步时间包含;所有现代文件系统都对文件操作使用缓存。
要真正测量磁盘速度而不是内存,我们必须同步文件系统以消除缓存效应。这可以通过以下方式轻松完成:
time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"
Run Code Online (Sandbox Code Playgroud)
使用该方法,您将获得输出:
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
Run Code Online (Sandbox Code Playgroud)
所以磁盘数据速率仅为 104857600 / 0.441 = 237772335 B/s --> 237MB/s
这比缓存低 100MB/s 以上。
快乐标杆,
Lar*_*ars 39
如果要实时监控磁盘读写速度,可以使用iotop工具。
这对于获取有关磁盘如何针对特定应用程序或工作负载执行的信息非常有用。输出将显示每个进程的读/写速度,以及服务器的总读/写速度,类似于top.
安装iotop:
sudo apt-get install iotop
Run Code Online (Sandbox Code Playgroud)
运行:
sudo iotop
Run Code Online (Sandbox Code Playgroud)
此工具有助于了解磁盘在特定工作负载下的性能与更一般和理论测试的对比情况。
小智 28
写入速度
$ 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
Run Code Online (Sandbox Code Playgroud)
块大小实际上相当大。您可以尝试使用较小的尺寸,例如 64k 甚至 4k。
读取速度
运行以下命令清除内存缓存
$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"
Run Code Online (Sandbox Code Playgroud)
现在读取在写测试中创建的文件:
$ 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
Run Code Online (Sandbox Code Playgroud)
小智 26
bonnie++ 是我所知道的用于 linux 的终极基准实用程序。
(我目前正在准备一个使用 bonnie++ 的 linux livecd 来测试我们基于 Windows 的机器!)
它负责缓存、同步、随机数据、磁盘上的随机位置、小尺寸更新、大更新、读取、写入等。 比较 USB 密钥、硬盘(旋转)、固态驱动器和基于 ram 的驱动器文件系统对新手来说非常有用。
我不知道它是否包含在 Ubuntu 中,但您可以轻松地从源代码编译它。
http://www.coker.com.au/bonnie++/
nyx*_*xee 15
关于如何使用 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
Run Code Online (Sandbox Code Playgroud)
更多信息:SIMPLE BONNIE++ 示例。
| 归档时间: |
|
| 查看次数: |
1047930 次 |
| 最近记录: |