写点什么

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:073089

评论

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

大模型区域落地再加速!百度“文心中国行”西部首站落地成都锦江

飞桨PaddlePaddle

百度 BAIDU 百度飞桨 文心一言 文心大模型

以算力深挖数据应用价值!和鲸助力北京市市场监管数据应用创新竞赛圆满收官!

ModelWhale

大数据 数据应用 数据大模型

Pandabuy VS Wegobuy哪个代购系统强?类似软件哪家公司开发

tbapi

淘宝代购系统 Pandabuy wegobuy 代购系统

拓展海外社媒市场,云手机抢占先机

Ogcloud

云手机 海外云手机 云手机海外版 社媒运营 社媒营销

香港的云主机怎么样?为网站运行和响应有哪些帮助?

一只扑棱蛾子

云主机

HCDG天津站精彩回顾 | AI高效开发, ModelArts技术动手工作坊

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号2024年4月PK榜 华为云HCDG

揭露 FileSystem 引起的线上 JVM 内存溢出问题

vivo互联网技术

JVM 内存泄露 OOM 内存溢出

大模型,为什么非得和「弱智吧」过不去?

白洞计划

AI

网站打开504,504网关超时可能是哪些原因导致

德迅云安全杨德俊

IAM赋能数字化转型

芯盾时代

iam 统一身份认证 业务安全

提示词优化的自动化探索:Automated Prompt Engineering

Baihai IDP

程序员 AI 企业号 4 月 PK 榜 Prompt Engineering 提示词工程

实践探讨Python如何进行异常处理与日志记录

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号2024年4月PK榜

青椒云桌面玩转AIGC应用部署

青椒云云电脑

云桌面 AIGC

淘宝/天猫商品评论API:实时追踪用户反馈,洞悉市场动态

技术冰糖葫芦

api 货币化 API 文档 pinduoduo API

Appium控件互动攻略:提升自动化测试效率的必备方法大揭秘!

测吧(北京)科技有限公司

测试

《2023年度快团团行业洞察报告》呱呱爆品重磅发布!

极客天地

性能问题分析优化实践案例

老张

高可用 性能优化 性能测试 稳定性保障

如何基于Django中的WebSockets和异步视图来实现实时通信功能

不在线第一只蜗牛

django Web websockets

人民日报媒体技术公司与华为达成鸿蒙合作 助力超千家党媒单位融入鸿蒙生态

最新动态

文本向量化模型新突破——acge_text_embedding 勇夺 C-MTEB 榜首

中杯可乐多加冰

rag 文本嵌入模型 文本向量化 文本嵌入

大模型的现在进行时:走出对话框,走向产业端

Alter

大模型,为什么非得和「弱智吧」过不去?

脑极体

AI

领跑数字化转型:望繁信科技荣登「2024智能自动化技术商Top 15」榜单

望繁信科技

数据挖掘 流程挖掘 流程资产 流程智能

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