【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

linux,虚拟化,irqbalance,网卡,中断,绑定 · 浏览次数 : 0

小编点评

**文章简介:** 文章介绍了如何在 Linux 中实现中断绑定技术,并总结了不同的方法和步骤。 **主要内容:** **1. 网络流量上不去** * 对于实时处理,消除或最小化事件响应的延迟至关重要。 * 在 Linux 中,中断响应会被平均分配到所有 CPU核心上,这会导致写新的数据和指令缓存,并与 CPU核心上存在的进程产生冲突。 **2. 中断绑定** * 中断绑定是指将中断绑定到特定的 CPU 核心上,以提高中断响应效率。 * 有两种方法可以实现中断绑定: * 关闭中断平衡守护进程:使用 `systemctl stop irqbalance` 命令关闭 `irqbalance.service` 文件。 * 手动设置中断的 CPU亲和性:使用 `echo` 命令写入 `/proc/irq` 文件中的 `smp_affinity` 文件来实现中断绑定。 **3. 示例** * 通过示例,说明如何关闭中断平衡守护进程和手动设置中断的 CPU 亲和性。 **4. 总结** * 中断绑定是实现实时处理的关键技术。 * 有两种方法可以实现中断绑定:关闭中断平衡守护进程和手动设置中断的 CPU 亲和性。 * 选择最适合应用程序的配置方法至关重要。 **5. 参考资料** * 文章知识点与官方知识档案匹配,可进一步学习相关知识。

正文

一.网络流量上不去
二.中断绑定
      2.1 关闭中断平衡守护进程
      2.2 脱离中断平衡守护进程
      2.3 手动设置中断的CPU亲和性
三. 总结


一.网络流量上不去

      在Linux的网络调优方面,如果你发现网络流量上不去,那么有一个方面需要去查一下:

网卡处理网络请求的中断是否被绑定到单个CPU(或者说跟处理其它中断的是同一个CPU)

二.中断绑定

      对于实时环境,我们需要消除或者最小化事件响应的延迟。要想做到这一点,需要将不同的中断响应(IRQs)和用户进程绑定到不同的CPU核心上,使他们彼此隔离。
网卡与操作系统的交互一般有两种方式:

  • IRQ(Interrupt Request 中断请求):网卡在收到了网络信号之后,主动发送中断到CPU。而CPU将会立即停下手边的活以便对这个中断信号进行分析;
  • DMA(Direct Memory Access 直接存储器访问):允许硬件在无 CPU 干预的情况下将数据缓存在指定的内存空间内,在CPU合适的时候才处理;

      现在的对称多核处理器(SMP)上,一块网卡的IRQ还是只有一个CPU来响应,其它CPU无法参与,如果这个CPU还要忙其它的中断(其它网卡或者其它使用中断的外设(比如磁盘)),那么就会形成瓶颈。

      默认情况下,Linux的中断响应会被平均分配到所有CPU核心上,这样势必会发生写新的数据和指令缓存,而且还会与CPU核心上原来存在的进程产生冲突。

      这就会延迟中断响应,影响程序的处理时间。

解决方案:
      为了解决这个问题,可以将中断(或进程)绑定到指定的CPU核心上,这样该中断(或进程)所需要的代码和数据结构就有更高的可能性位于本地CPU的数据和指令缓存内,而不必进行新的写缓存,从而提高中断响应(或进程)的处理速度。
       此外,将某一个进程及其相关的中断绑定在同一个CPU核心上,使它们共享缓存线路,可以提高程序性能。还有,将彼此不相关的中断与进程绑定到不同的CPU核心上,可以避免冲突,也可以提高程序性能。

      以上提到的方法对于延迟敏感的中断(或进程)是很有用的,同时这些方法对于处理速度受限于内存和总线带宽的情况也是很重要的。

接下来介绍如何实现中断绑定。

2.1 关闭中断平衡守护进程

      中断平衡守护进程(irqbalance daemon)会周期性地将中断平均地公平地分配给各个CPU核心,它默认是开启的。为了实现中断绑定,首先需要将这个守护进程关闭。

利用systemctl status irqbalance查看守护进程的运行状态

  1. [root@node9 ~]# systemctl status irqbalance
  2. irqbalance.service - irqbalance daemon
  3. Loaded: loaded (/usr/lib/systemd/system/irqbalance.service; disabled; vendor preset: enabled)
  4. Active: inactive (dead)

      利用  systemctl stop irqbalance 可以关闭该进程。这样中断响应默认都会由 CPU0 核心处理。

      利用  systemctl disable irqbalance 可以取消进程,使其开机不会重启。

      其实,关闭该进程实在太强硬了,毕竟中断平衡功能还是有用的。那么有没有其它方法,在不关闭守护进程的情况下,还能让某些 CPU 核心脱离守护进程的管理,看下一个方法。

2.2 脱离中断平衡守护进程

      我们可以通过修改  /etc/sysconfig/irqbalance  配置文件,将指定的CPU核心从中断平衡守护进程的列表中脱离出来,即守护进程不会再将中断分配给这些CPU核心。

      打开  /etc/sysconfig/irqbalance文件,找到“#IRQBALANCE_BANNED_CPUS=”位置,将注释取消,然后在等号后面填写CPU十六进制掩码,比如

IRQBALANCE_BANNED_CPUS=0000ff00

       可以将8~15这8个CPU核心从守护进程中脱离出来。

      这里的掩码最多可以有64位,如果系统具有的核心数超过32个,则可以在等号后面添加两个32位掩码,并用逗号隔开,例如

IRQBALANCE_BANNED_CPUS=00000001,0000ff00

就是将8~15和33这9个核心隔离了。

关于掩码:一个32位的位掩码(bitmask)形如00000000000000000000000000000011,表示为十进制掩码(decimal)为3,表示为十六进制掩码(hexadecimal)为0x00000003。

2.3 手动设置中断的CPU亲和性

      设置中断的CPU亲和性(affinity),就是让该中断只在指定CPU核心上进行响应,即中断绑定。

      首先我们通过/proc/interrupts文件查看一下各种中断的响应情况

  1. [root@node9 ~]# cat /proc/interrupts
  2. CPU0 CPU1 CPU2 CPU3
  3. 0: 63 0 0 0 IR-IO-APIC-edge timer
  4. 8: 1 0 0 0 IR-IO-APIC-edge rtc0
  5. 9: 0 0 0 0 IR-IO-APIC-fasteoi acpi
  6. ******

第一列显示的中断ID号,CPUn列显示的是该中断在第n个CPU核心上的响应次数,倒数第二列是中断类型,最后一列是描述。

1)利用echo命令将cpu掩码写入/proc/irq /中断ID/smp_affinity文件中,即可实现修改某一中断的CPU亲和性。例如

echo 0x0004 > /proc/irq /170/smp_affinity

就可以将170中断的响应绑定到CPU3核心上。当该中断下一次发生时,再查看/proc/interrupts里面的响应数量,会发现CPU3核心的响应次数增加了,而其它核心的响应次数没有改变。

2)还有一种方法,通过 tuna 也可以实现中断绑定功能。详见 Linux工具使用——使用tuna进行性能调优

三. 总结

      最后总结一下,为了满足实时处理的要求,我们需要将中断绑定到指定的 CPU 核心上,实现中断绑定主要有两方面操作:
1)关闭中断平衡守护进程或者隔离CPU核心;
2)手动设置中断的CPU亲和性。
      另外值得一提的是,这里只是介绍了中断绑定的方法,至于该绑定哪些中断以及绑定到哪几个核心上,需要针对应用程序的具体情况进行分析。
      在实际应用中,想要实现性能最优,需要进行各种尝试,然后才能得到最好的配置方式。

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux31245 人正在系统学习中

与【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰相似的内容:

[转帖]Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

一.网络流量上不去二.中断绑定 2.1 关闭中断平衡守护进程 2.2 脱离中断平衡守护进程 2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上不去,那么有一个方面需要去查一下: 网卡处理网络请求的中断是否被绑定到单个CPU(或者说跟处理

【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

一.网络流量上不去二.中断绑定 2.1 关闭中断平衡守护进程 2.2 脱离中断平衡守护进程 2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上不去,那么有一个方面需要去查一下: 网卡处理网络请求的中断是否被绑定到单个CPU(或者说跟处理

[转帖]Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

一. 大页(HugePages)概念 Hugepage的引入二. hugepages相关概念三.Regular Pages 与 HugePages a、Regular Pages b、Huge Pages四. hugepage 优点五.调优方法 5.1 在Host侧查看各个numa节点上的大页分配情

【转帖】Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

一. 大页(HugePages)概念 Hugepage的引入二. hugepages相关概念三.Regular Pages 与 HugePages a、Regular Pages b、Huge Pages四. hugepage 优点五.调优方法 5.1 在Host侧查看各个numa节点上的大页分配情

[转帖]linux 调优篇 :硬件调优(BIOS配置)* 壹

https://blog.csdn.net/tony_vip?type=blog 一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能

【转帖】linux 调优篇 :硬件调优(BIOS配置)* 壹

一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能。表1列出了TaiShan服务器和性能相关的BIOS推荐配置项。 表1 BIOS性

[转帖]linux 调优各项监控指标小记

https://z.itpub.net/article/detail/8A4E4E96522BD59D45AB5A4CA442EDB3 自开始负责生产环境部署,中间遇到了若干线上环境内存以及CPU的问题。由于微服务以及容器的流行,现在已经可以很方便的使用 K8s + prometheus + gra

[转帖]Linux性能调优工具-9张图-包你用到爽!抓紧收藏吧

这里包含Linux 性能资料的工具图。这些使用大字体可以用作海报幻灯片。也可以将它们打印出来贴在办公室墙上。它们展示了:Linux 可观察性工具、 Linux 静态性能分析工具、 Linux 基准测试工具、 Linux 调优工具和Linux sar。 性能观察工具: 静态性能工具 性能压测工具: 性

[转帖]Linux性能调优,看这一篇就够了

调优是一件因地制宜的事情,生搬硬套可能适得其反。互联网企业,生产环境大多数都是linux操作系统,Linux服务器性能调优,是一个重要的课题。linux有成百上千的参数可以调整,对这些参数的理解,可以帮助我们更好的理解服务器工作的原理,帮助更快的找到瓶颈和解决问题。 为了帮助理解,先上一个Linux

[转帖]Linux句柄调优之nofile、nr_open、file-max

https://www.jianshu.com/p/8fb056e7b9f8 在开发运维的时候我们常常会遇到类似“Socket/File: Can’t open so many files”,“无法打开更多进程”,或是coredump过大等问题,这些都可以设置资源限制来解决。今天在教某位客户设置最大