Commit 74775654 authored by Li RongQing's avatar Li RongQing Committed by Paolo Bonzini

KVM: use cpu_relax when halt polling

SMT siblings share caches and other hardware, and busy halt polling
will degrade its sibling performance if its sibling is working

Sean Christopherson suggested as below:

"Rather than disallowing halt-polling entirely, on x86 it should be
sufficient to simply have the hardware thread yield to its sibling(s)
via PAUSE.  It probably won't get back all performance, but I would
expect it to be close.
This compiles on all KVM architectures, and AFAICT the intended usage
of cpu_relax() is identical for all architectures."
Suggested-by: default avatarSean Christopherson <seanjc@google.com>
Signed-off-by: default avatarLi RongQing <lirongqing@baidu.com>
Message-Id: <20210727111247.55510-1-lirongqing@baidu.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 5868b822
...@@ -3110,6 +3110,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu) ...@@ -3110,6 +3110,7 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
++vcpu->stat.generic.halt_poll_invalid; ++vcpu->stat.generic.halt_poll_invalid;
goto out; goto out;
} }
cpu_relax();
poll_end = cur = ktime_get(); poll_end = cur = ktime_get();
} while (kvm_vcpu_can_poll(cur, stop)); } while (kvm_vcpu_can_poll(cur, stop));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment