123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- ==================
- Guest halt polling
- ==================
- The cpuidle_haltpoll driver, with the haltpoll governor, allows
- the guest vcpus to poll for a specified amount of time before
- halting.
- This provides the following benefits to host side polling:
- 1) The POLL flag is set while polling is performed, which allows
- a remote vCPU to avoid sending an IPI (and the associated
- cost of handling the IPI) when performing a wakeup.
- 2) The VM-exit cost can be avoided.
- The downside of guest side polling is that polling is performed
- even with other runnable tasks in the host.
- The basic logic as follows: A global value, guest_halt_poll_ns,
- is configured by the user, indicating the maximum amount of
- time polling is allowed. This value is fixed.
- Each vcpu has an adjustable guest_halt_poll_ns
- ("per-cpu guest_halt_poll_ns"), which is adjusted by the algorithm
- in response to events (explained below).
- Module Parameters
- =================
- The haltpoll governor has 5 tunable module parameters:
- 1) guest_halt_poll_ns:
- Maximum amount of time, in nanoseconds, that polling is
- performed before halting.
- Default: 200000
- 2) guest_halt_poll_shrink:
- Division factor used to shrink per-cpu guest_halt_poll_ns when
- wakeup event occurs after the global guest_halt_poll_ns.
- Default: 2
- 3) guest_halt_poll_grow:
- Multiplication factor used to grow per-cpu guest_halt_poll_ns
- when event occurs after per-cpu guest_halt_poll_ns
- but before global guest_halt_poll_ns.
- Default: 2
- 4) guest_halt_poll_grow_start:
- The per-cpu guest_halt_poll_ns eventually reaches zero
- in case of an idle system. This value sets the initial
- per-cpu guest_halt_poll_ns when growing. This can
- be increased from 10000, to avoid misses during the initial
- growth stage:
- 10k, 20k, 40k, ... (example assumes guest_halt_poll_grow=2).
- Default: 50000
- 5) guest_halt_poll_allow_shrink:
- Bool parameter which allows shrinking. Set to N
- to avoid it (per-cpu guest_halt_poll_ns will remain
- high once achieves global guest_halt_poll_ns value).
- Default: Y
- The module parameters can be set from the debugfs files in::
- /sys/module/haltpoll/parameters/
- Further Notes
- =============
- - Care should be taken when setting the guest_halt_poll_ns parameter as a
- large value has the potential to drive the cpu usage to 100% on a machine
- which would be almost entirely idle otherwise.
|