【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

评论

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

更好用的Web端H265播放技术架构

百度开发者中心

智能视频

Tapdata Cloud 版本上新!新增ClickHouse,ADB MySQL等5个数据源支持

tapdata

MySQL oracle

提高儿童被拐意识

Tiger

28天写作

一劳永逸,使用 PicGo + GitHub 搭建个人图床工具

AlwaysBeta

GitHub 工具 PicGo 图床

高并发线下沙龙不容错过!

Qunar技术沙龙

高并发

详解布隆过滤器的原理和实现

万俊峰Kevin

golang 微服务 微服务架构 布隆过滤器 go-zero

【Promise 源码学习】第十四篇 - 实现工具方法 promisify

Brave

源码 Promise 12月日更

企业管理升级,如何加速信息化转型?

雯雯写代码

企业管理 信息化

kubernetes系列随笔03:kubernetes的发展和设计思想

谦寻

Docker Kubernetes 声明式

Flink是如何支持批流一体的

编程江湖

大数据 flink

聊聊Java底层那些事

码农参上

内容合集 签约计划第二季 技术专题合集 技术专区合集

教你用 JavaScript 设计一个 Neumorphism 风格的数字时钟 (代码详解)

海拥(haiyong.site)

大前端 js 28天写作 签约计划第二季 12月日更

测试 —— DevOps 快速交付的最大瓶颈

SoFlu软件机器人

WebView秒开方案探索

得物技术

CSS JavaScript html webview 大前端

大数据开发之Kafka 存储选型

@零度

大数据 kafka

前端开发JS框架之jQuery的基础知识分享

@零度

大前端 ​jQuery

ios技术分享| iOS 发布 framework 到 Cocoapods 以及常见问题

anyRTC开发者

ios 音视频 WebRTC CocoaPods Framework

百度文库新一代文档阅读器!核心技术点全解析!

百度Geek说

大前端 文档 百度文库

直播预告丨“Hello Ability:从页面跳转开始”周三晚不见不散

HarmonyOS开发者

HarmonyOS

Linux一学就会之文件的归档和压缩tar命令

学神来啦

Linux 运维 ZIP tar命令 linux云计算

信息网络向价值网络演进过程中产品形态的思考

拍乐云Pano

协程实现方式——从程序控制流转移谈起

Jowin

协程原理

如期而至-用户购买时间预测(上)

索信达控股

模型 购买预测 购买行为 精准营销

等保2.0正式发布了吗?核心思想包括什么?

行云管家

网络安全 等保 等级保护 等保2.0

效率高到爆炸的IT运维软件您安装了吗?

行云管家

运维 IT运维 运维i工具

鸿蒙智联设备开发,这五大法宝你应该拥有|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

关于RocketMQ事务方面Demo

数据库事务与事务隔离级别

编程江湖

数据库 java编程

全网最全-混合精度训练原理

科技热闻

2021年财经中国年会暨第十九届中国财经风云榜

大咖说

直播 财经 财经峰会

Vue路由守卫有哪些,怎么设置,使用场景等

编程江湖

Vue 路由器

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