• T
    KVM: MMU: Conditionally reschedule when kvm_mmu_slot_remove_write_access() takes a long time · 6b81b05e
    Takuya Yoshikawa 提交于
    If the userspace starts dirty logging for a large slot, say 64GB of
    memory, kvm_mmu_slot_remove_write_access() needs to hold mmu_lock for
    a long time such as tens of milliseconds.  This patch controls the lock
    hold time by asking the scheduler if we need to reschedule for others.
    
    One penalty for this is that we need to flush TLBs before releasing
    mmu_lock.  But since holding mmu_lock for a long time does affect not
    only the guest, vCPU threads in other words, but also the host as a
    whole, we should pay for that.
    
    In practice, the cost will not be so high because we can protect a fair
    amount of memory before being rescheduled: on my test environment,
    cond_resched_lock() was called only once for protecting 12GB of memory
    even without THP.  We can also revisit Avi's "unlocked TLB flush" work
    later for completely suppressing extra TLB flushes if needed.
    Reviewed-by: NMarcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: NTakuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
    Signed-off-by: NGleb Natapov <gleb@redhat.com>
    6b81b05e
mmu.c 105.3 KB