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;
推荐阅读
- 用泡沫箱来养多肉老桩?只要我们把细节做好,同样可以养出状态来
- ■养宠物真可以缓解孤独吗?一起来听听“铲屎官”的心声吧!
- 用EagleGet下载时总提示无效URL地址,无法下载,而用迅雷、QQ旋风则可以,咋回事~
- 银行的数据中心可以跳槽去互联网公司吗
- 银行高管的薪酬结构图表最新的,请问在哪里可以收集
- 医院|感染艾滋病毒初期有哪些征兆?可以自行检查吗?共用马桶会传染吗
- 电动车第一线|电动车配多大的电池,可以跑100公里以上?师傅告诉你真实答案!
- 有啥方法,网站,项目可以自己练习计算广告学
- 学图像处理有哪些不错的书推荐
- 宝马7系|可以说,这款数字化高尔夫,让人看到了未来大众所有车型的样子