Я пытаюсь записать необработанные видеокадры (12,4 МБ каждый) в режиме реального времени (30 кадров в секунду) на карту CFast 2.0 (ext4), которая подключена через интерфейс sata3 (6 Гбит / с).
Карта оценивается в 430 МБ / с, и когда я сравниваю диск с последовательной записью в файл по 100 МБ, она, к счастью, достигает ~ 420 МБ / с.
Проблема в том, что когда я пишу файлы меньшего размера, ~ 12 МБ, пропускная способность падает до 350 МБ / с, что становится слишком медленным для моих целей.
Процедура записи файла относительно проста на основе fopen (псевдокод):
foreachframe()
{
file = fopen(frame_filename)
fwrite(file, img_header)
fwrite(file, img_data)
fclose(file)
}
Я пробовал как однопоточные, так и многопоточные, но нет большой разницы. Я предполагаю, что есть некоторые существенные накладные расходы для создания нового файла и его закрытия. В настоящее время файловая система — ext4, хотя я бы хотел, чтобы она в конечном итоге работала с exFat.
Есть ли способ взаимодействия низкого уровня с файловой системой, который позволил бы создавать и заполнять файлы большого количества с гораздо меньшими издержками? В качестве альтернативы существуют ли приемы оптимизации для пакетного сохранения большого количества файлов на диск?
Задача ещё не решена.
Других решений пока нет …