summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/kvm/include/perf_test_util.h
diff options
context:
space:
mode:
authorBen Gardon <bgardon@google.com>2020-10-27 16:37:33 -0700
committerPaolo Bonzini <pbonzini@redhat.com>2020-11-08 06:04:08 -0500
commit4fd94ec7d566ee2f0b52111cc6d26dd311f8a7c3 (patch)
treef247960684ec0a2b9d938874d9a88b49406c2016 /tools/testing/selftests/kvm/include/perf_test_util.h
parent3be18630954672b889186e7be9b631f00134e954 (diff)
KVM: selftests: Introduce the dirty log perf test
The dirty log perf test will time verious dirty logging operations (enabling dirty logging, dirtying memory, getting the dirty log, clearing the dirty log, and disabling dirty logging) in order to quantify dirty logging performance. This test can be used to inform future performance improvements to KVM's dirty logging infrastructure. This series was tested by running the following invocations on an Intel Skylake machine: dirty_log_perf_test -b 20m -i 100 -v 64 dirty_log_perf_test -b 20g -i 5 -v 4 dirty_log_perf_test -b 4g -i 5 -v 32 demand_paging_test -b 20m -v 64 demand_paging_test -b 20g -v 4 demand_paging_test -b 4g -v 32 All behaved as expected. Signed-off-by: Ben Gardon <bgardon@google.com> Message-Id: <20201027233733.1484855-6-bgardon@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'tools/testing/selftests/kvm/include/perf_test_util.h')
-rw-r--r--tools/testing/selftests/kvm/include/perf_test_util.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/tools/testing/selftests/kvm/include/perf_test_util.h b/tools/testing/selftests/kvm/include/perf_test_util.h
index 05eeb5d2bfc4..2618052057b1 100644
--- a/tools/testing/selftests/kvm/include/perf_test_util.h
+++ b/tools/testing/selftests/kvm/include/perf_test_util.h
@@ -76,16 +76,18 @@ static void guest_code(uint32_t vcpu_id)
gva = vcpu_args->gva;
pages = vcpu_args->pages;
- for (i = 0; i < pages; i++) {
- uint64_t addr = gva + (i * perf_test_args.guest_page_size);
+ while (true) {
+ for (i = 0; i < pages; i++) {
+ uint64_t addr = gva + (i * perf_test_args.guest_page_size);
- if (i % perf_test_args.wr_fract == 0)
- *(uint64_t *)addr = 0x0123456789ABCDEF;
- else
- READ_ONCE(*(uint64_t *)addr);
- }
+ if (i % perf_test_args.wr_fract == 0)
+ *(uint64_t *)addr = 0x0123456789ABCDEF;
+ else
+ READ_ONCE(*(uint64_t *)addr);
+ }
- GUEST_SYNC(1);
+ GUEST_SYNC(1);
+ }
}
static struct kvm_vm *create_vm(enum vm_guest_mode mode, int vcpus,