浅谈linux性能调优之十七:进程绑定与中断绑定

2023-11-05

1.使用taskset设置CPU亲和性
taskset搜索并设定运行进程的CPU亲和性(根据进程ID)。它还可用于启动给定CPU亲和性的进程,这样就可将指定的进程与指定的CPU或者一组CPU捆绑
CPU 亲和性使用位掩码表示。最低位对应第一个逻辑 CPU,且最高位对应最后一个逻辑 CPU。这些掩码通常是十六进制,因此 0x00000001 代表处理器 1,0x00000003 代表处理器 3 。 
要设定运行进程的 CPU 亲和性,请执行以下命令,使用处理器或者您要捆绑到的处理器掩码替换 mask,使用您要更改亲和性的进程的进程 ID 替换 pid。 
# taskset -p mask pid
要启动给定亲和性的进程,请运行以下命令,使用处理器或者您要捆绑的处理器的掩码替换 mask,使用程序、选项以及您要运行的程序参数替换 program。 
# taskset mask -- program
与其将处理器指定为位码,您还可以使用 -c 选项提供逗号分开的独立处理器,或者一组处理器列表,类似如下: 
# taskset -c 0,5,7-9 -- myprogram
有关 taskset 的详情请参考 man page:man taskset。 
2.硬件中断发生频繁,是件很消耗 CPU 资源的事情,在多核 CPU 条件下如果有办法把大量硬件中断分配给不同的 CPU (core) 处理显然能很好的平衡性能。现在的服务器上动不动就是多 CPU 多核、多网卡、多硬盘,如果能让网卡中断独占1个 CPU (core)、磁盘 IO 中断独占1个 CPU 的话将会大大减轻单一 CPU 的负担、提高整体处理效率。
中断请求(IRQ)是用于服务的请求,在硬件层发出。可使用专用硬件线路或者跨硬件总线的信息数据包(消息信号中断,MSI)发出中断。 
启用中断后,接收 IRQ 后会提示切换到中断上下文。内核中断调度代码会搜索 IRQ 号码机器关联的注册中断服务路由(ISR)列表,并按顺序调用 ISR。ISR 会确认中断并忽略来自同一 IRQ 的多余中断,然后在延迟的句柄中排队完成中断处理,并忽略以后的中断来结束 ISR。 /proc/interrupts 文件列出每个 I/O 设备中每个 CPU 的中断数,每个 CPU 核处理的中断数,中断类型,以及用逗号分开的注册为接收中断的驱动程序列表。
IRQ 有一个关联的“类似”属性 smp_affinity,该参数可以定义允许为 IRQ 执行 ISR 的 CPU 核。这个属性还用来提高程序性能,方法是为一个或者多个具体 CPU 核分配中断类似性和程序线程类似性。这可让缓存线可在指定的中断和程序线程之间共享。 
具体 IRQ 数的中断近似性值是保存的相关的 /proc/irq/IRQ_NUMBER/smp_affinity 文件中,您可以作为 root 用户查看并修改该值。保存在这个文件中的值是一个十六进制字节掩码,代表系统中所有 CPU 核。 
例如:要为四核服务器指定以太网驱动程序,首先要确定与该以太网驱动程序关联的 IRQ 数: 
# grep eth0 /proc/interrupts
32:   0     140      45       850264      PCI-MSI-edge      eth0使用 IRQ 数定位正确的 smp_affinity 文件: 
# cat /proc/irq/32/smp_affinity 
fsmp_affinity 的默认值为 f,即可为系统中任意 CPU 提供 IRQ。将这个值设定为 1,如下,即表示只有 CPU 0 可以提供这个中断: 
# echo 1 >/proc/irq/32/smp_affinity
# cat /proc/irq/32/smp_affinity
1
在网络非常 heavy 的情况下,对于文件服务器、高流量 Web 服务器这样的应用来说,把不同的网卡 IRQ 均衡绑定到不同的 CPU 上将会减轻某个 CPU 的负担,提高多个 CPU 整体处理中断的能力;对于数据库服务器这样的应用来说,把磁盘控制器绑到一个 CPU、把网卡绑定到另一个 CPU 将会提高数据库的响应时间、优化性能。合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能。
注意:在手动绑定 IRQ 到 CPU 之前需要先停掉 irqbalance 这个服务,irqbalance 是个服务进程、是用来自动绑定和平衡 IRQ 的:# /etc/init.d/irqbalance stop


转自:https://my.oschina.net/sharelinux/blog/146858

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈linux性能调优之十七:进程绑定与中断绑定 的相关文章

  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真

随机推荐

  • go 进阶 RPC相关: 一. RPC 与 Protobuf 基础问题

    目录 一 什么是RPC 1 RPC 实现原理 2 有http为什么还要出现RPC 3 Protobut Protobuf 编码方式 Protobuf 数据存储方式 Protobuf对于数据存储的三大原则 Protobuf 序列化原理 4 其
  • GBDT浅谈以及代码实现

    GBDT作为近年很热门的模型 其性能非常突出 用途也是涵盖了从特征选择到分类 回归 被广大从业者和爱好者所使用 网上关于gbdt的原理和数学推导已经有很多 我就谈谈我个人的浅见 如有错误还望指正 同时还附上我自己实现的简单的python代码
  • MSP430 LCD控制器解释

    CC430F613x的LCD控制器最多能控制160段 The LCD B controller features are Display memory Automatic signal generation Configurable fra
  • 关于微信开发的 appid,openid,unionid

    1 appid 公众号的唯一标识 注册即分配 可在公众号后台查询 用来进行公众号 小程序等的各种交互功能 2 openid 用户的唯一标识 加密后的微信号 对同一公众号 openid唯一 但对于不同公众号 openid不同 用户在关注公众号
  • nn.Sequential和nn.Module区别与选择

    一 nn Sequential torch nn Sequential是一个Sequential容器 模块将按照构造函数中传递的顺序添加到模块中 另外 也可以传入一个有序模块 为了更容易理解 官方给出了一些案例 Sequential使用实例
  • SDUT 2022 Winter Individual Contest - E ( H - Perfect Ban )

    题目链接 题意 就是在一个矩阵中删去一行和一列 使得剩余的值最小 题解 首先我们先意识到的是本题应该是没有重复的数的 虽然题目中好像没有说明 但是看了很多的题解好像都没有考虑 然后就是找到最大值和次大值 这里最大值是确定的 但是次大值是不确
  • 论文阅读——Bridging Global Context Interactions for High-Fidelity Image Completion

    2022 CVPR 2022 Bridging Global Context Interactions for High Fidelity Image Completion pdf code 本文创新点 在粗修复阶段 提出限制性卷积块 Re
  • File转base64的封装(回调函数形式),以及如何通过base64判断数据源的类型

    最近的task都是文件流的上传下载各种转 主要是涉及File转base64 简要思路就是 FileReader读取文件 通过readAsURL方法 获得一个base64类型的流 看了看网上别人的封装 File转base64 param fi
  • Mybatis动态sql深度剖析

    转自 Mybatis动态sql深度剖析 下文笔者将带领您一步一步的进入Mybatis动态sql的世界 如下所示 mybatis动态sql 动态sql 就是可以变化的sql Mybatis可根据OGNL表达式 一步一步的生成sql语句 myb
  • 【华为OD机试真题 C++】硬件产品销售方案

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • '' is not defined js传递的参数未定义

    jsp页面代码 td style font weight blod text align center width 150px a span style color blue 删除 span a td js代码 function delet
  • ubuntu 安装 cuda10.2 8.0 及 cuBLAS

    Ubuntu 18 04安装 cuda10 2 安装显卡驱动 Install NVIDIA driver sudo apt get install no install recommends nvidia driver 430 Reboot
  • ChatGPT开源吗

    作为一个由OpenAI开发的AI模型 ChatGPT的源代码并没有完全开源 OpenAI提供了API 以让开发者在他们的应用程序中使用ChatGPT的能力 但是源代码并没有公开发布 然而 OpenAI开源了一个与GPT 2相似的模型 称为G
  • 使用Python究竟可以做什么?下面是Python的3个主要应用

    前言 如果您正在考虑学习Python 或者您最近才开始学习 您可能会问自己 我用Python到底能做什么 这个问题很难回答 因为Python有很多应用程序 但随着时间的推移 我发现Python有3种主要的流行应用 Web开发 数据科学 包括
  • 原生js——实现ios辅助触控的悬浮球案例

    用过iphone的都知道 ios系统有一个重要的功能 辅助触控 可以让我们在触摸屏幕有困难或需要自适应配件的情况下使用iphone 辅助触控中 悬浮球充当着重要角色 它置顶悬浮在屏幕边缘 可任意移动 既不影响用户正常操作系统 又能提供许多功
  • 以太坊生产网络/测试网络/私有网络

    要理解以太坊 PrivateNetwork 先要理解以太坊的两种官方网络 目前以太坊官方提供了两种网络 生产环境网络 测试网络 TestNet 下面将分别简单讲解下这两种网络 以太坊生产网络 以太坊的生产网络顾名思义 也就是产生真正有价值的
  • SpringBoot 封装Windows 性能监控

    整体项目结构 BlueSky 的pom xml 文件
  • 华为OD机试 - 观看文艺汇演问题(JS)

    题目描述 为了庆祝中国共产党成立100周年 某公园将举行多场文艺表演 很多演出都是同时进行 一个人只能同时观看一场演出 且不能迟到早退 由于演出分布在不同的演出场地 所以连续观看的演出最少有15分钟的时间间隔 小明是一个狂热的文艺迷 想观看
  • 【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】

    目录 前言 1 直接选择排序 1 1基本思想 1 2直接选择排序实现过程 1 3动图助解 1 4直接选择排序源码 2 堆排序 2 1堆排序的概念 2 2堆排序源码 前言 选择排序有两种常见的 直接选择排序 堆排序 1 直接选择排序 1 1基
  • 浅谈linux性能调优之十七:进程绑定与中断绑定

    1 使用taskset设置CPU亲和性 taskset搜索并设定运行进程的CPU亲和性 根据进程ID 它还可用于启动给定CPU亲和性的进程 这样就可将指定的进程与指定的CPU或者一组CPU捆绑 CPU 亲和性使用位掩码表示 最低位对应第一个