一、中断绑定简介

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性能优化(十六)——中断绑定的更多相关文章

  1. Linux性能优化 第六章 性能工具:磁盘I/O

    6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...

  2. Linux性能优化实战学习笔记:第十二讲

    一.性能优化方法论 不可中断进程案例 二.怎么评估性能优化的效果? 1.评估思路 2.几个为什么 1.为什么要选择不同维度的指标? 应用程序和系统资源是相辅相成的关系 2.性能优化的最终目的和结果? ...

  3. 深挖计算机基础:Linux性能优化学习笔记

    参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...

  4. 如何学习Linux性能优化?

    如何学习Linux性能优化? 你是否也曾跟我一样,看了很多书.学了很多 Linux 性能工具,但在面对 Linux 性能问题时,还是束手无策?实际上,性能分析和优化始终是大多数软件工程师的一个痛点.但 ...

  5. Linux 性能优化解析

    前情概述 进程调度 老板 cpu 任劳任怨的打工仔 线程 工作在做什么 可运行队列 拥有的工作清单 上下文切换 和老板沟通以便得到老板的想法并及时调整自己的工作 中断 部分工作做完以后还需要及时向老板 ...

  6. Linux 性能优化排查工具

    下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU ...

  7. Linux性能优化从入门到实战:01 Linux性能优化学习路线

      我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等.   把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...

  8. Linux性能优化-平均负载

    Linux性能优化-平均负载 目录 Linux性能优化-平均负载 平均负载的含义 平均负载为多少时合理 平均负载与 CPU 使用率 平均负载案例分析 场景一:CPU 密集型进程 场景二:I/O 密集型 ...

  9. Linux 性能优化之 IO 子系统 系列 图

    http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统 ...

  10. Linux性能优化实战学习笔记:第五十六讲

    一.上节回顾 上一节,我带你一起梳理了,性能问题分析的一般步骤.先带你简单回顾一下. 我们可以从系统资源瓶颈和应用程序瓶颈,这两个角度来分析性能问题的根源. 从系统资源瓶颈的角度来说,USE 法是最为 ...

随机推荐

  1. 共探AI大模型时代下的挑战与机遇,华为云HCDE与大模型专家面对面

    摘要:近日,华为开发者大会2023(cloud)"开发者生态创新发展圆桌会议"在东莞华为溪流背坡村成功举办. 2023年7月8日,华为开发者大会2023(cloud)"开 ...

  2. 技术实践丨GaussDB(DWS)运维管理功能“升级”的原理和使用

    摘要:本文将详细介绍GaussDB(DWS)重要运维管理功能"升级"的原理和使用. 运维管理模块是任何软件产品最基础和重要的一部分.是软件产品的门户,也是用户接触和使用软件产品的和 ...

  3. Solon2 开发之插件,四、插件热插拔管理机制(H-Spi)

    插件热插拔管理机制,简称:H-Spi.是框架提供的生产时用的另一种高级扩展方案.相对E-Spi,H-Spi 更侧重隔离.热插热拔.及管理性. 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插 ...

  4. PPT 文字太多如何处理

    Piti 插件 http://www.piti.fun

  5. 详解 SSL(二):SSL 证书对网站的好处

    在如今谷歌.百度等互联网巨头强制性要求网站 HTTPS 化的情况下, 网站部署 SSL 证书已然成为互联网的发展趋势.而在上一篇< 详解 SSL(一):网址栏的小绿锁有什么意义?>中,我们 ...

  6. 5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)

    前言 本篇文章学习书籍:<数据库系统概论>第5版 王珊 萨师煊编著 视频资源来自:数据库系统概论完整版(基础篇+高级篇+新技术篇) 由于 BitHachi 学长已经系统的整理过本书了,我在 ...

  7. HTML+CSS小实战案例 (照片墙特效、代码展示)

    预览图: HMTL代码部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  8. 30例 | 一文搞懂python日期时间处理

    前言 datetime是python的内置模块,用来处理日期和时间. 该模块常用的类有: 类名 功能说明 date 日期对象 time 时间对象 datetime 日期时间对象 timedelta 时 ...

  9. Linux Page Cache调优在Kafka中的应用

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/MaeXn-kmgLUah78brglFkg作者:Yang Yijun 本文主要描述Linux ...

  10. kafka如何保证数据的消息不丢失(最简洁)

    一.kafka 本身配置层面1.1.replication.factor 默认值1创建kafka的topic时候,每个分区设置的副本数, 根据broker数量酌情设置, 建议业界通常做法设置为3 1. ...