Комментарий

Комментарий

hddmasters

Имея некоторый опыт работы с NAND памятью и реверс-инжинирингом алгоритма контроллеров хотел бы задать вопросы автору и внести некоторые уточнения, так как некоторые утверждения автора весьма спорные.


Когда школьник покупает флешку 32ГБайта, а обнаруживает, что на ней только 29 ГБайт, школьник еще не знает, что недостающее место не китайцы на фабрике украли, а разработчики алгоритма FTL.



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

Гигабайт — это 1 000 000 000 байт

Гибибайт — это 1 073 741 824 байт


Накопитель емкостью 32 гигабайта 32 000 000 000 байт.

32 000 000 000 / 1 073 741 824 = 29,8 гибибайта.


Рано или поздно сложится ситуация, когда у нас больше нет свободных блоков, в которые можно писать страницы.


В принципе невозможная ситуация, чтобы не было блоков для записи при наличии свободного пространства в логическом диапазоне.


Как-то немного затрагивал алгоритм работы одного из NAND контроллеров используемых в USB flash .

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


Возможны разные подходы при записи данных в зависимости от их объема.


1) в одном случае дополнение данных в блоке будет как чтение блока в буфер, внесение изменений в данные, выбор блока в банке с наименьшим числом записей и запись изменнного содержимого в новый блок, очистка старого блока.


2) при мелких дополнениях некоторые фирмвари не спешат переписывать большие объемы данных и формируют блоки-блоки апдейты, которые отдельными страницами накладывают на логическую трансляцию (т.е. точечные подмены при трансляции для страниц разных блоков)


Проблема нехватки «личного времени» контроллера актуальна и для алгоритма выравнивания возрастов. Алгоритм Wear Leveling выполняется контроллером в моменты простоя накопителя, пока нет задач для записи или чтения пользовательских данных. Если же накопитель работает в режиме «короткометражек», то времени на выравнивание износа блоков просто нет.



Конечно можно делать различные предположения о выравнивании износа и перезаписях старых блоков. Но есть много «НО», которые дадут поле для размышления.


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


Основное выравнивание износа по факту происходит при изменении данных, что достаточно неплохо видно по материалам моей публикации. Отсюда зачастую и наблюдаем, что убитые накопители с NAND flash были заполнены статичными данными, а активное изменение шло в небольшой области, что привело к тому, что не так много блоков участвовало в ротации (имеется в виду, те что включены в трансляцию и подвергались изменению и блоки вне трансляции)


А что будет со страницей, которая утратила актуальность? Данные, записанные в ней больше не нужны, но стереть ее мы не сможем, потому что стирать дозволено только блоками, а в этом же блоке могут быть еще актуальные страницы. Рано или поздно сложится ситуация, когда у нас больше нет свободных блоков, в которые можно писать страницы. Зато, в остальных блоках то там, то сям будут неактуальые страницы. Чтобы такого не случилось, в накопителях крутится функционал «сборщика мусора», который занимается тем, что отыскивает «дырявые» блоки, в которых меньше всего актуальных страниц, и переносит актуальные страницы в новый блок. Таким образом «дырявый» блок освобождается полностью от актуальных страниц и его можно стереть… А в новом же блоке все страницы остаются актуальными. Напоминает дефрагментацию.



Алгоритмы «сбора мусора» — это попытка найти блоки с малым заполнением в NAND накопителях, чтобы сформировать блоки со смешанным содержимым (блок-апдейты), которые странично или группами страниц накладываются в трансляцию. Но для реализации этого алгоритма контроллеру нужна обратная связь с ОС. т.е. при удалении должны сообщаться LBA диапазоны, которые микропрограмма оттранслирует к конкретным блокам. Технология например для SSD и SMR HDD существует и называется TRIM. А много ли вы сможете найти USB flash с поддержкой TRIM?

Наверняка, у вас были случаи, когда вы скинули на флешку какие-то фотографии со свадьбы друга, год флешка полежала в ящике стола (как вам казалось, в целости и сохранности), а потом некоторые из фоток прочитались только наполовину. Дело в том, что единожды записанная в NAND-flash память информация способна «протухнуть» со временем.


Для начала стоит отметить, что если страница не прочиталась, то в принципе контроллер не отдаст каких либо данных. При нечитаемой странице вы получите ошибку чтения и пустой буфер, а не искаженные данные в нем. Всякие половинчатые фотографии это чаще следствие ошибок файловой системы, перекрестные записи, искажение данных при в буферном ОЗУ микроконтроллера, а также различные ошибки в трансляции, когда вместо данных транслируется мусор. Но эти явления в большинстве своем не связаны с естественной деградацией самой NAND памяти и ее содержимого.


Из всего вышесказанного подведу итог: не стесняйтесь «заряжать» флешки, это благоприятно сказывается на их быстродействии и надежности. А если вас захэйтят технари, просто дайте им ссылочку на эту статью.


Процедуры перестроения трансляции при простое могут быть реализованы в некоторых микропрограмма USB flash, но исходя из вопросов выше вряд ли они такие, как себе представляет автор. Также наличие процедур оффлайн сканирования во многих микропрограммах USB flash опять же под большим вопросом. В итоге рекомендация включать USB flash с поданными на них постоянными 5В не кажется однозначно полезной.

Report Page