Comments 41
Публикация об анализе алгоритмов какого-либо из NAND контроллеров была в планах. А небольшой спор в комментариях даже сложно назвать подстегивающим фактором.
Если данная тематика покажется интересной читателям, то можно будет рассмотреть и другие контроллеры используемые в SSD, USB flash и картах памяти.
И нет ли каких тупо-контроллеров, без контроля износа и прочих радостей, дабы получить максимальную производительность на запись\чтение, никак не зависящую от заполнения носителя?
Кроме CD-R, DVD-R, BD-R никаких и примеров особо популярных не припоминается.
дайте много!
МНОГО, петабайтами пожалуйста
Не проблема. Во всяких embedded-устройствах типа роутеров используется память, где за износом следит сама ФС. Интерфейс подключения — SPI или что-то своё.
Только объемы там скромные, да и скорости небольшие.
Не проблема. Во всяких embedded-устройствах типа роутеров используется память, где за износом следит сама ФС. Интерфейс подключения — SPI или что-то своё.
Только объемы там скромные, да и скорости небольшие.
сами же и написали ключевой момент, который не даст возможности конкурировать подобной памяти с более емким и дешевым нандом.
Если посмотреть историю развития NOR и NAND flash памяти, то станет понятно, что и для каких ниш можно использовать. Очевидно, что пока альтернативы NAND памяти, увы, нет, которая была бы сопоставима по характеристикам в том числе и цене.
… но не смотря на все эти страхи и ужасы, в конкретных кейсах можно было получить профит если начать городить свой велосипед… Мне например бывало нужно записать очень быстрый поток данных, который в последствии считывался лишь пару раз, а потом стирания и опять запись. (сменные накопители для цифрового кино, в разных его проявлениях)
Это конечно самый простой кейс, но те-же прошивки на многих платформах делают по тупому, и ничего страшного не происходит, и в принципе с учётом того, что в IT хозяйстве бэкапы всё равно куда-то делаются, даже лютые глюки MLC можно и потерпеть, превращая её в эдакий кэш, ради скорости и произвольного доступа.
… но не смотря на все эти страхи и ужасы, в конкретных кейсах можно было получить профит если начать городить свой велосипед…
Мне кажется, на такие велосипеды уйдет столько времени, сил и денег, что в итоге будет дешевле сделать RAID из SSD-шек.
А вы пробовали PCI-E SSD? Или вам нужно ещё быстрее?
… задачи, очень близкие, но максимум что можно было купить за деньги восемь гиг SLC, или в два раза больше MLC но без каких-либо гарантий, это я про чипы говорю, готовые накопители стоили как «тот самолёт», и были слишком плохо предсказуемы, ну а любовь к кинематографу заставила меня освоиться с FPGA ибо взаимдействие с иными сенсорами была та ещё жесть, например одна большая DALSA по сути была четырьмя одинаковыми и независимыми сенсорами на одном кристалле, всё это надо было синхронно считать, склеить, подкорректировать, сжать и записать, так-что взаимодействие с MLC казалось тривиальным, а оно таковым и было в моей задаче…
Насколько я знаю, в SPI-Flash, как правило, хранится небольшой загрузчик, сжатый образ ФС (ПО прибора) и параметры устройства (эмуляция EEPROM). При старте образ разворачивается в DRAM и обмен по SPI сводится к минимуму. А обновление ПО производится достаточно редко, что-бы наплевать на пропускную способность SPI (и даже QSPI).
Тут ничего не сказано, копируется или нет. Ядро — да, копируется, а про ФС ничего не сказано.
Тут есть примеры устройств, у некоторых объем флеша равен объему ОЗУ. Я очень сомневаюсь, что в них копируется rootfs в память.
[ 0.605896] 5 tp-link partitions found on MTD device spi0.0
[ 0.611597] Creating 5 MTD partitions on "spi0.0":
[ 0.616463] 0x000000000000-0x000000020000 : "u-boot"
[ 0.622909] 0x000000020000-0x000000152dc0 : "kernel"
[ 0.629481] 0x000000152dc0-0x0000007f0000 : "rootfs"
[ 0.636128] mtd: device 2 (rootfs) set to be root filesystem
Последняя строка намекает, что раздел rootfs монтируется напрямую как корень.
Вот неполный список вопросов, на которые у вас нету ответов:
- Есть ли список bad-блоков? Если есть — как он хранится? Ппо каким критериями блоки считаются плохими?
- Есть ли объединение двух логических записей в один блок в одну физическую? Если есть — по каким критериям?
- Сколько резервных блоков участвует в ротации? Включают ли блоки, в которых никогда не было записи, в число свободных для ротации?
- По какому критерию выбираете физический блок для записи? Первый из списка? Блок с наименьшим числом ECC-ошибок? Блок с наименьшим числом счетчика записей? Зависит ли этот критерий от номера логического блока, то есть не дает ли он преимуществ для таблицы FAT?
И так далее… и так далее…
Чтобы нормально разобраться в том, дает ли алгоритм контроллера преимущества FAT, реверс-инжиниринга мало. Нужно дизассемблировать прошивку контроллера, а потом сделать мат-моделирование полученного алгоритма.
Того, что у вас сделано — хватает лишь для восстановления данных.
И только на вопросы, нужные для восстановления данных ваш анализ и отвечает. Все остальное вы даже и не пытались анализировать.
Вы снова фантазируете. Не все опубликовано.
Есть ли список bad-блоков? Если есть — как он хранится? Ппо каким критериями блоки считаются плохими?
в рамках логического банка могут существовать блоки, которые никогда не будут включены в трансляцию. В структурах транслятора. Список формируется на этапе заливки микропрограммы и первичного тестирования памяти. Может быть дополнен в зависимости от возможностей микропрограммы. С контроллером подобным SK6211 из-за одной битой страницы (которая не может хранить данные, которые можно скорректировать посредством ЕСС) будет исключаться целиком блок.
Есть ли объединение двух логических записей в один блок в одну физическую? Если есть — по каким критериям?блоки строго по 2Мб. В трансляторе указывается порядок их использования при построение логического пространства, с которым работает ОС.
Сколько резервных блоков участвует в ротации? Включают ли блоки, в которых никогда не было записи, в число свободных для ротации?
легко посчитать. Емкость каждого логического банка по 0x400 блоков. Количество включенных в трансляцию на рис. 11. Остальное это резервные, служебные и дефектные. Естественно при каждой перезаписи какой-то из блоков «перейдет» в резервные, а какой то из резервных станет, либо блоком с данными, либо блоком со структурой транслятора.
По какому критерию выбираете физический блок для записи?
согласно счетчиков количества записей в структуре транслятора.
Зависит ли этот критерий от номера логического блока, то есть не дает ли он преимуществ для таблицы FAT?в микропрограмме SK6211, нет даже намека на анализ данных передаваемых в пакетах. Как бы Вам не хотелось бы найти подтверждение Вашей фантазии, что чуть ли не все usb flash оптимизированы под FAT, но увы анализом это не подкрепляется.
Чтобы нормально разобраться в том, дает ли алгоритм контроллера преимущества FAT, реверс-инжиниринга мало. Нужно дизассемблировать прошивку контроллера, а потом сделать мат-моделирование полученного алгоритма.
Дизассемблируйте, проверьте мои утверждения. Этот этап для меня имеет коммерческую ценность и выкладываться мной не будет.
Того, что у вас сделано — хватает лишь для восстановления данных.
чуточку больше, чем для восстановления данных.
Не все опубликовано.
Этот этап для меня имеет коммерческую ценность и выкладываться мной не будет.
Не нужны мне ваши тайны. Но то, что опубликовано — не имеет отношения к нашему спору.
Список формируется на этапе заливки микропрограммы и первичного тестирования памяти. Может быть дополнен в зависимости от возможностей микропрограммы.
Так все-таки, список хранится в ПЗУ контролера или частично во флэш? Список bad-блоков пополняется во время работы? У меня такое впечатление, что вы этот уровень не дизассемблировали и просто гадаете.
блоки строго по 2Мб. В трансляторе указывается порядок их использования при построение логического пространства, с которым работает ОС.
Вы даже вопрос не поняли. ОС делает две логические записи в 516ый и 517 сектор флэшки подряд, с интервалом 2 микросекунды. Будет ли флэшка дважды писать физическйи блок? Или сумеет объединить дев логические передачи данных по USB в одну физическую запись?
Вот как раз посекторная запись — может быть настоящей причиной сильного износа на ext2. Насколько я помню, винчестеры умеют в таких ситуациях объединять логические записи в одну физическую. А флэшка?
в микропрограмме SK6211, нет даже намека на анализ данных передаваемых в пакетах.
Не фантазируйте, номер логического блока в любом случае анализируется транслятором. Ну просто для понимания в какой физический блок и с каким смещением писать данные. Это не анализ данных, это анализ адреса данных и он все равно выполняется.
Как бы Вам не хотелось бы найти подтверждение Вашей фантазии, что чуть ли не все usb flash оптимизированы под FAT, но увы анализом это не подкрепляется.
Ну такое уж у вас качество анализа. Воспроизведите прошивку контроллера и сделайте моделирование. И вы увидите что параметры оптимизированы не под сферическую лошадь в вакууме, а под самый частый случай использования — то есть под FAT. Ибо так сделает каждый разумный инженер. А неразумные… увы, они разоряются.
Пока что вы меня убедили лишь в том, что «в подавляющем случае они не занимаются анализом данных». Но собственно этого я и не утверждал. Для оптимизации под FAT достаточно более простых вещей, чем анализ данных.
Например (и на это вы не ответили) на вышедшей с завода флэш можно держать почти все блоки в списке резервных. И это будет отлично работать именно для FAT. Например, при заполненном наполовину банке это даст 2 тысячи блоков для ротации вместо 60-70 блоков при заполненном банке.
Не нужны мне ваши тайны. Но то, что опубликовано — не имеет отношения к нашему спору.
имеет, отчасти многие выводы можно построить на основании данного анализа.
Так все-таки, список хранится в ПЗУ контролера или частично во флэш? Список bad-блоков пополняется во время работы?В трансляторе. Транслятор в блоках, которые выделены под служебные нужды.
Вы даже вопрос не поняли. ОС делает две логические записи в 516ый и 517 сектор флэшки подряд, с интервалом 2 микросекунды. Будет ли флэшка дважды писать физическйи блок? Или сумеет объединить дев логические передачи данных по USB в одну физическую запись?
Вот как раз посекторная запись — может быть настоящей причиной сильного износа на ext2. Насколько я помню, винчестеры умеют в таких ситуациях объединять логические записи в одну физическую. А флэшка?
однозначно можно сказать, что далеко не все USB flash будут обслуживать очередь команд. Чаще будет последовательное исполнение.
Не фантазируйте, номер логического блока в любом случае анализируется транслятором. Ну просто для понимания в какой физический блок и с каким смещением писать данные. Это не анализ данных, это анализ адреса данных и он все равно выполняется.
Микропрограмма USB NAND контроллера при запросе чтения/записи расчитает номер логического блока посредством деления с остатком номера LBA на размер блока. Остаток внутриблочное смещение. И для этой позиции «посмотрит» в трансляторе номер физического блока.
Трансляторы чаще выглядит по принципу:
0x0: WORD — номер физического блока в котором содержится 0 логический.
0x2: WORD — номер физического блока в котором содержится 1 логический
Естественно разрядность величин и наличие иной, кроме номера блока может иметь место. Тут уже свобода творчества разработчика, который решил или сделать много разных таблиц, или все в одной.
Ну такое уж у вас качество анализа. Воспроизведите прошивку контроллера и сделайте моделирование. И вы увидите что параметры оптимизированы не под сферическую лошадь в вакууме, а под самый частый случай использования — то есть под FAT. Ибо так сделает каждый разумный инженер. А неразумные… увы, они разоряются.
я уже Вам писал, что делать оптимизации строго под FAT неэффективное решение. Масса пользователей работает с файлами находящимися на USB flash и при редактировании из размер зачастую меняется весьма незначительно. И куда больше записей произойдет в блок с директорией и блок с файлом, при этом таблицы FAT останутся неизменными. Отсюда и направление в оптимизации паразитных нагрузок, посредством «блок апдейтов», о которых я Вам написал в другой теме.
Пока что вы меня убедили лишь в том, что «в подавляющем случае они не занимаются анализом данных». Но собственно этого я и не утверждал. Для оптимизации под FAT достаточно более простых вещей, чем анализ данных.
по факту имеем, что в подавляющем большинстве USB flash блоки с FAT таблицами располагаются с иными данными на равным правах.
Например (и на это вы не ответили) на вышедшей с завода флэш можно держать почти все блоки в списке резервных. И это будет отлично работать именно для FAT. Например, при заполненном наполовину банке это даст 2 тысячи блоков для ротации вместо 60-70 блоков при заполненном банке.
Да при изначально пустой USB flash для ротации куда большее раздолье. Но это не оптимизация под FAT — это реализация выравнивания износа, которая лучше работает при использовании FAT. До появления TRIM аналогичный механизм выравнивания износа был в SSD. C TRIM NAND контроллер более эффективно реализует механизм выравнивания износа.
однозначно можно сказать, что далеко не все USB flash будут обслуживать очередь команд. Чаще будет последовательное исполнение.
Очередь команд с выбором порядка исполнения — это сложно. А вот подождать до 0.01-10мс, не придет ли команда записи в тот же физический блок — это сильно проще.
Масса пользователей работает с файлами находящимися на USB flash и при редактировании из размер зачастую меняется весьма незначительно.
Я вам уж писал в соседнем топике, что последние 30 лет очень редко файлы перезаписываются по месту. Создает новый файл, потом идет переименование.
Да при изначально пустой USB flash для ротации куда большее раздолье. Но это не оптимизация под FAT — это реализация выравнивания износа, которая лучше работает при использовании FAT.
Да хоть
Причина, почему FAT работает лучше — найдена.она была известна и озвучивалась. Меньшее число накладных расходов (паразитных записей, нежели в случае других файловых систем).
Я вам уж писал в соседнем топике, что последние 30 лет очень редко файлы перезаписываются по месту. Создает новый файл, потом идет переименование.к сожалению не так редко, как хотелось бы.
Да хоть синхрофазотронным горшком назовите, только в ядерную печку не ставьте. Одной этой оптимизации хватает для объяснения результатов моих экспериментов.
Результат Ваших экспериментов это некоторое число зависших USB flash. Без всякого анализа Вы сделали вывод, который был удобен для Вашего понимания.
Но только без меня, пожалуйста. Хорошо?
Вы можете и дальше упорствовать, что 4 — это сильно больше, чем 4. И что оптимизация, которую вам пришлось признать — это вовсе не оптимизация. И в общем можете думать все, что вы хотите.поймите, Вы ведь при расчете количества записей даже в случае FAT умудрились ошибиться не учтя запись обновляющую FSinfo.
Но только без меня, пожалуйста. Хорошо?
будто бы я заставляю Вас спорить и плодить утверждения без подкрепления фактами..
Я лишь попросил Вас аргументированно ответить на Ваши первоначальные утверждения.
Вы конечно можете простой уйти из обеих тем, а можете признать, что некоторые Ваши слова не соответствуют действительности.
Общие соображения такие. Смысл FSinfo — это дать подсказку, какой кластер таблицы FAT читать при записи. Возьмем данные из вашего поста. «раздел 8GiB кластер 4KiB», «8MiB размер одной копии таблицы FAT32», то есть 2048 кластеров в таблице FAT и 1024 записи в одном кластере таблицы FAT32.
В рассматриваемой мной модели (разархивация или копирование множества мелких файлов на флэшку) просто нет смысла записывать FSInfo чаще, чем оно станет указывать на другой кластер FAT. То есть 1 запись FSuinfo на мелких 1024 файла (4096 дисковых операций). Таким образом, имеем 4097 операций записи вместо 4096, то есть записью FSinfo можно пренеберечь. Вдобавок даже эта запись может кэшироваться.
Ну и ещё одна запись FSInfo — при завершении работы. Собственно это отгадка того эффекта, о котором писал Am0ralist.
Все это не так для фотоаппарата, работающего по модели включили, записали фото и выключили. Вот у фотика в таком режиме — действительно будет 5 записей на диск.
============================
Какие факты вам нужны? Можно конкретно? Про то, что разные RK05F были несовместимы по юстировке? Или про что? про то, что у меня читается разделы ext3 и ext4?
Вы напишите, какие факты вам подтвердить — я подтвержу.
При растаривании корневой файловой системы линукса у нас гибнет больше половины USB-флэшек. А вот MicroSD 1.1 — не гибнут. Это экспериментальный факт. Можете его проверить. Структура диска — вначале FAT, в конце — гигабайт на корневую систему с множеством мелких файлов.
Единственный тонкий момент — и там и там я использовал ext3, а из наших с вами обсуждений вышло, что ext3 — намного хуже, чем ext2 или FAT.
Со своей стороны, я ещё раз прошу объяснить, почему вы считаете, что 4 записи на файл на ext2 — это большая нагрузка, чем те же 4 записи на файл на FAT. Возможно, что дело в меньшем размере кластера на ext2, но явно не в том. что 4 больше, чем 4. :-)
Пока что мы с вами нашли оптимизацию (особенность алгоритма), дающую преимущества FAT. Речь о том, что никогда не писавшиеся блоки считаются резервными и участвуют в замене. А таких блоков — сильно больше на FAT, чем на ext2.
В целом оптимизация на FAT происходит из-за того, что все алгоритмы моделируются для типичных условий использования. А это в 99.5% — означает FAT.
А я исхожу из того, что все моделирование для USB-флэш идет для типичного случая, то есть для FAT (99.5% использования).
А если мы моделируем и настраиваем алгоритм для каких-то условий, то волей не волей он оказывается оптимизирован именно для этих условий.
Это принципиальное отличие между HDD и USB-флэш. Многие тесты HDD идут без учета файловой системы. А вот тесты USB-флэш — основаны на файловой системе.
Если хотите опровергнуть — то приведите пример программы для тестирования USB-флэш, которая не использовала бы файловую систему.
Мне даже неудобно как-то вклиниваться в эти высокие материи ваших споров...
Однако спрошу. Правильно ли понял что блок 2 мб и пишется он ВСЕГДА по 2 мб не зависимо от фактического размера данных и при любом обновлении атрибутов? Просто это кажется много.
А каковы размеры блока в SSD? Таи запись оптимизированее? МОжно ли размер простыми методами узнать? Имеет ли смысл менять кластер на размер равный\приблизительный размеру блока?
(кстати я правильно понял что последний из ваших постов между двумя постами Jet239 был удален? а то будто он отвечает вам но там пусто)
Интересно было узнать как оно там.
Расскажите про подключение и работу с мк для микро-сд флешек)
Восстановление данных с флешек монолит
Очень грамотное описание, на мой взгляд! Спасибо!
очень интересно как оно устроено в «настоящих» ssd, открытой информации по этому вопросу практически нет, только какие-то общие слова.
Возможно при наличии свободного времени напишу очередную публикацию, где рассмотрю часть алгоритмов работы микропрограммы какого-либо относительно простого SSD.
Немного реверс-инжиниринга USB flash на контроллере SK6211