linux 应用层可以使用DMA进行数据传输吗

泻药,现在的一些网卡,很多都有DMA控制器,但要底层的驱动支持和开启相应的设置。
按你的意思理解,你应该是想绕过Linux系统的网络协议栈,应用层的程序直接接管和处理网络数据包,那这样,应用程序就要调用网口的驱动来收发数据,这就需要改写网卡驱动,Netmap、DPDK和PF_RING等,你可以去看看。
另外,基于UDP和TCP的机制不同,你看下在UDP分流机制上,看有没有什么文章可做或思路可寻?现很多应用程序客户端(像谷歌Chrome的QUIC),还有很多网关路由设备,都有这个方向的做法。毕竟,像网络协议栈这种涉及内核层的东西,很麻烦。

■网友
自己写代码可以实现,修改网卡驱动,直接把一个网卡的rx ring数据填入第二网卡的txring,实现不难,但是这有什么意义啊。。。
■网友
可以,你可以看看 DPDK
■网友
【linux 应用层可以使用DMA进行数据传输吗】 驱动提供应用层操作的接口即可。
1,分配物理内存接口
2,初始化dma任务队列接口
3,提交dma任务
4,select,或者poll,获取其他方式阻塞或者非阻塞的等待任务结束
5,获取任务状态

■网友
你想解决什么问题?
是想降低cpu使用率?
还是提高转发速度?
目前的网卡基本都是dma传数据的,你所说的“应用层可以使用DMA进行数据传输”,是指不经过内核态直接做数据传输?目的是什么?
如果你想的是直接收发包,而不使用内核skb,内核协议栈那一套,以提高效率,
那么dpdk和netmap可以帮助你,dpdk目前只对intel系兼容的比较好,netmap代码比较简单,可以自己diy;


    推荐阅读