2010-01-20 4 views
22

Какова разницей между последовательной записью и случайной записью в случае: - 1) Диск систем на базе 2) SSD [флэш-устройство] система, основаннаяразница между последовательной записью и случайной записью

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

Пожалуйста, исправьте меня, если я ошибаюсь.

ответ

59

Когда люди говорят о последовательном против случайных пишут в файл, они, как правило проводить различие между написанием без промежуточных испрашивает («последовательный»), по сравнению с образцом из-искать записи-искать записи -seek-write и т. д. («random»).

Различие очень важно в традиционных дисковых системах, где каждый поиск диска занимает около 10 мс. Последовательная запись данных на тот же диск занимает около 30 мс на МБ. Поэтому, если вы последовательно записываете 100 МБ данных на диск, это займет около 3 секунд. Но если вы делаете 100 случайных записей по 1 МБ каждый, это займет в общей сложности 4 секунды (3 секунды для собственно записи и 10 мс * 100 == 1 секунда для всех поисков).

Поскольку каждая случайная запись становится меньше, вы платите все больше и больше штрафа за поиск диска. В крайнем случае, когда вы выполняете 100 миллионов случайных 1-байтовых записей, вы все равно несете 3 секунды для всех фактических записей, но теперь у вас будет 11,57 дней стоит того делать! Настолько ясно, насколько степень вашей записи является последовательной и случайной, может действительно повлиять на время, необходимое для выполнения вашей задачи.

Ситуация немного отличается, когда дело доходит до вспышки. При использовании вспышки у вас нет физической головки диска, которую вы должны перемещать. (Это то, где затраты на 10 мс исходят из традиционного диска). Тем не менее, флеш-устройства имеют большие размеры страниц (самый маленький «типичный» размер страницы составляет около 512 байт в соответствии с wikipedia, а также размеры страниц 4K). Поэтому, если вы пишете небольшое количество байтов, Flash все еще имеет накладные расходы, так как вы должны прочитать всю страницу, изменить записанные байты и затем записать всю страницу. Я не знаю характерных чисел для вспышки с головы. Но эмпирическое правило заключается в том, что на вспышке, если каждая из ваших записей в целом сопоставима по размеру с размером страницы устройства, вы не увидите большой разницы в производительности между случайными и последовательными записями. Если каждая из ваших записей мала по сравнению с размером страницы устройства, тогда при выполнении произвольной записи вы увидите некоторые накладные расходы.

Теперь для всего вышеизложенного верно, что на прикладном уровне многое скрыто от вас. Есть слои в ядре, контроллер диска/вспышки и т. Д., Которые могут, например, вставлять неочевидные поиски в середине вашей «последовательной» записи. Но в большинстве случаев запись, которая «выглядит» последовательной на уровне приложения (без поиска, много непрерывного ввода-вывода), будет иметь производительность последовательной записи, а запись «случайный» на прикладном уровне будет иметь (как правило, хуже) произвольная запись.

Смежные вопросы