1
0
Fork 0
alistair23-linux/Documentation/virtual/kvm
Wanpeng Li 4180bf1b65 KVM: X86: Implement "send IPI" hypercall
Using hypercall to send IPIs by one vmexit instead of one by one for
xAPIC/x2APIC physical mode and one vmexit per-cluster for x2APIC cluster
mode. Intel guest can enter x2apic cluster mode when interrupt remmaping
is enabled in qemu, however, latest AMD EPYC still just supports xapic
mode which can get great improvement by Exit-less IPIs. This patchset
lets a guest send multicast IPIs, with at most 128 destinations per
hypercall in 64-bit mode and 64 vCPUs per hypercall in 32-bit mode.

Hardware: Xeon Skylake 2.5GHz, 2 sockets, 40 cores, 80 threads, the VM
is 80 vCPUs, IPI microbenchmark(https://lkml.org/lkml/2017/12/19/141):

x2apic cluster mode, vanilla

 Dry-run:                         0,            2392199 ns
 Self-IPI:                  6907514,           15027589 ns
 Normal IPI:              223910476,          251301666 ns
 Broadcast IPI:                   0,         9282161150 ns
 Broadcast lock:                  0,         8812934104 ns

x2apic cluster mode, pv-ipi

 Dry-run:                         0,            2449341 ns
 Self-IPI:                  6720360,           15028732 ns
 Normal IPI:              228643307,          255708477 ns
 Broadcast IPI:                   0,         7572293590 ns  => 22% performance boost
 Broadcast lock:                  0,         8316124651 ns

x2apic physical mode, vanilla

 Dry-run:                         0,            3135933 ns
 Self-IPI:                  8572670,           17901757 ns
 Normal IPI:              226444334,          255421709 ns
 Broadcast IPI:                   0,        19845070887 ns
 Broadcast lock:                  0,        19827383656 ns

x2apic physical mode, pv-ipi

 Dry-run:                         0,            2446381 ns
 Self-IPI:                  6788217,           15021056 ns
 Normal IPI:              219454441,          249583458 ns
 Broadcast IPI:                   0,         7806540019 ns  => 154% performance boost
 Broadcast lock:                  0,         9143618799 ns

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2018-08-06 17:59:20 +02:00
..
arm arm/arm64: KVM: Add PSCI version selection API 2018-04-20 16:32:23 +01:00
devices KVM: arm/arm64: Document KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION 2018-05-25 12:29:26 +01:00
00-INDEX KVM: trivial documentation cleanups 2018-03-28 22:47:06 +02:00
amd-memory-encryption.rst KVM: Define SEV key management command id 2017-12-04 13:21:53 -06:00
api.txt kvm: nVMX: Introduce KVM_CAP_NESTED_STATE 2018-08-06 17:58:30 +02:00
cpuid.txt KVM: X86: Implement "send IPI" hypercall 2018-08-06 17:59:20 +02:00
halt-polling.txt KVM: Add halt polling documentation 2016-11-28 11:48:47 +11:00
hypercalls.txt KVM: X86: Implement "send IPI" hypercall 2018-08-06 17:59:20 +02:00
locking.txt kvm: x86: mmu: Update documentation for fast page fault mechanism 2017-01-09 14:46:12 +01:00
mmu.txt KVM: docs: mmu: KVM support exposing SLAT to guests 2018-06-01 19:18:27 +02:00
msr.txt KVM: x86: fix backward migration with async_PF 2018-02-24 01:43:48 +01:00
nested-vmx.txt KVM: docs: nVMX: Remove known limitations as they do not exist now 2018-06-01 19:18:28 +02:00
ppc-pv.txt Doc:kvm: Fix typo in Doc/virtual/kvm 2015-10-11 15:35:23 -06:00
review-checklist.txt docs: fix locations of several documents that got moved 2016-10-24 08:12:35 -02:00
s390-diag.txt KVM: s390: add documentation for diag 501 2014-04-22 13:24:51 +02:00
timekeeping.txt KVM: doc: Fix typo in doc/virtual/kvm 2013-12-31 17:24:54 -02:00
vcpu-requests.rst KVM: Add documentation for VCPU requests 2017-06-04 16:53:00 +02:00