红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

CPU 隔离:Nohz_full

  • 2022-04-06
  • 本文字数:1845 字

    阅读完需:约 6 分钟

CPU 隔离:Nohz_full

SUSE Labs 团队探索了 Kernel CPU 隔离及其核心组件之一:Full Dynticks(或 Nohz Full),并撰写了本系列文章:

 

1. CPU 隔离 – 简介

2. CPU 隔离 – Full Dynticks 深探

3. CPU 隔离 – Nohz_full

4. CPU 隔离 – 管理和权衡

5. CPU 隔离 – 实践

 

本文是第三篇。

NOHZ_FULL


“nohz_full=” 内核引导参数是当前用于配置 full dynticks 和 CPU 隔离的主接口。

 

CPU 列表参数传给 nohz_full 的作用是定义一组要隔离的 CPU。例如,假设您有 8 个 CPU,希望隔离 CPU 4、5、6、7:


nohz_full=4-7


关于 cpu-list 参数格式请参考:https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html#cpu-lists


nohz_full 的作用


当一个 CPU 包含在 nohz_full 引导参数的 CPU 列表中,内核会试图从那个 CPU 中排除尽可能多的内核干扰。本系列的第二篇文章已经从理论上解释了关闭计时器 Tick 的准备工作,这就是最终需要执行的操作:


定时器中断 


满足以下条件时,定时器可以停止:



残余的 1 Hz Tick(每秒钟中断)仍然存在,目的是为了维护调度程序内部统计。它以前在隔离的 CPU 上执行,但现在,这个事件使用一个未绑定的工作队列被卸载到 nohz_full 范围之外的 CPU。这意味着一个干净的设置可以在 CPU 上 100%无 Tick 运行。


定时器回调


未绑定定时器回调执行被移动到 nohz_full 范围之外的任何 CPU,因此,它们不会在错误的地方触发定时器 Tick。与此同时,被固定的定时器 Tick 不能转移到其他地方。我们稍后会探讨如何处理。


工作队列和其他内核线程


与定时器回调类似,未绑定的内核工作队列和 kthread 被移动到 nohz_full 范围之外的任何 CPU。但是,被固定的工作队列和 kthread 不能移动到其他地方。我们稍后会探讨如何处理。


RCU


大部分 RCU 处理任务都被卸载到隔离范围外的 CPU 上。CPU 设置为 nohz_full 在 NOCB 模式下运行(https://lwn.net/Articles/522262/),这意味着在这些 CPU 上排队的 RCU 回调是在非隔离的 CPU 上运行的未绑定 kthreads 中执行。不需要传递“rcu_nocbs=” 内核参数,因为这在传递“nohz_full=” 参数时自动处理。

 

CPU 也不需要通过 Tick 来积极报告静止状态,因为它在返回到用户空间时进入RCU扩展静止状态


Cputime 记账


将 CPU 切换到 full dynticks cputime 记账,这样它就不再依赖周期性事件。

其他隔离设置


尽管 nohz_full 是整个隔离设置的重要组成部分,但也需要考虑其他细节,其中重要的两项包括:

 

用户任务仿射


如果您想运行一个不被干扰的任务,一定不希望其他线程或进程与其共享 CPU。full dynticks 最终只在单个任务中运行,因此,需要:


  • 将每个隔离任务仿射到 nohz_full 范围内的一个 CPU。每个 CPU 必须只有一个隔离任务。

  • 将其他所有任务仿射到 nohz_full 范围之外。

 

有多种方式可以将您的任务仿射到一组 CPU 上,从底层系统调用 sched_setaffinity() (https://man7.org/linux/man-pages/man2/sched_setaffinity.2.html) ,到 taskset 等命令行工具(https://man7.org/linux/man-pages/man1/taskset.1.html)。另外也建议使用强大的 cgroup 接口,例如 cpusets (https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html)


IRQ 仿射


硬件 IRQ(除计时器和其他特定的中断之外)可能会在任何 CPU 上运行,并打乱您的隔离集。产生的干扰可能不仅仅是占用 CPU 时间和破坏 CPU 缓存的中断,IRQ 可能会在 CPU 上启动进一步的异步工作:softirq、计时器、工作队列等。因此,将 IRQ 仿射到 nohz_full 范围之外的 CPU 通常是一个好想法。这种仿射可以通过文件而取消:

/proc/irq/$IRQ/smp_affinity

 

$IRQ 是向量号,更多细节可见内核文档:https://www.kernel.org/doc/Documentation/IRQ-affinity.txt

 

所有这些 CPU 隔离设置都涉及到一些陷阱和权衡,我们将在第四篇文章中探讨。

2022-04-06 11:072189

评论

发布
暂无评论
发现更多内容

DRmare Tidal Music Converter Mac(一体式Tidal音乐转换器)v2.14.0直装版

影影绰绰一往直前

参与DevData调研,共建国内首份研发效能基准线,免费获得“体检报告”!

思码逸研发效能

NFTScan | 02.26~03.03 NFT 市场热点汇总

NFT Research

NFT NFTScan nft工具

千分位分隔?一个vue指令搞定

JYeontu

Vue 前端 vue指令 vue组件

企业财务规划的未来:自动化智能化如何推动全面预算管理

智达方通

自动化 智能化 全面预算管理 财务管理 财务自动化

Codepoint for mac(图形字符开发工具)v1.14激活版

iMac小白

Bridge 2024 for Mac(BR)v14.0.2激活版

iMac小白

INFINI Labs 产品更新 | Easysearch 1.7.1发布

极限实验室

console Gateway easysearch

函数防抖?一个vue指令搞定

JYeontu

Vue 前端 vue指令 Vue组件库

如何做代币分析:以 INJ 币为例

Footprint Analytics

blockchain Token

GraphicConverter 12 for Mac(图片浏览器)v12.1.1(6440)中文激活版

iMac小白

Adobe Photoshop 2024 v25.5最新中文破解版 附安装教程

iMac小白

Navicat Charts Viewer for Mac(Navicat图表查看器) v1.2.16激活版

iMac小白

漫画算法——二叉查找树的删除

梦倚栏杆

二叉树 删除 查找算法

MySQL学习笔记

秃头小帅oi

CADintosh X for Mac(CAD制图软件)v8.8.6 (726)注册版

影影绰绰一往直前

Reader for mac(快速且简约的 PDF 查看器)v5.8激活版

影影绰绰一往直前

装配制造业的MES系统中的物料齐套技术

万界星空科技

制造业 生产管理系统 mes 万界星空科技 装配行业

如何通过ETL实现快速同步美团订单信息

RestCloud

美团 数据同步 ETL 数据集成 订单同步

软件测试学习笔记丨SQL操作命令(库操作、表操作、表数据操作)

测试人

软件测试

低代码与MES的结合--万界星空科技低代码平台

万界星空科技

低代码 低代码平台 mes 制造业生产管理系统 万界星空科技

使用 Footprint Analytics 提升 Web3 项目的空投活动

Footprint Analytics

blockchain

火山引擎ByteHouse:如何用OLAP为抖音精准推荐提效

Geek_2d6073

开发苹果iOS应用后如何提交到App Store

雪奈椰子

想做大模型开发前,先来了解一下MoE

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟

一键生成个性化二维码:打造你的专属数字名片

JYeontu

JavaScript 前端 npm 插件 Node

【技术探讨】如何选择一款距离远的无线通信模块?

Geek_ab1536

淘宝京东1688...等电商平台商品详情数据,淘宝京东1688商品详情 API 返回值说明

Anzexi58

API 文档

关于AI智能生成(AIGC),整理一下你该知道这些

Geek_ee6d52

人工智能 AIGC

实现一个简单的哈希映射功能

JYeontu

JavaScript 前端 哈希表 算法、

「外部参数」功能已上线,爷们儿速来体验!!

都广科技

DevOps

CPU 隔离:Nohz_full_硬件_Frederic Weisbecker_InfoQ精选文章