写点什么

CPU 隔离:简介

  • 2022-04-01
  • 本文字数:1892 字

    阅读完需:约 6 分钟

CPU 隔离:简介

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

2022-04-01 17:215472

评论

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

百度人脸活体检测系统通过信通院“护脸计划”首批优秀级安全防护能力评估

百度开发者中心

安全 人脸识别 百度安全

IOS技术分享| WebRTC iOS源码下载&编译

anyRTC开发者

ios 音视频 WebRTC 实时通信 视频直播

白码低代码/无代码开发平台功能及作用

低代码小观

低代码 开发工具 开发平台 无代码 企业服务

一文,动态规划入门

bigsai

算法 动态规划

JavaIO流核心模块与基本原理

Java nio IO流 字符流 字节流

个人信息保护法生效,企业数据安全合规正当时

行云管家

信息安全 数据安全 企业安全 网络保护

入职字节跳动那一天,我哭了(蘑菇街被裁,奋战7个月拿下offer)

Java MySQL redis 程序员 算法

如何获取所有安装的应用程序信息

Changing Lin

11月日更

Apache APISIX 扩展指南

API7.ai 技术团队

Apache 插件 API网关 Apache APISIX

行云管家荣登36kr企服点评云计算软件排行榜NO.1

行云管家

云计算 软件 排行榜 IT运维

springboot集成阿里云短信

小鲍侃java

11月日更

墨天轮国产数据库沙龙 | 黄新著:金仓数据库全生命周期管控

墨天轮

国产数据库 KingBase 人大金仓

低代码是什么意思?

低代码小观

程序员 低代码 开发工具 开发平台 企业开发系统

OceanBase 源码解读(六):存储引擎详解

OceanBase 数据库

数据库 开发者 高性能 资源隔离 租户

11.11上云嘉年华,华为云数据库助力客户备战业务高峰

华为云数据库小助手

GaussDB GaussDB(for openGauss) GaussDB ( for Redis ) 华为云数据库

技术干货|开源项目-FlyFish使用攻略

云智慧AIOps社区

开源 大前端 低代码 数据可视化 大屏

恒源云(GPUSHARE)_Child Tuning: 反向传播版的Dropout

恒源云

深度学习

让脂肪起内讧?从内部全面瓦解脂肪

脑极体

300行ABAP代码实现一个最简单的区块链原型

汪子熙

区块链 SAP abap 11月日更

原来我才是内卷王,闭关3个月肝完Java 7大核心知识,成功斩获字节58万Offer。

Java高级开发

字节跳动 java; 字节跳动面经

推动产业创新,腾讯的底层逻辑是什么?

ToB行业头条

为什么那么多人在用WGCLOUD

王逅逅

zabbix 监控系统 linux运维 运维系统

内在可解释模型之RuleFit

索信达控股

机器学习 算法 模型

极光笔记丨Spark SQL 在极光的建设实践

极光GPTBots-极光推送

大数据 spark 计算引擎

《Linux一学就会》:第二章:Linux基本命令操作和文件管理

侠盗安全

Linux 运维 linux运维 云计算架构师

“神算子”上线!EasyDL时序预测模型零门槛轻松上手

百度开发者中心

百度飞桨

腾讯安全李滨:腾讯云数据安全与隐私保护探索与实践

腾讯安全云鼎实验室

数据安全 云安全

什么是DISA STIG?概述+STIG安全

旋极智能

业务数据清洗,落地实现方案

数据 数据清洗 数据管理 数据服务 业务数据

真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下

Java 程序员 架构 分布式 算法

初识Java反射概念和使用

CRMEB

CPU 隔离:简介_硬件_Frederic Weisbecker_InfoQ精选文章