RFC-0203:介紹「zx_system_energy_info」 | |
---|---|
狀態 | 已接受 |
領域 |
|
說明 | 這個介面用於與核心進行通訊,以便存取能源資訊。 |
問題 | |
毛皮變化 | |
作者 | |
審查人員 | |
提交日期 (年-月-日) | 2022-11-18 |
審查日期 (年-月-日) | 2022-12-15 |
摘要
這個 RFC 提出了一個機制,可透過這個機制與 核心來存取一組功率的能源消耗資訊 網域。
提振精神
能源效率和消耗量是筆電的設計重點 不會永久與電源共用網路X86 RAPL 是一種介面 能準確預估一組核心的能源消耗量, 讓硬體效能優異如果 提高能源消耗資訊的存取機制 我們可以建構面向開發人員和機群追蹤工具來檢查 以人體工學方式在裝置上啟動階段的電源繪製功能 最佳化開發過程中的耗電量,並識別電力迴歸 可以跨越機群
設計
背景
Intel x86 RAPL MSR
在 RAPL 中,平台會劃分成多個網域,產生精細的報表和 控管功能RAPL 網域是實體有意義的電源管理網域。 平台可用的特定 RAPL 網域因處理器而異 系列/模特兒,包括:
- PSys:整個 SoC
- 套件:處理器 (所有核心、整合式圖像、快取、記憶體) 控制器)。
- Power Plane PP0:所有處理器核心和私人快取。
- Power Plane PP1:特定裝置的電源供應器, 通常是整合型 GPU
- 記憶體:連接至整合式記憶體控制器的 DRAM。
RAPL 介麵包含非架構的 MSR。每個 RAPL 網域都會支援 下列功能,其中有些功能為選用:
Power Limit
:使用 MSR 介面指定電源限制、時間範圍;鎖定位元 限制位元等Energy Status
:電源計量介面,提供能源 可能不準確或不適當Perf Status
(選用):提供效能資訊的介面 造成的傷害 (迴歸)計算方式為時間長度指標 ,以便測量個別網域的電源限制效果。用於 時間長度會因網域而異。Power Info
(選用):提供該範圍相關資訊的介面 參數Policy
(選用):為硬體提供提示的 4 位元優先順序資訊 將預算分配給上層網域內的子網域。
上述各項功能都需要特定單位來描述
具體做法是指示 Kubernetes 建立並維護
一或多個代表這些 Pod 的物件單位會顯示在唯讀 MSR_RAPL_POWER_UNIT
MSR 中。資源調度
計算各個單元時才會考量因素,讓資訊變得有意義
在有限時間內
儲存能源消耗資訊的 MSR 跨領域
唯讀 Energy Status
MSR:
- MSR_PLATFORM_ENERGY_STATUS (0x0000064d)
- MSR_PKG_ENERGY_STATUS (0x00000611)
- MSR_DRAM_ENERGY_STATUS (0x00000619)
- MSR_PP0_ENERGY_STATUS (0x00000639)
- MSR_PP1_ENERGY_STATUS (0x00000641)
高於 MSR 的能量單位是由Energy Status Units
MSR_RAPL_POWER_UNIT
。
有限範圍的處理器支援 Energy Status
MSR
系列產品/模型可存取非架構 MSR 的程式碼
如果處理器不支援 MSR,就會產生例外狀況。
下列是支援每個 MSR 的處理器模型 (僅列舉部分內容):
MSR_PLATFORM_ENERGY_STATUS
適用於下列處理器:
- Skylake,家庭:6,型號:0x4e、0x5e
- Kaby Lake,家族:6,型號:0x8e、0x9e
- 坎農湖,家庭:6,型號:0x66
MSR_PKG_ENERGY_STATUS
適用於下列處理器:
- Sandy Bridge,家庭:6,型號:0x2a,0x2d
- Ivy Bridge,家庭:6,型號:0x3a、0x3e
- Haswell,系列:6,型號:0x3c、0x3f、0x45、0x46
- Broadwell,系列:6,型號:0x3d、0x47、0x56、0x4f
- Skylake,家庭:6,型號:0x4e、0x5e
- Kaby Lake,家族:6,型號:0x8e、0x9e
- Skylake X/SP,系列:6,型號:0x55
- 坎農湖,家庭:6,型號:0x66
- Ice Lake-SP,家庭:6,型號:0x6a
MSR_DRAM_ENERGY_STATUS
適用於下列處理器:
- Haswell,系列:6,型號:0x3c、0x3f、0x45、0x46
- Broadwell,系列:6,型號:0x3d、0x47、0x56、0x4f
- Skylake,家庭:6,型號:0x4e、0x5e
- Kaby Lake,家族:6,型號:0x8e、0x9e
- Skylake X/SP,系列:6,型號:0x55
- 坎農湖,家庭:6,型號:0x66
- Ice Lake-SP,家庭:6,型號:0x6a
MSR_PP0_ENERGY_STATUS
適用於下列處理器:
- Sandy Bridge,家庭:6,型號:0x2a,0x2d
- Ivy Bridge,家庭:6,型號:0x3a、0x3e
- Haswell,系列:6,型號:0x3c、0x3f、0x45、0x46
- Broadwell,系列:6,型號:0x3d、0x47、0x56、0x4f
- Skylake,家庭:6,型號:0x4e、0x5e
- Kaby Lake,家族:6,型號:0x8e、0x9e
- Skylake X/SP,系列:6,型號:0x55
- 坎農湖,家庭:6,型號:0x66
- Ice Lake-SP,家庭:6,型號:0x6a
MSR_PP1_ENERGY_STATUS
適用於下列處理器:
- Skylake,家庭:6,型號:0x4e、0x5e
- Kaby Lake,家族:6,型號:0x8e、0x9e
- 坎農湖,家庭:6,型號:0x66
AMD x86 RAPL MSR
近期的 AMD 處理器支援與 MSR 介面相半相容的 MSR 介面
Intel RAPL MSR。支援的 RAPL MSR 都相同
但 MSR 編號卻不同。具體來說,AMD Zen (系列:
0x17、0x19) 處理器支援下列 Energy Status
MSR:
MSR_AMD_CORE_ENERGY_STATUS (0xc001029a)
- 等同於
Power Plane PP0
網域的 IntelMSR_PP0_ENERGY_STATUS
。
- 等同於
MSR_AMD_PKG_ENERGY_STATUS (0xc001029b)
- 等同於
Package
網域的 IntelMSR_PKG_ENERGY_STATUS
。
- 等同於
Syscall:zx_system_energy_info
簽名
此系統呼叫可讓使用者空間代理程式存取能源消耗 儲存在指定電源域 RAPL MSR 中的資訊:
zx_status_t zx_system_energy_info(
zx_handle_t resource,
uint32_t domain,
uint64_t* energy_uj
);
其引數如下:
resource
:授予這項呼叫權限的資源。必須為
ZX_RSRC_SYSTEM_ENERGY_INFO_BASE
,這是特別針對
否則呼叫將會失敗
domain
:這次呼叫參照的 RAPL 網域。用途如下
值來指定 RAPL 網域:
- ZX_ENERGY_X64_PLATFORM_DOMAIN
- ZX_ENERGY_X64_PKG_DOMAIN
- ZX_ENERGY_X64_DRAM_DOMAIN
- ZX_ENERGY_X64_PP0_DOMAIN
- ZX_ENERGY_X64_PP1_DOMAIN
上述網域會在提案實作時定義。網域
會決定寫入 energy_uj
的內容 (如下所述)。
energy_uj
:如果呼叫成功,則回傳 energy_uj
會包含
單位能源價值 (Uj)能量值取決於
Energy Status
指定網域的 MSR,以及儲存在
MSR_RAPL_POWER_UNIT
的 Energy Status Units
欄位。如果呼叫失敗,
未指定值。
錯誤狀況
ZX_ERR_NOT_SUPPORTED
處理器並非支援的 x86-64 處理器。
該處理器受到支援的 x86-64 處理器,但
Energy Status
MSR 這個處理器不支援指定網域。這個處理器是支援的 x86-64 處理器,
Energy Status
MSR 這個處理器可以使用指定網域,但讀取作業 尚未啟用。
ZX_ERR_BAD_HANDLE
- 資源不是有效的帳號代碼。
ZX_ERR_WRONG_TYPE
- 資源不是有效的資源控制代碼,或屬於無效的種類
ZX_RSRC_KIND_SYSTEM
。
ZX_ERR_INVALID_ARGS
domain
不屬於下列其中之一:- ZX_ENERGY_X64_PLATFORM_DOMAIN
- ZX_ENERGY_X64_PKG_DOMAIN
- ZX_ENERGY_X64_DRAM_DOMAIN
- ZX_ENERGY_X64_PP0_DOMAIN
- ZX_ENERGY_X64_PP1_DOMAIN
energy_uj
是無效的指標。
ZX_ERR_OUT_OF_RANGE
- 資源屬於
ZX_RSRC_KIND_SYSTEM
種類,但不等於ZX_RSRC_SYSTEM_ENERGY_INFO_BASE
。
實作
核心
新的系統呼叫必須實作,並由新資源管制
ZX_RSRC_SYSTEM_ENERGY_INFO_BASE
。
Fuchsia 核心已有可查詢製造商 ID 和處理器的 API
使用 CPUID。DisplayFamily 和 DisplayModel 已對應至
各種 x86 處理器的處理器 ID,可用來判斷
確保 MSR 可用性
元件管理員
您必須定義新的通訊協定 EnergyInfoResource
,且必須由以下端點執行:
用於提供 ZX_RSRC_SYSTEM_ENERGY_INFO_BASE
資源的元件管理服務。
按照現有的模式限制系統呼叫的資源。
成效
效能不會受到已知影響。新的 Syscall 會隨即停止 只需接觸少量資料即可
安全性考量
Syscall 受新的資源控制代碼管制
ZX_RSRC_SYSTEM_ENERGY_INFO_BASE
。這項保護措施可以解決
是否遭到惡意幹擾
隱私權注意事項
此提案對隱私權沒有任何實質影響。
測試
- 您可以新增單元測試,驗證傳回的
energy_uj
是否已轉換 正確擷取 MSR 中的值
說明文件
Zircon syscall 說明文件即將更新,加入新的 API。
缺點、替代方案和未知
考慮到更通用的介面,例如 zx_get_msr
系統呼叫
可讓系統導入其他實用的 MSR 功能。不過
MSR 存取權須受處理器上的可用性所管制。需求條件
和範圍較籠統的介面
目前主要是供人猜測
最後,我們選擇使用窄版介面,以公平公正的實作方式
對提議的介面進行後續變更的成本和成本相對較低。
既有藝術品和參考資料
已向 cmd 呼叫 zx_system_powerctl
的系統呼叫
ZX_SYSTEM_POWERCTL_X86_SET_PKG_PL1
會使用
RAPL Power Limit
和 Power Info
MSR。用於驗證此情況的資源
syscall 的資源類型為 ZX_RSRC_KIND_SYSTEM
ZX_RSRC_SYSTEM_POWER_BASE
。