aaarrr 69 15 апреля, 2021 Опубликовано 15 апреля, 2021 · Жалоба 8 minutes ago, jcxz said: Думаю - действие её аналогично команде TRIM на SSD. Которая указывает контроллеру какие сектора можно тереть в фоновом режиме, пока они ещё не нужны. Только ACMD23 ничего не указывает, кроме потребного количества. Лет 10-15 назад пользы от неё не было никакой, вреда, впрочем, тоже нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 15 апреля, 2021 Опубликовано 15 апреля, 2021 · Жалоба 2 часа назад, GenaSPB сказал: говорим карте, что сейчас будем писать воот-такой кусок Я так понял, что это тоже подразумевает буферирование большого массива, как в предложенном ниже случае? 2 часа назад, jcxz сказал: И кто мешает сделать буфер любого желаемого размера в своём middle-ware слое? Иначе, если это делать "по факту", то никакого прироста не будет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 15 апреля, 2021 Опубликовано 15 апреля, 2021 · Жалоба 4 minutes ago, mantech said: Я так понял, что это тоже подразумевает буферирование большого массива Писать как можно большими кусками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 4 мая, 2021 Опубликовано 4 мая, 2021 · Жалоба Я с SD карточкой тоже боролся. Тоже смотрел в сторону увеличить блок данных (точнее, почему блок указан длинный, но пишется-читается все равно по 512 байт). В процессе разбора кода понял что лучше сделать модуль кеширования. В первую очередь чтобы ресурс флешки продлить - fatfs бестолково пишет некоторые сектора по многу раз в одно и то же место. В итоге немного допилил сам fatfs, ибо модулю кеширования для правильного выбора метода кеширования нужно знать какой это сектор - fat, каталога или кластер данных. Т.е. при кешировании данных модуль кеширования использует разные стратегии кеширования для кластеров, fat и каталогов. Ну и умеет буферизировать чтение и запись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 5 мая, 2021 Опубликовано 5 мая, 2021 · Жалоба 15 часов назад, jeka сказал: В процессе разбора кода понял что лучше сделать модуль кеширования. Нет, для начала лучше научится писать по 4к блоками - это куда эффективнее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 19 мая, 2021 Опубликовано 19 мая, 2021 · Жалоба On 5/5/2021 at 3:42 PM, mantech said: Нет, для начала лучше научится писать по 4к блоками - это куда эффективнее... Увы, это не так. Совсем. Во-первых, модуль кеширования как раз занимается всем этим: и группировкой секторов в блоки, и умным префетчем, и отсеканием ненужных/пустых операций, и выравниванием операций по границе. Просто увеличив размер сектора до 4к мы как минимум половину из этих проблем не решаем, ибо я детально изучал какие обращения делает fatfs на каких операциях, там много избыточных обращений, которые можно вылечить либо серьезным усложнением самого fatfs, либо на порядок более простым модулем кеширования. К тому же, размер блока SD карты обычно больше 4к, со всеми вытекающими. А при работающем кеше 4к блоки у fatfs не имеют никакого практического смысла. Еще приятный бонус кеширования - можно операции чтения-записи к fatfs делать любыми удобными кусками, хоть по 5 байт, можно бустро и часто открывать-закрывать файлы без перечитывания цепочек fat и каталогов. Модуль кеширования всё это выстраивает и оптимизирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 53 20 мая, 2021 Опубликовано 20 мая, 2021 (изменено) · Жалоба 19 часов назад, jeka сказал: Увы, это не так. Совсем. Вам виднее, я предложил это, т.к. у меня сделать такое заняло 10 мин по времени, и в неск. раз ускорило работу с картой. Сколь у вас займет времени "модуль кеширования как раз занимается всем этим: и группировкой секторов в блоки, и умным префетчем, и отсеканием ненужных/пустых операций" - не знаю, но думаю во много раз больше, и сомневаюсь, что вы тоже получите при этом 5и кратный прирост скорости, ИМХО. 19 часов назад, jeka сказал: Модуль кеширования всё это выстраивает и оптимизирует. И еще потребует сброса кэша при откл. питания, как это было в винде с ее смартдрайвом... Изменено 20 мая, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jeka 0 25 мая, 2021 Опубликовано 25 мая, 2021 · Жалоба On 5/20/2021 at 8:36 PM, mantech said: сомневаюсь, что вы тоже получите при этом 5и кратный прирост скорости, ИМХО. Я получил без трансивера ~10(+-1)мбайт/сек записи, примерно столько же чтения. Без low-voltage трансивера это близко к пределу пропускной способности интерфейса sd карты. Загрузка cpu H743 порядка 10% получилась (реально меньше, ибо в загрузку еще получение по интерфейсу и предобработка данных включается). Без кеширования скорость записи была порядка 2-3МБ, но главная неприятность в том что при записи были регулярные фризы на время около 1 секунды (предполагаю, контроллер sd карты при многократной перезаписи одной области искусственно вносит задержку чтоб не истратить ресурс быстро). При кешировании ни одного фриза не заметил. В моем случае при потоковой записи такие фризы - очень неприятная штука. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться