arm64 上的半虛擬化時間支援¶
Arm 規範 DEN0057/A 定義了 AArch64 訪客(guest)的半虛擬化時間支援標準
https://developer.arm.com/docs/den0057/a
KVM/arm64 透過提供一些管理程式服務呼叫,實現了該規範中關於“被竊時間”的部分,以支援半虛擬化訪客獲取其執行中被竊取的時間量檢視。
定義了兩個新的 SMCCC 相容的 hypercall
PV_TIME_FEATURES: 0xC5000020
PV_TIME_ST: 0xC5000021
這些僅在 SMC64/HVC64 呼叫約定中可用,因為 32 位 Arm 訪客無法使用半虛擬化時間。在呼叫 PV_TIME_FEATURES hypercall 之前,應使用 SMCCC 1.1 ARCH_FEATURES 機制探測其是否存在。
PV_TIME_FEATURES
函式 ID
(uint32)
0xC5000020
PV_call_id
(uint32)
查詢支援的函式。目前僅支援 PV_TIME_ST。
返回值
(int64)
如果管理程式支援相關的 PV-time 特性,則返回 NOT_SUPPORTED (-1) 或 SUCCESS (0)。
PV_TIME_ST
函式 ID
(uint32)
0xC5000021
返回值
(int64)
此 VCPU 的被竊時間資料結構的 IPA。如果失敗:NOT_SUPPORTED (-1)
PV_TIME_ST 返回的 IPA 應由訪客對映為具有內部和外部回寫快取屬性的普通記憶體,位於內部可共享域中。返回的 IPA 中總共 16 位元組的內容,管理程式保證會有效填充(參見下文結構)。
PV_TIME_ST 返回呼叫 VCPU 的結構。
被竊時間¶
PV_TIME_ST hypercall 指向的結構如下
欄位 |
位元組長度 |
位元組偏移 |
描述 |
|---|---|---|---|
修訂版本 |
4 |
0 |
版本 1.0 必須為 0 |
屬性 |
4 |
4 |
必須為 0 |
被竊時間 |
8 |
8 |
被竊時間,以無符號納秒錶示,指示此 VCPU 執行緒在物理 CPU 上非自願未執行的時間量。 |
結構中的所有值都以小端序儲存。
該結構將在排程 VCPU 之前由管理程式更新。它將存在於分配給訪客的普通記憶體的保留區域內。訪客不應嘗試寫入此記憶體。訪客的每個 VCPU 都有一個對應的結構。
建議將一個或多個 64k 頁面專門用於這些結構,不作他用,這樣訪客可以使用 64k 頁面對映該區域,並避免與其他記憶體發生屬性衝突。
有關使用者空間介面,請參見 Documentation/virt/kvm/devices/vcpu.rst。