On Wed, Apr 29, 2020 at 2:36 AM Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> wrote: > > If two page ready notifications happen back to back the second one is not > delivered and the only mechanism we currently have is > kvm_check_async_pf_completion() check in vcpu_run() loop. The check will > only be performed with the next vmexit when it happens and in some cases > it may take a while. With interrupt based page ready notification delivery > the situation is even worse: unlike exceptions, interrupts are not handled > immediately so we must check if the slot is empty. This is slow and > unnecessary. Introduce dedicated MSR_KVM_ASYNC_PF_ACK MSR to communicate > the fact that the slot is free and host should check its notification > queue. Mandate using it for interrupt based type 2 APF event delivery. This seems functional, but I'm wondering if it could a bit simpler and more efficient if the data structure was a normal descriptor ring with the same number slots as whatever the maximum number of waiting pages is. Then there would never need to be any notification from the guest back to the host, since there would always be room for a notification. It might be even better if a single unified data structure was used for both notifications.