Я тестирую свой новый алгоритм на дисковых процессах. Для сравнения важно измерить точное время, которое заняла каждая [массивная] операция чтения / записи.
Кажется, что на моей виртуальной машине Linux с локальным жестким диском фактические операции записи на диск все еще продолжаются / ожидают даже после выполнения flush() (например, BufferedWriter.flush()
в java). Этот вывод сделан на основании доказательств того, что:
- Когда я запускаю
sync ; sleep 60 ; sync
, втораяsync
выполняется мгновенно. - Когда я запускаю
sync ; ./myProg ; sync
, вторая синхронизация занимает 40 секунд.
Почему вторая синхронизация занимает так много времени? Я думал, что ОС должна гарантировать согласованность, когда программа сбрасывает данные в файл, но здесь это не так. Почему Linux делает такую рискованную буферизацию на энергозависимой памяти?
Рационально ли включать время синхронизации как часть фактического времени записи? (в моей исследовательской работе)?