多队列网卡

1 前言

1.1 网卡与CPU的两种常见交互方式

1.1.1 中断

(IRQ) Interrupt ReQuest,网卡在收到了网络信号之后,主动发送中断到CPU,而CPU将会立即停下手边的活以便对这个中断信号进行分析。

教材上会说中断是外部设备向处理器发起的请求事件,但这还不够本质。中断的本质是处理器对外开放的实时受控接口。

看下英文词典是怎么解释这个词的:interfere in someone else’s activity

直译过来是干扰其它人的事情,这就是interrupt的目的。

从计算机的语境来说就是硬件打断CPU,它是计算机可以更好更快利用有限的系统资源解决系统响应速度和运行效率的一种控制技术。

常见的中断:例如鼠标移动、键盘敲击,都是一个中断请求发送到的CPU。

1.1.2 轮询

(poll)内核周期性的检查网卡,查看是否收到数据。

优点:数据包非常多的时候,这种处理方法会非常快速有效。

缺点:数据包少的时候会CPU总是轮询却没有收到数据包,造成CPU资源的浪费,这种方法使用较少。

1.2 Linux收一个数据包的过程

在Linux内核实现中,链路层协议靠网卡驱动来实现,内核协议栈来实现网络层和传输层。内核对更上层的应用层提供socket接口来供用户进程访问。我们用Linux的视角来看到的TCP/IP网络分层模型应该是下面这个样子的。
在这里插入图片描述
接下来再做一步较详细的拆解。以一个UDP的数据包为例 被网卡接收后,大概经历了哪几步进入的内核处理
在这里插入图片描述
说明:

  • DMA:
    传输将数据从一个地址空间复制到另一个地址空间。是一种外部设备不通过CPU而直接与系统内存交换数据的接口技术。
  • 硬中断和软中断的区别和联系:
    硬中断是有外设硬件发出的,需要有中断控制器之参与。硬中断会给CPU的相关引脚上触发一个电压变化,以通知CPU来处理数据。
    软中断则通常是由硬中断处理程序或者进程调度程序等软件程序发出的中断信号,无需中断控制器之参与。软中断是通过给内存中的一个变量的二进制值以通知软中断处理程序。
    一般来说,硬中断会进行最简单的工作,然后快速释放CPU,将剩下的大部分工作进行软中断处理,以此避免CPU无法响应其它设备,例如鼠标和键盘的消息。
  • Skb格式数据包:
    指sk_buff(socket buffer),是linux网络代码中重要的数据结构,sk_buff可以在不同的网络协议层之间传递,简言之它管理和控制接收或发送数据包的信息。

2 多队列网卡

2.1 网卡通过多队列提高网络吞吐

kernel从2.6.21之前不支持多队列特性,一个网卡只能申请一个中断号,但是在大数据高吐吞时,就会把某个核(一般是 cpu0) 拖跨,一直频繁的响应中断,严重影响网卡吞吐。

所以就有了硬件层面的 RSS 概念,receive side scaling,网卡实现多个队列,每个队列一个中断并且绑定到不同 cpu, 将中断分摊到多个cpu。4.4针对网卡优化的一些技术区别

如果硬件不支持硬件队列呢?就有了 RPS 概念,在软件层面模拟一个队列,如果有 RSS,就没必要用 RPS,所以这篇文章说的就是,网卡RSS中断绑定CPU,均衡CPU增加吞吐性能的一种方式。

2.2 多队列网卡硬件实现概述

Intel 82575硬件逻辑图,有四个硬件队列。当收到报文时,通过hash包头的SIP、Sport、DIP、Dport四元组(图1.2),将一条流总是收到相同的队列。同时触发与该队列绑定的中断。
这样,CPU的各个核可以并发的收包,就不会应为一个核不能满足需求,导致网络IO性能下降。
在这里插入图片描述
当CPU可以平行收包时,就会出现不同的核收取了同一个queue的报文,这就会产生报文乱序的问题,解决方法是将一个queue的中断绑定到唯一的一个核上去,从而避免了乱序问题。同时如果网络流量大的时候,可以将软中断均匀的分散到各个核上,避免CPU成为瓶颈。

2.3 多队列网卡手动绑定中断

  1. 查看中断绑定情况,虽然已经多队列,但每一个队列的中断数据都是发向的CPU0,还是没达到分担的效果。
    在这里插入图片描述
  2. 查看 111/112/130/131/132四个中断号绑定的情况,发现均是绑定的”F”,这也是为什么每个队列的中断数据都向一个CPU发请求的原因。
    在这里插入图片描述
    这里存储的为16进制,以本实验四核CPU为例
    十六进制f转换成二进制为1111,每一位1表示一个CPU核,最靠右值是最低位即CPU0
  3. 手动进行队列中断绑定,分别将四个中断号绑定四个CPU。
    在这里插入图片描述
    在这里插入图片描述
  4. 可以看到,绑定中断后速度有显著提升,并且CPU利用率也相对均衡了一些。
    在这里插入图片描述
  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值