Главная | Случайная
Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Особенности операций записи данных




Итак, как уже отмечалось, запись и чтение данных в NAND флэш-­памяти возможны страницами по 4 Кбайт, а стирание данных — только блоками по 512 Кбайт. Вообще, процесс записи информации в твердотельных накопителях сильно отличается от аналогичного процесса в НЖМД. С этим, к примеру, связано то, что производительность твердотельных накопителей меняется со временем, а скорости последовательного и выборочного доступа к флэш­-памяти отличаются друг от друга. Для того чтобы объяснить эти явления, необходимо более подробно рассмотреть процессы записи на НЖМД и твердотельный накопитель.

В случае НЖМД наименьшая единица информации, которой оперирует система управления жесткого НЖМД, это кластер, размером 4К байт. Для адресации кластеров на диске операционная система использует метод LBA (Logical Block Addressing), при котором каждый кластер имеет свой порядковый номер — целое число, начиная с нуля (то есть первый кластер имеет номер 0, второй кластер -1 и т.д.).

Преимущество метода LBA заключается в том, что операционной системе нет необходимости учитывать геометрию самого НЖМД (количество цилиндров, головок, секторов на цилиндре).

Процесс записи данных на НЖМД следующий. Если данные записываются, к примеру, в кластер LBA c определенным номером, то это означает, что они будут размещаться в определенном месте (на определенном цилиндре, дорожке и секторе) на пластине. И сколько бы раз не перезаписывался этот кластер, данные всегда будут помещаться в одно и то же физическое место на пластине, соответствующее номеру кластера LBA. Если данные записываются в LBA-кластеры с разными номерами, то это означает, что на диске они будут размещаться в разных местах, которые соответствуют номерам LBA-кластеров. Если, к примеру, требуется записать на НЖМД какой-­либо файл, то первоначально он разбивается на кластеры, каждому из которых присваивается определенный логический LBA-номер, а каждому логическому LBA-номеру соответствует жестко заданное место на диске.

Если же данные удаляются, то есть пользователь удаляет файл на уровне операционной системы, то на самом деле они не удаляются с НЖМД, а просто соответствующие данным логические LBA-адреса на уровне операционной системы помечаются как свободные. Новые данные в эти блоки могут записываться без их предварительной физической очистки.

В случае твердотельного накопителя всё совсем по-иному. Дело в том, что в этих накопителях нет однозначного соответствия между логическим номером записываемой порции данных (страницы) и ее физическим расположением во флэш­-памяти. Запись данных во флэш-­память производится страницами, а удаление — только блоками, причем для записи в уже использованную страницу ее предварительно необходимо очистить (стереть данные).

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

Для соответствия между логическими и физическими адресами (LBA-PBA mapping) предназначена специальная таблица соответствия логических и физических адресов. Эта таблица размещается в оперативной памяти контроллера твердотельного накопителя.

При получении запроса на запись контроллер твердотельного накопителя выделяет соответствующее число свободных страниц и заносит в таблицу соответствие между LBA- и PBA-адресами. Если же данные перезаписываются (то есть требуется записать данные с логическими адресами, которые уже заняты), то контроллер твердотельного накопителя выделяет следующие свободные страницы памяти, а в таблице соответствия логических и физических адресов помечает страницы, в которые эти данные были записаны ранее, как содержащие устаревшую информацию. Важно, что при этом реально страницы с устаревшими данными не перезаписываются (как в НЖМД) и не удаляются.

Важно, что контроллер твердотельного накопителя ничего об этом не знает и считает соответствующие страницы памяти занятыми. То есть, соответствующие страницы памяти не помечаются к удалению в таблице соответствия LBA- и PBA-адресов. Запись на твердотельный накопитель, в основном, происходит последовательно, поэтому существует большая разница между записью на новый твердотельный накопитель (на который данные еще не записывались) и на уже заполненный. Отметим, что заполненный твердотельный накопитель с точки зрения пользователя может быть пустым, поскольку удаление данных с диска на уровне операционной системы еще не означает их реального удаления из флэш-­памяти.

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

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

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

Для того чтобы использовать блоки со страницами, помеченными на удаление, применяется метод переноса данных с помощью пустых и резервных блоков. Даже если пустых блоков в твердотельном накопителе уже не осталось, всегда имеется определенное количество резервных блоков, применяемых для переноса данных. Чтобы удалить страницу с устаревшими данными, прежде нужно переместить из соответствующего блока страницы с актуальными данными в резервный свободный блок и уже, потом удалить весь блок, содержащий страницы с устаревшими данными. Соответственно получаем частично занятый блок с перемещенными данными, доступный для записи, и пустой блок, который становится резервным. Однако в результате такого перемещения данных получается, что на твердотельный накопитель приходится записывать больше данных, чем требуется. К примеру, если требуется записать всего одну страницу (4К байт) и для этого нет свободного блока, то прежде нужно найти блок со страницами, помеченными на удаление. Если имеется блок, в котором помечена на удаление всего одна страница, то нужно переместить из этого блока в резервный блок остальные 127 страниц и дополнить его той одной страницей, которую нужно было записать. Затем блок со страницей, помеченной на удаление, стирается и становится резервным. Получается, что для записи всего одной страницы (4К байт) приходится записывать 128 страниц (512К байт), и это не считая того, что время тратится еще на чтение всего блока и его стирание. Именно поэтому скорость записи на новый твердотельный накопитель (на который данные никогда не записывались) и на уже заполненный твердотельный накопитель может кардинально различаться. Для того чтобы подчеркнуть принципиальную разницу в скорости записи на пустой и заполненный твердотельный накопитель, используется такой показатель, как коэффициент усиления записи (Write Amplification), который показывает, во сколько раз больше данных приходится записывать, чем реально требуется. При записи на пустой твердотельный накопитель коэффициент усиления записи равен единице, а при записи на заполненный твердотельный накопитель он всегда больше единицы — его значение может колебаться от 2 до 25.

Рассмотренный пример является несколько идеализированным — в реальности механизм перемещения данных, то есть избавления от блоков со страницами, помеченными к удалению, используется по мере заполнения диска, причем с помощью как пустых, так и резервных блоков. Эту процедуру называют сбором «мусора» (Garbage Collection).

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

Казалось бы — что мешает просто выбирать блок с максимальным количеством страниц, помеченных к удалению. Но для этого нужно просмотреть всю таблицу соответствия LBA-PBA. Это очень трудоемкая операция для контроллера, которая требует достаточно много времени. Такой способ выбора блоков на удаление не оптимален и ведет к снижению производительности, поэтому используются алгоритмы окна, когда анализируются не все блоки, а лишь некоторая их часть (окно блоков) с наибольшей вероятностью содержащая блок с максимальным количеством страниц, помеченных к удалению.

Если имеется твердотельный накопитель, емкость которого составляет 160Г байт, то реально для записи доступно 160 десятичных, а не двоичных миллиардов байт. То есть реально емкость диска, доступная для записи, составит 160000000000 байт, а не 171798691840 байт, как в двоичной интерпретации (в двоичной интерпретации 1К=1024). Разница между емкостью твердотельного накопителя в двоичной и десятичной интерпретации как раз и составляет резерв блоков для перемещения данных (резервная область). В случае твердотельного накопителя размером 160Г байт резервная область равна 11798691840 байт, или примерно 11Г байт в двоичной интерпретации. Важно отметить, что резервная область твердотельного накопителя — это не какой­-то выделенный участок блоков памяти. Резервные блоки как бы «размазаны» по всему объему твердотельного накопителя, более того — их расположение динамически меняется во времени. Любой блок памяти может быть и резервным, и доступным для записи.

Также необходимо отметить, что если при записи в какой-­то блок памяти выдается ошибка, то он помечается как «плохой» (Bad-блок) и в дальнейшем не используется. Причем объем доступного для записи места при этом не уменьшается, поскольку все «плохие» блоки автоматически помечаются как резервные. То есть, если по мере эксплуатации твердотельного накопителя в нем увеличивается количество «плохих» блоков, это автоматически означает, что уменьшается размер резервной области. Естественно, это приводит к тому, что производительность твердотельного накопителя в операциях записи начинает снижаться, поскольку от количества резервных блоков зависит скорость записи.

 







Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2020 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных