• Keqian Zhu's avatar
    KVM: arm64: Support enabling dirty log gradually in small chunks · c862626e
    Keqian Zhu authored
    There is already support of enabling dirty log gradually in small chunks
    for x86 in commit 3c9bd400 ("KVM: x86: enable dirty log gradually in
    small chunks"). This adds support for arm64.
    
    x86 still writes protect all huge pages when DIRTY_LOG_INITIALLY_ALL_SET
    is enabled. However, for arm64, both huge pages and normal pages can be
    write protected gradually by userspace.
    
    Under the Huawei Kunpeng 920 2.6GHz platform, I did some tests on 128G
    Linux VMs with different page size. The memory pressure is 127G in each
    case. The time taken of memory_global_dirty_log_start in QEMU is listed
    below:
    
    Page Size      Before    After Optimization
      4K            650ms         1.8ms
      2M             4ms          1.8ms
      1G             2ms          1.8ms
    
    Besides the time reduction, the biggest improvement is that we will minimize
    the performance side effect (because of dissolving huge pages and marking
    memslots dirty) on guest after enabling dirty log.
    Signed-off-by: default avatarKeqian Zhu <zhukeqian1@huawei.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20200413122023.52583-1-zhukeqian1@huawei.com
    c862626e
mmu.c 63.5 KB