据记录,除了最极端的情况外,似乎有两个主要方面消除了这个问题。该系统仍在开发中,尚未经过严格的折磨测试,但运行良好(触摸木头)。
最大的胜利来自使userland writer应用程序成为多线程。有时会阻塞对write()的调用:其他进程和线程仍在运行。只要我有一个线程为设备驱动程序提供服务并更新帧数和其他数据以与正在运行的其他应用程序同步,就可以在几秒钟后对数据进行缓冲和写出,而不会中断任何截止日期。我首先尝试了一个简单的乒乓双缓冲,但这还不够。小缓冲区将不堪重负,大缓冲区将导致较大的暂停,而文件系统消化了写入操作。在线程之间排队的10个1MB缓冲区池现在运行良好。
另一方面是关注物理介质的最终写入吞吐量。为此,我一直关注stat脏:/ proc / meminfo报告。如果“脏”,我有一些粗糙的现成代码可以限制编码器:爬到某个阈值之上,似乎可以正常工作。以后需要更多测试和调整。幸运的是,我有很多RAM(128M)可以玩,给了我几秒钟的时间来查看积压的积压和平稳地减少油压。
如果我发现需要采取其他措施来解决此问题,我会尽量记住弹出并更新此答案。多亏了其他回答者。