最近我正在为一个软件构建DVR http://en.wikipedia.org/wiki/Digital_video_recorder.
它将安装在插入了 2 个或更多 PCIE x4 视频编码器卡的 x86 PC 服务器上。
我们有两个独立的进程,一个必须从这些编码器卡获取编码视频数据,另一个必须将这些数据保存到硬盘驱动器。为什么我们有2个进程?一些历史问题。
那么,我们应该使用什么样的IPC呢?套接字、管道还是共享内存?
目前我们使用的是socket。
对于 Linux 上的管道,您可以使用splice
将数据从一个进程零复制移动到另一个进程的功能。例如,发送过程使用vmsplice()
with SPICE_F_GIFT
将数据送入管道,然后接收进程使用splice()
with SPLICE_F_MOVE
将数据直接从管道移至磁盘文件而不接触它。请注意,这自然存在一些对齐和长度限制。
根据编码器卡驱动程序的工作方式,您可能可以安排从驱动程序到磁盘的全程零复制 - 编码器卡 DMA 进入内存,磁盘 DMA 退出,而不需要 CPU看看它(在这种情况下你会splice()
将数据从编码器卡传入管道,然后splice()
它从管道返回到磁盘文件)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)