系统解读CPU 隔离:简介

2022 年 4 月 6 日 InfoQ

作者 | Frederic Weisbecker
译者 | 韩志彬
策划 | 闫园园

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

1. CPU 隔离 – 简介
2. CPU 隔离 – Full Dynticks 深探
3. CPU 隔离 – Nohz_full
4. CPU 隔离 – 管理和权衡
5. CPU 隔离 – 实践

本文是第一篇。

CPU 隔离是一组强大的功能,可以为那些依赖特定且通常对延迟或性能有极端要求的工作负载设置提供支持。有些 DPDK(数据平面开发套件:https://www.dpdk.org/) 用例可能属于这种情况。然而,关于 CPU 隔离的文档和注释即使没有滞后于最新的开发进程,也是过于零散。要理清现有调试范围背后的益处和权衡取舍并非易事。本系列文章旨在阐明并引导用户了解我们在 Linux 社区 (https://www.kernel.org/) 和 SLE15 产品中 (https://www.suse.com/products/server/) 维护的这个晦涩的 Linux Kernel 子系统。

回归本源

内核的作用是提供基本的服务,从而通过一个统一接口使用硬件资源,这是工作负荷运行的基础。

我们以城市基础设施为例:道路、能源、供水、污水处理为人类活动提供支持。每个人都希望基础设施是透明并且可靠的。我们希望它们能发挥作用,同时希望永远不要意识到它们的存在。但有时,我们不得不这样做,因为最终每一项基础设施都需要维护。

内核与此类似。它使用系统调用,同步请求来提供服务,并使用异步处理来履行职责并维护内部状态,例如中断、计时器和内核线程。当然,这是一种简化描述,省去了许多细枝末节。

内务管理和内核噪音

如果其中一些异步工作对用户有明显的影响,比如页面回收(内存交换操作),则其余的大部分工作都是无感知的。计时器和中断在很短的时间内(通常以微秒计)执行;许多内核线程,其中一些是工作队列,执行时间也不应过长,尤其是它们的 CPU 时间通过调度程序进行平衡的时候。这些内核异步代码片段通常被称为“内务管理”工作。其中一些可以与特定的 CPU 绑定,另一些则可以解除绑定,因此可以在任何 CPU 上执行。

现在,如果多面手用户的工作负载不会因内核管理而产生负担,一些更专业的需求显然可能会受到干扰。对于需要整个 CPU 时间且不能容忍任何时钟周期被占用的处理任务,情况正是如此。DPDK (https://www.dpdk.org/) 就是这样一个例子,即直接通过用户空间轮询获取高带宽网络数据包,而且任何来自内核的微小干扰都可能导致数据包丢失。这种随机噪声通常被称为“抖动”,其他类型的工作负载可能通过更接近无抖动的 CPU 来实现其目标:例如,希望以最大化方式为客户机提供 CPU 资源的虚拟化主机、为获得稳定结果而进行的 CPU 绑定的基准测试、特定的实时需求等。

定时器中断

让我们从定时器中断出发,更详细地探索内核管理的世界。定时器作为内核的核心组件,过去一直是难以消除的干扰源。中断是指在每个 CPU 上以 100 到 1000 Hz 的频率执行的周期性定时器中断,有些架构提出了更高的数值。它执行多项工作:

  • 运行过期的通用计时器回调

  • 跳过 posix CPU 定时器,并运行已经过期的定时器

  • 计时:维护内部时钟 (jiffies) 和外部时钟 (gettimeofday())

  • 调度程序:维护内部状态、公平性和优先级(任务优先级)

  • 维护全局平均负载

  • 维护性能事件等

毫无疑问,对于依赖于无干扰、无抖动 CPU 的极端工作负载来说,这种每秒执行 100 到 1000 次的中断可能是一个问题。虽然很快,但这些中断仍然会占用一些 CPU 周期,并会破坏 CPU 缓存,导致在中断后恢复用户任务时丢失缓存。因此,我们希望节省这些工作负载的时间。

这个问题难以解决,因为 CPU 的计时器中断不能像许多其他硬件 IRQ 一样与另一个 CPU 绑定。它也不能采用线程方式。从根本上说,考虑到其工作性质,这个问题必须在 CPU 范围内局部解决。事实上,直到内核版本 2.6.21(2007)发布,打破中断周期的机制根本不存在。其行为如下图所示:

图 1:周期计时器中断的实现

从图中可以看出,中断会盲目触发并一直中断 CPU,无论 CPU 是在内核空间、用户空间还是处于空闲状态。这种布局仍可以使用 CONFIG_HZ_PERIODIC 恢复;早在 2007 年,这种恢复方式必须解决的第一个问题是优化功耗。事实上,当 CPU 空闲时,不需要中断,因为没有真正的工作要做,而 CPU 可以从关闭周期性中断中获益,以进入低功耗模式。这就是 CONFIG_NO_HZ_IDLE(以前称为 CONFIG_NO_HZ: https://lwn.net/Articles/223185/)被引入内核的原因,它在进入空闲状态时停止周期性中断,并在退出空闲状态时重新启动。此后,我们工作负载上的情况就如下图所示:

图 2:dynticks- 空闲计时器中断的实现

请记住:对于以无抖动 CPU 为目标的工作负载,我们更希望在无中断的情况下运行实际任务。详情请关注本系列第二篇文章。

点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!

今日好文推荐

泛型会让你的 Go 代码运行变慢

HTML5崛起之时,Java桌面时代就已经终结了

互联网企业给被裁员工发“毕业须知”;孟晚舟担任华为轮值董事长;腾讯员工被曝偷看创业公司工作文档 | Q资讯

云端开发是个坑!4年后,我们又回到了本地环境                               


 活动推荐

长期征集|寻找中国卓越技术团队

2022 年第一季《中国卓越技术团队访谈录》即将上线,本期精选了包括腾讯云鼎实验室、优麒麟、PingCAP、西门子 Mendix、火山引擎 ByteHouse、搜狗输入法无障碍产品在内的优秀团队,敬请关注。同时,访谈录现开放长期报名通道,如果你身处传统企业经历了数字化转型变革,或者正在互联网公司进行创新技术的研发,并希望 InfoQ 可以关注和采访你所在的技术团队,就请抓住机会吧!

点个在看少个 bug 👇

登录查看更多
0

相关内容

中央处理器(CPU,Central Processing Unit),电子计算机的主要设备之一。其功能主要是解释计算机指令以及处理计算机软件中的数据。
《智能电网组件:功能和效益》白皮书
专知会员服务
26+阅读 · 2022年4月13日
【Manning新书】Kafka实战,272页pdf,Kafka in Action
专知会员服务
60+阅读 · 2022年1月30日
【博士论文】分形计算系统
专知会员服务
33+阅读 · 2021年12月9日
专知会员服务
54+阅读 · 2021年7月21日
最新《计算机体系结构和系统的机器学习》综述论文
专知会员服务
54+阅读 · 2021年2月17日
Python图像处理,366页pdf,Image Operators Image Processing in Python
强化学习和最优控制的《十个关键点》81页PPT汇总
专知会员服务
103+阅读 · 2020年3月2日
系统解读CPU 隔离:Full Dynticks 深探
InfoQ
1+阅读 · 2022年4月11日
前端实现多文件编译器
阿里技术
0+阅读 · 2022年3月28日
这两个设计决策,让 Kubernetes 变得可怕
InfoQ
0+阅读 · 2022年2月19日
解读 5 种软件架构模式
InfoQ
2+阅读 · 2022年2月15日
新版本系统适配: Android 12 中的兼容性变更
谷歌开发者
0+阅读 · 2022年1月13日
一文说清linux system load
阿里技术
0+阅读 · 2021年12月15日
Google Play 政策更新提醒与重点解读 | 2021 年第四季度
谷歌开发者
0+阅读 · 2021年11月25日
Kubernetes 入门教程
阿里技术
0+阅读 · 2021年11月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Arxiv
22+阅读 · 2021年12月19日
Arxiv
13+阅读 · 2021年10月22日
VIP会员
相关VIP内容
《智能电网组件:功能和效益》白皮书
专知会员服务
26+阅读 · 2022年4月13日
【Manning新书】Kafka实战,272页pdf,Kafka in Action
专知会员服务
60+阅读 · 2022年1月30日
【博士论文】分形计算系统
专知会员服务
33+阅读 · 2021年12月9日
专知会员服务
54+阅读 · 2021年7月21日
最新《计算机体系结构和系统的机器学习》综述论文
专知会员服务
54+阅读 · 2021年2月17日
Python图像处理,366页pdf,Image Operators Image Processing in Python
强化学习和最优控制的《十个关键点》81页PPT汇总
专知会员服务
103+阅读 · 2020年3月2日
相关资讯
系统解读CPU 隔离:Full Dynticks 深探
InfoQ
1+阅读 · 2022年4月11日
前端实现多文件编译器
阿里技术
0+阅读 · 2022年3月28日
这两个设计决策,让 Kubernetes 变得可怕
InfoQ
0+阅读 · 2022年2月19日
解读 5 种软件架构模式
InfoQ
2+阅读 · 2022年2月15日
新版本系统适配: Android 12 中的兼容性变更
谷歌开发者
0+阅读 · 2022年1月13日
一文说清linux system load
阿里技术
0+阅读 · 2021年12月15日
Google Play 政策更新提醒与重点解读 | 2021 年第四季度
谷歌开发者
0+阅读 · 2021年11月25日
Kubernetes 入门教程
阿里技术
0+阅读 · 2021年11月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
相关基金
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员