【转帖】Linux性能优化(十六)——中断绑定

linux,性能,优化,十六,中断,绑定 · 浏览次数 : 0

小编点评

**中断绑定简介** 中断绑定是指设置中断的CPU Affinity,让中断只在指定CPU核心上进行响应。这可以通过关闭中断平衡守护进程或使用IRQ Balance API来实现。 **中断绑定流程** 1.关闭中断平衡守护进程:`systemctl stop irqbalance` 2.修改/etc/sysconfig/irqbalance配置文件,指定CPU核心从中断平衡守护进程的列表中脱离出来。 3.关闭系统中断平衡守护进程:`systemctl stop irqbalance` 4.关闭中断平衡守护进程:`systemctl disable irqbalance` 5.使用echo命令将CPU掩码写入/proc/irq /中断ID/smp_affinity文件中,即可实现修改某一中断的CPU亲和性。 **应用** *文件服务器:把不同的网卡IRQ均衡绑定到不同的CPU上,减轻某CPU的负载。 *数据库服务器:把磁盘控制器绑到一个CPU、把网卡绑定到另一个CPU,提高数据库的响应时间。

正文

一、中断绑定简介

  1、中断简介

计算机中,中断是一种电信号,由硬件产生并直接送到中断控制器上,再由中断控制器向CPU发送中断信号,CPU检测到信号后,中断当前工作转而处理中断信号。CPU会通知操作系统已经产生中断,操作系统就会对中断进行处理。常见的中断控制器有两种:可编程中断控制器8259A和高级可编程中断控制器(APIC)。8259A只适合单 CPU的情况,多CPU多核的SMP体系下,为了充分利用SMP体系结构,把中断传递给系统上的每个CPU以便更好实现并行和提高性能,Intel引入了高级可编程中断控制器(APIC)。

中断是一种硬件主动发起的和CPU进行通信的方式,轮询(polling)是CPU定时对硬件状态进行查询然后做相应处理。

每个硬件设备(如硬盘、网卡等)都需要和CPU进行通信,以便CPU处理硬件请求,硬件设备主动打扰CPU的现象称为硬件中断。

操作系统中,每个硬件设备都会被分配一个IRQ号,通过唯一的IRQ号可以区分不同硬件的中断。

2、中断绑定简介

中断绑定即设置中断的CPU Affinity,让中断只在指定CPU核心上进行响应。

硬件中断发生频繁,会非常消耗CPU资源。在多核CPU条件下,如果把大量硬件中断分配给不同的CPU核心处理可以很好的平衡性能。通常服务器上会有多个CPU多核、多块网卡、多块硬盘,如果能让网卡中断独占1个CPU核心、磁盘IO中断独占1个CPU核心,将会大大减轻单一CPU负载、提高整体处理效率。

默认情况下,Linux中断响应会被平均分配到所有CPU核心上,势必会发生写新的数据和指令缓存,并与CPU核心上原有进程产生冲突,造成中断响应延迟,影响进程处理时间。为了解决中断响应延迟问题,可以将中断(或进程)绑定到指定CPU核心上,中断(或进程)所需要指令代码和数据有更大概率位于指定CPU本地数据和指令缓存内,而不必进行新的写缓存,从而提高中断响应(或进程)的处理速度。将某一个进程及其相关中断绑定在同一个CPU核心上,使其共享缓存,提高程序性能;将彼此不相关的中断与进程绑定到不同的CPU核心上,可以避免冲突,提高程序性能。

Linux Kernel 2.4开始支持把不同的硬件中断请求(IRQ)分配到特定的CPU上,绑定技术被称为SMP IRQ Affinity。

3、中断绑定应用

对于文件服务器、Web服务器,把不同的网卡IRQ均衡绑定到不同的CPU上将会减轻某CPU的负载,提高多个CPU整体处理中断的能力;对于数据库服务器,把磁盘控制器绑到一个CPU、把网卡绑定到另一个CPU将会提高数据库的响应时间、优化性能。

合理的根据自己的生产环境和应用的特点来平衡IRQ中断有助于提高系统的整体吞吐能力和性能。

二、中断绑定流程

1、关闭中断平衡守护进程

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

systemctl status irqbalance

查看守护进程的运行状态

systemctl stop irqbalance

关闭中断平衡守护进程,中断响应默认都会由CPU0核心处理。

systemctl disable irqbalance

取消中断平衡守护进程开机重启

关闭中断平衡守护进程过于强硬,可以在不关闭中断平衡守护进程条件下,让某些CPU核心脱离中断平衡守护进程的管理。

2、脱离中断平衡守护进程

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

将IRQBALANCE_BANNED_CPUS指定禁止中断平衡守护进程管理的CPU十六进制掩码,如将8~15编号CPU核心从中断平衡守护进程中脱离,设置如下:

IRQBALANCE_BANNED_CPUS=0000ff00

CPU掩码最多可以有64位,如果计算机核心数超过32个,可以使用两个32位掩码,并用逗号隔开。

IRQBALANCE_BANNED_CPUS=00000001,0000ff00

3、绑定指定中断到CPU

中断绑定时,需要关闭系统中断平衡守护进程

systemctl stop irqbalance

计算机当前各种中断响应情况在/proc/interrupts文件中。

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

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

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

将网卡的中断响应绑定到CPU2核心上。

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux30362 人正在系统学习中
量化IT技术交流群
QQ群名片

与【转帖】Linux性能优化(十六)——中断绑定相似的内容:

【转帖】Linux性能优化(十六)——中断绑定

一、中断绑定简介 1、中断简介 计算机中,中断是一种电信号,由硬件产生并直接送到中断控制器上,再由中断控制器向CPU发送中断信号,CPU检测到信号后,中断当前工作转而处理中断信号。CPU会通知操作系统已经产生中断,操作系统就会对中断进行处理。常见的中断控制器有两种:可编程中断控制器8259A和高级可

[转帖]《Linux性能优化实战》笔记(十七)—— Linux网络基础与性能指标

一、 网络模型 1. OSI 网络模型(七层) 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,OSI 模型把网络互联的框架分为七层,每个层负责不同的功能。其中, 应用层,负责为应用程序提供统一的接口。表示层,负责把数据转换成兼容接收系统的格式。会话层,负责维护计算机之间的通信连

[转帖]《Linux性能优化实战》笔记(十九)—— DNS 解析原理与故障案例分析

一、 域名与 DNS 解析 域名主要是为了方便让人记住,而 IP 地址是机器间的通信的真正机制。以 time.geekbang.org 为例,最后面的 org 是顶级域名,中间的 geekbang 是二级域名,而最左边的 time 则是三级域名。点(.)是所有域名的根,所有域名都以点作为后缀。 把域

[转帖]Linux性能优化(十)——CPU性能分析工具

Linux性能优化(十)——CPU性能分析工具 https://blog.51cto.com/u_9291927/2594169 一、CPU性能指标 1、CPU使用率 CPU使用率是最常见的一个性能指标,描述了非空闲时间占总CPU 时间的百分比,根据CPU上运行任务的不同,分为用户CPU、系统CPU

[转帖]Linux性能优化(十一)——CPU性能优化原理

Linux性能优化(十一)——CPU性能优化原理 https://blog.51cto.com/u_9291927/2594259 一、CPU上下文切换 1、CPU上下文 Linux是多任务操作系统,支持远大于CPU数量的任务同时运行。在每个任务运行前,CPU需要知道任务从哪里加载、从哪里开始运行,

[转帖]Linux性能优化(十二)——CPU性能调优

Linux性能优化(十二)——CPU性能调优 https://blog.51cto.com/u_9291927/2594259 一、应用程序优化 (1)编译器优化。适当开启编译器优化选项,在编译阶段提升性能。gcc提供优化选项-On会自动对应用程序的代码进行优化。(2)算法优化。使用复杂度更低的算法

[转帖]Linux性能优化(十五)——CPU绑定

一、孤立CPU 1、孤立CPU简介 针对CPU密集型的任务,CPU负载较高,推荐设置CPU Affinity,以提高任务执行效率,避免CPU进行上下文切换,提高CPU Cache命中率。 默认情况下,Linux内核调度器可以使用任意CPU核心,如果特定任务(进程/线程)需要独占一个CPU核心并且不想

【转帖】Linux性能优化(十四)——CPU Cache

一、CPU Cache 1、CPU Cache简介 CPU Cache是位于CPU与内存之间的临时存储器,容量比内存小但交换速度却比内存要快得多。Cache的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,会使CPU花费很长时间等待数据到来或把数

【转帖】Linux性能优化(十三)——CPU性能测试

一、CPU上下文切换测试场景 使用sysbench模拟多线程调度: sysbench --threads=10 --time=300 threads run 使用vmstat查看CPU上下文切换: cs列上下文切换次数超过150万次。 r列就绪队列长度最大达到8,超过系统CPU的个数4,存在大量的C

[转帖]《Linux性能优化实战》笔记(十五)—— 磁盘IO的工作原理

前一篇介绍了文件系统的工作原理,这一篇来看看磁盘IO的工作原理 一、 磁盘 1. 按存储介质分类 磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘。 机械磁盘,也称为硬盘驱动器(Hard Disk Driver,HDD),主要由盘片和读写磁头组成,数据存储在盘