linux/arch
Len Brown f8475cef90 x86: use common aperfmperf_khz_on_cpu() to calculate KHz using APERF/MPERF
The goal of this change is to give users a uniform and meaningful
result when they read /sys/...cpufreq/scaling_cur_freq
on modern x86 hardware, as compared to what they get today.

Modern x86 processors include the hardware needed
to accurately calculate frequency over an interval --
APERF, MPERF, and the TSC.

Here we provide an x86 routine to make this calculation
on supported hardware, and use it in preference to any
driver driver-specific cpufreq_driver.get() routine.

MHz is computed like so:

MHz = base_MHz * delta_APERF / delta_MPERF

MHz is the average frequency of the busy processor
over a measurement interval.  The interval is
defined to be the time between successive invocations
of aperfmperf_khz_on_cpu(), which are expected to to
happen on-demand when users read sysfs attribute
cpufreq/scaling_cur_freq.

As with previous methods of calculating MHz,
idle time is excluded.

base_MHz above is from TSC calibration global "cpu_khz".

This x86 native method to calculate MHz returns a meaningful result
no matter if P-states are controlled by hardware or firmware
and/or if the Linux cpufreq sub-system is or is-not installed.

When this routine is invoked more frequently, the measurement
interval becomes shorter.  However, the code limits re-computation
to 10ms intervals so that average frequency remains meaningful.

Discerning users are encouraged to take advantage of
the turbostat(8) utility, which can gracefully handle
concurrent measurement intervals of arbitrary length.

Signed-off-by: Len Brown <len.brown@intel.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2017-06-27 01:47:32 +02:00
..
alpha osf_wait4(): fix infoleak 2017-05-21 13:10:07 -04:00
arc mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
arm mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
arm64 ARM: SoC fixes 2017-06-19 16:50:09 +08:00
blackfin uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
c6x uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
cris devicetree: Move include prefixes from arch to separate directory 2017-05-18 23:55:48 -07:00
frv mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
h8300 uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
hexagon hexagon: Use raw_copy_to_user 2017-06-10 19:10:31 -07:00
ia64 Kbuild UAPI header export updates for v4.12 2017-05-10 20:45:36 -07:00
m32r uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
m68k uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
metag devicetree: Move include prefixes from arch to separate directory 2017-05-18 23:55:48 -07:00
microblaze uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
mips mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
mn10300 uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
nios2 nios2 update for v4.12-rc1 2017-05-12 09:53:16 -07:00
openrisc kthread: fix boot hang (regression) on MIPS/OpenRISC 2017-05-29 09:40:54 -07:00
parisc mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
powerpc mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
s390 mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
score uapi: export all headers under uapi directories 2017-05-11 00:21:54 +09:00
sh mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
sparc mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
tile mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
um Merge branch 'for-linus-4.12-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/uml 2017-05-13 10:20:02 -07:00
unicore32 Kbuild UAPI header export updates for v4.12 2017-05-10 20:45:36 -07:00
x86 x86: use common aperfmperf_khz_on_cpu() to calculate KHz using APERF/MPERF 2017-06-27 01:47:32 +02:00
xtensa mm: larger stack guard gap, between vmas 2017-06-19 21:50:20 +08:00
.gitignore
Kconfig Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2017-05-10 10:30:46 -07:00