• Y
    KVM: selftests: Add a test for kvm page table code · b9c2bd50
    Yanan Wang 提交于
    This test serves as a performance tester and a bug reproducer for
    kvm page table code (GPA->HPA mappings), so it gives guidance for
    people trying to make some improvement for kvm.
    
    The function guest_code() can cover the conditions where a single vcpu or
    multiple vcpus access guest pages within the same memory region, in three
    VM stages(before dirty logging, during dirty logging, after dirty logging).
    Besides, the backing src memory type(ANONYMOUS/THP/HUGETLB) of the tested
    memory region can be specified by users, which means normal page mappings
    or block mappings can be chosen by users to be created in the test.
    
    If ANONYMOUS memory is specified, kvm will create normal page mappings
    for the tested memory region before dirty logging, and update attributes
    of the page mappings from RO to RW during dirty logging. If THP/HUGETLB
    memory is specified, kvm will create block mappings for the tested memory
    region before dirty logging, and split the blcok mappings into normal page
    mappings during dirty logging, and coalesce the page mappings back into
    block mappings after dirty logging is stopped.
    
    So in summary, as a performance tester, this test can present the
    performance of kvm creating/updating normal page mappings, or the
    performance of kvm creating/splitting/recovering block mappings,
    through execution time.
    
    When we need to coalesce the page mappings back to block mappings after
    dirty logging is stopped, we have to firstly invalidate *all* the TLB
    entries for the page mappings right before installation of the block entry,
    because a TLB conflict abort error could occur if we can't invalidate the
    TLB entries fully. We have hit this TLB conflict twice on aarch64 software
    implementation and fixed it. As this test can imulate process from dirty
    logging enabled to dirty logging stopped of a VM with block mappings,
    so it can also reproduce this TLB conflict abort due to inadequate TLB
    invalidation when coalescing tables.
    Signed-off-by: NYanan Wang <wangyanan55@huawei.com>
    Reviewed-by: NBen Gardon <bgardon@google.com>
    Reviewed-by: NAndrew Jones <drjones@redhat.com>
    Message-Id: <20210330080856.14940-11-wangyanan55@huawei.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    b9c2bd50
.gitignore 979 字节