Jump to content

    
etoja

скорость записи на uSD

Recommended Posts

8 minutes ago, jcxz said:

Думаю - действие её аналогично команде TRIM на SSD. Которая указывает контроллеру какие сектора можно тереть в фоновом режиме, пока они ещё не нужны.

Только ACMD23 ничего не указывает, кроме потребного количества. Лет 10-15 назад пользы от неё не было никакой, вреда, впрочем, тоже нет.

Share this post


Link to post
Share on other sites
2 часа назад, GenaSPB сказал:

говорим карте, что сейчас будем писать воот-такой кусок

Я так понял, что это тоже подразумевает буферирование большого массива, как в предложенном ниже случае?

 

2 часа назад, jcxz сказал:

И кто мешает сделать буфер любого желаемого размера в своём middle-ware слое?

Иначе, если это делать "по факту", то никакого прироста не будет... 

Share this post


Link to post
Share on other sites
4 minutes ago, mantech said:

Я так понял, что это тоже подразумевает буферирование большого массива

Писать как можно большими кусками. 

Share this post


Link to post
Share on other sites

Я с SD карточкой тоже боролся. Тоже смотрел в сторону увеличить блок данных (точнее, почему блок указан длинный, но пишется-читается все равно по 512 байт). В процессе разбора кода понял что лучше сделать модуль кеширования.

В первую очередь чтобы ресурс флешки продлить - fatfs бестолково пишет некоторые сектора по многу раз в одно и то же место. В итоге немного допилил сам fatfs, ибо модулю кеширования для правильного выбора метода кеширования нужно знать какой это сектор - fat, каталога или кластер данных. Т.е. при кешировании данных модуль кеширования использует разные стратегии кеширования для кластеров, fat и каталогов. Ну и умеет буферизировать чтение и запись.

Share this post


Link to post
Share on other sites
15 часов назад, jeka сказал:

В процессе разбора кода понял что лучше сделать модуль кеширования.

Нет, для начала лучше научится писать по 4к блоками - это куда эффективнее...

Share this post


Link to post
Share on other sites
On 5/5/2021 at 3:42 PM, mantech said:

Нет, для начала лучше научится писать по 4к блоками - это куда эффективнее...

Увы, это не так. Совсем. Во-первых, модуль кеширования как раз занимается всем этим: и группировкой секторов в блоки, и умным префетчем, и отсеканием ненужных/пустых операций, и выравниванием операций по границе. Просто увеличив размер сектора до 4к мы как минимум половину из этих проблем не решаем, ибо я детально изучал какие обращения делает fatfs на каких операциях, там много избыточных обращений, которые можно вылечить либо серьезным усложнением самого fatfs, либо на порядок более простым модулем кеширования. К тому же, размер блока SD карты обычно больше 4к, со всеми вытекающими. А при работающем кеше 4к блоки у fatfs не имеют никакого практического смысла.

Еще приятный бонус кеширования - можно операции чтения-записи к fatfs делать любыми удобными кусками, хоть по 5 байт, можно бустро и часто открывать-закрывать файлы без перечитывания цепочек fat и каталогов. Модуль кеширования всё это выстраивает и оптимизирует.

Share this post


Link to post
Share on other sites
19 часов назад, jeka сказал:

Увы, это не так. Совсем.

Вам виднее, я предложил это, т.к. у меня сделать такое заняло 10 мин по времени, и в неск. раз ускорило работу с картой. Сколь у вас займет времени "модуль кеширования как раз занимается всем этим: и группировкой секторов в блоки, и умным префетчем, и отсеканием ненужных/пустых операций" - не знаю, но думаю во много раз больше, и сомневаюсь, что вы тоже получите при этом 5и кратный прирост скорости, ИМХО.

19 часов назад, jeka сказал:

Модуль кеширования всё это выстраивает и оптимизирует.

И еще потребует сброса кэша при откл. питания, как это было в винде с ее смартдрайвом...

Edited by mantech

Share this post


Link to post
Share on other sites
On 5/20/2021 at 8:36 PM, mantech said:

сомневаюсь, что вы тоже получите при этом 5и кратный прирост скорости, ИМХО.

Я получил без трансивера ~10(+-1)мбайт/сек записи, примерно столько же чтения. Без low-voltage трансивера это близко к пределу пропускной способности интерфейса sd карты. Загрузка cpu H743 порядка 10% получилась (реально меньше, ибо в загрузку еще получение по интерфейсу и предобработка данных включается). Без кеширования скорость записи была порядка 2-3МБ, но главная неприятность в том что при записи были регулярные фризы на время около 1 секунды (предполагаю, контроллер sd карты при многократной перезаписи одной области искусственно вносит задержку чтоб не истратить ресурс быстро). При кешировании ни одного фриза не заметил. В моем случае при потоковой записи такие фризы - очень неприятная штука.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.