Fatfs значительно замедляется в каталогах с большим количеством файлов - PullRequest
0 голосов
/ 15 октября 2018

У меня есть система регистрации данных, работающая на STM32F7, которая хранит данные с помощью FatFs от ChaN на SD-карту: http://elm -chan.org / fsw / ff / 00index_e.html

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

В начале этот цикл занимал около 100-200 мс, 2000 файловв и теперь это занимает 700 мс.Есть ли более быстрый способ хранения, чтения, удаления данных?или настройка FatFs?

edit: Извините, должен был указать, я использую FAT32 в качестве файловой системы FAT

f_opendir(&directory, "log");
while(1) {
    f_readdir(&directory, &fInfo);
    if(fInfo.fname[0] == 0) {
      //end of the directory
      break;
    }

    if(fInfo.fname[0] == '.') {
      //ignore the dot entries
      continue;
    }

    if(fInfo.fattrib & AM_DIR) {
      //its a directory (shouldnt be here), ignore it
      continue;
    }

    sprintf(path, "log/%s", fInfo.fname);
    f_open(&file, path, FA_READ);
    f_read(&file, rBuf, btr, &br);
    f_close(&file);

    //process data...

    f_unlink(path); //delete after processing
}

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете сократить цепочки каталогов, разбив ваши файлы на несколько каталогов (просто создайте новый подкаталог на каждые 500 файлов или около того).Это может значительно ускорить доступ к конкретному файлу, поскольку ходовые цепочки в среднем становятся короче.(Это просто предполагает, что вы не ищете файлы с определенным именем, а обрабатываете файлы в том порядке, в котором они были созданы - в этом случае алгоритм поиска может быть довольно простым).

Кроме этогоНадеюсь получить простую файловую систему FAT быстрее.Это главная проблема старой технологии FAT.

...