Как я уже писал раньше, flash-накопители (SSD или EFD), которые используются в дисковых массивах, выпускаются на базе архитектуры NAND. Ключевыми элементами накопителей являются сами чипы flash-памяти NAND, память SDRAM, которая выполняет функции кэша данных и хранилища таблиц трансляции логических адресов, а также чипы ввода-вывода, обеспечивающих одновременный доступ к данным по нескольким параллельным каналам.
Ячейки сгруппированы в страницы (pages) по 4KB (в накопителях первого поколения 73GB и 146GB) или 16KB (в накопителях 200GB и 400GB). Именно страница является атомарной единицей при обращении к SSD диску. Поэтому при записи порции данных размером меньше страницы, обязательна процедура read-modify-write при которой целая страница предварительно считывается с накопителя, в нее вносятся изменения и далее она снова записывается на SSD. Конечно, это сказывается на производительности записи.
Страницы, в свою очередь, сгруппированы в блоки (blocks) размером 256KB.
Для адресации страницы используется специальная таблица LBA->NAND. В ней каждому логическому адресу LBA ставится в соответствие физическая координата текущего местоположения данных, т. е. номера блока и страницы в нем. На рисунке ниже приведен пример адресации ячейки и записи данных. После выборки адреса блока и страницы, данные могут быть физически записаны в энергонезависимую память.
Биты готовой к записи ячейки всегда хранят значение 1 (низкий заряд). Переключение 1 в 0 является штатной операцией над индивидуальными ячейками. А вот переключение из 0 в 1 в flash NAND возможно только стиранием блока целиком. После этой операции все ячейки опять переводятся в состояние 1, а все страницы блока получают статус Erased. Первая запись данных в страницу изменяет ее статус на Valid. Любая повторная операция модификации переключает состояние страницы на Invalid, а измененная информация записывается в какую-либо другую Erased страницу, переводя ее в состояние Valid и, естественно, меняя ссылку на нее в таблице LBA->NAND.
Когда все страницы блока имеют статус Invalid, она снова очищается. Однако даже несколько страниц в состоянии Valid не позволят очистить блок, что приводит к внутренней фрагментации и не оптимальной утилизации ресурсов. Поэтому если в нескольких блоках страниц со статусом Erased уже не осталось, а количество Valid страниц стало меньше заданного уровня, содержимое этих блоков загружается в кэш, после чего все Valid данные консолидируются и вместе записываются в один из уже очищенных блоков. Ссылки на LBA перестраиваются, а освободившиеся блоки очищаются. Конечно, контроллер старается делать такую оптимизацию в периоды пониженной нагрузки.
Индивидуальная ячейка flash-памяти выдерживает ограниченное количество циклов перезаписи. Это связано с износом туннельного слоя, проводящего электроны. Ячейки SLC NAND в среднем выдерживают примерно 100 тыс. циклов стирания. Для увеличения сроков службы используются специальные технологии.
Одним из наиболее очевидных методов продления срока службы flash памяти является активное использование кэш самого накопителя. При работе с данными, в SDRAM создаются образы блоков. Внутренние контроллеры стараются объединять страницы в такие кэш-образы блоков и “сбрасывать” их на физические чипы NAND целиком в рамках единой операции. Конечно, если это не возможно, то операции записи на физический носитель могут осуществляться и постранично, но контроллер пытается избегать таких ситуаций.
Для более равномерного износа ячеек за счет оптимизации размещения и миграции данных между блоками используются технология wear-leveling. Общая сырая емкость накопителей flash- превышает адресное пространство, доступное для использования дисковыми массивами. Избыточная емкость (scratchpad), обычно составляет значительную часть общего объема. Так, scratchpad в дисках STEC 73GB составляет 43%, а в 400GB – 22%. Контроллеры накопителей имеют специальные счетчики количества циклов перезаписи ячеек и, в соответствии с этой информацией, равномерно используют все доступное дисковое пространство, при необходимости, перемещая данные в другие блоки. Необходимо заметить, что чем больше относительный объем scratchpad, тем проще найти свободное пространство для консолидации страниц.
Контроллер накопителя также следит за уровнем сигнала в используемых ячейках и, в случае каких-либо аномалий, оптимально перемещает такие блоки на новое место.
Естественно, внутренняя фрагментация накопителей flash очень сильно влияет на их производительность. Поэтому для получения релевантных результатов тестов, следует их проводить в, так называемом, стабильном состоянии (steady-state), когда все блоки, включая scratchpad, имеют записанные страницы. Максимальные результаты будут получены при операциях ввода-вывода равных размеру страницы.
Классический жесткий диск с интерфейсом Fibre Channel имеет 2 порта. Но т. к. единовременно возможно обращаться к данным, находящимся только в одной области магнитного диска, то и очередь обработки запросов всего одна. Flash накопители STEC имеют 16 независимых очередей и, соответственно, 16 Front-end каналов доступа. Выигрыш в производительности достигается за счет того, что контроллер накопителя имеет возможность параллельно выполнять в Back-end операции ввода-вывода из кэш на 16 независимых чипов NAND. В случае запросов на чтение, нагрузка на накопитель достаточно хорошо масштабируется до 25 параллельных запросов. Запись данных масштабируется до 8-10 запросов, что также является очень хорошим результатом.
При планировании размещения данных не стоит также забывать, что технологически операции чтения данных в SSD накопителях значительно быстрее записи.
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.