29 июн. 2012 г.

Особенности логической структуры SSD жестких дисков

На первый взгляд, SSD является стандартным блочным устройством, как, например, жесткий диск или флеш-диск USB. Однако это справедливо, только если "проводить разрез" на уровне интерфейса SATA. Если заглянуть чуть выше (на уровень драйверов операционной системы) или чуть ниже (во внутреннюю архитектуру диска), все оказывается далеко не так просто.


Страничная организация SSD.

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


Физически SSD состоят из миллионов ячеек флеш-памяти NAND. Запись в них не может производиться поштучно, а только группами (обычно по 4 Кбайт) — так называемыми страницами. Со стиранием информации дело обстоит иначе. Очистка производится блоками, состоящими из 128 страниц (512 Кбайт).
Почему это так, а не иначе — отдельная история. Она связана с технологией производства памяти, а конкретно с тем, что количество пересечений проводников строго ограничено. Поэтому конструкторы из всех зол выбрали меньшее.

Именно различие между размерами блоков LBA, чтения/записи и стирания является камнем преткновения для SSD. Для памяти NAND запись и стирание — две отдельные операции. Чтобы записать порцию информации, сначала нужно считать и кешировать весь блок стирания, очистить занимаемые ячейки, а затем записать его обратно, но уже с изменениями.

Получается, что при записи какого-то количества данных реально считывается, очищается и записывается гораздо больший объем ячеек! Этот неприятный фактор еще более усложняется тем, что часть ячеек может хранить остатки уже удаленных из файловой системы файлов. Электроника SSD сама по себе "не знает", содержимое каких ячеек уже можно удалить безвозвратно.

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