首页 > 其他分享 >随心所动,厂商的CPU核管理策略介绍

随心所动,厂商的CPU核管理策略介绍

时间:2024-07-25 16:09:56浏览次数:15  
标签:task 功耗 管理策略 随心 cluster loading prev CPU

一、引文

随着CPU架构的发展,工艺的升级,带来性能提升,能效的提升(同性能下)。但是由于极限性能的增加,也带来了peak功耗的增加(大部分情况下,能效比的提升无法抵消这部分),CPU功耗优化一直是广大SOC厂商比较头疼的问题。

CPU功耗分为静态功耗和动态功耗:

  • 静态功耗(static power):mos管内部的PN节产生的泄漏电流,只要当前单元被上电就会有,静态功耗主要与温度和电压有关。

  • 动态功耗(dynamic power):芯片电路中的负载电容充放电造成,只要电路中有信号翻转就会产生动态功耗,动态功耗主要与频率和电压有关。其公式大体如下:



假设一个SOC有两个cluster,每个cluster有4个CPU,单个cluster的总功耗由cluster独有的模块(例如L3 cache)功耗与CPU的功耗两部分构成,单个cluster功耗构成如图1:



CPU LPM(Low power mode)状态即C states分为三种状态C0,C1和C4, 以qcom某款芯片为例:

  • C0为正常的active状态。

  • C1为WFI(wait for interrupt)模式,等到有中断的时候从C1迁移至C0状态。C1模式下会关闭core clock,此时动态功耗会变得非常低,退出延迟为40ns。

  • C4会在C1的基础上关闭core logic以及L1/L2cache,退出延迟为500ns左右。

当CPU无任务运行时,idle状态下会进入低功耗模式节省功耗,此时CPU上仅存在静态功耗,假如CPU进入C1状态,其状态切换对整体功耗的影响如图2:



假设系统中只有CPU0和CPU1,可以看到当CPU0和CPU1被唤醒,CPU整体功耗会增加cluster,CPU0和CPU1的static power以及dynamic power,如果CPU0进入WFI模式,则CPU0的dynamic power消失,如果CPU0 power down,则CPU0的static power也会消失,CPU1亦然。

现在主流的SOC处理器以8核为主,这8个核会被分为2~3个cluster。



如果软件把某个CPU设置为“隔离状态“,使得任务在调度时,不能选择这个CPU,那么这个CPU会因为没有任务运行,很快进入低功耗模式,从而达到节省功耗的目的。在有性能需求的时候能够以较低的延迟唤醒这些idle的CPU,快速的满足性能的需求。达到性能与功耗的平衡。下面我们介绍本文的“主角“—core control。

二、core control框架与原理

(1)core control核心逻辑

core control的核心逻辑是核数的控制,如何判断当前需要多少CPU呢?其核心逻辑在eval_need函数中。

决定cluster cpu核数主要有两个因素:CPU的loading和CPU上task 的数量。

首先看CPU loading如何决定核数,见下图6:



corectl每一轮会以cluster为单位check当前cluster满足负载要求需要多少CPU。need_cpus表示cluster最终计算需要的核数,每次check会从0开始计算,根据各个CPU的loading状态来确定是否需要增加CPU个数。CPU loading的统计方法是:当前CPU上runqueue的task loading值之和除以当前CPU理论最高的算力值,得到最终的CPU loading,具体如下图7:



图7 cpu loading计算方法

在上面根据CPU loading得到一个初步的need cpus值后,为了避免出现性能问题,还需要从runqueue task数的角度来看是否需要增加CPU数,其判断逻辑如下图8:



先说明一下上面函数中各个参数的含义:

  • nrrun: 当前cluster总共需要执行的task数。计算方法:当前cluster上所有CPU runqueue task之和再加上prev cluster上的misfit task(task util超过prev cluster最高capacity 90%的task)数。

  • nr_prev_assist: prev cluster总共有多少task需要当前cluster帮忙执行。计算方法:prev cluster cpu runqueue的总task数加上prev prev cluster的misfit task数再减去prev cluster中实际active的CPU数。

  • new_need: 当前最新得出的现在所需CPU个数值。

  • max_nr:当前cluster中CPU runqueue中task数最大值。

  • strict_nrrun:当前cluster过去一段时间平均的running task个数,计算方法:小核只统计总的平均task数,大核则需要将平均的running task数减掉active cpu个数。这样做的目的是如果小核有enable corectl功能,则需要小核开核的条件尽可能的宽松。

1)如果当前cluster上需要运行的task过多,大于设定的阈值,需要打开cluster所有CPU。

2)如果prev cluster需要当前cluster帮忙运行的task数超过阈值,则当前cluster需要开启nr_prev_assist个CPU。

3)当前cluster需要run的task数如果小于设定阈值,但是大于new_need值,则认为当前cluster所开的CPU数不够,需要增加一个。

4)如果当前cluster中有一个CPU runqueue的task数大于4个,则说明当前CPU loading过重,需要再开一个CPU来保证运行流畅。

5)new_need的值必须大于等于当前cluster平均的running task数,由于计算方法的差别,对于小核,尽可能的让所有core都打开。

6)最终need_cpus的个数必须小于等于cluster最大的CPU数,也必须满足设定的cluster min_cpus/max_cpus的值。

(2)core control sysfs相关节点

sysfs节点主要提供给userspace用来设定参数,userspace可以通过节点设置每个cluster min_cpus(最少)/max_cpus(最多)开启的cpu个数,在CPU loading不高时,cluster只需开启min_cpus个cpu,再根据CPU loading,动态开关CPU,最多可以开启max_cpus个cpu。也可以根据需要,通过节点busy_up_thresh/busy_down_thresh以及task_thresh从task loading或者数量的角度设定cluster开关CPU的难度。

标签:task,功耗,管理策略,随心,cluster,loading,prev,CPU
From: https://www.cnblogs.com/linhaostudy/p/18323401

相关文章

  • ck 大量删除数据 碎片 cpu 飙升
    尽管 副本 可以提供针对硬件的错误防护,但是它不能预防人为操作失误:数据的意外删除,错误表的删除或者错误集群上表的删除,以及导致错误数据处理或者数据损坏的软件bug.在很多案例中,这类意外可能会影响所有的副本.ClickHouse有内置的保护措施可以预防一些错误—例如,......
  • cpu proc sys文件系统下的含义
    proc文件系统(/proc/sys/kernel/)sched_child_runs_first/proc/sys/kernel/sched_child_runs_first是Linux内核中的一个配置文件,它用于控制调度器如何处理新创建的进程(即子进程)与它们的父进程之间的关系。功能说明:sched_child_runs_first:这个文件的值决定了当一个新进程(子进......
  • CPU(中央处理器)和GPU(图像处理器)的区别
    CPU(中央处理器)和GPU(图像处理器)的区别GPU和CPU是什么?CPU:中央处理器(英文CentralProcessingUnit)是一台计算机的运算核心和控制核心。CPU、内部存储器和输入/输出设备是电子计算机三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPUGPU:英文全称Graphi......
  • Linux--进程绑定NUMA节点或CPU核心
    对于CPU和NUMA架构的介绍本文不再做叙述,感兴趣的可自行查看:Linux--CPU简述,Linux--内存管理浅谈。 1、进程绑定NUMA节点或cpu核心的意义NUMA架构将内存和cpu分散在不同的NUMA节点上,每个节点都有自己的本地内存和cpu处理器,将进程绑定到特定的NUMA节点或cpu上,可以让进程直接......
  • 【Remotery】 Remotery-轻量级的远程实时 CPU/GPU 分析器设计浅析
    1.Remotery简介Remotery是一个轻量级的远程实时CPU/GPU分析器,主要用于监控CPU和GPU上多线程的活动。它提供了一个C文件,可以很容易的集成到项目中,并配置一个实时监控的Web界面,可以通过远程观察和分析程序的性能,适用于监控游戏的实时运行性能和分析移动端应用的性能场景。2.Remot......
  • arthas cpu 接近100%排查
    案例1:使用thread查看各threadcpu使用率,可以看到CPU使用率最高的有2个线程,以线程ID为19的为例子:输入thread 19查看线程19的堆栈信息可以看到是(CpuController.java:78行导致的问题jad反编译已加载的类的源码查找问题:jad--source-onlycom.codex.terry.controller.Cp......
  • 在K8S中,Pod占用内存和cpu较高,该如何解决?
    在Kubernetes(K8s)中,当Pod占用内存和CPU较高时,可以通过一系列步骤来诊断并解决问题,以确保集群的稳定性和性能。以下是详细的解决步骤:1.监控和诊断使用kubectl命令:使用kubectltoppods命令查看集群中各个Pod的CPU和内存占用情况,找出占用资源高的Pod。使用kubectldescribepod......
  • 3、CPU品牌分类介绍(AMD) - 计算机硬件品牌系列文章
    AMD是一家美国半导体跨国公司,‌成立于1969年,‌总部位于美国加利福尼亚州圣克拉拉市。‌AMD致力于开发设计集成电路产品,‌主要产品包括中央处理器(‌CPU)‌、‌图形处理器(‌GPU)‌、‌主板芯片组等,‌为游戏、‌人工智能、‌云计算等领域提供计算解决方案。‌AMD的产品和技术在全球......
  • 【C#】-目标平台×86、×64、Any CPU的区别
    简单来说,×86平台:将程序集编译为由兼容×86的32位公共语言运行库运行。×64平台:将程序集编译为由支持AMD64或EM64T指令集的计算机上的64位公共语言运行库运行。AnyCPU:(默认值)将程序集编译为在任意平台上运行。ltanium:将程序集编译为由采用ltanium处理器的计算机上的64位公共语言......
  • Ubuntu 22及以上版本的cpu频率及温度控制(台式机也适用)
    Ubuntu22及以上版本的cpu频率及温度控制(台式机也适用)问题安装auto-cpufreq使用auto-cpufreq问题Ubuntu22及以上版本的cpu频率及温度控制(台式机也适用)。在Ubuntu版本大于等于22时,GTK版本会变为4.0。此时,indicator-cpufreq便无法运行(其仅能运行在GTK3.0下)。此外,命......