Изменения

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

687 байтов добавлено, 21:25, 25 мая 2013
м
Нет описания правки
Плюсы такой идеи:
* Главный плюс — реализация ПРОСТА. Засчёт отсутствия необходимости писать код и утилиты ФС. А то, блин, '''ни для одной''' (!!!) из вышеперечисленных ФС, в том числе и для наиболее свежей F2FS, например, нет fsck! Типа они все такие лог-структурированные и сбое-устойчивые. Хотя для F2FS обещают, что fsck когда-то будет.
* Поверх транслированного устройства можно использовать любую обычную файловую систему. Или даже не файловую систему, а, например, raw tablespace для СУБД. Хотя это может потребовать дополнительных фич — например, барьеров.
* В принципе, с небольшими изменениями можно использовать почти одну и ту же реализацию FTL для MTD и для USB-флешек.
* Если захочется, можно относительно несложно реализовать снимки ФС, аналогично LVM’ской реализации — патчи в код ФС, позволяющие приостановить запись и в заданный момент времени получить консистентное состояние записанных данных и метаданных, в коде ядра уже есть.
* Это, в некотором смысле, «велосипедик», частично повторяющий, например, функционал самсунговской F2FS. Частично повторяет и функционал других лог-структурированных ФС, но их можно не рассматривать — они сделаны исключительно под MTD и на блочных девайсах не работают.
* Хранение карт отображения ниже уровня ФС приводит к дополнительным накладным расходам — тратится часть места на устройстве и используется дополнительная оперативная память. Частично это решается большим размером блока, но большой размер блока ведёт к большим накладным расходам на хранение мелких файлов и не поддерживается почти ни одной Linux ФС.
* Очень Аналогично SSD, очень желательно реализовать TRIM и очень желательно, чтобы ФС, гоняемая поверх SFTL, его поддерживала. Хотя это, возможно, и не проблема вовсе — многие ФС в Linux, в том числе ext4, xfs и даже VFAT, его поддерживают, а что ещё нужно джентльмену?* Сложнее реализовать прозрачное сжатие — оно требует, чтобы при выделении блоков ФС понимала, сколько на устройстве реально осталось свободного места. С другой стороны, если код ФС запатчить- в принципе, можно реализовать и сжатие.
== Типичная скорость работы флешек ==
 
Детальное описание внутреннего устройства флешек и карточек памяти есть здесь: https://wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey
 
https://github.com/ClydeProjects/OpenSSD/blob/clyde-dev/ftl_dac/ftl.c
 
http://www.openssd-project.org/wiki/Team_Sirius_:_FeGC
* Скорость случайного чтения любыми блоками идентична скорости последовательного чтения. То есть, случайное чтение '''быстрое'''.
== Дополнительная идея: сжатие ==
 
== Ссылки ==
 
* Детальное описание внутреннего устройства флешек и карточек памяти есть здесь: https://wiki.linaro.org/WorkingGroups/KernelArchived/Projects/FlashCardSurvey
* Несколько реализаций FTL для MTD есть в проекте OpenSSD, см. например https://github.com/ClydeProjects/OpenSSD/blob/clyde-dev/ftl_dac/ftl.c
* Есть куча статей и идей по алгоритмам распределения пространства и сборки мусора на SSD. См. например http://www.openssd-project.org/wiki/Team_Sirius_:_FeGC и разные статьи в гугле.