реклама на сайте
подробности

 
 
> FatFs на STM32 - кеширование FAT32?, чтобы ускорить f_open()
sonycman
сообщение Jul 5 2010, 09:55
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Всем доброго времени суток.

На девайсе под управлением STM32 есть процедура, которая создаёт сортированный по алфавиту список файлов FAT32 диска на флеш карточке.
Используется FatFs версии 0.08.
Количество файлов в списке может быть максимум 500.

На днях обратил внимание, что львиная доля времени (около 90%), затрачиваемого на сортировку, потребляется функцией файловой системы f_open().
Поковырявшись в её дебрях, обнаружил, что в свою очередь это вызвано подфункцией move_window(), которая подгружает по одному сектору из, вероятно, каталога фат.

То есть чтобы открыть файл, файловая система продирается через структуру фат до того, как найдёт запись с информацией по нужному файлу.
Считывание ведётся по одному сектору.
И так для каждого файла.

Вот и подумалось тут, а почему бы не ввести кеширование для секторов, запрашиваемых функцией move_window()?

Главный вопрос здесь - хватит ли для этого 10-20 килобайт оперативки?
К сожалению, приходится довольствоваться только внутренним ОЗУ контроллера.

Наверное, для FAT32 с большим количеством файлов кеширование 20 килобайт (40 секторов) не будет эффективным?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jul 5 2010, 10:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Jul 5 2010, 13:55) *
Наверное, для FAT32 с большим количеством файлов кеширование 20 килобайт (40 секторов) не будет эффективным?

Ну почему же? Любой кэш лучше, чем его отсутствие. Особенно если использовать чтение группы блоков для заполнения строки.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 5 2010, 10:35
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jul 5 2010, 14:04) *
Ну почему же? Любой кэш лучше, чем его отсутствие. Особенно если использовать чтение группы блоков для заполнения строки.

Хм, спасибо, тогда попробую, когда будет время.

move_window() запрашивает по одному сектору, как тут организуешь мультисекторное чтение?
Если только запросы будут идти последовательно по порядку.

В любом случае, надо сначала посмотреть, как именно идёт чтение - организовать лог и писать туда номера запрашиваемых секторов.
Тогда будет видна общая картина smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 5 2010, 10:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Jul 5 2010, 14:35) *
move_window() запрашивает по одному сектору, как тут организуешь мультисекторное чтение?

Читать сразу строку, получится своего рода упреждающее чтение. Если не увлекаться увеличением длины строки, то в мусор пойдет не так много данных.
Если интересно, могу описать систему кэширования, которую я применяю в своих проектах.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jul 5 2010, 10:52
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jul 5 2010, 14:43) *
Читать сразу строку, получится своего рода упреждающее чтение. Если не увлекаться увеличением длины строки, то в мусор пойдет не так много данных.
Если интересно, могу описать систему кэширования, которую я применяю в своих проектах.

Конечно интересно, опишите пожалуйста smile.gif

Я пока глубоко не копал в структуру FAT на диске, поэтому слабо понимаю механику работы файловой системы.

Тут ведь ещё есть нюанс с записью - надо ли будет перед выполнением записи на диск/в фат сбрасывать кеш?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sonycman   FatFs на STM32 - кеширование FAT32?   Jul 5 2010, 09:55
|- - aaarrr   Цитата(sonycman @ Jul 5 2010, 14:52) Коне...   Jul 5 2010, 12:12
- - sonycman   Спасибо! Что-то вроде этого задумывал и я, тол...   Jul 5 2010, 13:36
- - sonycman   Хм, вот все же странно как то у Чена сделан подход...   Jul 5 2010, 18:49
- - AHTOXA   Цитата(sonycman @ Jul 5 2010, 19:36) Веро...   Jul 5 2010, 19:26
|- - sonycman   Цитата(AHTOXA @ Jul 5 2010, 23:26) Нет, m...   Jul 5 2010, 19:43
|- - aaarrr   Цитата(sonycman @ Jul 5 2010, 23:43) Мне ...   Jul 5 2010, 20:21
||- - sonycman   Цитата(aaarrr @ Jul 6 2010, 00:21) Увы, в...   Jul 5 2010, 21:09
||- - aaarrr   Цитата(sonycman @ Jul 6 2010, 00:59) Одна...   Jul 5 2010, 21:12
|||- - sonycman   Цитата(aaarrr @ Jul 6 2010, 01:12) Конечн...   Jul 5 2010, 21:35
|||- - aaarrr   Цитата(sonycman @ Jul 6 2010, 01:35) В эт...   Jul 5 2010, 21:51
|||- - sonycman   Цитата(aaarrr @ Jul 6 2010, 01:51) Нет, э...   Jul 5 2010, 22:01
|||- - aaarrr   Цитата(sonycman @ Jul 6 2010, 02:01) А дл...   Jul 5 2010, 22:15
||- - AHTOXA   Цитата(sonycman @ Jul 6 2010, 03:09) А ка...   Jul 6 2010, 09:11
||- - sonycman   Цитата(AHTOXA @ Jul 6 2010, 13:11) Вы мен...   Jul 6 2010, 10:24
||- - defunct   Цитата(sonycman @ Jul 6 2010, 13:24) это ...   Jul 12 2010, 20:13
||- - aaarrr   Цитата(defunct @ Jul 13 2010, 00:13) А чт...   Jul 12 2010, 21:41
||- - sonycman   Цитата(aaarrr @ Jul 13 2010, 01:41) Подоб...   Jul 12 2010, 21:47
||- - aaarrr   Цитата(sonycman @ Jul 13 2010, 01:47) Не ...   Jul 12 2010, 22:52
||- - sonycman   Цитата(aaarrr @ Jul 13 2010, 02:52) А не ...   Jul 13 2010, 00:19
|- - AHTOXA   Цитата(sonycman @ Jul 6 2010, 01:43) А во...   Jul 5 2010, 20:56
- - sonycman   Получил результаты своего отладочного логгера, кот...   Jul 5 2010, 23:44
- - Ivan Kuznetzov   извиняюсь за оффтоп, sonycman, как у Вас объявлена...   Aug 22 2010, 20:20
|- - sonycman   Цитата(Ivan Kuznetzov @ Aug 23 2010, 00:2...   Aug 23 2010, 01:41
|- - Ivan Kuznetzov   Цитата(sonycman @ Aug 23 2010, 07:41) Име...   Aug 25 2010, 17:56
- - aaarrr   Посмотрите в map-файле, что стоит перед data[], от...   Aug 25 2010, 18:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.0142 секунд с 7
ELECTRONIX ©2004-2016