如何检查文件级的写入性能?

如何检查文件级的写入性能?

在一个非常相似的问题,接受的答案建议这样做:

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 视频(而不是一遍又一遍地复制同一个文件,因为这样仍然可以很好地压缩)。随机数据如果是预先生成的,效果会最好,不要动态生成,因为这样会人为地减速轉移。

相关内容