写点什么

CPU 隔离:管理和权衡

  • 2022-04-06
  • 本文字数:1784 字

    阅读完需:约 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 隔离和 nohz_full 用户需要了解的基本原则:干扰很少能被消除,而是转移到其他地方。

管理


我们之前曾简要解释过,内务管理是内核需要做的周期性工作或事件驱动的基础工作,目的是维护其内部状态和服务,例如更新调度程序的内部统计数据或计时。

 

在正常的配置下,每个 CPU 都要承担内务管理工作。相反,nohz_full 配置会以隐含方式移除 nohz_full 集合之外的所有的内务管理工作。

 

也就是说,如果您有 8 个 CPU,并隔离 CPU 1、2、3、4、5、6、7:

 

nohz_full=1-7


则 CPU 0 将单独处理内务管理工作。这些工作涉及:

 

  • 未绑定计时器回调执行

  • 未绑定工作队列执行

  • 未绑定 kthreads 执行

  • 计时更新(jiffies 和 gettimeofday())

  • RCU 缓冲期跟踪

  • 代替隔离的 CPU 进行 RCU 回调执行

  • 代替隔离的 CPU 执行 1Hz 残余的已卸载计时器 Tick

  • 根据您的扩展设置:

  • 可以绑定的硬件 IRQ

  • 除隔离的工作负载以外的用户任务


尽管这些项目通常可由一个 CPU 代替其他 7 个 CPU 处理,但这种布局并不趋于无穷尽。随着 CPU 数量的增加,同时,随着内存和缓存的进一步分区,内务管理任务可能需要共担。通常情况下,为每个 NUMA 节点配置一个管理 CPU 是一种不错的方法。如以下配置所示:



由于 CPU 0 - 7 属于节点 0,CPU 8 - 15 属于节点 1,默认设置如下所示:

nohz_full=1-7,9-15


在测试阶段,建议通过 top/htop 等工具检查和监控管理程序的活动,以确保它们没有超负荷。例如,如果以上设置显示 CPU 0 或 CPU 8 的负荷为 100%,则可能需要添加更多的管理 CPU,尽管这种情况更有可能使用更多的节点来处理。

 

同样需要注意的是,对内核的访问(例如系统调用或内存故障)可能会产生更多的内务管理活动,并导致 CPU 承担更多负载。通常不建议从隔离的 CPU 中请求内核服务,这一点我们将在下一章介绍。

 

在任何情况下,内核都有内务工作需要处理,这不能忽略。如果所有 CPU 都被传递到“nohz_full=” 内核参数,则 CPU 0 将从隔离集合内随意清理出来,并为其单独分配内务管理工作,使用的消息如下:

NO_HZ: Clearing 0 from nohz_full range for timekeeping

 

因此,要注意的是:被隔离的 CPU 之所以获得无抖动的特性,是因为其他 CPU 承担了更多工作,而至少一个 CPU 需要为这些工作做出牺牲。

 

然而,这种情况并非一成不变。从长远来看,我们可以安排在隔离模式下运行所有 CPU,前提是在内核进入时更新计时,并且调度程序的能力进一步增强,能够支持在用户空间中运行长时间的任务,而不需要远程中断才能保持统计信息的最新状态。但我们还没有做到。

内核进入/退出的开销


完全的 dynticks 模式增加了内核进入和退出的大量开销。这些是由于:

 

  • 系统调用

  • 异常(页面错误、陷阱等)

  • 中断

 

这些开销首先是由于 RCU 跟踪和排序造成的。这项工作通常由周期性计时器中断来处理。现在,我们已经摒弃了这种方法,最终需要使用代价高昂的完全排序后的原子操作,来计算通过内核边界的往返次数。

 

这些开销的第二部分来自记录CPU运行时间。同样,内核必须使用内核边界上的探测器来计算任务在内核和用户空间中执行所花费的时间,因为周期性的中断不再执行这项工作。尽管记录 CPU 运行时间使用的排序比 RCU 跟踪要弱,但仍有一些处理会增加总体开销。


我们之前曾经说过,IRQ 与内务管理密切相关。使用 mlock() 可以防止页面错误(https://man7.org/linux/man-pages/man2/mlockall.2.html)。之后,用户需要减少系统调用,这就形成了一条硬性规则:full dynticks 不适合基于内核的 I/O 型工作负载。相反,应将其保留给以下任一方:

 

  • CPU 计算型的工作负载。涉及大量 CPU 处理和最少的基于内核的 I/O 的操作(依赖内核驱动程序处理系统调用和中断)。

  • 对于内核不参与的 I/O 类型的工作负载,即基于 DPDK 等用户空间驱动程序的 I/O (https://www.dpdk.org/)。

结语


CPU 隔离和 full dynticks 可以为某些特定工作负载带来明显好处,但需注意,它在许多情况下并不适用。您必须特别注意以下两点:

 

  • 您需要牺牲一个隔离的 CPU,由其处理内核内部的无聊工作。

  • Full dynticks 仅适用于 CPU 计算型的工作负载,或者基于用户空间驱动程序的 I/O。


在第五篇文章中,我们将最终测试这一特性,并展示如何识别并调试其余的干扰。

2022-04-06 11:432342

评论

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

集合工具类Collections指南,以及Comparable和Comparator排序详解

共饮一杯无

Java 集合 11月月更

2022全网最全最新Java面试题-独家内部教材

钟奕礼

Java 程序员 java面试 java编程

仅hashmap一道面试题我就搞定了面试官成功入职面试官:我裂开了

钟奕礼

Java java面试 java编程 程序员、

Python进阶(五十三)Flask Web开发实现将表单渲染成HTML

No Silver Bullet

Python flask web开发 11月月更

Java中的String类常用方法

共饮一杯无

Java string 11月月更

网络核心笔记(二)

lxmoe

学习笔记 网络 11月月更

赞不绝口!仅靠阿里P9分享的 Redis 工作手册,拿到60W年薪Offer

程序知音

Java 数据库 redis 后端技术 Redis 6.0

一文搞懂MySQL表字段类型长度的含义

闫同学

MySQL 数据库 11月月更

网络核心笔记(一)

lxmoe

学习笔记 网络 11月月更

阿里、百度、美团、面试题大集合,愿你更轻松拿下大厂offer

钟奕礼

Java java面试 java编程 程序员、

三到五年互联网公司Java面试题大全

钟奕礼

Java 程序员 java面试 java编程

霸榜巨作!阿里内部顶级大佬整理(Redis 5设计与源码分析)

钟奕礼

Java 程序员 java面试 java编程

这个bug,你中招了吗!!!

石臻臻的杂货铺

kafka 后端 11月月更

【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」

码界西柚

log4j logback 全链路追踪 11月日更 MDC

亿级万物互联新时代的物联网消息中间件EMQX调研

宋小生

物联网 mqtt emqx

2022年华为Java面经,还没搞懂JVM

钟奕礼

Java 程序员 Java 面试 java编程

2022一线大厂10w字面试总结,每日刷几道,明年金三银四稳了

程序员小毕

spring 程序员 JVM 架构师 java面试

Java 后端 100多道面试题,多看点题,没坏处!

钟奕礼

Java 程序员 java面试 java编程

8年Java开发含泪刷题,架构岗现在好难进,有点崩溃

钟奕礼

Java 程序员 java面试 java编程

Java | IO流数据流和标准输出流

陌上

Java 编程 11月月更

Python冷知识:如何找出新版本增加或删除了哪些标准库?

Python猫

Python

从基础到实战,阿里巴巴高并发系统设计全彩版手册限时开源

Java全栈架构师

程序员 面试 程序员人生 高并发 架构师

GitHub标星75k,阿里15W字的Spring高级文档(全彩版),真的太香了

程序知音

Java spring ssm java架构 后端技术

如何召回流失用户

穿过生命散发芬芳

11月月更 流失召回

【C语言】int 关键字

謓泽

11月月更

面试中如何才能拿到阿里 P7 的职级?

Java永远的神

Java 阿里巴巴 程序员 架构师 程序员晋升

2022成功入职阿里:阿里的三套Java研发岗面试题总结(文末有答案)

钟奕礼

Java java面试 java编程 程序员、

这20道微服务面试题,阿里、字节、美团、百度面试都问了

钟奕礼

Java 程序员 java面试 java编程

拿下大厂?这几道jvm面试题必须要懂

钟奕礼

Java 程序员 java面试 java编程

CPU 隔离:管理和权衡_硬件_Frederic Weisbecker_InfoQ精选文章