On 4/19/22 17:31, Zeng Guang wrote:
Currently, issuing an IPI except self-ipi in guest on Intel CPU always causes a VM-exit. It can lead to non-negligible overhead to some workloads involving frequent IPIs when running in VMs. IPI virtualization is a new VT-x feature, targeting to eliminate VM-exits on source vCPUs when issuing unicast, physical-addressing IPIs. Once it is enabled, the processor virtualizes following kinds of operations that send IPIs without causing VM-exits: - Memory-mapped ICR writes - MSR-mapped ICR writes - SENDUIPI execution This patch series implements IPI virtualization support in KVM. Patches 1-4 add tertiary processor-based VM-execution support framework, which is used to enumerate IPI virtualization. Patch 5 handles APIC-write VM exit due to writes to ICR MSR when guest works in x2APIC mode. This is a new case introduced by Intel VT-x. Patch 6 cleanup code in vmx_refresh_apicv_exec_ctrl(). Prepare for IPIv status dynamical update along with APICv status change. Patch 7 move kvm_arch_vcpu_precreate() under kvm->lock protection. This patch is prepared for IPIv PID-table allocation prior to the creation of vCPUs. Patch 8 provide userspace capability to set maximum possible VCPU ID for current VM. IPIv can refer to this value to allocate memory for PID-pointer table. Patch 9 implements IPI virtualization related function including feature enabling through tertiary processor-based VM-execution in various scenarios of VMCS configuration, PID table setup in vCPU creation and vCPU block consideration.
I queued it, but I am not going to send it to Linus until I get selftests for KVM_CAP_MAX_VCPU_ID. Selftests are generally _not_ optional for new userspace API.
Please send a patch on top of kvm/queue. Paolo