From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH v2 5/7] KVM-GST: KVM Steal time accounting Date: Sun, 19 Jun 2011 13:04:45 +0300 Message-ID: <4DFDC9BD.8080008@redhat.com> References: <1308262856-5779-1-git-send-email-glommer@redhat.com> <1308262856-5779-6-git-send-email-glommer@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Rik van Riel , Jeremy Fitzhardinge , Peter Zijlstra , Anthony Liguori , Eric B Munson To: Glauber Costa Return-path: In-Reply-To: <1308262856-5779-6-git-send-email-glommer@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org 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? > + 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? > + } > + > + account_steal_time(st); > + return !!st; !! !needed, you're returning a bool. > + } > + return false; > +} > + I'll need Peter's (or another sched maintainer's) review to apply this. -- error compiling committee.c: too many arguments to function