расхождение времени команды cp - PullRequest
0 голосов
/ 19 августа 2011

Я точно не знаю, к какой категории это добавить.

Я попытался сделать следующее с файлом 7,7 ГБ в моей системе Centos 5.5

time cp original copy

и

time cp copy copy2

Копия копии составляет примерно половину времени копии оригинала.

Я подумал, что, возможно, ОС кэширует или что-то в этом роде, поэтому я пошел в другой каталог и скопировал несколько небольших файлов и прочего, и снова вернулся, чтобы сделать копию копии, и это было еще быстрее.

Есть идеи, что здесь происходит? Кэширует ли ОС файл или что-то в этом роде?

Что заставило меня заметить эту проблему, так это то, что у меня есть код, который обрабатывает этот файл. Я хотел проверить это на двух файлах, поэтому я просто сделал копию. Затем я заметил, что исходный файл занимает больше всего времени для обработки. Какую диагностику я могу запустить на этом?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Операционная система кеширует не столько файл, сколько кеш блоков, которые он читает.

Существует несколько способов учета кэширования при запуске временных тестов. Вы можете попытаться очистить дисковые буферы ОС, выделив огромный объем памяти (для этого я обычно запускаю что-то вроде perl -e '"\0"x1024x1024x1024'); free до и после должно дать вам представление о том, сколько данных кэшируется ОС (в столбцах buffers и cached).

Или когда вы запускаете время запуска, игнорируйте системное время - это будет в первую очередь ввод-вывод - и просто наблюдайте за временем пользователя. Конечно, разные прогоны могут очень хорошо работать с разными объемами данных, поэтому можно ожидать, что будут разные объемы ввода / вывода.

Самый надежный способ - запустить тест несколько раз и использовать самое быстрое время в качестве значения для сравнения.

0 голосов
/ 19 августа 2011
sync && echo 3 > /proc/sys/vm/drop_caches
time cp original copy
sync && echo 3 > /proc/sys/vm/drop_caches
time cp copy copy2
...