linux/arch/powerpc/platforms/pseries
Paul Mackerras cf9efce0ce powerpc: Account time using timebase rather than PURR
Currently, when CONFIG_VIRT_CPU_ACCOUNTING is enabled, we use the
PURR register for measuring the user and system time used by
processes, as well as other related times such as hardirq and
softirq times.  This turns out to be quite confusing for users
because it means that a program will often be measured as taking
less time when run on a multi-threaded processor (SMT2 or SMT4 mode)
than it does when run on a single-threaded processor (ST mode), even
though the program takes longer to finish.  The discrepancy is
accounted for as stolen time, which is also confusing, particularly
when there are no other partitions running.

This changes the accounting to use the timebase instead, meaning that
the reported user and system times are the actual number of real-time
seconds that the program was executing on the processor thread,
regardless of which SMT mode the processor is in.  Thus a program will
generally show greater user and system times when run on a
multi-threaded processor than on a single-threaded processor.

On pSeries systems on POWER5 or later processors, we measure the
stolen time (time when this partition wasn't running) using the
hypervisor dispatch trace log.  We check for new entries in the
log on every entry from user mode and on every transition from
kernel process context to soft or hard IRQ context (i.e. when
account_system_vtime() gets called).  So that we can correctly
distinguish time stolen from user time and time stolen from system
time, without having to check the log on every exit to user mode,
we store separate timestamps for exit to user mode and entry from
user mode.

On systems that have a SPURR (POWER6 and POWER7), we read the SPURR
in account_system_vtime() (as before), and then apportion the SPURR
ticks since the last time we read it between scaled user time and
scaled system time according to the relative proportions of user
time and system time over the same interval.  This avoids having to
read the SPURR on every kernel entry and exit.  On systems that have
PURR but not SPURR (i.e., POWER5), we do the same using the PURR
rather than the SPURR.

This disables the DTL user interface in /sys/debug/kernel/powerpc/dtl
for now since it conflicts with the use of the dispatch trace log
by the time accounting code.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
2010-09-02 14:07:31 +10:00
..
cmm.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
dlpar.c powerpc/pseries: Correct rtas_data_buf locking in dlpar code 2010-09-02 10:07:38 +10:00
dtl.c powerpc: Account time using timebase rather than PURR 2010-09-02 14:07:31 +10:00
eeh_cache.c powerpc/pseries/eeh: Use for_each_pci_dev() 2010-07-09 11:28:25 +10:00
eeh_driver.c powerpc/eeh: Fix a bug when pci structure is null 2010-02-17 14:02:47 +11:00
eeh_event.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
eeh_sysfs.c [POWERPC] Show EEH per-device false positives 2007-06-14 22:29:55 +10:00
eeh.c powerpc/eeh: Fix oops when probing in early boot 2010-05-21 17:31:09 +10:00
event_sources.c powerpc/pseries: Add WARN_ON() to request_event_sources_irqs() on irq allocation/request failure 2010-07-09 11:28:32 +10:00
firmware.c powerpc: Fix hypervisor TLB batching 2009-10-14 16:58:37 +11:00
hotplug-cpu.c powerpc/pseries: Increase cpu die timeout 2010-07-31 15:04:15 +10:00
hotplug-memory.c powerpc: Fix erroneous lmb->memblock conversions 2010-07-23 12:56:57 +10:00
hvCall_inst.c tracing: fix for tracepoint API change 2010-05-28 10:20:14 -07:00
hvCall.S powerpc/pseries: Add hcall to read 4 ptes at a time in real mode 2010-05-21 17:31:10 +10:00
hvconsole.c
hvcserver.c
iommu.c powerpc: Fix bogus it_blocksize in VIO iommu code 2010-08-24 15:26:31 +10:00
Kconfig powerpc/pseries: Select XICS and PCI_MSI PSERIES 2009-12-18 14:54:25 +11:00
kexec.c powerpc/pseries: Call pseries_kexec_setup only on pseries 2008-06-30 22:30:57 +10:00
lpar.c powerpc: Account time using timebase rather than PURR 2010-09-02 14:07:31 +10:00
Makefile powerpc/pseries: Partition hibernation support 2010-07-09 11:26:17 +10:00
msi.c powerpc/pci: Fix regression in powerpc MSI-X 2009-11-05 17:06:27 +11:00
nvram.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
offline_states.h powerpc: Reset kernel stack on cpu online from cede state 2010-03-09 11:57:10 +11:00
pci_dlpar.c powerpc: Remove trailing space in messages 2010-02-09 13:56:23 +11:00
pci.c [POWERPC] Rename get_property to of_get_property: arch/powerpc 2007-04-13 03:55:19 +10:00
phyp_dump.c lmb: rename to memblock 2010-07-14 17:14:00 +10:00
plpar_wrappers.h powerpc/pseries: Add hcall to read 4 ptes at a time in real mode 2010-05-21 17:31:10 +10:00
power.c [POWERPC] Fix warning in pseries/power.c 2008-02-20 13:33:37 +11:00
pseries.h powerpc/pseries: Make request_ras_irqs() available to other pseries code 2010-05-21 17:31:12 +10:00
ras.c powerpc/pseries: Rename RAS_VECTOR_OFFSET to RTAS_VECTOR_EXTERNAL_INTERRUPT and move to rtas.h 2010-07-09 11:28:31 +10:00
reconfig.c powerpc/pseries: Use kstrdup 2010-07-09 11:28:37 +10:00
scanlog.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
setup.c powerpc: Account time using timebase rather than PURR 2010-09-02 14:07:31 +10:00
smp.c powerpc: Correct smt_enabled=X boot option for > 2 threads per core 2010-08-24 15:26:30 +10:00
suspend.c powerpc/pseries: Partition hibernation support 2010-07-09 11:26:17 +10:00
xics.c powerpc: Silence xics_migrate_irqs_away() during cpu offline 2010-08-24 15:26:30 +10:00
xics.h powerpc/xics: Consolidate ipi message encode and decode 2008-10-13 16:24:16 +11:00