Запись файла довольно быстрая, перезапись файла занимает гораздо больше времени - PullRequest
1 голос
/ 02 февраля 2010

Я видел несколько проблем с производительностью сценария PHP на Linux Fedora Core 11 , поэтому я запускал несколько команд для поиска узкого места. Одна вещь, которую я заметил, состояла в том, что написание файла довольно быстро:

[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

Почему это? (Я могу повторить эти результаты.)

1 Ответ

0 голосов
/ 02 февраля 2010

Когда вы пишете файл в первый раз, он помещается в системную память.

Когда вы пишете файл второй раз, файл усекается, что по какой-то причине приводит к записи всех грязных страниц на диск. Да, это кажется глупым: зачем записывать данные файла, если этот файл только что обрезан до нулевой длины?

Вы можете продемонстрировать это, заставив вторую dd записывать только, скажем, 4 КБ данных. Это займет столько же времени.

Вы также можете заставить dd не обрезать, используя conv=notrunc.

...