Запись двоичных файлов (~ 12 МБ) последовательно очень быстро (30 в секунду) из программы на C ++ в Linux

Я пытаюсь записать необработанные видеокадры (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.

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

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]