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

Вывод: похоже, что FatFs от Чана тут не при чём... До этого на этой карте тестировал другую FAT32 - Похоже, что там что-то не так. А тут всё норм.

Ещё вроде желательно, чтобы все структуры (начала копий FAT, бутзапись, корневой каталог) были выровнены по границе блока стирания карты. Тогда вроде операции записи выполняются значительно быстрее. Размер блока стирания указан в CSD.

Может на той проблемной карте было невыровнено.

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


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

Ещё вроде желательно, чтобы все структуры (начала копий FAT, бутзапись, корневой каталог) были выровнены по границе блока стирания карты. Тогда вроде операции записи выполняются значительно быстрее. Размер блока стирания указан в CSD.

Может на той проблемной карте было невыровнено.

Проверить теперь сложнее - карту уже отформатировал.... Но поковыряю FAT32, ту, что упоминал ранее, возможно найду причину... тогда напишу.

На этой карте читал регистр CSD - так кратность стирания там 1 байт (они называют это granularity).

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


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

На обычной SD 2 ГБ емкостью получал скорости записи 3.7 МБ/с, чтения 7.3 МБ/с. STM32F429, SDIO 4бит, DMA(тупое ожидание окончания записи), FatFs_R0.13. Писал файл размером 32 МБ из SDRAM и читал его же в SDRAM. Хочется большой скорости - нужно писать большими блоками, можно собирать предварительно в буфер в SDRAM, затем скопом писать. Если писать теже самые 32МБ но блоками по 512 байт, то скорость записи всего около 200КБ/с, на порядок меньше. Возможно не оптимальный драйвер, да и надо найти карточку SDHC классом повыше попроверять.

17/10/12 14:55:34->[EXT MEM: SDCARD]->Write end, speed: 3889 KB/s ( 33 554 432 (32.00 MB) in 8424 ms)

17/10/12 14:55:34->[EXT MEM: SDCARD]->Read end, speed: 7534 KB/s ( 33 554 432 (32.00 MB) in 4349 ms)

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

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


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

Если писать теже самые 32МБ но блоками по 512 байт, то скорость записи всего около 200КБ/с, на порядок меньше. Возможно не оптимальный драйвер, да и надо найти карточку SDHC классом повыше попроверять.

 

Это не проблема ФС, а карты памяти, ибо флеш не оптимизирован за запись мелкими кусками(менее 4К).

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


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

Нашел карту SDHC 4 класс 8 ГБ. Или что-то с картой не так, или с драйвером:

17/10/13 11:36:04->[EXT MEM: SDCARD]->Free: 7 833 767 936 (7.29 GB)

17/10/13 11:36:04->[EXT MEM: SDCARD]->Total: 7 846 363 136 (7.30 GB)

17/10/13 11:36:13->[EXT MEM: SDCARD]->Write end, speed: 557 KB/s ( 4 194 304 (4.00 MB) in 7345 ms)

17/10/13 11:36:13->[EXT MEM: SDCARD]->Read end, speed: 5165 KB/s ( 4 194 304 (4.00 MB) in 793 ms)

Читает/пишет без ошибок, однако скорость никуда не годится. На ПК показывает 4 МБ/с Надо поискать 10-й класс.

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


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

Это не проблема ФС, а карты памяти, ибо флеш не оптимизирован за запись мелкими кусками(менее 4К).

а там (в либе) ограничение на 512 может быть, так что (в некоторых случаях) никак

 

Изменено пользователем Огурцов

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


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

а там (в либе) ограничение на 512 может быть, так что (в некоторых случаях) никак

 

Дак ведь в настройках фатфса все прекрасно правиться :laughing:

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


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

Читает/пишет без ошибок, однако скорость никуда не годится. На ПК показывает 4 МБ/с Надо поискать 10-й класс.

Это не столько от класса карточки зависит, сколько от организации программы и от организации карточки.

Попробуйте разобраться, на что именно у Вас тратится основное время, например, при file append:

1) поиск первого кластера файла в FAT

2) прохождение по цепочке кластеров до последнего

3) чтение нужного сектора

3а) поиск свободного кластера (если нужен)

4) обновление сектора

5) запись сектора обратно

6) обновление FAT и всех копий FAT (изменение длины файла, добавка кластера в цепочку если нужно)

 

Только (5) и (6) от класса карточки и зависят, остальное- от быстродействия программы и расположения файла на карточке.

 

Тут гораздо больше чтения, чем записи. И очень часто этот бесконечный поиск-обновление FAT занимает много времени.

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

 

В общем случае помогает укорочение цепочки в FAT (использование длинного кластера), нахождение файла в начале карточки (первые кластеры) и несегментированность карточки (кластеры файла следуют друг за другом). Ну и расположение файлов в корневой директории, чтобы цепочка поиска была короче.

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


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

Да, дело было в размере кластера. Флешку не форматнул, проверял как есть. В итоге кластер был всего лишь 4КБ. Поставил кластер 64КБ, скорость выросла:

17/10/13 16:01:15->[EXT MEM: SDCARD]->Write end, speed: 3700 KB/s ( 33 554 432 (32.00 MB) in 8856 ms)

17/10/13 16:01:15->[EXT MEM: SDCARD]->Read end, speed: 7824 KB/s ( 33 554 432 (32.00 MB) in 4188 ms)

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

Для сравнения взял обычную SD на 2 гб, кластер также 64 КБ

17/10/13 16:03:52->[EXT MEM: SDCARD]->Write end, speed: 3666 KB/s ( 33 554 432 (32.00 MB) in 8937 ms)

17/10/13 16:03:52->[EXT MEM: SDCARD]->Read end, speed: 7814 KB/s ( 33 554 432 (32.00 MB) in 4193 ms)

Нашлась карта SDXC на 64 Гб, 10 класс. Кластер также выставил в 64 кбайта, стоит exFAT. Скорость уже куда интереснее:

17/10/13 16:11:20->[EXT MEM: SDCARD]->Free: 63 830 753 280 (59.44 GB)

17/10/13 16:11:20->[EXT MEM: SDCARD]->Total: 63 831 015 424 (59.44 GB)

17/10/13 16:11:27->[EXT MEM: SDCARD]->Write end, speed: 7063 KB/s ( 33 554 432 (32.00 MB) in 4639 ms)

17/10/13 16:11:27->[EXT MEM: SDCARD]->Read end, speed: 7813 KB/s ( 33 554 432 (32.00 MB) in 4194 ms)

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

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


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

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

Думаете что-то сэкономить, взяв маленькую, но быструю SD-карточку? И не надейтесь. Сейчас уже не могу по нормальной цене найти Сандиск 10-й класс 8GB, только 16GB. Хотя еще прошлой зимой весь ебей был ими завален, но зато тогда уже закончились 4GB.

Так что или нужно оптимизироваться под низкоскоростные, либо не думать об объеме.

 

Кстати, у меня из нескольких сотен SD карточек (Сандиск), после агрессивной нон-стоп работы в течении нескольких лет уже штук 8 стали в странную позу (не битые сектора, а что-то в электронике- работают только первые пару секунд и отваливаются). Вот думаю, может потому что 10-й класс и нужно что-то низкоскоростное и более дубовое брать... Проблема в том, что пока удостоверюсь в их надежности (через годик-два), их уже перестанут выпускать.

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


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

У меня интерес по поводу скорости был скорее академический, да и скорости мне такие не нужны. Флешка нужна лишь в качестве логгера, объемы данных смешные, запись редкая. Отлаживал драйвер SDIO (DMA + выравнивание и прочие грабли), прикручивал к FatFs, решил глянуть а сколько вообще скорости можно достить (мало ли, вдруг задача будет).

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


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

решил глянуть а сколько вообще скорости можно достить (мало ли, вдруг задача будет).

Проблема эту достигнутую скорость удержать.

Попробуйте повторить опыт в наиболее плохом режиме, возможном во время эксплуатации (кластер не меняется, меняется только содержимое карточки):

1) карточка почти полностью забита- то есть нужно дописывать в последние, например, 10% карточки

2) файлы сильно сегментированы и FAT целиком не вмещается в буфер RAM

3) файл "засунут" в глубину структуры папок, а не в лежит в корне диска.

 

Вложенные папки- это вообще важный момент для оптимизации времени доступа. Я как-то видел серьезные тормоза из-за непонимания программистом работы FAT - удалялись устаревшие файлы из сабдиректориев, но зато не удалялись сами директории. И бедный МК бегал по всей вложенной структуре из сотен пустых папок, чтобы дойти до последней, в которой таки и был актуальный требующий обновления файл.

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


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

вложенной структуре из сотен пустых папок, чтобы дойти до последней, в которой таки и был актуальный требующий обновления файл.

 

Жесть какая-то :crying:

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


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

В общем случае помогает укорочение цепочки в FAT (использование длинного кластера), нахождение файла в начале карточки (первые кластеры) и несегментированность карточки (кластеры файла следуют друг за другом). Ну и расположение файлов в корневой директории, чтобы цепочка поиска была короче.

У автора, судя из письма, имеется SDRAM. Простое и очевидное решение в этом случае - кеширование по чтению. Тогда описанные Вами проблемы минимизируются.

Кеширование на уровне ниже FatFS.

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


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

Дак ведь в настройках фатфса все прекрасно правиться :laughing:

предполагается, что чен чем-то думал

а вообще, соглашусь - стоит просто проверить

 

Изменено пользователем Огурцов

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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