All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Laurent Vivier <Laurent.Vivier@bull.net>,
	Ingo Molnar <mingo@elte.hu>,
	kvm-devel <kvm-devel@lists.sourceforge.net>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	virtualization <virtualization@lists.linux-foundation.org>
Subject: Re: [PATCH 0/4] Virtual Machine Time Accounting
Date: Tue, 4 Aug 2009 19:29:24 +0200	[thread overview]
Message-ID: <20090804192924.217930fc@skybase> (raw)
In-Reply-To: <1249403202.4762.12.camel@laptop>

On Tue, 04 Aug 2009 18:26:41 +0200
Peter Zijlstra <peterz@infradead.org> wrote:

> On Tue, 2009-08-04 at 17:07 +0200, Martin Schwidefsky wrote:
> > On Tue, 04 Aug 2009 16:16:38 +0200
> > Peter Zijlstra <peterz@infradead.org> wrote:
> > 
> > > These patches never seem to have made it onto LKML?!
> > > 
> > > On Mon, 2007-08-20 at 15:13 +0200, Laurent Vivier wrote:
> > > > The aim of these four patches is to introduce Virtual Machine time accounting.
> > > > 
> > > > _Ingo_, as these patches modify files of the scheduler, could you have a look to
> > > > them, please ?
> > > > 
> > > > [PATCH 1/4] as recent CPUs introduce a third running state, after "user" and
> > > > "system", we need a new field, "guest", in cpustat to store the time used by
> > > > the CPU to run virtual CPU. Modify /proc/stat to display this new field.
> > > > 
> > > > [PATCH 2/4] like for cpustat, introduce the "gtime" (guest time of the task) and
> > > > "cgtime" (guest time of the task children) fields for the
> > > > tasks. Modify signal_struct and task_struct. Modify /proc/<pid>/stat to display
> > > > these new fields.
> > > > 
> > > > [PATCH 3/4] modify account_system_time() to add cputime to cpustat->guest if we
> > > > are running a VCPU. We add this cputime to  cpustat->user instead of
> > > > cpustat->system because this part of KVM code is in fact user code although it
> > > > is executed in the kernel. We duplicate VCPU time between guest and user to
> > > > allow an unmodified "top(1)" to display correct value. A modified "top(1)" is
> > > > able to display good cpu user time and cpu guest time by subtracting cpu guest
> > > > time from cpu user time. Update "gtime" and "cgtime" in signal_struct and
> > > > task_struct accordingly.
> > > > 
> > > > [PATCH 4/4] Modify KVM to update guest time accounting.
> > > 
> > > Isn't this exactly what CONFIG_VIRT_CPU_ACCOUNTING is about?
> > 
> > Not really, CONFIG_VIRT_CPU_ACCOUNT is a mechanism to sort out the
> > steal time in the >guest< and to increase the precision of the cpu
> > accounting values in general. The patches from Laurent improve the
> > code in the >host< that sorts out guest time vs. system time.
> 
> Ah, that wasn't clear, it keeps mentioning guest all over the place ;-)
> 
> So its going to split user time into user and guest. Does that really
> make sense? For the host kernel it really is just another user process,
> no?

The code (at least in parts) is already upstream. Look at the
account_guest_time function:

static void account_guest_time(struct task_struct *p, cputime_t cputime,
                               cputime_t cputime_scaled)
{
        cputime64_t tmp;
        struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;

        tmp = cputime_to_cputime64(cputime);

        /* Add guest time to process. */
        p->utime = cputime_add(p->utime, cputime);
        p->utimescaled = cputime_add(p->utimescaled, cputime_scaled);
        account_group_user_time(p, cputime);
        p->gtime = cputime_add(p->gtime, cputime);

        /* Add guest time to cpustat. */
        cpustat->user = cputime64_add(cpustat->user, tmp);
        cpustat->guest = cputime64_add(cpustat->guest, tmp);
}

The cpu time for a guest is added to p->utime AND p->gtime. That is
done not to break existing tools that know nothing about guest time.
A guest time aware tool can subtract the p->gtime from p->utime to
get the time spent by the process outside of the guest context.

-- 
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.


  parent reply	other threads:[~2009-08-04 17:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-20 13:13 [PATCH 0/4] Virtual Machine Time Accounting Laurent Vivier
2007-08-20 13:41 ` [kvm-devel] " Avi Kivity
2007-08-20 13:41   ` Avi Kivity
2007-08-20 13:41 ` [kvm-devel] " Avi Kivity
2007-08-20 13:43 ` John Stoffel
2007-08-20 13:43 ` John Stoffel
2007-08-20 13:43   ` John Stoffel
2007-08-20 14:39   ` Laurent Vivier
2007-08-20 14:39     ` Laurent Vivier
2007-08-20 16:13     ` Jeremy Fitzhardinge
2007-08-20 16:13     ` Jeremy Fitzhardinge
2007-08-20 16:13       ` Jeremy Fitzhardinge
2007-08-20 23:30       ` Rusty Russell
2007-08-20 23:30       ` Rusty Russell
2007-08-21 12:54       ` [kvm-devel] " Avi Kivity
2007-08-21 12:54       ` Avi Kivity
2007-08-20 14:39   ` Laurent Vivier
2009-08-04 14:16 ` Peter Zijlstra
2009-08-04 14:16 ` Peter Zijlstra
2009-08-04 15:07   ` Martin Schwidefsky
2009-08-04 15:07   ` Martin Schwidefsky
2009-08-04 16:26     ` Peter Zijlstra
2009-08-04 16:26     ` Peter Zijlstra
2009-08-04 17:29       ` Martin Schwidefsky
2009-08-04 17:29       ` Martin Schwidefsky [this message]
2009-08-04 17:33         ` Peter Zijlstra
2009-08-04 17:33         ` Peter Zijlstra
2009-08-04 18:12           ` Martin Schwidefsky
2009-08-04 18:12           ` Martin Schwidefsky
2009-08-04 22:23           ` Jeremy Fitzhardinge
2009-08-04 22:23           ` Jeremy Fitzhardinge
  -- strict thread matches above, loose matches on Subject: below --
2007-08-20 13:13 Laurent Vivier

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=20090804192924.217930fc@skybase \
    --to=schwidefsky@de.ibm.com \
    --cc=Laurent.Vivier@bull.net \
    --cc=kvm-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=virtualization@lists.linux-foundation.org \
    /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.