From: Avi Kivity <avi@redhat.com>
To: Glauber Costa <glommer@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Rik van Riel <riel@redhat.com>,
Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>,
Peter Zijlstra <peterz@infradead.org>,
Anthony Liguori <aliguori@us.ibm.com>,
Eric B Munson <emunson@mgebm.net>
Subject: Re: [PATCH v2 5/7] KVM-GST: KVM Steal time accounting
Date: Mon, 20 Jun 2011 09:07:51 +0300 [thread overview]
Message-ID: <4DFEE3B7.7090508@redhat.com> (raw)
In-Reply-To: <4DFEB29B.6080408@redhat.com>
On 06/20/2011 05:38 AM, Glauber Costa wrote:
> On 06/19/2011 07:04 AM, Avi Kivity wrote:
>> On 06/17/2011 01:20 AM, Glauber Costa wrote:
>>> This patch accounts steal time time in kernel/sched.
>>> I kept it from last proposal, because I still see advantages
>>> in it: Doing it here will give us easier access from scheduler
>>> variables such as the cpu rq. The next patch shows an example of
>>> usage for it.
>>>
>>> Since functions like account_idle_time() can be called from
>>> multiple places, not only account_process_tick(), steal time
>>> grabbing is repeated in each account function separatedely.
>>>
>>> /*
>>> + * We have to at flush steal time information every time something
>>> else
>>> + * is accounted. Since the accounting functions are all visible to
>>> the rest
>>> + * of the kernel, it gets tricky to do them in one place. This helper
>>> function
>>> + * helps us.
>>> + *
>>> + * When the system is idle, the concept of steal time does not apply.
>>> We just
>>> + * tell the underlying hypervisor that we grabbed the data, but skip
>>> steal time
>>> + * accounting
>>> + */
>>> +static inline bool touch_steal_time(int is_idle)
>>> +{
>>> + u64 steal, st = 0;
>>> +
>>> + if (static_branch(¶virt_steal_enabled)) {
>>> +
>>> + steal = paravirt_steal_clock(smp_processor_id());
>>> +
>>> + steal -= this_rq()->prev_steal_time;
>>> + if (is_idle) {
>>> + this_rq()->prev_steal_time += steal;
>>> + return false;
>>> + }
>>> +
>>> + while (steal>= TICK_NSEC) {
>>> + /*
>>> + * Inline assembly required to prevent the compiler
>>> + * optimising this loop into a divmod call.
>>> + * See __iter_div_u64_rem() for another example of this.
>>> + */
>>
>> Why not use said function?
>
> because here we want to do work during each loop. The said function
> would have to be adapted for that, possibly using a macro, to run
> arbitrary code during each loop iteration, in a way that I don't think
> it is worthy given the current number of callers (2 counting this new
> one)
You mean adding to prev_steal_time? That can be done outside the loop.
>
>>> + asm("" : "+rm" (steal));
>>> +
>>> + steal -= TICK_NSEC;
>>> + this_rq()->prev_steal_time += TICK_NSEC;
>>> + st++;
>>
>> Suppose a live migration or SIGSTOP causes lots of steal time. How long
>> will we spend here?
> Silly me. I actually used this same argument with Peter to cap it with
> "delta" in the next patch in this series. So I think you are 100 %
> right. Here, however, we do want to account all that time, I believe.
>
> How about we do a slow division if we're > 10 sec (unlikely), and
> account everything as steal time in this scenario ?
Okay. Division would be faster for a lot less than 10s though.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
next prev parent reply other threads:[~2011-06-20 6:08 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-16 22:20 [PATCH v2 0/7] Steal time for KVM Glauber Costa
2011-06-16 22:20 ` [PATCH v2 1/7] KVM-HDR Add constant to represent KVM MSRs enabled bit Glauber Costa
2011-06-17 0:47 ` Eric B Munson
2011-06-16 22:20 ` [PATCH v2 2/7] KVM-HDR: KVM Steal time implementation Glauber Costa
2011-06-17 0:48 ` Eric B Munson
2011-06-19 9:49 ` Avi Kivity
2011-06-20 2:55 ` Glauber Costa
2011-06-16 22:20 ` [PATCH v2 3/7] KVM-HV: " Glauber Costa
2011-06-17 0:48 ` Eric B Munson
2011-06-19 9:57 ` Avi Kivity
2011-06-20 2:53 ` Glauber Costa
2011-06-20 6:02 ` Avi Kivity
2011-06-20 20:56 ` Marcelo Tosatti
2011-06-28 12:30 ` Glauber Costa
2011-06-28 18:02 ` Marcelo Tosatti
2011-06-16 22:20 ` [PATCH v2 4/7] KVM-GST: Add a pv_ops stub for steal time Glauber Costa
2011-06-17 0:48 ` Eric B Munson
2011-06-16 22:20 ` [PATCH v2 5/7] KVM-GST: KVM Steal time accounting Glauber Costa
2011-06-17 0:48 ` Eric B Munson
2011-06-19 10:04 ` Avi Kivity
2011-06-20 2:38 ` Glauber Costa
2011-06-20 6:07 ` Avi Kivity [this message]
2011-06-16 22:20 ` [PATCH v2 6/7] KVM-GST: adjust scheduler cpu power Glauber Costa
2011-06-17 0:49 ` Eric B Munson
2011-06-19 10:05 ` Avi Kivity
2011-06-16 22:20 ` [PATCH v2 7/7] KVM-GST: KVM Steal time registration Glauber Costa
2011-06-17 0:49 ` Eric B Munson
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=4DFEE3B7.7090508@redhat.com \
--to=avi@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=emunson@mgebm.net \
--cc=glommer@redhat.com \
--cc=jeremy.fitzhardinge@citrix.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=riel@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.