在一个非常相似的问题,接受的答案建议这样做:
dd if=/dev/zero of=/tmp/output bs=8k count=10k;
来测量硬盘的写入速度。
我的测试没有结果。我有一个基于 LVM 的软件 RAID 1 设置,带有两个普通硬盘。运行上述命令时,它给出以下结果:
10240+0 条记录输入
10240+0 条记录输出
83886080 字节 (84 MB) 已复制,0.0784284 秒,1.1 GB/s
并不是说我对拥有每秒可以存储 1 GB 的 RAID 阵列感到不满,但我仍然想知道:
为什么我得到的结果错误?这与缓存、RAID 或 LVM 有关吗?
如何获取实际的文件级写入性能?
答案1
您的测试文件大小非常小,只有 80MB,这没什么明显的原因。这么小的文件会使结果不太准确,而且也意味着整个操作可能由缓存满足,而无法测试真正的文件系统性能。
为了解决这个问题,我会把文件大小弄得更大,比如说几 GB。
您可能需要
sync
事后再做,然后测量整个结果。例如time 'dd if=/dev/zero of=/tmp/output bs=1M count=2k && sync'
或其他什么。确保 /tmp 实际上不是 tmpfs,否则它会存储在内存中,而不是磁盘上。确保目标分区是磁盘分区。
在某些情况下,当磁盘介质执行其自身的数据压缩时,从 /dev/zero 复制可能会导致人为的高性能,因为一串零压缩后几乎为零。这将是 SSD 上的一个特殊问题。确保您的测试数据足够随机而不会压缩,例如 JPEG 文件或 MP4 视频(而不是一遍又一遍地复制同一个文件,因为这样仍然可以很好地压缩)。随机数据如果是预先生成的,效果会最好,不要动态生成,因为这样会人为地减速轉移。