Запись нажатий клавиш на SSD и выравнивание износа

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

Теперь с SSD, каждый раз, когда я записываю данные, они обычно записываются в другое место каждый раз, когда выполняется обновление. Я предполагаю, что ОС / ФС просто отправляет «секторы» на диск и не сможет определить, что это просто обновления до конца файла. Таким образом, это будет означать, что, даже если обновления небольшие, они определенно не ограничат выравнивание износа SSD.

Правильно ли приведенное выше описание и следует ли рассматривать разумный объем буферизации в приложении? Сколько современных файловых систем кэшируют перед записью на SSD? Или буферизация внутри самого SSD придет на помощь? Кто-нибудь проводил анализ такого использования?

1 ответ
1

В такой ситуации ОС должна буферизовать ваши записи и сбрасывать их каждые несколько секунд или около того. Кроме того, в большинстве твердотельных накопителей реализована некоторая ограниченная форма буферизации записи, которая является «безопасной», чтобы не потерять данные в случае сбоя питания. Обратите внимание, что большинство устройств хранения и операционных систем работают блоками по 4 КБ, поэтому система не будет записывать на диск отдельные байты.

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

Если вы записываете достаточно большие блоки данных через равные промежутки времени и не перезаписываете данные в случайных местах на диске — и кажется, что вы просто записываете непрерывный поток данных журнала — вы не должны испытывать чрезмерного усиления записи или ухудшения работы спектакль. Выравнивание износа диска здесь подойдет.

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

    — Маартен Бодевес
    8 часов назад

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *