From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takuya Yoshikawa Subject: [PATCH 3/3 kvm-unit-tests] dirty-log-perf: Take slot size from command line Date: Sun, 15 Jan 2012 12:45:56 +0900 Message-ID: <20120115124556.34d35a56b699f384b25af728@gmail.com> References: <20120115124131.3b460d1d85194edaa251e635@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: avi@redhat.com, mtosatti@redhat.com Return-path: Received: from mail-iy0-f174.google.com ([209.85.210.174]:44425 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754786Ab2AODqA (ORCPT ); Sat, 14 Jan 2012 22:46:00 -0500 Received: by iagf6 with SMTP id f6so607891iag.19 for ; Sat, 14 Jan 2012 19:46:00 -0800 (PST) In-Reply-To: <20120115124131.3b460d1d85194edaa251e635@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: Dirty logging is used both for VGA, small slot, and live migration, large slot, so make the slot size changeable as follows: $ ./api/dirty-log-perf -n 8K dirty-log-perf: 8192 slot pages / 262144 mem pages Note: though we can also change the size of the entire memory space, by using -m, we observed that this test did not work well under the following condition: 16 < nr_total_pages < 221K But thinking that we sometimes want to test slots larger than the default, we have decided to keep the option. Signed-off-by: Takuya Yoshikawa --- api/dirty-log-perf.cc | 54 +++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 50 insertions(+), 4 deletions(-) diff --git a/api/dirty-log-perf.cc b/api/dirty-log-perf.cc index f48bc95..ada831e 100644 --- a/api/dirty-log-perf.cc +++ b/api/dirty-log-perf.cc @@ -8,9 +8,9 @@ namespace { -const int page_size = 4096; -const int64_t nr_total_pages = 256 * 1024; -const int64_t nr_slot_pages = 256 * 1024; +const int page_size = 4096; +int64_t nr_total_pages = 256 * 1024; +int64_t nr_slot_pages = 256 * 1024; // Return the current time in nanoseconds. uint64_t time_ns() @@ -67,12 +67,58 @@ void check_dirty_log(kvm::vcpu& vcpu, mem_slot& slot, void* slot_head) } +void parse_options(int ac, char **av) +{ + int opt; + char *endptr; + + while ((opt = getopt(ac, av, "n:m:")) != -1) { + switch (opt) { + case 'n': + errno = 0; + nr_slot_pages = strtol(optarg, &endptr, 10); + if (errno || endptr == optarg) { + printf("dirty-log-perf: Invalid number: -n %s\n", optarg); + exit(1); + } + if (*endptr == 'k' || *endptr == 'K') { + nr_slot_pages *= 1024; + } + break; + case 'm': + errno = 0; + nr_total_pages = strtol(optarg, &endptr, 10); + if (errno || endptr == optarg) { + printf("dirty-log-perf: Invalid number: -m %s\n", optarg); + exit(1); + } + if (*endptr == 'k' || *endptr == 'K') { + nr_total_pages *= 1024; + } + break; + default: + printf("dirty-log-perf: Invalid option\n"); + exit(1); + } + } + + if (nr_slot_pages > nr_total_pages) { + printf("dirty-log-perf: Invalid setting: slot %lld > mem %lld\n", + nr_slot_pages, nr_total_pages); + exit(1); + } + printf("dirty-log-perf: %lld slot pages / %lld mem pages\n", + nr_slot_pages, nr_total_pages); +} + int main(int ac, char **av) { kvm::system sys; kvm::vm vm(sys); mem_map memmap(vm); + parse_options(ac, av); + void* mem_head; int64_t mem_size = nr_total_pages * page_size; if (posix_memalign(&mem_head, page_size, mem_size)) { @@ -86,8 +132,8 @@ int main(int ac, char **av) kvm::vcpu vcpu(vm, 0); uint64_t slot_size = nr_slot_pages * page_size; - uint64_t next_addr = mem_addr + slot_size; uint64_t next_size = mem_size - slot_size; + uint64_t next_addr = mem_addr + slot_size; mem_slot slot(memmap, mem_addr, slot_size, mem_head); mem_slot other_slot(memmap, next_addr, next_size, (void *)next_addr); -- 1.7.5.4