OpenHarmony標(biāo)準(zhǔn)系統(tǒng)內(nèi)核學(xué)習(xí)(二)—CPU輕量級(jí)隔離特性
??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??
??51CTO 開(kāi)源基礎(chǔ)軟件社區(qū)??
CPU輕量級(jí)隔離特性
基本概念
CPU輕量級(jí)隔離特性提供了根據(jù)系統(tǒng)負(fù)載和用戶(hù)配置來(lái)選擇合適的CPU進(jìn)行動(dòng)態(tài)隔離的能力。
- 內(nèi)核會(huì)將被隔離CPU上的任務(wù)和中斷遷移到其他合適的CPU上執(zhí)行
- 被隔離的CPU會(huì)進(jìn)入ilde狀態(tài),以此來(lái)達(dá)到功耗優(yōu)化的目標(biāo)。同時(shí)提供用戶(hù)態(tài)的配置和查詢(xún)接口來(lái)實(shí)現(xiàn)更好的系統(tǒng)調(diào)優(yōu)。
ilde狀態(tài): 現(xiàn)代處理器通常能夠進(jìn)入這樣的狀態(tài)——程序的執(zhí)行被暫停,而且屬于它的指令不從內(nèi)存中提取或執(zhí)行。
參考文檔:https://www.kernel.org/doc/html/v5.10/admin-guide/pm/cpuidle.html
配置指導(dǎo)
使能CPU輕量級(jí)隔離特性
啟用CPU輕量級(jí)隔離,需要通過(guò)編譯內(nèi)核時(shí)打開(kāi)相應(yīng)的配置項(xiàng)及依賴(lài),相關(guān)CONFIG如下:
rk3568芯片組件config:kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig
引入動(dòng)態(tài)核隔離的內(nèi)核基礎(chǔ)設(shè)施以及對(duì)應(yīng)的用戶(hù)態(tài)接口
CPU輕量級(jí)隔離特性與kernel_linux_5.10引入動(dòng)態(tài)核隔離的內(nèi)核基礎(chǔ)設(shè)施以及對(duì)應(yīng)的用戶(hù)態(tài)接口相關(guān)。
支持隔離核場(chǎng)景和解除隔離核場(chǎng)景。
- 隔離核:內(nèi)核根據(jù)接口配置值對(duì)隔離核上非綁定在本核上的任務(wù)進(jìn)行遷移,放到affinity中其它隔離核上執(zhí)行。
- 解除隔離核:內(nèi)核根據(jù)接口配置值以及系統(tǒng)負(fù)載解除核隔離,任務(wù)可以在該核上執(zhí)行。
合入的相關(guān)issues如下:https://gitee.com/openharmony/kernel_linux_5.10/issues/I4SRVK?from=project-issue
合入的內(nèi)核部分代碼如下:https://gitee.com/openharmony/kernel_linux_5.10/pulls/54/files 涉及文件如下
相關(guān)接口
CPU輕量級(jí)隔離提供了一些接口用于控制CPU隔離核的個(gè)數(shù)以及記錄當(dāng)前狀態(tài),支持以CPU cluster層級(jí)進(jìn)行配置,這些接口位于每個(gè)CPU cluster的首個(gè)CPU設(shè)備信息目錄中,如/sys/devices/system/cpu/cpu0/core_ctl
功能分類(lèi) | 接口名 | 描述 |
控制接口 | enable | 功能開(kāi)關(guān),1表示開(kāi)啟,0表示關(guān)閉 |
min_cpus | 設(shè)置活躍(未隔離)CPU最小核數(shù) | |
max_cpus | 設(shè)置活躍(未隔離)CPU最大核數(shù),其中最大值為CPU cluster包含的CPU個(gè)數(shù) | |
狀態(tài)接口 | active_cpus | 顯示CPU cluster最終計(jì)算需要的CPU核數(shù) |
need_cpus | 顯示當(dāng)前需要解隔離的CPU核數(shù) | |
global_state | 記錄系統(tǒng)所有CPU cluster的狀態(tài)信息,包含CPU 隔離狀態(tài),online狀態(tài)以及負(fù)載信息等。 |
使用CPU輕量級(jí)隔離接口
使用hdc_std工具進(jìn)入rk3568開(kāi)發(fā)板終端,RK3568 CPU為四核A55
查看CPU輕量級(jí)隔離功能開(kāi)關(guān)狀態(tài)
開(kāi)關(guān)CPU輕量級(jí)隔離功能
設(shè)置活躍CPU最小核數(shù)和最大核數(shù)
顯示當(dāng)前已經(jīng)動(dòng)態(tài)隔離的CPU核
顯示當(dāng)前未隔離和CPU cluster最終計(jì)算需要的CPU核數(shù)
顯示系統(tǒng)記錄的所有CPU cluster的狀態(tài)信息
OpenHarmony標(biāo)準(zhǔn)系統(tǒng)內(nèi)核支持的其它特性
OpenHarmony標(biāo)準(zhǔn)系統(tǒng)內(nèi)核支持統(tǒng)計(jì)各個(gè)進(jìn)程的dma-buf占用
- 數(shù)據(jù)收集:在dmabuf export的時(shí)候(創(chuàng)建時(shí)),記錄exporter(申請(qǐng)者)的pid、進(jìn)程名等信息。
- 展示:新增以下兩個(gè)內(nèi)核節(jié)點(diǎn)用于展示,顯示每個(gè)進(jìn)程占用的dmabuf objects信息:包括dmabuf object的大小、對(duì)應(yīng)inode、申請(qǐng)者、exp_name等所需信息。
/proc/process_dmabuf_info 與 /sys/kernel/debug/dma_buf/process_bufinfo 兩個(gè)節(jié)點(diǎn)功能相同。
OpenHarmony標(biāo)準(zhǔn)系統(tǒng)內(nèi)核支持Blackbox
- rk3568上DFX支持了Blackbox功能,大部分情況下,可以記錄重啟前最后時(shí)刻的內(nèi)核日志,路徑為/data/log/bbox
- Blackbox的功能會(huì)在設(shè)備掛掉的時(shí)候保存現(xiàn)場(chǎng),內(nèi)核相關(guān)的config:
內(nèi)核編譯選項(xiàng)查看:zcat /proc/config.gz
/proc/config.gz 就是標(biāo)準(zhǔn)系統(tǒng)內(nèi)核配置文件,用 gzip 格式壓縮過(guò)。
只有當(dāng)內(nèi)核配置 CONFIG_IKCONFIG 和 CONFIG_IKCONFIG_PROC 為 y,才會(huì)在 /proc 中出現(xiàn) config.gz 文件。
相關(guān)issues:https://gitee.com/openharmony/kernel_linux_config/issues/I4WRTR
cpuset與cpu熱插拔解耦
??https://gitee.com/openharmony/kernel_linux_5.10/issues/I4LKQ0?from=project-issue??
知識(shí)點(diǎn)附送
查看系統(tǒng)支持的CPU核心與在線的核心數(shù)
查看系統(tǒng)支持的CPU離線的狀態(tài)
查看系統(tǒng)支持的CPU在線的狀態(tài)
開(kāi)關(guān)CPU核心
查看CPU信息
查看計(jì)算機(jī)名
查看內(nèi)核/操作系統(tǒng)/CPU信息
查看網(wǎng)卡信息
cpu相關(guān)接口
??想了解更多關(guān)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??