【转帖】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 法是最为 ...
随机推荐
- 共探AI大模型时代下的挑战与机遇,华为云HCDE与大模型专家面对面
摘要:近日,华为开发者大会2023(cloud)"开发者生态创新发展圆桌会议"在东莞华为溪流背坡村成功举办. 2023年7月8日,华为开发者大会2023(cloud)"开 ...
- 技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用
摘要:本文将详细介绍GaussDB(DWS)重要运维管理功能"升级"的原理和使用. 运维管理模块是任何软件产品最基础和重要的一部分.是软件产品的门户,也是用户接触和使用软件产品的和 ...
- Solon2 开发之插件,四、插件热插拔管理机制(H-Spi)
插件热插拔管理机制,简称:H-Spi.是框架提供的生产时用的另一种高级扩展方案.相对E-Spi,H-Spi 更侧重隔离.热插热拔.及管理性. 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插 ...
- PPT 文字太多如何处理
Piti 插件 http://www.piti.fun
- 详解 SSL(二):SSL 证书对网站的好处
在如今谷歌.百度等互联网巨头强制性要求网站 HTTPS 化的情况下, 网站部署 SSL 证书已然成为互联网的发展趋势.而在上一篇< 详解 SSL(一):网址栏的小绿锁有什么意义?>中,我们 ...
- 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)
前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...
- HTML+CSS小实战案例 (照片墙特效、代码展示)
预览图: HMTL代码部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- 30例 | 一文搞懂python日期时间处理
前言 datetime是python的内置模块,用来处理日期和时间. 该模块常用的类有: 类名 功能说明 date 日期对象 time 时间对象 datetime 日期时间对象 timedelta 时 ...
- Linux Page Cache调优在Kafka中的应用
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/MaeXn-kmgLUah78brglFkg作者:Yang Yijun 本文主要描述Linux ...
- kafka如何保证数据的消息不丢失(最简洁)
一.kafka 本身配置层面1.1.replication.factor 默认值1创建kafka的topic时候,每个分区设置的副本数, 根据broker数量酌情设置, 建议业界通常做法设置为3 1. ...