【转帖】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 法是最为 ...
随机推荐
- 当 BACnet 遇上 IoT,你将体验到不一样的大楼
本文分享自华为云社区<当 BACnet 遇上 IoT>,作者:美码师zale . 引言 在十四五规划中,"新基建"无疑是倍受关注的重点领域.而关于"新基建&q ...
- 云小课|手把手教您在PyCharm中连接云端资源进行代码调试
摘要:让我们看看如何在PyCharm中连接云端资源进行代码调试吧! 本文分享自华为云社区<[云小课]EI第54课 手把手教您在PyCharm中连接云端资源进行代码调试>,作者:Hello ...
- MindSpore:不用摘口罩也知道你是谁
[本期推荐专题]从三大主流前端技术出发,看看它们各自特性,以及如何从业务特性出发,选择合适的框架. 摘要:我们基于MindSpore设计了一种人脸识别算法,以解决口罩遮挡场景下的人脸识别问题.该算法的 ...
- 带你聚焦GaussDB(DWS)存储时游标使用
摘要:游标是一种数据处理方法,提供了在查询结果集中进行逐行遍历浏览数据的方法,也可以将游标当做上下文区域的句柄或者指针,借助游标对指定位置的数据进行查询与处理. 本文分享自华为云社区<Gauss ...
- 带你学会区分Scheduled Thread Pool Executor 与Timer
摘要:本文简单介绍下Scheduled Thread Pool Executor类与Timer类的区别,Scheduled Thread Pool Executor类相比于Timer类来说,究竟有哪些 ...
- 云小课 | DSC:快速识别敏感数据并脱敏
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云数据安全中 ...
- Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践
模板是 Walrus 的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署.用户可以使用 HCL 语言自定义创建模板,也可以一键复 ...
- 注册中心 —— SpringCloud Netflix Eureka
Eureka 简介 Eureka 是一个基于 REST 的服务发现组件,SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务 ...
- nginx: [emerg] unknown directive "?server" in /etc/nginx/conf.d/nginx.conf:1
问题描述:启动nginx的时候报错 1.nginx: [warn] the "user" directive makes sense only if the master proc ...
- 实战指南 | Serverless 架构下的应用开发
作者 | 刘宇.田初东.卢萌凯.王仁达 UC Berkeley认为Serverless架构的出现过程类似于40多年前从汇编语言转向高级语言的过程,在未来Serverless架构的使用会飙升,或许服务器 ...