英語

訪客暫停輪詢

cpuidle_haltpoll 驅動程式與 haltpoll governor 允許 guest vcpu 在暫停之前輪詢指定的時間量。

這為主機端輪詢提供了以下好處

  1. 在執行輪詢時,會設定 POLL 標誌,這允許遠端 vCPU 在執行喚醒時避免傳送 IPI(以及處理 IPI 的相關成本)。

  2. 可以避免 VM-exit 的成本。

guest 端輪詢的缺點是,即使主機中存在其他可執行的任務,也會執行輪詢。

基本邏輯如下:使用者配置一個全域性值 guest_halt_poll_ns,指示允許輪詢的最長時間。 此值是固定的。

每個 vcpu 都有一個可調整的 guest_halt_poll_ns(“每個 CPU 的 guest_halt_poll_ns”),它由演算法根據事件進行調整(如下所述)。

模組引數

haltpoll governor 有 5 個可調模組引數

  1. guest_halt_poll_ns

暫停前執行輪詢的最長時間,以納秒為單位。

預設值:200000

  1. guest_halt_poll_shrink

當喚醒事件發生在全域性 guest_halt_poll_ns 之後時,用於縮小每個 CPU 的 guest_halt_poll_ns 的除法因子。

預設值:2

  1. guest_halt_poll_grow

當事件發生在每個 CPU 的 guest_halt_poll_ns 之後但在全域性 guest_halt_poll_ns 之前時,用於增長每個 CPU 的 guest_halt_poll_ns 的乘法因子。

預設值:2

  1. 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

  1. 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%,否則機器幾乎完全空閒。