零拷贝报文捕获要解决的几个问题,和现有的实现方法

来源:互联网 发布:知乎 厦门长庚医院 编辑:程序博客网 时间:2024/05/21 19:48

零拷贝驱动,要解决几个问题。

一个是跨内核和用户空间的内存管理,一个是跨内核和用户空间的同步。最后是接口的易用性。

1.用户空间难以直接访问内核的内存。报文进来放到哪里,在用户空间我们是不知道的。
2.同步问题,报文进来用什么方式通知用户空间,系统调用?信号?还是什么?
3.如何提供一个用户透明的接口?

现在主流的实现方法有下面几种,

1.ntzc

2.UIO-IXGBE

3.PF_RING dna

4.Netmap


ntzc是sempian开发的一套零拷贝驱动。它通过CAS原子操作实现了多读多写的原子队列。利用这个原子队列来解决内核空间和用户空间的同步问题。内存管理通过分配一大块内存由自己管理,并映射到用户空间实现。实现了一个和内核协议栈sk_buff兼容的su_buff结构。网卡驱动所有对sk_buff的操作替换为对su_buff的操作,以此来接管协议栈对报文的控制。包括内存分配等一系列任务。

这套解决方案用CAS省去了系统调用的开销,用兼容的结构管理报文。可以做到较高的效率和驱动的复用性。但是,缺点是不通过系统调用不能支持堵塞访问,还有在系统运行一段时间后,由于内存碎片,分配大量的内存变得不可行。


UIO-IXGBE 可以看作用户空间的网卡驱动实现。把网卡的寄存器空间全部映射到用户空间。并且通过UIO-DMA提供在用户空间分配和释放DMA内存的能力。以此,把整个网卡驱动都移植到了用户空间来做。这样的效率无疑是非常高的。但是,由于用户空间没有中断机制。所以,有一个内核模块提供中断管理,PCI注册等基本业务,在网卡没有报文的时候,通过一个read系统调用来堵塞用户进程。

UIO-IXGBE的解决方案面临的最大问题是驱动复用的问题。基本上要重写驱动,所有现在只支持intel82598网卡。不过由于驱动在用户空间实现,使得用户程序对网卡NIC的控制灵活度很高,可以很好利用硬件特性。


PF_RING dna的代码量较大,而且不是完全开源的。还在研究中,待续。。。

Netmap据说效率很高,不过是在freeBSD上实现的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机一直处于开机状态怎么办 vivo手机进水开不了机怎么办 魅蓝s6锁了怎么办 pos机刷卡刷多了怎么办 红米5a开不机怎么办 魅族双亲要密码怎么办? 苹果wi-fi网速慢怎么办 腾达宽带用户名密码忘了怎么办 无线网秘密忘了怎么办 wan口设置已断开怎么办 中兴手机忘记解锁图案怎么办 u盘显示参数错误怎么办 硬盘vc加密密码忘了怎么办 软件文件移动到其他盘打不开怎么办 u盘无法复制文件怎么办 u盘大文件不能拷怎么办 abc看图打印不了怎么办 百度云大文件慢怎么办 手机视频缩略图加载失败怎么办 电脑突然卡住不动了怎么办 word文档被锁住了怎么办 手机qq磁盘已满怎么办 不小心格式化了硬盘怎么办 移动硬盘插上显示要格式化怎么办 微信网络特别慢怎么办 苹果六网速太慢怎么办 小米手机wifi网速慢怎么办 苹果8蜂窝上网慢怎么办 苹果6s4g网速慢怎么办 苹果7上网速度慢怎么办 银行转账到别人账户怎么办 银行转账转错账户怎么办 人已故欠的公款怎么办 论文抄了表格数据怎么办 电子转账转错了怎么办 苹果手机付款方式有问题怎么办 合同中付款方式错怎么办? 优步付款方式无效怎么办 工程付款方式变更没有合同怎么办 银行账号被锁了怎么办? 街电押金退不了怎么办