首页 > 其他分享 >转:cpu性能和功耗相关的内核子系统

转:cpu性能和功耗相关的内核子系统

时间:2024-03-29 17:55:48浏览次数:22  
标签:task 功耗 任务 cpu idle cpuidle 内核 CPU

http://arthurchiao.art/blog/linux-cpu-2-zh/

 

1.1 调度器:时分复用 + 任务调度 —— sched

1.3 有任务:用哪个频率执行任务?—— cpufreq

1.4 无任务:执行轻量级占坑程序 —— idle task

从原理来说,非常简单。产品经理:什么都不做。
从实现来说,非常模糊。程序员:“什么都不做”的代码怎么写?

开发 leader 理解一下需求,从中翻译一下:

先保证一个目标:有任务变成 runnable 时(比如等到了键盘输入),能够恢复调度执行 —— 这决定了内核不能完全退出,比如至少要能主动或被动的响应系统事件;
在保证以上目标的前提下,内核做的事情越少越好 —— 节能减排,延迟处理器使用寿命,降本增效。
最终方案:引入一个特殊任务 idle task(很多资料中也叫 idle loop), 没有其他任务可调度时,就调度执行它。
从功能上来说,可以认为是一个优先级最低的占坑任务。
从实现来说,idle task 里面做什么都可以 —— 反正这时候这个 CPU 上没有任何其他 runnable tasks。 根据目的的不同,具体实现可以分为两大类:
节能;
低延迟。

1.4.1 直接降低电压和频率,节能

这是主流行为,idle task 里面实现某种降低功耗的逻辑,避免 CPU 空转,节能。 典型配置如 Linux 内核启动项 idle=halt。
这种方式的缺点是从较低功耗(某种程度的睡眠状态)唤醒时有一定的延迟。

1.4.1 直接降低电压和频率,节能
这是主流行为,idle task 里面实现某种降低功耗的逻辑,避免 CPU 空转,节能。 典型配置如 Linux 内核启动项 idle=halt。

这种方式的缺点是从较低功耗(某种程度的睡眠状态)唤醒时有一定的延迟。

1.4.2 仍然全速运行,保持最低唤醒延迟

这类场景比较特殊,比如追求极低延迟的高频交易场景。 没有任务时仍然让 CPU 保持电压和频率空转,不要降压降频, 这样有任务变成 runnable 时可以立即切换执行,延迟最低。 在 Linux 启动项中,对应 idle=poll 配置,后面几篇我们还会多次看到(尤其是这种配置的潜在风险)。

1.4.3 动态降低电压和频率,节能 —— cpuidle 和 c-states

通过一个单独的子系统(cpuidle)来实现不同级别的节能(c-states)。

这里注意和 turbo freq 的区别:

turbo 是部分 CORE 空闲时,有任务在运行的 CORE 可以动态超频, 目的是提高这几个有任务在运行的 CORE 的性能;
cpuidle/c-states 是当前 CORE/CPU 没有任务要运行(空闲 CPU),通过动态降频来节能。

1.5 idle loop 模式之三:空闲时间管理 —— cpuidle

再稍微展开介绍下上面第三种: 队列中如果没有 runnable task,比如所有任务都在等待 IO 事件。 这时候是没有任务需要 CPU 的,因此称为 CPU 空闲状态(idle states)。

空闲状态的下 CPU 该怎么管理,也是一门学问,因此内核又引入了另外一个子系统: cpu 空闲时间管理子系统 cpudile。具体工作内容后面介绍。

1.6 cpuidle + 响应延迟保证:电源管理服务等级 —— PM QoS

如果没有任务时 cpuidle 选择进入某种低电压/低频率的节能模式,当有任务到来时, 它的唤醒时间可能无法满足要求。针对这种情况,内核又引入了功耗管理或称电源管理 服务等级 (PM QoS)子系统。

PM QoS 允许应用注册一个最大 latency,内核确保唤醒时间不会高于这个阈值, 在尽量节能的同时实现快速响应。 具体原理也在后面单独章节介绍。

1.7 小结:各子系统的关系图

2 CPU 频率管理子系统(cpufreq):调节运行任务时的 p-state

2.1 原理:CPU performance/frequency scaling

3 linux idle loop

3.3 实现:idle loop
这里只是很简单的看一下,下一篇专门介绍内核实现。

简化之后,

while (1) {
while(!need_resched()) {
cpuidle_idle_call();
}

/*
  [Note: Switch to a different task. We will return to this loop when the
  idle task is again selected to run.]
*/
schedule_preempt_disabled();

}
如果没有其他任务,就执行 idle。从累积时间来说,idle 函数可能是人类历史上执行时间最长的函数。 [2]

标签:task,功耗,任务,cpu,idle,cpuidle,内核,CPU
From: https://www.cnblogs.com/ycjstudy/p/18104299

相关文章

  • mysql数据库cpu高导致微服务假死问题排查解决
    今天早上发现如下task微服务假死了没有响应,然后发现如下日志 2024-03-2901:06:17.089[Thread-152587]ERRORcom.alibaba.druid.pool.DruidPooledStatement.errorCheck[370]:CommunicationsException,druidversion1.2.11,jdbcUrl:jdbc:mysql://15.99.72.154:3306/no......
  • 8、.NET Core 实践 2024-03-29 11:44 CPU过高
    Windbg指令记录0:008>!runawayUserModeTimeThreadTime7:35c00days0:03:04.9538:111c0days0:03:01.6406:4d300days0:02:57.2815:84240days0:02:52.6400:6fe80days0:00:00.0312:6c280......
  • 平替NRF52832的国产超低功耗SOC蓝牙芯片 ESL电子价签等应用芯片
    电子价签,也叫电子货架标签(ElectronicShelfLabel,ESL),是一种带有信息收发功能的电子显示装置,主要应用于超市、便利店、药房等显示价格信息的电子类标签。放置在货架上,可替代传统纸质价格标签的电子显示装置,每一个电子货架标签通过有线或者无线网络与商场计算机数据库相连,并将最新的......
  • 硬件组成-CPU-编码-浮点数
    计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成在一起统称为中央处理单元(CPU)。CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算及控制功能。存储器是计算机系统中的记忆设备,分为内部存储器和......
  • 存储器与CPU的连接
    存储器与CPU的连接:1.存储容量的扩展:包括位扩展,字扩展等1.位扩展:是指增加存储字长。例如2片1K*4位的芯片可组成1K*8位的存储器。2.字扩展:是指增加存储器字的数量,例如用2片1K*8位的存储芯片可组成一个2K*8位的存储器。即存储字增加了一倍。3.字,位扩展:用8片1K*4位的存储芯片......
  • 北京理工大学操作系统 实验一 编译Linux内核
    实验一编译Linux内核实验一编译Linux内核一、实验目的二、实验内容三、实验步骤1.安装虚拟机并配置环境实验环境:2.下载并解压Linux内核源码3.配置内核编译选项4.编译并安装内核和模块5.修改GRUB配置四、实验结果及分析五、实验收获与体会Copyright©2024Squar......
  • Java 什么操作会导致cpu过高 java应用cpu过高原因
    top获取占用CPU高的进程IDtop进程pid=26850top显示信息,需要关注的相关信息:loadaverage:反映了任务队列的平均长度。如果此值超过了CPU数量,则表示当前CPU数量不足以处理任务,负载过高%us:用户CPU时间百分比。如果此值过高,可能是代码中存在死循环、或是频繁GC等%sy:系统CPU时......
  • top命令找到占用CPU最高的java线程
    1、使用jps查找正在运行的java进程2、通过使用top命令查找该线程下CPU使用最高的线程top-Hppid:即  top-Hp2860 3、TIME列就是各个Java线程耗费的CPU时间,显然CPU时间最长的是ID为2968的线程,用printf"%x\n"2968可得到2968的十六进制值为:b984、终于轮到jsta......
  • [转帖]Arm更新Neoverse产品路线图:N3/V3内核曝光,能效及AI性能大涨
    https://new.qq.com/rain/a/20240222A0495O00 +关注2月22日,半导体IP大厂Arm宣布推出新一代ArmNeoverse技术。其中包括,通过性能效率更优异的N系列新IP扩展ArmNeoverse计算子系统(CSS)产品路线图。与NeoverseCSSN2相比,NeoverseCSSN3的每瓦性能可提高......
  • MappedByteBuffer VS FileChannel:从内核层面对比两者的性能差异
    本文基于Linux内核5.4版本进行讨论自上篇文章《从Linux内核角度探秘JDKMappedByteBuffer》发布之后,很多读者朋友私信我说,文章的信息量太大了,其中很多章节介绍的内容都是大家非常想要了解,并且是频繁被搜索的内容,所以根据读者朋友的建议,笔者决定将一些重要的章节内容独......