内部磁盘之间的传输速度慢,大文件

我在一台配备1.6Ghz双核CPU,4GB RAM和2x250GB 7200 SATA硬盘的机器上运行一个Ubuntu Server 11.04(amd64)(两者均为3.0Gb / s,最新格式化为全新安装)。 当我在两个驱动器之间传输相对较小的文件(〜100MB)时,我实现的传输速率(好于预期)在300-350MB /秒的范围内。 然而,传输一个500MB的文件达到约50MB /秒,而1GB的文件达到约25MB /秒。

这里有一些我运行的testing显示了这种行为:

/disk1 $ dd if=/dev/zero of=output-small.dat bs=1M count=128 bytes (134 MB) copied, 0.388619 s, 345 MB/s /disk1 $ dd if=/dev/zero of=output-med.dat bs=1M count=500 524288000 bytes (524 MB) copied, 20.0151 s, 26.2 MB/s /disk1 $ dd if=/dev/zero of=output-large.dat bs=1M count=1000 1048576000 bytes (1.0 GB) copied, 45.7304 s, 22.9 MB/s /disk2 $ dd if=/dev/zero of=output-small.dat bs=1M count=128 134217728 bytes (134 MB) copied, 0.372266 s, 361 MB/s /disk2 $ dd if=/dev/zero of=output-med.dat bs=1M count=500 524288000 bytes (524 MB) copied, 10.0856 s, 52.0 MB/s /disk2 $ dd if=/dev/zero of=output-large.dat bs=1M count=1000 1048576000 bytes (1.0 GB) copied, 37.1851 s, 28.2 MB/s $ time cp /disk1/output-small.dat /disk2/test-small.dat real 0m0.532s user 0m0.000s sys 0m0.410s $ time cp output-med.dat /playpen/test-med.dat real 0m30.879s user 0m0.010s sys 0m3.740s $ time cp /disk1/output-large.dat /disk2/test-large.dat real 0m26.643s user 0m0.010s sys 0m3.390s 

最后,在运行命令pv < /disk1/output-large.dat > /disk2/test.dat ,我最初看到了很好的传输速度,但是速率下降到了1-10MB /秒的范围, )更高。 我知道这是不是一个特别有用的衡量磁盘性能,因为我正在通过光伏,但它是一致的性能与我的其他testing。

我有几个问题:

  • 什么可能导致我的传输速度下降与较大的文件? 它不应该增加吗?
  • 用这种设置我应该看到什么样的速度?
  • 花费(大概)等待IO(从timereal sys )的时间似乎对我来说可疑的高。 是吗?

小文件适合页caching,因此testing在磁盘上东西之前完成。 尝试添加conv = fsync选项到dd。

对于1 GB的文件,也许你遇到了回写的一些副作用,导致吞吐量低于磁盘应该能够处理的吞吐量。 您可以尝试dd选项iflag = direct和oflag = direct绕过页面caching,看看这会如何影响结果。

您可能会看到文件caching的效果。 您可以将iflag或者oflag设置为nocache,然后重新testing,这样您将看到原始的基于媒体的速度,而不是缓冲区到缓冲区的速度。