Простой FTL для флешек

Материал из YourcmcWiki
Версия от 02:16, 21 мая 2013; VitaliyFilippov (обсуждение | вклад) (Новая страница: «FTL — Flash Translation Layer — «драйвер», представляющий флеш-память в виде обычного блочного уст…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

FTL — Flash Translation Layer — «драйвер», представляющий флеш-память в виде обычного блочного устройства. Служит для ускорения записи и/или выравнивания износа (wear leveling).

SSD содержат «умный» FTL; USB-флешки и карты памяти содержат «тупой» FTL. Засчёт «тупости» последнего случайная запись сводится к полной перезаписи отдельных Erase Unit’ов, и поэтому происходит ОЧЕНЬ медленно — обычно 2-3 операции в секунду.

Идея: реализовать простой FTL, пригодный к использованию поверх «тупого» флешечного, в виде драйвера на уровне ОС (модуль Linux). Назвать, например, SFTL.

Структура хранения

  • SFTL использует кластеры по 4096 байт (8 физических секторов).
  • Виртуальные адреса кластеров отображаются на физические, кластер может находиться в любом месте флешки.
  • Данные отображения каждого кластера содержат его виртуальный адрес, номер версии, магическое число (magic) и контрольную сумму, что вместе составляет 16 байт. При перезаписи кластера старая версия не удаляется — просто записывается новая с увеличенным на 1 номером версии.
  • Карты отображения перемешиваются с данными. Информация об отображении 1 кластера занимает 16 байт, следовательно, в 1 сектор (512 байт) входит информация о 32 кластерах. Совокупность 32 кластеров с данными и 1 индексного сектора называется сегментом.
  • Вся флешка состоит из сегментов. То есть, на ней чередуются последовательности по 128 кб данных и 512 байт «индекса». Следовательно, индекс занимает 1/256 всей памяти, что составляет 4 Мб на 1 Гб.

Алгоритм работы

  • При монтировании с диска читается весь индекс, то есть каждый 257-ой сектор, и все карты (физический кластер -> виртуальный кластер; виртуальный кластер -> {физический кластер, версия}) сохраняются в оперативной памяти. Произвольное чтение с флеш-памяти, будь то FTL’нутая USB-флешка или голый MTD (Memory Type Device), быстрое, следовательно, монтирование тоже происходит быстро. Минус в том, что индекс нужно держать в оперативной памяти, занимает он примерно 3 мб на каждый 1 гб памяти, а это уже 192 мб на 64-гигабайтную флешку, что довольно много. То есть, применение ограничивается размером потребляемой оперативной памяти — всё как в SSD. Правда, для больших устройств можно увеличить размер кластера, скажем, до 64 кб — тогда индекс будет занимать в 16 раз меньше — всего 12 мб на 64 гб флешку. Естественно, размер блока ФС потребуется сделать таким же.
  • При чтении:
  • При записи: