linux内核协议栈与DPDK

linux内核⽹络协议栈越来越多的被关注,因为⽹络流量发⽣的巨⼤的变化,每⼩时的流量相当于过去⼏天的流量。linux内核⽹络协议栈的性能本⾝就不好,⼀些内核协议栈的实现瓶颈被发现,因此即使10GE的⽹卡⼤量投⼊使⽤也没有带来预期的性能提升。

因此⼀些跳过内核来处理⽹络包的技术⼿段应允⽽⽣,主要⽬的是为了实现低延迟,低消耗,⾼吞吐的⽹络,典型代表是DPDK。 那么DPDK是如何处理报⽂的呢?

在说明这个问题之前,我们先描述下linux内核的协议栈实现。 Linux内核收包处理流程:

  • 1,当⽹卡收到报⽂后,通过DMA机制将报⽂放到内存
  • 2,⽹卡触发中断通知系统有报⽂到达(⼀个报⽂,⼀个中断),系统分配sk_buff,将报⽂copy到这块sk_buff中,然后交由协议栈处理
  • 3,经过协议栈处理,将报⽂上送⽤户态应⽤程序处理从上⾯的简单描述可以看出,处理越多报⽂就消耗越多资源(中断,内存等)
  •    a.⼀个报⽂⼀个中断,中断将打断CPU并且涉及上下⽂切换,将消耗系统资源
    
  •   b.每个报⽂都要分配sk_buff,申请分配将消耗很多资源,同时linux为了兼容很多协议将sk_buff设计的过于复杂和庞⼤,导致处理变得缓慢。
    
  •   c.其次,当⽤户态程序需要收发包时涉及多次系统调⽤和上下⽂切换,这些切换将消耗⼤量的系统资源。
    

为了解决a/b问题,Linux在2.6版本开始⽀持NAPI,⼤体原理如下:⽹卡⾸先⼯作在中断模式,⾸包到达后中断处理程序处理报⽂,然后关闭⽹卡中断然后进⼊轮询模式,轮询检查⽹卡收包队列然后收包。其中轮询模式处理函数由⽹卡驱动实现,初始化过程中挂接即可。 DPDK如何解决这些问题

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值