1

我在 Linux Fedora Core 11 机器上看到了一些 PHP 脚本的性能问题,所以我运行了一些命令来寻找瓶颈。我注意到的一件事是编写文件非常快:

[root@localhost ~]# dd if=/dev/zero of=/root/myGfile bs=1024K count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 1.0817 s, 969 MB/s

但是覆盖它需要更长的时间;

[root@localhost ~]# dd if=/dev/zero of=/root/myGfile bs=1024K count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 23.0658 s, 45.5 MB/s

这是为什么?(我可以重复这些结果。)

4

1 回答 1

0

第一次写入文件时,它会缓冲在系统内存中。

第二次写入文件时,文件被截断,由于某种原因,这会导致所有脏页都被写入磁盘。是的,这似乎很愚蠢:为什么当文件刚刚被截断为零长度时要写出文件数据?

您可以通过使第二个dd仅写入 4k 数据来证明这一点。它需要同样长的时间。

您也可以dd通过使用强制不截断conv=notrunc

于 2010-02-02T15:59:53.997 回答