【转帖】Linux性能优化(十六)——中断绑定
一、中断绑定简介
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核心上。

QQ群名片
【转帖】Linux性能优化(十六)——中断绑定的更多相关文章
- Linux性能优化 第六章 性能工具:磁盘I/O
6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...
- Linux性能优化实战学习笔记:第十二讲
一.性能优化方法论 不可中断进程案例 二.怎么评估性能优化的效果? 1.评估思路 2.几个为什么 1.为什么要选择不同维度的指标? 应用程序和系统资源是相辅相成的关系 2.性能优化的最终目的和结果? ...
- 深挖计算机基础:Linux性能优化学习笔记
参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...
- 如何学习Linux性能优化?
如何学习Linux性能优化? 你是否也曾跟我一样,看了很多书.学了很多 Linux 性能工具,但在面对 Linux 性能问题时,还是束手无策?实际上,性能分析和优化始终是大多数软件工程师的一个痛点.但 ...
- Linux 性能优化解析
前情概述 进程调度 老板 cpu 任劳任怨的打工仔 线程 工作在做什么 可运行队列 拥有的工作清单 上下文切换 和老板沟通以便得到老板的想法并及时调整自己的工作 中断 部分工作做完以后还需要及时向老板 ...
- Linux 性能优化排查工具
下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU ...
- Linux性能优化从入门到实战:01 Linux性能优化学习路线
我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等. 把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...
- Linux性能优化-平均负载
Linux性能优化-平均负载 目录 Linux性能优化-平均负载 平均负载的含义 平均负载为多少时合理 平均负载与 CPU 使用率 平均负载案例分析 场景一:CPU 密集型进程 场景二:I/O 密集型 ...
- Linux 性能优化之 IO 子系统 系列 图
http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统 ...
- Linux性能优化实战学习笔记:第五十六讲
一.上节回顾 上一节,我带你一起梳理了,性能问题分析的一般步骤.先带你简单回顾一下. 我们可以从系统资源瓶颈和应用程序瓶颈,这两个角度来分析性能问题的根源. 从系统资源瓶颈的角度来说,USE 法是最为 ...
随机推荐
- Flink实时处理入门
Flink实时处理入门 1.Flink框架介绍 Flink 诞生于欧洲的一个大数据研究项目 StratoSphere.它是由 3 所地处柏林的大学和欧洲其他一 些大学在 2010~2014 年共同进行 ...
- 打通Rasa Action Server和LLM接口的尝试方法
本文使用最简单的方法对打通 Rasa Action Server 和 LLM 接口进行了尝试,即当 Rasa 对话 intent 为 out_of_scope 时,调用 action_gpt_fa ...
- 在线编辑Word——插入内容控件
内容控件是可添加和自定义的以在模板.窗体和文档中使用的单个控件.Word中支持添加多种类型的控件用于不同文档的设计需求.本文,将通过在线编辑的方式展示如何在Word中插入内容控件,这里使用的在线编辑器 ...
- 云图说 | 容器交付流水线ContainerOps,助力企业容器化转型
摘要:华为云容器镜像服务SWR推出容器交付流水线(ContainerOps)可以帮助企业容器化转型. 容器交付流水线(ContainerOps)是华为云容器镜像服务(SWR)推出的面向从源代码到生产上 ...
- Volcano:带你体验容器与批量计算的碰撞的火花
摘要:今年(2020)7月初,Volcano 发布了1.0版本.1.0做为里程碑版本,在Volcano整个规划中起到了承上启下的作用.此次发布的1.0版本支持了GPU共享,作业动态扩缩容,批任务抢占等 ...
- 基于k6和python进行自动化性能测试
摘要:在性能测试中,达到相应的性能指标对于一个软件来说十分重要,在本文中,将介绍一种现代化性能测试工具k6. 本文分享自华为云社区<基于k6和python进行自动化性能测试>,作者: 风做 ...
- 总是记不住java的IO流用法?用N个问题教你掌握java IO流
摘要:Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了.在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,更加难 ...
- 讲透学烂二叉树(二):图中树的定义&各类型树的特征分析
日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...
- 【Go】函数高级 包的使用 gin框架入门 if-else 循环 switch 数组
目录 昨日回顾 今日内容 1 函数高级 2 包的使用 3 gin框架使用 4 if-else 5 循环 6 switch 7 数组 昨日回顾 # 1 go 基础数据类型 -数字:整数,正整数,浮点数, ...
- CO02生产订单新增组件
"-----------------------------------------@斌将军-------------------------------------------- LOOP ...