WSL2-Linux-Kernel/arch
Paul Mackerras c7b676709c KVM: PPC: Book3S HV: Fix accounting of stolen time
Currently the code that accounts stolen time tends to overestimate the
stolen time, and will sometimes report more stolen time in a DTL
(dispatch trace log) entry than has elapsed since the last DTL entry.
This can cause guests to underflow the user or system time measured
for some tasks, leading to ridiculous CPU percentages and total runtimes
being reported by top and other utilities.

In addition, the current code was designed for the previous policy where
a vcore would only run when all the vcpus in it were runnable, and so
only counted stolen time on a per-vcore basis.  Now that a vcore can
run while some of the vcpus in it are doing other things in the kernel
(e.g. handling a page fault), we need to count the time when a vcpu task
is preempted while it is not running as part of a vcore as stolen also.

To do this, we bring back the BUSY_IN_HOST vcpu state and extend the
vcpu_load/put functions to count preemption time while the vcpu is
in that state.  Handling the transitions between the RUNNING and
BUSY_IN_HOST states requires checking and updating two variables
(accumulated time stolen and time last preempted), so we add a new
spinlock, vcpu->arch.tbacct_lock.  This protects both the per-vcpu
stolen/preempt-time variables, and the per-vcore variables while this
vcpu is running the vcore.

Finally, we now don't count time spent in userspace as stolen time.
The task could be executing in userspace on behalf of the vcpu, or
it could be preempted, or the vcpu could be genuinely stopped.  Since
we have no way of dividing up the time between these cases, we don't
count any of it as stolen.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2012-10-30 10:54:57 +01:00
..
alpha Prepared for main script 2012-10-03 13:45:43 -07:00
arm Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2012-10-04 09:06:34 -07:00
arm64 UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
avr32 UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
blackfin UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
c6x UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
cris Prepared for main script 2012-10-03 13:45:43 -07:00
frv UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
h8300 UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
hexagon UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
ia64 KVM updates for the 3.7 merge window 2012-10-04 09:30:33 -07:00
m32r UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
m68k Prepared for main script 2012-10-03 13:45:43 -07:00
microblaze UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
mips Prepared for main script 2012-10-03 13:45:43 -07:00
mn10300 UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
openrisc UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
parisc Prepared for main script 2012-10-03 13:45:43 -07:00
powerpc KVM: PPC: Book3S HV: Fix accounting of stolen time 2012-10-30 10:54:57 +01:00
s390 s390/kvm: dont announce RRBM support 2012-10-10 19:03:38 -03:00
score UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
sh Prepared for main script 2012-10-03 13:45:43 -07:00
sparc Prepared for main script 2012-10-03 13:45:43 -07:00
tile Prepared for main script 2012-10-03 13:45:43 -07:00
um Prepared for main script 2012-10-03 13:45:43 -07:00
unicore32 UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
x86 KVM: Take kvm instead of vcpu to mmu_notifier_retry 2012-10-23 13:35:43 +02:00
xtensa UAPI: (Scripted) Set up UAPI Kbuild files 2012-10-02 18:01:35 +01:00
.gitignore
Kconfig Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-10-01 10:43:39 -07:00