1、硬中断收包方式
硬中断的收包方式是依靠中断来通知cpu收取数据包的。这种中断方式的好处是响应及时,如果数据量较小,且数据包不太频繁的时候,不会占用太多的CPU时间。效率比较高。中断方式的缺点是数据量大时,会产生过多中断,而每个中断在处理收包时都要消耗不少的cpu时间。从而导致效率低下。所以这种方式不适合用在处理大流量的网络设备上。
2、NAPI收包方式
NAPI是linux新的网卡数据处理的API。它是中断技术与轮询方式技术的融合。它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后轮询的方法来收取数据。当有大量数据包到来时只触发一次中断,在中断服务函数中关闭中断。然后cpu一直轮询的收包直到将所有的数据包收完为止再打开中断。但是这种方式也有一定的缺点,第一,不能及时处理数据包,随着数据包到达速度的增加,会消耗大量的内存,第二,对于大数据包低速率的情况,接收中断就会急剧增加,直到最后每个数据包都需要一次 轮询 的方法来进行处理,最后的结果就是每个中断都需要一次 轮询 的方法,最后造成效率的急剧下降,以至于系统的效率就会大大降低。所以这种方式比较适用于高速率的短长度数据包的处理
3、DPDK收包方式
DPDK收包方式采用的是完全轮询的收包方式。它抛弃了基于中断的异步信号发送机制,避免了中断性能上带来的瓶颈。并且在驱动轮询收包过程中实现了数据包零拷贝。这对收包的速度也带来了一定的提升。随着多核技术的发展,在DPDK的轮寻驱动中针对每一个收包队列都会绑定一个cpu核,此cpu核不会参与调度,专门用来进行收包。这种技术消除了由于cpu核的频繁调度切换带来的开销。这样在极大提高了收包效率的过程中又不损耗整体系统的性能。所以这种方式越来越多的运用到许多网络设备中