Случайные записи на диск - PullRequest
3 голосов
/ 05 августа 2011

Мне нужно выполнить произвольное обновление на месте файла.Давайте мне нужно обновить файл со смещением k1, k2, ...., kn.С точки зрения производительности, имеет ли значение, если я пишу в любом порядке, или производительность улучшается, если я пишу в порядке возрастания смещений?Более конкретно я собираюсь в буфер кучу обновлений в оперативной памяти, а затем обновить.Поэтому, когда я готов записать обновления на диск, я знаю смещение, в которое мне нужно записать.

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

Перемещение головки жесткого диска из одного цилиндра в другой - самый большой фактор снижения производительности при работе с большими файлами на вращающихся дисках. Чем дальше должна двигаться голова, тем больше удар.

Делайте записи по порядку. Это приведет к тому, что (по крайней мере, с точки зрения статистики) все сектора цилиндра будут записаны вместе (без перемещения головки), а затем головка переместится в соседний цилиндр (максимально короткое перемещение головки).

Обратите внимание, что если вы имеете дело с логическим диском с несколькими физическими дисками с резервной копией (например, RAID, NAS), проблема поиска заголовка несколько уменьшается, если имеется больше дисков, но если вы не обладаете конкретными знаниями о сопоставлении логического сектора с физическое хранилище, выполнение обновлений в порядке секторов все еще, скорее всего, минимизирует перемещения головы.

0 голосов
/ 05 августа 2011

Если вы не знаете, как ваши смещения переводятся в конкретные цилиндры / головки / сектора, я бы не беспокоился об этом.Ваш дисковый контроллер может самостоятельно переупорядочивать запросы на эффективность, и если ваш диск фрагментирован, вы не знаете, являются ли логические блоки файла последовательными или нет.

...