我正在尝试将原始视频帧(每个 12.4MB)实时(30fps)写入通过 sata3(6Gb/秒)接口连接的 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 一起工作。
有没有办法与文件系统进行低级别交互,从而允许以低得多的开销创建和填充大量文件?或者是否有将大量文件批量保存到磁盘的优化技巧?