From: zhukeqian <zhukeqian1@huawei.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
qemu-arm@nongnu.org, wanghaibin.wang@huawei.com
Subject: Re: [PATCH v3] migration/throttle: Add cpu-throttle-tailslow migration parameter
Date: Thu, 7 May 2020 18:31:14 +0800 [thread overview]
Message-ID: <bc72b9c0-3592-df1f-c101-1a08c6982e72@huawei.com> (raw)
In-Reply-To: <20200430141239.GH2874@work-vm>
Hi Dr.David,
Sorry for the reply delay, just come back from holiday.
On 2020/4/30 22:12, Dr. David Alan Gilbert wrote:
> * Keqian Zhu (zhukeqian1@huawei.com) wrote:
>> At the tail stage of throttling, the Guest is very sensitive to
>> CPU percentage while the @cpu-throttle-increment is excessive
>> usually at tail stage.
[...]
>> -static void mig_throttle_guest_down(void)
>> +static void mig_throttle_guest_down(uint64_t bytes_dirty_period,
>> + uint64_t bytes_dirty_threshold)
>> {
>> MigrationState *s = migrate_get_current();
>> uint64_t pct_initial = s->parameters.cpu_throttle_initial;
>> - uint64_t pct_icrement = s->parameters.cpu_throttle_increment;
>> + uint64_t pct_increment = s->parameters.cpu_throttle_increment;
>> + bool pct_tailslow = s->parameters.cpu_throttle_tailslow;
>> int pct_max = s->parameters.max_cpu_throttle;
>>
>> + uint64_t throttle_now = cpu_throttle_get_percentage();
>> + uint64_t cpu_now, cpu_ideal, throttle_inc;
>> +
>> /* We have not started throttling yet. Let's start it. */
>> if (!cpu_throttle_active()) {
>> cpu_throttle_set(pct_initial);
>> } else {
>> /* Throttling already on, just increase the rate */
>> - cpu_throttle_set(MIN(cpu_throttle_get_percentage() + pct_icrement,
>> - pct_max));
>> + if (!pct_tailslow) {
>> + throttle_inc = pct_increment;
>> + } else {
>> + /* Compute the ideal CPU percentage used by Guest, which may
>> + * make the dirty rate match the dirty rate threshold. */
>> + cpu_now = 100 - throttle_now;
>> + cpu_ideal = cpu_now * (bytes_dirty_threshold * 1.0 /
>> + bytes_dirty_period);
>
> I worry if we need a divide-by-0 check; but that seems unlikely.
mig_throttle_guest_down is called when bytes_dirty_period is bigger than
bytes_dirty_threshold, and bytes_dirty_threshold is of unsigned type, so
bytes_dirty_period will not be zero here. I will add an assert check here
to make it clear.
> Now if that worked out as huge, then I think the MIN's guard it even
> with overflow below, so I think we're OK.
Yes, it will not exceed legacy increment.
>
>> + throttle_inc = MIN(cpu_now - cpu_ideal, pct_increment);
>> + }
>> + cpu_throttle_set(MIN(throttle_now + throttle_inc, pct_max));
>> }
>> }
>>
[...]
>> --
>> 2.19.1
>>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
Thanks,
Keqian
>
> .
>
next prev parent reply other threads:[~2020-05-07 10:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-13 10:15 [PATCH v3] migration/throttle: Add cpu-throttle-tailslow migration parameter Keqian Zhu
2020-04-30 14:12 ` Dr. David Alan Gilbert
2020-05-07 10:31 ` zhukeqian [this message]
2020-05-07 15:33 ` Dr. David Alan Gilbert
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=bc72b9c0-3592-df1f-c101-1a08c6982e72@huawei.com \
--to=zhukeqian1@huawei.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=wanghaibin.wang@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).