From: Peter Xu <peterx@redhat.com>
To: huangy81@chinatelecom.cn
Cc: Eduardo Habkost <ehabkost@redhat.com>,
Juan Quintela <quintela@redhat.com>,
qemu-devel@nongnu.org,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Chuan Zheng <zhengchuan@huawei.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v3 7/7] migration/dirtyrate: implement dirty-ring dirtyrate calculation
Date: Wed, 9 Jun 2021 14:17:13 -0400 [thread overview]
Message-ID: <YMEFqfYZVhsinNN+@t490s> (raw)
In-Reply-To: <a930f410178862fda49ae2c613a0757c7e07e006.1623027729.git.huangy81@chinatelecom.cn>
On Mon, Jun 07, 2021 at 09:15:20AM +0800, huangy81@chinatelecom.cn wrote:
> +static void calculate_dirtyrate_vcpu(struct DirtyRateConfig config)
> +{
> + CPUState *cpu;
> + int64_t msec = 0;
> + int64_t start_time;
> + uint64_t dirtyrate = 0;
> + uint64_t dirtyrate_sum = 0;
> + int nvcpu = 0;
> + int i = 0;
> +
> + CPU_FOREACH(cpu) {
> + nvcpu++;
> + }
> +
> + dirty_pages = g_malloc0(sizeof(*dirty_pages) * nvcpu);
> +
> + dirtyrate_global_dirty_log_start();
> +
> + CPU_FOREACH(cpu) {
> + record_dirtypages(cpu, true);
> + }
> +
> + DirtyStat.method.vcpu.nvcpu = nvcpu;
> + if (last_method != CALC_DIRTY_RING) {
> + DirtyStat.method.vcpu.rates =
> + g_malloc0(sizeof(DirtyRateVcpu) * nvcpu);
> + }
> +
> + start_time = qemu_clock_get_ms(QEMU_CLOCK_REALTIME);
> + DirtyStat.start_time = start_time / 1000;
> +
> + msec = config.sample_period_seconds * 1000;
> + msec = set_sample_page_period(msec, start_time);
> + DirtyStat.calc_time = msec / 1000;
> +
> + CPU_FOREACH(cpu) {
> + record_dirtypages(cpu, false);
> + }
> +
> + dirtyrate_global_dirty_log_stop();
> +
> + for (i = 0; i < DirtyStat.method.vcpu.nvcpu; i++) {
> + dirtyrate = do_calculate_dirtyrate_vcpu(i);
> + DirtyStat.method.vcpu.rates[i].id = i;
> + DirtyStat.method.vcpu.rates[i].dirty_rate = dirtyrate;
> + dirtyrate_sum += dirtyrate;
> + }
> +
> + DirtyStat.dirty_rate = dirtyrate_sum / DirtyStat.method.vcpu.nvcpu;
Why you'd like to divide with nvcpu? Isn't dirtyrate_sum exactly what we want?
As I don't think we care about average per-vcpu dirty rate, but total here.
> + g_free(dirty_pages);
> +}
I did a run with 4G mem VM, alloc 1G and dirty it with 500MB/s, then
- With old way: I got 95MB/s
- With new way: I got 128MB/s
The new way has the output with:
Dirty rate: 128 (MB/s)
vcpu[0], Dirty rate: 0
vcpu[1], Dirty rate: 1
vcpu[2], Dirty rate: 0
vcpu[3], Dirty rate: 511
I think if without the division, it'll be 512MB/s, which is matching the dirty
workload I initiated.
--
Peter Xu
next prev parent reply other threads:[~2021-06-09 18:18 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-07 1:11 [PATCH v3 0/7] support dirtyrate at the granualrity of vcpu huangy81
2021-06-07 1:11 ` [PATCH v3 1/7] migration/dirtyrate: make sample page count configurable huangy81
2021-06-07 18:18 ` Eric Blake
2021-06-08 19:02 ` Dr. David Alan Gilbert
2021-06-07 1:11 ` [PATCH v3 2/7] hmp: Add "calc_dirty_rate" and "info dirty_rate" cmds huangy81
2021-06-08 19:04 ` Dr. David Alan Gilbert
2021-06-08 19:06 ` Dr. David Alan Gilbert
2021-06-07 1:12 ` [PATCH v3 3/7] KVM: introduce dirty_pages and kvm_dirty_ring_enabled huangy81
2021-06-07 1:12 ` [PATCH v3 4/7] migration/dirtyrate: add per-vcpu option for calc-dirty-rate huangy81
2021-06-07 15:46 ` Peter Xu
2021-06-07 16:16 ` Hyman Huang
2021-06-07 17:13 ` Peter Xu
2021-06-07 1:12 ` [PATCH v3 5/7] migration/dirtyrate: adjust struct DirtyRateStat huangy81
2021-06-07 1:13 ` [PATCH v3 6/7] memory: make global_dirty_log a bitmask huangy81
2021-06-07 17:47 ` Peter Xu
2021-06-07 1:15 ` [PATCH v3 7/7] migration/dirtyrate: implement dirty-ring dirtyrate calculation huangy81
2021-06-07 18:36 ` Peter Xu
2021-06-11 14:05 ` Hyman Huang
2021-06-11 15:15 ` Peter Xu
2021-06-09 18:17 ` Peter Xu [this message]
2021-06-11 13:15 ` Hyman Huang
2021-06-07 1:24 ` [PATCH v3 0/7] support dirtyrate at the granualrity of vcpu Hyman
2021-06-09 14:12 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YMEFqfYZVhsinNN+@t490s \
--to=peterx@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=huangy81@chinatelecom.cn \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=zhengchuan@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).