0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电源管理入门之CPU热插拔详解

yzcdx 来源: OS与AUTOSAR研究 2023-10-16 15:28 次阅读

之前介绍了电源开机关机重启,本小节开始介绍省电的威廉希尔官方网站 ,其中最暴力的省电方法就是直接拔核hotplug处理,就像需要10个人干活都要吃饭,但是现在活少了最节省的方法就是砍掉几个人,有点像裁员啊。

1. 省电威廉希尔官方网站 概览

d5a5e454-68d4-11ee-939d-92fbcf53809c.png

 对于省电,我们短时间不使用设备的时候可以进行休眠唤醒,长时间不使用就直接关机了。在使用设备的时候可以按照当前需要的性能进行调频处理就是CPUFreqDevFeq,当没重度使用或者只运行系统必须进程的时候可以进行CPU休闲(CPUIdle)、CPU热插拔(CPU Hotplug)、CPU隔离(Core Isolate)和动态PM(Runtime PM)。

CPUIdle指的是当某个CPU上没有进程可调度的时候可以暂时局部关掉这个CPU的电源,从而达到省电的目的,当再有进程需要执行的时候再恢复电源。

CPU Hotplug指的是我们可以把某个CPU热移除,然后系统就不会再往这个CPU上派任务了,这个CPU就可以放心地完全关闭电源了,当把这个CPU再热插入之后,就对这个CPU恢复供电,这个CPU就可以正常执行任务了。

CPU隔离指的是我们把某个CPU隔离开来,系统不再把它作为进程调度的目标,这样这个CPU就可以长久地进入Idle状态了,达到省电的目的。不过CPU隔离并不是专门的省电机制,我们把CPU隔离之后还可以通过set_affinity把进程专门迁移到这个CPU上,这个CPU还会继续运行。CPU隔离能达到一种介于CPUIdle和CPU热插拔之间的效果。

Runtime PM指的是设备的动态电源管理,系统中存在很多设备,但是并不是每种设备都在一直使用,比如相机可能在大部分时间都不会使用,所以我们可以在大部分时间把相机的电源关闭,在需用相机的时候,再给相机供电

cpu hotplug和idle的区别?

hotplug是从硬件上拔掉核下电,idle只是从软件上进行处理,也就是说调度器在idle时只是不去调用但是核还是可见的,hotplug直接没这个核了,软件完全不可见。

 省电管理可以达到省电的目的,但是也会降低系统的性能,包括响应延迟、带宽、吞吐量等。所以内核又提供了一个PM QoS框架,QoS是Quality Of Service(服务质量)。PM QoS框架一面向顾客提供接口,顾客可以通过这些接口对系统的性能提出要求,一面向各种省电机制下发要求,省电机制在省电的同时也要满足这些性能要求。PM QoS的顾客包括内核和进程:对于内核,PM QoS提供了接口函数可以直接调用;对于进程,PM QoS提供了一些设备文件可以让用户空间进行读写。PM QoS对某一项性能指标的要求叫做一个约束,约束分为系统级约束和设备级约束。系统级约束针对的是整个系统的性能要求,设备级约束针对的是某个设备的性能要求。

整体上电源管理也是策略和机制分离的,例如:

hotplug是一个机制,谁去用?可以用户App制定的策略、温控策略、系统suspend时需要等。

CPUFreq是策略和机制都包含的。

2. 热插拔代码介绍

cpu的状态包括:possible、present、online、active。

possible状态的cpu:可理解为存在这个CPU资源,但还没有纳入Kernel的管理范围。

present状态的cpu:表示已经被kernel接管。

online状态的cpu:表示可以被调度器使用。

active状态的cpu:表示可以被迁移migrate

Linux内核在初始的时候,会创建虚拟总线cpu_subsys,每个cpu调用register_cpu注册时,都会将cpu设备挂在这个总线下。cpu的拔插是通过操作文件节点online实现的,具体拔插操作如下(以cpu1为例):

echo0>/sys/devices/system/cpu/cpu1/online//拔核操作
echo1>/sys/devices/system/cpu/cpu1/online//插核操作

为什么以cpu1为例?

Linux CPU热插拔,支持在系统启动后,关闭任意一个secondary cpu(在ARM架构中,CPU0为boot cpu,不能被关闭),并在需要时重新打开它。

当操作/sys/devices/system/cpu/cpu1/online文件的时候,会执行drivers/base/core.c中online_store()函数

staticssize_tonline_store(structdevice*dev,structdevice_attribute*attr,
constchar*buf,size_tcount
)
{
boolval;
intret;

ret=strtobool(buf,&val);
if(ret< 0)
                return ret;

        ret = lock_device_hotplug_sysfs();
        if (ret)
                return ret;

        ret = val ? device_online(dev) : device_offline(dev);
        unlock_device_hotplug();
        return ret < 0 ? ret : count;
}
static DEVICE_ATTR_RW(online);

 这块有一个sysfs的知识点,就是DEVICE_ATTR_RW(online);声明了这个宏,就可以在文件系统里面为这个设备熟悉添加一个文件,当向这个文件写入字符串的时候就会调用拼接出来的online_store()函数,读这个文件的时候就会调用online_show()函数

#define__ATTR(_name,_mode,_show,_store){
.attr={.name=__stringify(_name),
.mode=VERIFY_OCTAL_PERMISSIONS(_mode)},
.show=_show,
.store=_store,
}

#define__ATTR_RW(_name)__ATTR(_name,0644,_name##_show,_name##_store)

#defineDEVICE_ATTR_RW(_name)
structdevice_attributedev_attr_##_name=__ATTR_RW(_name)

在online_store()函数中,拔核就执行device_offline(dev)函数
device_offline中dev->bus->offline(dev);
drivers/base/cpu.c中

structbus_typecpu_subsys={
.name="cpu",
.dev_name="cpu",
.match=cpu_subsys_match,
#ifdefCONFIG_HOTPLUG_CPU
.online=cpu_subsys_online,
.offline=cpu_subsys_offline,
#endif
};
cpu_device_down
cpu_down
cpu_down_maps_locked
_cpu_down
cpuhp_down_callbacks
takedown_cpu
[CPUHP_TEARDOWN_CPU]={
.name="cpu:teardown",
.startup.single=NULL,
.teardown.single=takedown_cpu,
.cant_stop=true,
},

do_idle状态机会调用

arch_cpu_idle_dead
cpu_die
cpu_die
psci_cpu_die
psci_ops.cpu_off
psci_0_2_cpu_off

 psci_0_2_cpu_off会调用__psci_cpu_off(PSCI_0_2_FN_CPU_OFF, state);最终发送smc指令给ATF,上面的cpu down流程汇总如下图:

d5e20ede-68d4-11ee-939d-92fbcf53809c.png

cpu up流程:

d5f98a1e-68d4-11ee-939d-92fbcf53809c.png

具体代码自己加log,或者打断点看好些。

3. ATF中处理

之前在电源管理入门-1关机重启详解中介绍的PSCI协议部分,这里会发送smc指令到ATF。在ATF中同理,会处理这些PSCI协议,这里不详细介绍了。

后记

 本篇文章尝试用markdown进行编写,图片用Midjourney生成,感觉效果还可以,之前每篇文章的排版很费时间。markdown可以只保留最小的一些格式,把注意力关注到文章内容本身,提高效率才能多写一些文章进行更新。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源管理
    +关注

    关注

    115

    文章

    6183

    浏览量

    144521
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10868

    浏览量

    211846
  • Linux
    +关注

    关注

    87

    文章

    11306

    浏览量

    209578
  • 热插拔
    +关注

    关注

    2

    文章

    224

    浏览量

    37374

原文标题:电源管理入门-3 CPU热插拔hotplug

文章出处:【微信号:OS与AUTOSAR研究,微信公众号:OS与AUTOSAR研究】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高精度热插拔电源监控

    本内容提供了高精度热插拔电源监控,介绍什么是热插拔和利用热插拔进行的设计方案及电源监控知识。
    发表于 11-04 10:00 1676次阅读
    高精度<b class='flag-5'>热插拔</b>和<b class='flag-5'>电源</b>监控

    热插拔是什么?热插拔有哪些特点?

    什么是热插拔热插拔(hot-plugging或Hot Swap)即带电插拔热插拔功能就是允许用户在不关闭系统,不切断电源的情况下取出和更
    发表于 12-13 10:53

    即插即用和热插拔的区别

    的用户接口。我们知道,在普通电脑里,USB(通用串行总线)接口设备和IEEE 1394接口设备等都可以实现热插拔,而在服务器里可实现热插拔的部件主要有硬盘、CPU、内存、电源、风扇、P
    发表于 10-23 10:26

    关于非隔离dcdc电源模块的热插拔问题详解

    `解答:热插拔瞬间会产生一个尖峰电压,对dcdc电源模块本身有一定的冲击作用,热插拔不会直接导致产品的失效,但长期热插拔会损伤模块本身,因此我司模块都禁止
    发表于 07-03 13:44

    热插拔冗余电源的设计

    热插拔冗余电源的设计资料分享来自网络
    发表于 03-19 22:28

    有关热插拔电源的各种问题

    热插拔表示一个系统在输入端、输出端和信号总线都处于工作状态的情况下,安装或拆卸电源模块的能力。热插拔冗余电源系统增加了系统的容错程度,这对于要求紧急停机的系
    发表于 10-04 21:32 53次下载

    有关热插拔电源的各种问题

    有关热插拔电源的各种问题热插拔表示一个系统在输入端、输出端和信号总线都处于工作状态的情况下,安装或拆卸电源模块的能力。
    发表于 10-11 18:26 4803次阅读

    热插拔

    热插拔              热插拔(hot-plugging或Hot Swap)功能就是允许用户在不关闭系统,不切断电源
    发表于 12-17 11:41 633次阅读

    ±48V热插拔应用tps23xx热插拔控制器

    摘要 通信和网络系统的快速发展加速了要求连续不断的电源需求的系统所需的热插拔能力的产品的增长。目前市面上有许多热插拔热插拔电源
    发表于 07-03 09:42 24次下载
    ±48V<b class='flag-5'>热插拔</b>应用tps23xx<b class='flag-5'>热插拔</b>控制器

    热插拔和非热插拔的区别

    热插拔和非热插拔的区别  热插拔和非热插拔是指电子设备或组件在工作状态下是否可以进行插拔操作的一种分类。
    的头像 发表于 12-28 10:01 2982次阅读

    键盘热插拔和非热插拔的区别

    电源供应、软件驱动、使用便利性、设备损坏与安全性、推动产业发展等。 1. 连接方式 热插拔键盘通常使用USB或无线连接方式,插入即可立即生效。非热插拔键盘一般使用PS/2接口连接,插入后需要重启计算机才能使用。 2.
    的头像 发表于 02-02 17:34 1w次阅读

    热插拔电源接口定义是什么

    热插拔电源接口定义主要涉及以下几个方面: 定义 热插拔(Hot Swap 或 Hot Plugging)即带电插拔,指的是在不关闭系统电源
    的头像 发表于 09-18 10:56 946次阅读

    热插拔电源和冗余电源哪个好

    热插拔电源和冗余电源各有其优势和适用场景,无法简单地判断哪个更好,而是需要根据具体的应用需求和环境来选择。 热插拔电源的优势 方便维护 :
    的头像 发表于 09-18 10:58 314次阅读

    热插拔电源是什么意思

    热插拔电源,即带电插拔电源,指的是在不关闭系统电源的情况下,能够安全地将电源模块、板卡等硬件设备
    的头像 发表于 09-18 11:00 617次阅读

    PCIe热插拔机制介绍

    。 为了防止意外的发生,PCIe Spec设计了一种“No Surprise”热插拔机制,即,当用户要插拔PCIe设备时,必须先通知系统软件做好准备,然后通过指示灯告知用户热插拔的状态。 二、原理
    的头像 发表于 11-20 09:07 421次阅读
    PCIe<b class='flag-5'>热插拔</b>机制介绍