高速I/O的驱动——如何避免数据拷贝?
许多驱动会产生内核和用户空间的数据拷贝,这在高速的接口如PCIe接入高清视频信息时效率会不会太低?显卡好像会直接把显存映射到用户空间中,然后X直接操作显存。但反过来如果是从外部读入视频数据然后由应用层进行编码压缩应该如何处理?用mmap能否实现?视频信号是分帧的,直接在应用中处理好像有些麻烦;或者每次读取时一个帧到了remap一次?不知道有没有哪位大佬做过类似的驱动,能给提供一个思路?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
完全是可以的,这个map的内存结构完全由你来操纵和设置
这个如何实现呢? 顶 顶 顶
没太明白,你是指实现驱动的mmap操作,还是在读接口中用remap操作再想办法把地址带出来?
用mmap麻烦的是,它本身容易操作静态文件,而驱动中的数据是“流动”的,随着时间在变。我能想到的是在这块空间上设计一个“标识”,不停地poll它,如果是硬件发的新帧,就使用它,然后设置为“无效”。但这样感觉挺麻烦的,不知道有没有更好的办法?
你可以看一下内核document下的packet_mmap.txt,仿照一下。通常libpcap,tcpdump就是类似这样实现的,网络数据报可是动态的了
[ 本帖最后由 dreamice 于 2009-1-10 08:48 编辑 ]