系统解读CPU 隔离:简介

2022 年 4 月 19 日 AI前线
作者 | 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 为目标的工作负载,我们更希望在无中断的情况下运行实际任务。详情请关注本系列第二篇文章。


你也「在看」吗?👇

登录查看更多
1

相关内容

中央处理器(CPU,Central Processing Unit),电子计算机的主要设备之一。其功能主要是解释计算机指令以及处理计算机软件中的数据。
【干货书】Python3编程高级指南,494页pdf
专知会员服务
90+阅读 · 2022年5月18日
【干货书】预测原理与实战,Forecasting: Principles & Practice
专知会员服务
92+阅读 · 2022年4月11日
【干货书】《Pydon'ts:编写优雅的Python代码》,263页pdf
专知会员服务
91+阅读 · 2021年11月2日
【硬核书】Linux核心编程|Linux Kernel Programming,741页pdf
专知会员服务
78+阅读 · 2021年3月26日
专知会员服务
35+阅读 · 2020年10月29日
《强化学习》简介小册,24页pdf
专知会员服务
272+阅读 · 2020年4月19日
为什么需要关注软件架构
InfoQ
0+阅读 · 2022年6月12日
系统解读CPU 隔离:Full Dynticks 深探
InfoQ
1+阅读 · 2022年4月11日
停止盲目使用微服务
InfoQ
0+阅读 · 2022年2月27日
gRPC 与.NET 入门
InfoQ
0+阅读 · 2022年2月17日
解读 5 种软件架构模式
InfoQ
2+阅读 · 2022年2月15日
为什么要从 CRUD 转向事件源架构?
InfoQ
0+阅读 · 2022年1月18日
实践教程|Docker使用记录
极市平台
0+阅读 · 2022年1月7日
为什么云基础设施应该是不可变的?
InfoQ
0+阅读 · 2021年12月30日
如何借助 Tekton 实现微服务的 Pipeline
InfoQ
0+阅读 · 2021年11月11日
Flutter 2.5 | 一文解读重点更新
谷歌开发者
0+阅读 · 2021年10月15日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
Online Event Selection for Mu3e using GPUs
Arxiv
0+阅读 · 2022年6月23日
Arxiv
0+阅读 · 2022年6月21日
Arxiv
76+阅读 · 2022年3月26日
Arxiv
23+阅读 · 2020年9月16日
Arxiv
22+阅读 · 2018年2月14日
VIP会员
相关资讯
为什么需要关注软件架构
InfoQ
0+阅读 · 2022年6月12日
系统解读CPU 隔离:Full Dynticks 深探
InfoQ
1+阅读 · 2022年4月11日
停止盲目使用微服务
InfoQ
0+阅读 · 2022年2月27日
gRPC 与.NET 入门
InfoQ
0+阅读 · 2022年2月17日
解读 5 种软件架构模式
InfoQ
2+阅读 · 2022年2月15日
为什么要从 CRUD 转向事件源架构?
InfoQ
0+阅读 · 2022年1月18日
实践教程|Docker使用记录
极市平台
0+阅读 · 2022年1月7日
为什么云基础设施应该是不可变的?
InfoQ
0+阅读 · 2021年12月30日
如何借助 Tekton 实现微服务的 Pipeline
InfoQ
0+阅读 · 2021年11月11日
Flutter 2.5 | 一文解读重点更新
谷歌开发者
0+阅读 · 2021年10月15日
相关基金
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
相关论文
Online Event Selection for Mu3e using GPUs
Arxiv
0+阅读 · 2022年6月23日
Arxiv
0+阅读 · 2022年6月21日
Arxiv
76+阅读 · 2022年3月26日
Arxiv
23+阅读 · 2020年9月16日
Arxiv
22+阅读 · 2018年2月14日
Top
微信扫码咨询专知VIP会员