AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

评论

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

文档管理系统对于企业有哪些优势

小炮

三点微服务标准化要素

阿泽🧸

微服务 6月月更

如何修改 Rancher v2.6 的 Rancher Server IP 地址

Rancher

Kubernetes k8s rancher

盘点攻防演练中红队的主要工具(下)

穿过生命散发芬芳

6月月更 攻防演练

数仓开发人员的价值体现

奔向架构师

数据仓库 数据模型 6月月更

接口测试使用Python装饰器

伤心的辣条

Python 程序人生 软件测试 自动化测试 接口测试

js中的变量提升和函数提升

北洋

android 6月月更

@开发者 云端一条生产线,让软件开发更敏捷、更安全

华为云开发者联盟

云计算 敏捷 华为云 devcloud

凿开数据冰层,透出智能时代的光:华为云与开发者的结伴旅行

脑极体

uni-app深入学习之模板运用【day4】

恒山其若陋兮

6月月更

linux之我常用的20条命令(之二)

入门小站

Linux

Curve 进入 CNCF Sandbox,完善统一云原生开源存储拼图

网易数帆

开源 分布式 云原生 存储 cncf

API 网关 Apache APISIX 助力雪球双活架构演进

API7.ai 技术团队

zookeeper 投资 网关 APISIX APISIX Summit

全球Top 2!腾讯计算机视觉能力再突破

脑极体

从链上数据出发,分析stETH脱锚之后的市场动态

区块链前沿News

eth Hoo

计算机网络之IP协议与以太网

未见花闻

6月月更

GoLang简单易用的json value读取工具!还并发安全

Krysta

Go json 简单清楚 方便

数据库每日一题---第13天:寻找病患

知心宝贝

数据库 云计算 前端 后端 6月月更

大数据平台迁移实践 | Apache DolphinScheduler 在当贝大数据环境中的应用

白鲸开源

Apache 大数据 开源 DolphinScheduler workflow

在线文本保留中文提取过滤工具

入门小站

工具

阿里云 MSE 基于 Apache APISIX 的全链路灰度方案实践

API7.ai 技术团队

阿里云 MSE APISIX 网关 全链路灰度

GetX 状态管理从入门到入迷

岛上码农

flutter ios 前端 安卓 6月月更

读《Software Systems Architecture》(11)—— Using Styles and Patterns

术子米德

架构师成长笔记

华为云重磅发布:“乐高式”自动驾驶研发开放平台,携手伙伴共建生态

华为云开发者联盟

自动驾驶 云计算 华为云

APISIX 助力中东社交软件,实现本地化部署

API7.ai 技术团队

API网关 社交软件 APISIX Summit

基于 Apache APISIX 的自动化运维平台

API7.ai 技术团队

自动化运维 APISIX 网关 APISIX Summit

python简介

左手の明天

Python Python解释器

融云 x 川航: 为民航通信安上“即时之翼”

融云 RongCloud

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