Перейти к содержанию
    

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

8 minutes ago, jcxz said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, mantech said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/5/2021 at 3:42 PM, mantech said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/20/2021 at 8:36 PM, mantech said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...