You need to enable JavaScript to run this app.
导航

网卡中断绑定

最近更新时间2023.12.08 11:48:56

首次发布时间2023.02.03 08:30:26

本文主要介绍如何使用火山引擎提供的irqbalance-ng功能,自动配置物理网卡中断(IRQ,interrupt request)的CPU亲和性(CPU affinity),提升网络性能。

操作场景

对于高网络流量场景,可能会出现大量网卡中断集中到某一CPU上,导致数据包收发出现延迟的问题。irqbalance-ng可通过周期性扫描的运行方式,自动检查、配置物理网卡的CPU亲和性(/proc/irq/{irq_id}/smp_affinity),防止CPU在处理网络中断时负载不均,进而提升网络性能。
同时针对配置了多个Network Namespace的场景,irqbalance-ng支持自动解读各个namespace的网卡信息并为其进行中断绑定。

注意事项

本功能暂仅支持在Debian 10 64位、CentOS 7.x 64位、CentOS 8.3 64位、Ubuntu Server 18.04 LTS 64位、Ubuntu Server 20.04 LTS 64位镜像中使用,更多镜像信息可查看镜像发布记录

基本概念

概念
说明
IRQ中断请求(interrupt request),指设备主动发送到CPU的电信号,CPU将停止当前任务处理接收的中断请求。
irqbalance用于帮助平衡所有系统CPU上的中断所产生的CPU负载的一个守护进程。
CPU affinity即CPU亲和性也称CPU绑定,指进程、中断在指定的CPU上长时间运行,不被迁移到其他处理器的倾向性。
NUMA非均匀内存访问架构(Non-Uniform Memory Access)是一种为多处理器的电脑设计的内存架构。内存访问时间取决于内存相对于处理器的位置。
Network Namespace是Linux提供的一种对于系统全局资源的隔离方法,通过将系统的全局资源放在不同的namespace中,来实现资源隔离的目的。不同namespace的程序,可以享有一份独立的系统资源。

操作步骤

  1. 登录云服务器实例,操作详情可查看登录Linux实例

  2. 执行如下命令,为镜像配置extra-tools软件源。

    • CentOS 8.3
      echo -e '[extra-tools]\nname= extra-tools\nbaseurl=http://mirrors.ivolces.com/extra-tools/centos/8/rpms/\nenabled=1\ngpgcheck=0' >> /etc/yum.repos.d/extra-tools.repo
      
    • CentOS 7.x
      echo -e '[extra-tools]\nname= extra-tools\nbaseurl=http://mirrors.ivolces.com/extra-tools/centos/7/rpms/\nenabled=1\ngpgcheck=0' >> /etc/yum.repos.d/extra-tools.repo
      
    • Debian 10
      echo 'deb http://mirrors.ivolces.com/extra-tools/debian/ buster main' >> /etc/apt/sources.list.d/extra-tools.list
      wget -O - http://mirrors.ivolces.com/extra-tools/debian/GPG-KEY-system | apt-key add -
      
    • Ubuntu 20.04
      echo 'deb http://mirrors.ivolces.com/extra-tools/ubuntu/ focal main' >> /etc/apt/sources.list.d/extra-tools.list
      wget -O - http://mirrors.ivolces.com/extra-tools/ubuntu/GPG-KEY-system | apt-key add -
      
    • Ubuntu 18.04
      echo 'deb http://mirrors.ivolces.com/extra-tools/ubuntu/ bionic main' >> /etc/apt/sources.list.d/extra-tools.list
      wget -O - http://mirrors.ivolces.com/extra-tools/ubuntu/GPG-KEY-system | apt-key add -
      
  3. 执行如下命令,安装irqbalance-ng。

    • CentOS
      yum makecache
      yum -y remove irqbalance
      yum -y install irqbalance-ng
      
    • Debian/Ubuntu
      apt-get update
      apt-get install irqbalance-ng
      
  4. 执行如下命令,检查irqbalance-ng是否正常运行。

    systemctl status irqbalance-ng.service
    
  5. 您可以修改irqbalance-ng的配置文件,调整irqbalance-ng检查/调整网卡中断绑定的周期、处理网卡中断的CPU列表等配置。

    1. 执行如下命令,编辑配置文件。
      vim /etc/default/irqbalance-ng
      
    2. i键进入编辑模式,根据需求调整irqbalance-ng配置。

      参数说明
      参数说明取值样例

      debug

      irqbalance-ng服务打印日志级别。支持配置:

      • 0:表示打印error级别日志。
      • 1:默认,表示打印info及error级别日志。
      • 2:表示打印debug、info及error级别日志。

      说明

      irqbalance-ng日志存储路径为:/var/log/irqbalance-ng.log.

      1

      distinguish默认设置,请勿调整。1
      peroidirqbalance-ng检查/调整网卡中断绑定的周期,默认为60,单位为60

      cpu_lists

      指定特定的CPU处理网卡中断,默认值为""表示全部CPU。您可以传入多个CPU ID,并用,(逗号)分隔,其中可以用-表示一段连续的CPU ID。

      说明

      您可以执行lscpunumactl --hardwarelshw命令,查看CPU ID。以lscpu命令为例,0-7表示八个CPU的ID为01234567

      "1,4,5,10-15,20"

      lib_path软件包安装的库文件路径,不建议修改。-
      net_path镜像中网络接口相关文件路径,不建议修改。-
      cpu_path镜像中CPU设备文件路径,不建议修改。-
      numa_path镜像中NUMA文件路径,不建议修改。-
    3. ecs键,输入:wq保存修改并退出。
    4. 修改完成后,执行如下命令重启irqbalance-ng,修改的配置才会生效。
      systemctl restart irqbalance-ng
      
  6. 您可以执行如下命令,查看中断与CPU的绑定信息。

    本命令通过/proc/interrupts查看中断信息,同时结合cat /proc/irq/$i/smp_affinity_list设置/读取中断的CPU亲和性,您可以结合实际场景对命令进行调整。

    for i in `cat /proc/interrupts | grep -E "input|output" | awk -F ' ' '{print $1}' | awk -F ':' '{print $1}'` ;do echo "irq_"$i ":" `cat /proc/irq/$i/smp_affinity_list` ;done
    

相关操作

停止irqbalance-ng

您可以执行如下命令,暂停irqbalance-ng周期性进行中断绑定。

systemctl stop irqbalance-ng.service

您还可以执行如下命令,取消irqbalance-ng开机自动运行。

systemctl disable irqbalance-ng.service

卸载irqbalance-ng

  • CentOS

    yum remove irqbalance-ng
    
  • Debian/Ubuntu

    apt-get remove --purge irqbalance-ng