0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

電源管理入門(mén)之CPU熱插拔詳解

yzcdx ? 來(lái)源: OS與AUTOSAR研究 ? 2023-10-16 15:28 ? 次閱讀

之前介紹了電源開(kāi)機(jī)關(guān)機(jī)重啟,本小節(jié)開(kāi)始介紹省電的技術(shù),其中最暴力的省電方法就是直接拔核hotplug處理,就像需要10個(gè)人干活都要吃飯,但是現(xiàn)在活少了最節(jié)省的方法就是砍掉幾個(gè)人,有點(diǎn)像裁員啊。

1. 省電技術(shù)概覽

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

?對(duì)于省電,我們短時(shí)間不使用設(shè)備的時(shí)候可以進(jìn)行休眠喚醒,長(zhǎng)時(shí)間不使用就直接關(guān)機(jī)了。在使用設(shè)備的時(shí)候可以按照當(dāng)前需要的性能進(jìn)行調(diào)頻處理就是CPUFreqDevFeq,當(dāng)沒(méi)重度使用或者只運(yùn)行系統(tǒng)必須進(jìn)程的時(shí)候可以進(jìn)行CPU休閑(CPUIdle)、CPU熱插拔(CPU Hotplug)、CPU隔離(Core Isolate)和動(dòng)態(tài)PM(Runtime PM)。

CPUIdle指的是當(dāng)某個(gè)CPU上沒(méi)有進(jìn)程可調(diào)度的時(shí)候可以暫時(shí)局部關(guān)掉這個(gè)CPU的電源,從而達(dá)到省電的目的,當(dāng)再有進(jìn)程需要執(zhí)行的時(shí)候再恢復(fù)電源。

CPU Hotplug指的是我們可以把某個(gè)CPU熱移除,然后系統(tǒng)就不會(huì)再往這個(gè)CPU上派任務(wù)了,這個(gè)CPU就可以放心地完全關(guān)閉電源了,當(dāng)把這個(gè)CPU再熱插入之后,就對(duì)這個(gè)CPU恢復(fù)供電,這個(gè)CPU就可以正常執(zhí)行任務(wù)了。

CPU隔離指的是我們把某個(gè)CPU隔離開(kāi)來(lái),系統(tǒng)不再把它作為進(jìn)程調(diào)度的目標(biāo),這樣這個(gè)CPU就可以長(zhǎng)久地進(jìn)入Idle狀態(tài)了,達(dá)到省電的目的。不過(guò)CPU隔離并不是專門(mén)的省電機(jī)制,我們把CPU隔離之后還可以通過(guò)set_affinity把進(jìn)程專門(mén)遷移到這個(gè)CPU上,這個(gè)CPU還會(huì)繼續(xù)運(yùn)行。CPU隔離能達(dá)到一種介于CPUIdle和CPU熱插拔之間的效果。

Runtime PM指的是設(shè)備的動(dòng)態(tài)電源管理,系統(tǒng)中存在很多設(shè)備,但是并不是每種設(shè)備都在一直使用,比如相機(jī)可能在大部分時(shí)間都不會(huì)使用,所以我們可以在大部分時(shí)間把相機(jī)的電源關(guān)閉,在需用相機(jī)的時(shí)候,再給相機(jī)供電

cpu hotplug和idle的區(qū)別?

hotplug是從硬件上拔掉核下電,idle只是從軟件上進(jìn)行處理,也就是說(shuō)調(diào)度器在idle時(shí)只是不去調(diào)用但是核還是可見(jiàn)的,hotplug直接沒(méi)這個(gè)核了,軟件完全不可見(jiàn)。

?省電管理可以達(dá)到省電的目的,但是也會(huì)降低系統(tǒng)的性能,包括響應(yīng)延遲、帶寬、吞吐量等。所以內(nèi)核又提供了一個(gè)PM QoS框架,QoS是Quality Of Service(服務(wù)質(zhì)量)。PM QoS框架一面向顧客提供接口,顧客可以通過(guò)這些接口對(duì)系統(tǒng)的性能提出要求,一面向各種省電機(jī)制下發(fā)要求,省電機(jī)制在省電的同時(shí)也要滿足這些性能要求。PM QoS的顧客包括內(nèi)核和進(jìn)程:對(duì)于內(nèi)核,PM QoS提供了接口函數(shù)可以直接調(diào)用;對(duì)于進(jìn)程,PM QoS提供了一些設(shè)備文件可以讓用戶空間進(jìn)行讀寫(xiě)。PM QoS對(duì)某一項(xiàng)性能指標(biāo)的要求叫做一個(gè)約束,約束分為系統(tǒng)級(jí)約束和設(shè)備級(jí)約束。系統(tǒng)級(jí)約束針對(duì)的是整個(gè)系統(tǒng)的性能要求,設(shè)備級(jí)約束針對(duì)的是某個(gè)設(shè)備的性能要求。

整體上電源管理也是策略和機(jī)制分離的,例如:

hotplug是一個(gè)機(jī)制,誰(shuí)去用?可以用戶App制定的策略、溫控策略、系統(tǒng)suspend時(shí)需要等。

CPUFreq是策略和機(jī)制都包含的。

2. 熱插拔代碼介紹

cpu的狀態(tài)包括:possible、present、online、active。

possible狀態(tài)的cpu:可理解為存在這個(gè)CPU資源,但還沒(méi)有納入Kernel的管理范圍。

present狀態(tài)的cpu:表示已經(jīng)被kernel接管。

online狀態(tài)的cpu:表示可以被調(diào)度器使用。

active狀態(tài)的cpu:表示可以被遷移migrate。

?Linux內(nèi)核在初始的時(shí)候,會(huì)創(chuàng)建虛擬總線cpu_subsys,每個(gè)cpu調(diào)用register_cpu注冊(cè)時(shí),都會(huì)將cpu設(shè)備掛在這個(gè)總線下。cpu的拔插是通過(guò)操作文件節(jié)點(diǎn)online實(shí)現(xiàn)的,具體拔插操作如下(以cpu1為例):

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

為什么以cpu1為例?

Linux CPU熱插拔,支持在系統(tǒng)啟動(dòng)后,關(guān)閉任意一個(gè)secondary cpu(在ARM架構(gòu)中,CPU0為boot cpu,不能被關(guān)閉),并在需要時(shí)重新打開(kāi)它。

當(dāng)操作/sys/devices/system/cpu/cpu1/online文件的時(shí)候,會(huì)執(zhí)行drivers/base/core.c中online_store()函數(shù)

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

ret=strtobool(buf,&val);
if(ret

?這塊有一個(gè)sysfs的知識(shí)點(diǎn),就是DEVICE_ATTR_RW(online);聲明了這個(gè)宏,就可以在文件系統(tǒng)里面為這個(gè)設(shè)備熟悉添加一個(gè)文件,當(dāng)向這個(gè)文件寫(xiě)入字符串的時(shí)候就會(huì)調(diào)用拼接出來(lái)的online_store()函數(shù),讀這個(gè)文件的時(shí)候就會(huì)調(diào)用online_show()函數(shù)

#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()函數(shù)中,拔核就執(zhí)行device_offline(dev)函數(shù)
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狀態(tài)機(jī)會(huì)調(diào)用

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會(huì)調(diào)用__psci_cpu_off(PSCI_0_2_FN_CPU_OFF, state);最終發(fā)送smc指令給ATF,上面的cpu down流程匯總?cè)缦聢D:

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

cpu up流程:

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

具體代碼自己加log,或者打斷點(diǎn)看好些。

3. ATF中處理

之前在電源管理入門(mén)-1關(guān)機(jī)重啟詳解中介紹的PSCI協(xié)議部分,這里會(huì)發(fā)送smc指令到ATF。在ATF中同理,會(huì)處理這些PSCI協(xié)議,這里不詳細(xì)介紹了。

后記

?本篇文章嘗試用markdown進(jìn)行編寫(xiě),圖片用Midjourney生成,感覺(jué)效果還可以,之前每篇文章的排版很費(fèi)時(shí)間。markdown可以只保留最小的一些格式,把注意力關(guān)注到文章內(nèi)容本身,提高效率才能多寫(xiě)一些文章進(jìn)行更新。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電源管理
    +關(guān)注

    關(guān)注

    115

    文章

    6121

    瀏覽量

    143949
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10769

    瀏覽量

    210428
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208465
  • 熱插拔
    +關(guān)注

    關(guān)注

    2

    文章

    212

    瀏覽量

    37036

原文標(biāo)題:電源管理入門(mén)-3 CPU熱插拔hotplug

文章出處:【微信號(hào):OS與AUTOSAR研究,微信公眾號(hào):OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高精度熱插拔電源監(jiān)控

    本內(nèi)容提供了高精度熱插拔電源監(jiān)控,介紹什么是熱插拔和利用熱插拔進(jìn)行的設(shè)計(jì)方案及電源監(jiān)控知識(shí)。
    發(fā)表于 11-04 10:00 ?1636次閱讀
    高精度<b class='flag-5'>熱插拔</b>和<b class='flag-5'>電源</b>監(jiān)控

    熱插拔是什么?熱插拔有哪些特點(diǎn)?

    什么是熱插拔熱插拔(hot-plugging或Hot Swap)即帶電插拔,熱插拔功能就是允許用戶在不關(guān)閉系統(tǒng),不切斷電源的情況下取出和更
    發(fā)表于 12-13 10:53

    即插即用和熱插拔的區(qū)別

    的用戶接口。我們知道,在普通電腦里,USB(通用串行總線)接口設(shè)備和IEEE 1394接口設(shè)備等都可以實(shí)現(xiàn)熱插拔,而在服務(wù)器里可實(shí)現(xiàn)熱插拔的部件主要有硬盤(pán)、CPU、內(nèi)存、電源、風(fēng)扇、P
    發(fā)表于 10-23 10:26

    關(guān)于非隔離dcdc電源模塊的熱插拔問(wèn)題詳解

    `解答:熱插拔瞬間會(huì)產(chǎn)生一個(gè)尖峰電壓,對(duì)dcdc電源模塊本身有一定的沖擊作用,熱插拔不會(huì)直接導(dǎo)致產(chǎn)品的失效,但長(zhǎng)期熱插拔會(huì)損傷模塊本身,因此我司模塊都禁止
    發(fā)表于 07-03 13:44

    熱插拔冗余電源的設(shè)計(jì)

    熱插拔冗余電源的設(shè)計(jì)資料分享來(lái)自網(wǎng)絡(luò)
    發(fā)表于 03-19 22:28

    熱插拔的基本原理是什么?熱插拔有哪些功能?

    熱插拔的基本原理是什么?熱插拔有哪些功能?
    發(fā)表于 05-24 06:01

    有關(guān)熱插拔電源的各種問(wèn)題

    熱插拔表示一個(gè)系統(tǒng)在輸入端、輸出端和信號(hào)總線都處于工作狀態(tài)的情況下,安裝或拆卸電源模塊的能力。熱插拔冗余電源系統(tǒng)增加了系統(tǒng)的容錯(cuò)程度,這對(duì)于要求緊急停機(jī)的系
    發(fā)表于 10-04 21:32 ?53次下載

    有關(guān)熱插拔電源的各種問(wèn)題

    有關(guān)熱插拔電源的各種問(wèn)題熱插拔表示一個(gè)系統(tǒng)在輸入端、輸出端和信號(hào)總線都處于工作狀態(tài)的情況下,安裝或拆卸電源模塊的能力。
    發(fā)表于 10-11 18:26 ?4742次閱讀

    熱插拔

    熱插拔              熱插拔(hot-plugging或Hot Swap)功能就是允許用戶在不關(guān)閉系統(tǒng),不切斷電源
    發(fā)表于 12-17 11:41 ?615次閱讀

    ±48V熱插拔應(yīng)用tps23xx熱插拔控制器

    摘要 通信和網(wǎng)絡(luò)系統(tǒng)的快速發(fā)展加速了要求連續(xù)不斷的電源需求的系統(tǒng)所需的熱插拔能力的產(chǎn)品的增長(zhǎng)。目前市面上有許多熱插拔熱插拔電源
    發(fā)表于 07-03 09:42 ?24次下載
    ±48V<b class='flag-5'>熱插拔</b>應(yīng)用tps23xx<b class='flag-5'>熱插拔</b>控制器

    熱插拔和非熱插拔的區(qū)別

    熱插拔和非熱插拔的區(qū)別? 熱插拔和非熱插拔是指電子設(shè)備或組件在工作狀態(tài)下是否可以進(jìn)行插拔操作的一種分類。
    的頭像 發(fā)表于 12-28 10:01 ?2625次閱讀

    鍵盤(pán)熱插拔和非熱插拔的區(qū)別

    、電源供應(yīng)、軟件驅(qū)動(dòng)、使用便利性、設(shè)備損壞與安全性、推動(dòng)產(chǎn)業(yè)發(fā)展等。 1. 連接方式 熱插拔鍵盤(pán)通常使用USB或無(wú)線連接方式,插入即可立即生效。非熱插拔鍵盤(pán)一般使用PS/2接口連接,插入后需要重啟計(jì)算機(jī)才能使用。 2.
    的頭像 發(fā)表于 02-02 17:34 ?8605次閱讀

    熱插拔電源接口定義是什么

    熱插拔電源接口定義主要涉及以下幾個(gè)方面: 定義 熱插拔(Hot Swap 或 Hot Plugging)即帶電插拔,指的是在不關(guān)閉系統(tǒng)電源
    的頭像 發(fā)表于 09-18 10:56 ?382次閱讀

    熱插拔電源和冗余電源哪個(gè)好

    熱插拔電源和冗余電源各有其優(yōu)勢(shì)和適用場(chǎng)景,無(wú)法簡(jiǎn)單地判斷哪個(gè)更好,而是需要根據(jù)具體的應(yīng)用需求和環(huán)境來(lái)選擇。 熱插拔電源的優(yōu)勢(shì) 方便維護(hù) :
    的頭像 發(fā)表于 09-18 10:58 ?183次閱讀

    熱插拔電源是什么意思

    熱插拔電源,即帶電插拔電源,指的是在不關(guān)閉系統(tǒng)電源的情況下,能夠安全地將電源模塊、板卡等硬件設(shè)備
    的頭像 發(fā)表于 09-18 11:00 ?286次閱讀