零拷贝报文捕获要解决的几个问题,和现有的实现方法
来源:互联网 发布:知乎 厦门长庚医院 编辑:程序博客网 时间:2024/05/21 19:48
零拷贝驱动,要解决几个问题。
一个是跨内核和用户空间的内存管理,一个是跨内核和用户空间的同步。最后是接口的易用性。
1.用户空间难以直接访问内核的内存。报文进来放到哪里,在用户空间我们是不知道的。
2.同步问题,报文进来用什么方式通知用户空间,系统调用?信号?还是什么?
3.如何提供一个用户透明的接口?
现在主流的实现方法有下面几种,
1.ntzc
2.UIO-IXGBE
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上实现的。
- 零拷贝报文捕获要解决的几个问题,和现有的实现方法
- 基于零拷贝的网络数据包捕获技术简述
- 基于零拷贝的网络数据包捕获技术简述
- 零拷贝技术的研究与实现
- 通过零拷贝实现高效的数据传输
- Linux内核追踪[4.14] 网络报文send的ZERO-COPY(零拷贝)
- 解决TCP报文粘连的方法
- 零拷贝的定义
- 最近解决的几个问题
- js 数组的深拷贝和浅拷贝三种实现深拷贝的方法
- 使用Ant要解决的几个问题
- linux网络编程八:高效的sendfile,实现零拷贝
- 零拷贝的同步问题
- https实现的几个问题
- 零拷贝原理-数据的收发-软中断和DMA
- 这几天解决的几个问题
- 解决TcxTreeList使用的几个问题
- mysql没有解决的几个问题
- 安装minicom
- Android系统Recovery工作原理之使用update.zip升级过程分析(七)---Recovery服务的核心install_package函数
- centos 5.8升级python 2.4到2.7
- android下载文件到应用的文件目录并安装
- 输入阻抗和输出阻抗小结
- 零拷贝报文捕获要解决的几个问题,和现有的实现方法
- 统计词汇
- 弹出框笔记
- C#多线程编程(1):线程的启动
- 关于《赢》
- Subversion权限详解
- 在window分区上是无法创建/解压link文件的
- JAVA读取硬件信息(MAC地址,CPU号,硬盘卷标,CPU型号及CPU使用率等信息)
- 转载svn超强配置