訪客暫停輪詢¶
cpuidle_haltpoll 驅動程式與 haltpoll governor 允許 guest vcpu 在暫停之前輪詢指定的時間量。
這為主機端輪詢提供了以下好處
在執行輪詢時,會設定 POLL 標誌,這允許遠端 vCPU 在執行喚醒時避免傳送 IPI(以及處理 IPI 的相關成本)。
可以避免 VM-exit 的成本。
guest 端輪詢的缺點是,即使主機中存在其他可執行的任務,也會執行輪詢。
基本邏輯如下:使用者配置一個全域性值 guest_halt_poll_ns,指示允許輪詢的最長時間。 此值是固定的。
每個 vcpu 都有一個可調整的 guest_halt_poll_ns(“每個 CPU 的 guest_halt_poll_ns”),它由演算法根據事件進行調整(如下所述)。
模組引數¶
haltpoll governor 有 5 個可調模組引數
guest_halt_poll_ns
暫停前執行輪詢的最長時間,以納秒為單位。
預設值:200000
guest_halt_poll_shrink
當喚醒事件發生在全域性 guest_halt_poll_ns 之後時,用於縮小每個 CPU 的 guest_halt_poll_ns 的除法因子。
預設值:2
guest_halt_poll_grow
當事件發生在每個 CPU 的 guest_halt_poll_ns 之後但在全域性 guest_halt_poll_ns 之前時,用於增長每個 CPU 的 guest_halt_poll_ns 的乘法因子。
預設值:2
guest_halt_poll_grow_start
在空閒系統的情況下,每個 CPU 的 guest_halt_poll_ns 最終會達到零。 此值設定增長時的初始每個 CPU 的 guest_halt_poll_ns。 可以從 10000 增加此值,以避免在初始增長階段出現遺漏
10k、20k、40k、...(示例假設 guest_halt_poll_grow=2)。
預設值:50000
guest_halt_poll_allow_shrink
允許縮小的 Bool 引數。 設定為 N 以避免它(一旦達到全域性 guest_halt_poll_ns 值,每個 CPU 的 guest_halt_poll_ns 將保持較高)。
預設值:Y
模組引數可以從以下 sysfs 檔案中設定
/sys/module/haltpoll/parameters/
補充說明¶
設定 guest_halt_poll_ns 引數時應小心,因為較大的值可能會將 CPU 使用率驅動到 100%,否則機器幾乎完全空閒。