RFC-0203:推出「zx_system_energy_info」

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 網域的 Intel MSR_PP0_ENERGY_STATUS
  • MSR_AMD_PKG_ENERGY_STATUS (0xc001029b)

    • 等同於 Package 網域的 Intel MSR_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_UNITEnergy 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 LimitPower Info MSR。用於驗證此情況的資源 syscall 的資源類型為 ZX_RSRC_KIND_SYSTEM ZX_RSRC_SYSTEM_POWER_BASE