Специальные алгоритмы для работы с SSD-дисками

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

При модификации нескольких байт внутри некоторого блока контроллер выполняет следующую последовательность действий:

- считывает блок, содержащий модифицируемый блок во внутренний буфер/кеш;

- модифицирует необходимые байты;

- выполняет стирание блока в микросхеме флэш-памяти;

- вычисляет новое местоположение блока в соответствии с требованиями алгоритма перемешивания;

- записывает блок на новое место.

 

Вот тут и сказывается оптимизация ОС для работы с HDD. При удалении файлов операционная система не производит физическую очистку секторов на диске, а только помечает файлы как удаленные, и знает, что занятое ими место можно заново использовать. Работе самого накопителя это никак не мешает и разработчиков интерфейсов этот вопрос раньше не волновал. Если такой метод удаления помогает повысить производительность при работе с HDD, то при использовании SSD становится проблемой. В SSD, как и в традиционных жестких дисках, данные все еще хранятся на диске после того, как они были удалены операционной системой. Но дело в том, что твердотельный накопитель не знает, какие из хранящихся данных являются полезными, а какие уже не нужны и вынужден все занятые блоки обрабатывать по длинному алгоритму.

Прочитать, модифицировать и снова записать на место, после очистки затронутых операцией ячеек памяти, которые с точки зрения ОС уже удалены. Следовательно, чем больше блоков на SSD содержит полезные данные, тем чаще приходится прибегать к процедуре чтение>модификация>очистка>запись, вместо прямой записи. Вот здесь пользователи SSD сталкиваются с тем, что быстродействие диска заметно снижается по мере их заполнения файлами. Накопителю просто не хватает заранее стёртых блоков. Максимум производительности демонстрируют чистые накопители, а вот в ходе их эксплуатации реальная скорость понемногу начинает снижаться.



Поговорим об алгоритме записи/удаления.

 

 

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

 

 

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

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

 






Дата добавления: 2019-02-12; просмотров: 26;


Поделитесь с друзьями:

Вы узнали что-то новое, можете расказать об этом друзьям через соц. сети вверху.

Поиск по сайту:

Введите нужный запрос и Знаток покажет, что у него есть.
Znatock.org - Знаток.Орг - 2017-2019 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.005 сек.