HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

快速识别你家的猫猫狗狗,教你用ModelBox开发AI萌宠应用

快乐非自愿限量之名

人工智能 AI

淘宝商品详情API接口:商品属性深度挖掘,助力精准营销

技术冰糖葫芦

API Explorer API 安全 API 文档 pinduoduo API

到手仅899元!紫光闪存UNIS S2 Ultra 2TB京东开启预售

新消费日报

MyBatis 的在使用上的注意事项及其辨析

EquatorCoco

mybatis

以太网交换机堆叠和级联的区别

Ogcloud

交换机 网络交换机 交换机配置

从游戏到实体《云上的中国3》深度解读网易伏羲的AI技术应用探索

新消费日报

容器网络实现(下):为容器插上”网线“

不在线第一只蜗牛

Docker 容器

BOE(京东方)携MLED新品及创新商显应用亮相2024美国InfoComm 以卓越创新实力打造科技盛宴

爱极客侠

Screen Wonders for Mac(3D壁纸屏保软件)

Mac相关知识分享

壁纸 mac壁纸 mac软件下载 壁纸软件

10W大奖等你瓜分,OpenTiny CCF开源创新大赛报名火热启动!

OpenTiny社区

Vue 低代码 组件库 OpenTiny TinyEngine

如何轻松利用人工智能深度学习,提升半导体制造过程中的良率预测?

Altair RapidMiner

人工智能 深度学习 数据分析

数字化转型的关键:全面探索低代码开发平台的实际应用

不在线第一只蜗牛

低代码 数字化

干货分享|视频的结构化标签问题

爱AI的猫猫头

AI 开发者 低代码 大模型 结构化标签

Microsoft Remote Desktop Beta for Mac(微软远程连接工具)v10.9.8版

Mac相关知识分享

MacBook 远程桌面 mac软件下载 mac下载

Spring Security 如何防止点击劫持

江南一点雨

AI赋能数据安全体系化落地,出席网安标委2024年第一次标准周“数据安全标准与能力建设研讨会”

百度安全

项目管理必备:2024年最佳看板工具软件排行榜单

爱吃小舅的鱼

看板 看板软件

团队能免费使用Confluence吗?一文读懂

爱吃小舅的鱼

知识管理 Cofluence

七个备受欢迎的IntelliJ IDEA实用插件

伤感汤姆布利柏

「小爱同学」接入豆包大模型;华为鸿蒙 OS 成为中国第二大操作系统丨 RTE 开发者日报 Vol.224

声网

AlertManager解析:构建高效告警系统

快乐非自愿限量之名

告警管理 系统搭建

云手机工具推荐:Facebook多账号运营如何防止封号?

Ogcloud

facebook 云手机 海外云手机 社媒运营 云手机推荐

终端中的 Kubernetes 集群管理——K9s

伤感汤姆布利柏

详解Spring Boot的RedisAutoConfiguration配置

华为云开发者联盟

Java Spring Boot 华为云 华为云开发者联盟 企业号2024年6月PK榜

直播预告!经管科研范式变革下的工具与实践 | 和鲸“101数智领航计划”

ModelWhale

人工智能 数据 经管

MQTTX 1.9.10 发布:升级 Faker.js、增强连接与订阅诊断、优化 UI

EMQ映云科技

mqtt

实时数据的处理一致性如何保证?

不在线第一只蜗牛

数据处理 实时数据

塑造财务规划团队的未来角色

智达方通

企业管理 全面预算管理 财务管理 财务规划

制造企业如何利用低代码开发平台实现数字化战略?

EquatorCoco

低代码 制造业

字节面试:MySQL自增ID用完会怎样?

王磊

Java 面试

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