我正在使用带有两个物理磁盘的软 raid 1 安装新系统。在运行一些测试时(等待初始同步完成后),我发现硬盘速度非常不一致。
我的测试非常简单:使用 cp -r 复制大约 1GB 的 jpeg,然后删除它们并检查花费了多长时间。
for i in {1..5} ; do
echo ".. start run $i"
time cp -r public public2
echo "... deleting duplicate"
time rm -rf public2
sleep 1
done
在整个测试过程中,偶尔过程似乎会短暂地“挂起”,不响应 ^C 并且(如下面的结果所示)导致数十秒的延迟,此时顶部报告“等待 I/O”在 20% 到 70% 之间,并且控制台变得迟缓,甚至没有响应。
以下是约 1GB 的 jpg 图像的结果:
copy delete
run 1 1.336s 35.929s
run 2 2.300s 50.737s
run 3 2.358s 26.562s
run 4 0.971s 23.717s
run 5 17.485s 27.074s
速度显然差别很大。我多次运行这组 5 个测试,每次都出现这种情况,尽管不一定在同一次运行中。在显示的结果中,延迟最常发生在删除期间,但这也有所不同。
稍后再进行另一次尝试,使用较小的数据集(~600MB):
copy delete
run 1 11.614s 36.403s
run 2 0.630s 0.208s
run 3 0.652s 14.891s
run 4 0.676s 0.192s
run 5 0.640s 0.213s
使用较小的集合时,延迟发生的频率会大大降低,通常会毫无延迟地通过全部 5 次运行。
再次尝试使用更大的数据集,大约 1.5GB:
copy delete
run 1 26.687s 22.336s
run 2 38.336s 22.466s
run 3 44.711s 20.473s
run 4 41.269s 22.721s
run 5 41.592s 26.499s
这里几乎每次都会发生延迟。
我以为是硬件故障,但我启动了救援提示,手动安装了一个驱动器并进行了相同的测试。这次结果完全一致,而且速度很快。
任何想法都会受到赞赏,因为我很茫然。
答案1
你有 2 GB 的 RAM?600MB 在 0.6 秒内就是 1GB/s,这是一个非常快的磁盘。系统使用后写来更快地将控制权返回给用户进程,但是当系统缓冲区不足时,用户进程必须等待数据写入。
此外,删除通常对于内核来说是一项密集操作,它不会给用户进程太多的运行机会