• Parshuram Sangle's avatar
    KVM: Enable halt polling shrink parameter by default · aeb1b22a
    Parshuram Sangle authored
    Default halt_poll_ns_shrink value of 0 always resets polling interval
    to 0 on an un-successful poll where vcpu wakeup is not received. This is
    mostly to avoid pointless polling for more number of shorter intervals. But
    disabled shrink assumes vcpu wakeup is less likely to be received in
    subsequent shorter polling intervals. Another side effect of 0 shrink value
    is that, even on a successful poll if total block time was greater than
    current polling interval, the polling interval starts over from 0 instead
    of shrinking by a factor.
    
    Enabling shrink with value of 2 allows the polling interval to gradually
    decrement in case of un-successful poll events as well. This gives a fair
    chance for successful polling events in subsequent polling intervals rather
    than resetting it to 0 and starting over from grow_start.
    
    Below kvm stat log snippet shows interleaved growth and shrinking of
    polling interval:
    87162647182125: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 10000 (grow 0)
    87162647637763: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 20000 (grow 10000)
    87162649627943: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 40000 (grow 20000)
    87162650892407: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 20000 (shrink 40000)
    87162651540378: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 40000 (grow 20000)
    87162652276768: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 20000 (shrink 40000)
    87162652515037: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 40000 (grow 20000)
    87162653383787: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 20000 (shrink 40000)
    87162653627670: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 10000 (shrink 20000)
    87162653796321: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 20000 (grow 10000)
    87162656171645: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 10000 (shrink 20000)
    87162661607487: kvm_halt_poll_ns: vcpu 0: halt_poll_ns 0 (shrink 10000)
    
    Having both grow and shrink enabled creates a balance in polling interval
    growth and shrink behavior. Tests show improved successful polling attempt
    ratio which contribute to VM performance. Power penalty is quite negligible
    as shrunk polling intervals create bursts of very short durations.
    
    Performance assessment results show 3-6% improvements in CPU+GPU, Memory
    and Storage Android VM workloads whereas 5-9% improvement in average FPS of
    gaming VM workloads.
    
    Power penalty is below 1% where host OS is either idle or running a
    native workload having 2 VMs enabled. CPU/GPU intensive gaming workloads
    as well do not show any increased power overhead with shrink enabled.
    Co-developed-by: default avatarRajendran Jaishankar <jaishankar.rajendran@intel.com>
    Signed-off-by: default avatarRajendran Jaishankar <jaishankar.rajendran@intel.com>
    Signed-off-by: default avatarParshuram Sangle <parshuram.sangle@intel.com>
    Link: https://lore.kernel.org/r/20231102154628.2120-2-parshuram.sangle@intel.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
    aeb1b22a
halt-polling.rst 7.14 KB