我正在尝试将实时(30fps)的原始视频帧(每帧12.4MB)写入通过sata3(6Gb / sec)接口连接的CFast 2.0(ext4)卡。
该卡的额定速率为430MB /秒,当我使用连续的100MB文件写入对驱动器进行基准测试时,它可以达到~420MB /秒。
问题是,当我写小文件时,大约12MB,吞吐量下降到大约350MB /秒,这对我来说太慢了。
文件写入程序相对简单,基于fopen(伪代码):
foreachframe()
{
file = fopen(frame_filename)
fwrite(file, img_header)
fwrite(file, img_data)
fclose(file)
}
我已尝试过单线程和多线程,但没有太大区别。我猜测创建新文件并关闭它有一些重大的开销。目前文件系统是ext4,虽然我想最终使用exFat。
有没有办法与文件系统进行低级别交互,从而可以以更低的开销创建和填充大数据文件?或者,是否存在批量保存大量文件到磁盘的优化技巧?