色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CPU核心中idle進程作用

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-10-14 09:28 ? 次閱讀

cpuidle framework

每一個 CPU 核心都會有一個 idle 進程,idle 進程是當系統沒有調度 CPU 資源的時候,會進入 idle 進程,而 idle 進程的作用就是不使用 CPU,以此達到省電的目的。

ARM64架構中,當CPU Idle時,會調用WFI指令(wait for interrupt),關掉CPU的Clock以便降低功耗,當有外設中斷觸發時,CPU又會恢復回來。

cpuidle core 是 cpuidle framework 的核心模塊,負責抽象出 cpuidle device、cpuidle driver 和 cpuidle governor 三個實體,如下所示:

88ab3e4e-4b55-11ed-a3b6-dac502259ad0.png

cpuidle core 抽象出了 cpuidle device、cpuidle driver 和 cpuidle governor 三個數據結構。

數據結構

cpuidle_device

針對每個CPU核都對應一個struct cpuidle_device結構,主要字段介紹如下

structcpuidle_device{
//該cpu核是否注冊進內核中
unsignedintregistered:1;
//該cpu核是否已經使能
unsignedintenabled:1;
unsignedintuse_deepest_state:1;
//對應的cpunumber
unsignedintcpu;

//該cpu核上一次停留在cpuidle狀態的時間(us)
intlast_residency;
//記錄每個cpuidle狀態的統計信息,包括是否使能、進入該cpuidle狀態的次數,停留在該cpuidle狀態的總時間(us)
structcpuidle_state_usagestates_usage[CPUIDLE_STATE_MAX];
......
};

對應的注冊接口是 cpuidle_register_device。

cpuidle_driver

cpuidle driver用于驅動一個或多個CPU核,關鍵字段描述如下:

structcpuidle_driver{
constchar*name;
structmodule*owner;
intrefcnt;

//用于驅動注冊時判斷是否需要設置broadcasttimer
unsignedintbctimer:1;
//用于描述cpuidle的狀態,需要按照功耗從大到小來排序,具體有多少個cpuidle狀態
structcpuidle_statestates[CPUIDLE_STATE_MAX];
......
};

//CPU有多種不同的idle級別。這些idle級別有不同的功耗和延遲,從而可以在不同的場景下使用
//主要包括exit_latency、power_usage、target_residency。這些特性是governor制定idle策略的依據
structcpuidle_state{
charname[CPUIDLE_NAME_LEN];
chardesc[CPUIDLE_DESC_LEN];

unsignedintflags;
//CPU從該idle state下返回運行狀態的延遲,單位為us。它決定了CPU在idle狀態和run狀態之間切換的效率,如果延遲過大,將會影響系統性能;
unsignedintexit_latency;/*inUS*/
//CPU在該idlestate下的功耗,單位為mW
intpower_usage;/*inmW*/
//期望的停留時間,單位為us。進入和退出idle state是需要消耗額外的能量的,如果在idle狀態停留的時間過短,節省的功耗少于額外的消耗,則得不償失。governor會根據該字段,結合當前的系統情況(如可以idle多久),選擇idle level;
unsignedinttarget_residency;/*inUS*/
booldisabled;/*disabledonallCPUs*/

//進入該state的回調函數
int(*enter)(structcpuidle_device*dev,
structcpuidle_driver*drv,
intindex);

//CPU長時間不需要工作時(稱作offline),可調用該回調函數。
int(*enter_dead)(structcpuidle_device*dev,intindex);
......
};

對應的注冊接口是 cpuidle_register_driver。

cpuidle_governor

governor 結構主要提供不同的回調函數,最終由 menu_governor 填充,主要字段如下:

structcpuidle_governor{
charname[CPUIDLE_NAME_LEN];
structlist_headgovernor_list;
//governor的級別,正常情況下,kernel會選擇系統中rating值最大的governor作為當前governor
unsignedintrating;

//在設備驅動注冊和注銷的時候調用
int(*enable)(structcpuidle_driver*drv,
structcpuidle_device*dev);
void(*disable)(structcpuidle_driver*drv,
structcpuidle_device*dev);

//根據當前系統的運行狀況,以及各個idlestate的特性,選擇一個state(即決策)
int(*select)(structcpuidle_driver*drv,
structcpuidle_device*dev,
bool*stop_tick);
//通過該回調函數,可以告知governor,系統上一次所處的idlestate是哪個
void(*reflect)(structcpuidle_device*dev,intindex);
};

對應的注冊接口是 cpuidle_register_governor。

流程

我們先看下設備和驅動的注冊過程:

88d8a2f8-4b55-11ed-a3b6-dac502259ad0.png

注冊之后便將設備和驅動建立起連接關系了,最終 cpuidle framework 的用戶便可通過接口來調用下層的接口,進而完成具體的硬件操作。

下面看下 CPU 進入 idle 狀態的流程圖:

88ea354a-4b55-11ed-a3b6-dac502259ad0.png

可以看出,最終是通過 PSCI 來實現 CPU 的 suspend。

PSCI

PSCI, Power State Coordination Interface,由ARM定義的電源管理接口規范,通常由Firmware來實現,而Linux系統可以通過smc/hvc指令來進入不同的Exception Level,進而調用對應的實現。

88ffd206-4b55-11ed-a3b6-dac502259ad0.png

PSCI 支持如下功能:

CPU hotplug (on/off)

CPU idle (suspend/resume)

System suspend/resume

System shutdown and reset

每個功能和ATF之間的調用接口如下所示:

892f577e-4b55-11ed-a3b6-dac502259ad0.png

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10901

    瀏覽量

    212666
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151688
  • 數據
    +關注

    關注

    8

    文章

    7134

    瀏覽量

    89387
收藏 人收藏

    評論

    相關推薦

    Linux進程怎么綁定CPU

    昨天在群里有朋友問:把進程綁定到某個 CPU 上運行是怎么實現的。
    發表于 10-26 10:26 ?1871次閱讀

    電源管理入門-CPU Idle有什么用?Idle狀態判斷

    答案就是“省電”,當多核CPU沒有任務執行的時候,這時候需要將除主Core之外的其他Core進行低功耗處理,這件事就是CPU Idle機制做的。
    的頭像 發表于 11-16 16:46 ?7954次閱讀
    電源管理入門-<b class='flag-5'>CPU</b> <b class='flag-5'>Idle</b>有什么用?<b class='flag-5'>Idle</b>狀態判斷

    【資料共享】Linux Kernel 核心中文手冊

    Linux Kernel 核心中文手冊, .chm格式便于查閱
    發表于 09-09 12:28

    【Nanopi2試用體驗】高級(十):進程綁定CPU核心

    的ID編譯程序:# gcc aaa.c -lpthread # ./a.out這段代碼將使nanopifunction線程在所有cpu核心中依次執行一段時間,在NanoPi2上的執行結果為:可以看到線程
    發表于 02-03 17:28

    進程和線程區別

    `1、進程和線程的區別和聯系進程(process)和線程(thread)是操作系統的基本概念,但是它們比較抽象,不容易掌握。計算機的核心CPU,它承擔了所有的計算任務。它就像一座工廠
    發表于 11-30 14:06

    線程與6個arm核心中的一個綁定請問如何解綁?

    問題:在ubuntu TX2平臺上,將線程與6個arm核心中的一個綁定,想在運行時下解綁定,采用的方法是:用get接口獲取當前線程綁定的mask;判斷當前線程是否與某個核心綁定;如果已經綁定,再調用
    發表于 09-07 14:25

    什么是CPU核心

    什么是CPU核心 核心(Die)又稱為內核,是CPU最重要的組成部分
    發表于 12-17 10:57 ?1275次閱讀

    CPU緩存是什么意思_CPU緩存有什么作用

    由于處理器是核心硬件,相信我們在選擇處理器的時候都會去關心處理器參數方面,而在處理器核心參數中,我們經常會看到緩存(Cache)這個參數,那么CPU的緩存有什么作用呢?下面小編科普一下
    發表于 05-19 09:24 ?7755次閱讀

    基于linux eBPF的進程off-cpu的方法

    提起off-CPU就不得不提on-cpu,on-cpu是在線程(進程)在CPU上運行的消耗,off-cp
    的頭像 發表于 09-25 15:41 ?3150次閱讀
    基于linux eBPF的<b class='flag-5'>進程</b>off-<b class='flag-5'>cpu</b>的方法

    進程綁定到某個 CPU 上運行是怎么實現?

    昨天在群里有朋友問:把進程綁定到某個 CPU 上運行是怎么實現的。 首先,我們先來了解下將進程CPU 進行綁定的好處。 進程綁定
    的頭像 發表于 07-02 09:55 ?2452次閱讀

    講講線程、進程CPU中的超線程

    因此,超線程簡單來講就是把這些不能公用的資源加倍。而那些流水線上的操作邏輯電路、ALU單元等則可以不用復制。以此實現多個線程同時在一個CPU核心中進行處理。
    的頭像 發表于 08-05 16:38 ?2572次閱讀

    CPU進入idle進程狀態的流程

    每一個 CPU 核心都會有一個 idle 進程idle 進程是當系統沒有調度
    的頭像 發表于 10-14 09:26 ?2494次閱讀

    python自帶的idle怎么進入

    Python自帶的IDLE是一個集成開發環境(Integrated Development Environment),它通過提供編輯器和交互式解釋器,使得Python的開發變得更加簡單和便捷。本文將
    的頭像 發表于 11-29 14:51 ?2366次閱讀

    kernel到android核心啟動過程

    kernel_init 與kthreadd,創建完后系統通過init_idle_bootup_task蛻化為idle進程cpu_idle)。 調用kernel_thread()創建1
    的頭像 發表于 12-04 16:59 ?1108次閱讀
    kernel到android<b class='flag-5'>核心</b>啟動過程

    如何在內核中啟動secondary cpu

    給調度器之前,并沒有實際的業務進程,而我們知道內核中cpu在空閑時會執行idle進程。因此,在其啟動之前需要為每個cpu初始化一個
    的頭像 發表于 12-05 15:46 ?646次閱讀
    如何在內核中啟動secondary <b class='flag-5'>cpu</b>
    主站蜘蛛池模板: 亚洲免费人成 久久 | 在线伦理电影网 | 吃奶摸下的激烈免费视频 | 免费成年人在线视频 | 国产又粗又黄又爽的大片 | 日日操夜夜操狠狠操 | 拔萝卜电视剧高清免费 | 老师的丝袜脚 | 老师扒开尿口男生摸尿口 | 精品久久中文字幕有码 | aa级毛片毛片免费观看久 | 夜夜穞狠狠穞 | 99视频精品全部免费 在线 | 亚洲欧美日韩另类精品一区二区三区 | 国产v综合v亚洲欧美大片 | 国产亚洲精品久久久久苍井松 | 影音先锋av色咪影院 | 亚洲熟女乱色一区二区三区 | 洲精品无码高潮喷水A片 | 亚洲欧美日韩人成 | 国产成人精品综合久久久 | caoporen超碰在线视频 | 久久九九少妇免费看A片 | 国产亚洲精品久久久久久线投注 | 国产网站免费观看 | 三级全黄的视频在线观看 | 美女用手扒开粉嫩的屁股 | 曰本少妇高潮久久久久久 | a在线观看免费视频 | 色综合久久88色综合天天提莫 | 张开腿我尝尝你的草莓 | 月夜直播视频免费观看 | 一个人免费视频在线观看 | 亚洲无遮挡无码A片在线 | 和姐姐做插得很深 | 芭乐草莓樱桃丝瓜18岁大全 | 婷婷激情综合色五月久久竹菊影视 | 中国老太太xxx | 国产午夜精AV在线麻豆 | 国产乱人伦AV麻豆网 | 中国女人hd |