[ 2.591543] powernow-k8: Found 1 AMD A8-3500M APU with Radeon(tm) HD Graphics (4 cpu cores) (version 2.20.00)
[ 2.591570] powernow-k8: Core Performance Boosting: on.
[ 2.591626] powernow-k8: 0 : pstate 0 (1500 MHz)
[ 2.591629] powernow-k8: 1 : pstate 1 (1400 MHz)
[ 2.591631] powernow-k8: 2 : pstate 2 (1200 MHz)
[ 2.591634] powernow-k8: 3 : pstate 3 (1100 MHz)
[ 2.591636] powernow-k8: 4 : pstate 4 (1000 MHz)
[ 2.591639] powernow-k8: 5 : pstate 5 (900 MHz)
[ 2.591641] powernow-k8: 6 : pstate 6 (800 MHz)
1.5 GHz is a base frequency, but maximum frequency (Turbo Core) should be 2.4 GHz, not 1.5 GHz.
Today tested with 3.3.0rc1 - same problem here.
Distribution is Kubuntu 11.10 x86_64, laptop is Acer Aspire 7560G.
powernow-k8 correctly shows all software visible Pstates on
All that the frequency driver can do is to select one of the
software visible Pstates. For highest performance software can
request to switch to Pstate number 0 (1.5GHz in your case).
In addition the CPU itself can boost the frequency of a core up to
2.4 GHz in your case if cpb (core performance boost) is enabled.
There are "boosted P-states" to do this, but those are not
visible/accessible to the powernow-k8 driver.
You can check whether CPB is enable with
$ for i in `find /sys/ -name cpb`; do echo -n "$i: "; cat $i; done
You can display the actual (boosted) frequency with tools like
cpufreq-aperf (part of cpufrequtils), e.g.
CPU Average freq(KHz) Time in C0 Time in Cx C0 percentage
000 1088000 00 sec 120 ms 00 sec 879 ms 12
001 0768000 00 sec 061 ms 00 sec 938 ms 06
002 0768000 00 sec 062 ms 00 sec 937 ms 06
003 0800000 00 sec 045 ms 00 sec 954 ms 04
004 1184000 00 sec 109 ms 00 sec 890 ms 10
005 3552000 01 sec 003 ms 5764607523 sec 031 ms 100
This example is from a system with Phenom X6 1090T processor.
There was load on the 6th core, which was boosted to 3.5 GHz.
The software visible Pstates of that system are
powernow-k8: Found 1 AMD Phenom(tm) II X6 1090T Processor (6 cpu cores)(version 2.20.00)
powernow-k8: Core Performance Boosting: on.
powernow-k8: 0 : pstate 0 (3200 MHz)
powernow-k8: 1 : pstate 1 (2400 MHz)
powernow-k8: 2 : pstate 2 (1600 MHz)
powernow-k8: 3 : pstate 3 (800 MHz)
More details about CPB can be found in the respective BKDG for your CPU,
see section "220.127.116.11.1 Core Performance Boost (CPB)" in
Forgot to mention that x86info is able to show full Pstate information
(including the boosted Pstates).
# ./x86info -a
x86info v1.30 Dave Jones 2001-2011
Feedback to <firstname.lastname@example.org>.
Found 6 identical CPUs
Extended Family: 1 Extended Model: 0 Family: 15 Model: 10 Stepping: 0
CPU Model (x86info's best guess): Phenom/Athlon/Sempron/Turion (II)/Opteron (PH-E0)
Processor name string (BIOS programmed): AMD Phenom(tm) II X6 1090T Processor
PowerNOW! Technology information
Temperature sensing diode present.
Software Thermal Control
100MHz multiplier control
Hardware P-state control
Core Performance Boost
Effective Frequency Interface
Number of boost states: 1
Pstate-Pb0: 3600MHz (boost state)
Pstate-P0: 3200MHz (current)
Thank you for very informative commentaries, but in case of AMD A8-3500M APU frequencies higher than 1.5 GHz are not available even with enabled cpb (/sys/devices/system/cpu/cpuN/cpufreq/cpb is 1) but even under heavy load (test case: 60 fps FullHD video playback, multithreading decoder) cpufreq-aperf report not more than 1.5 GHz:
000 1485000 00 sec 976 ms 00 sec 023 ms 97
001 1485000 00 sec 984 ms 00 sec 015 ms 98
002 1485000 00 sec 987 ms 00 sec 012 ms 98
003 1485000 00 sec 971 ms 00 sec 028 ms 97
At this moment I already back to 3.2.2 kernel. I need to check 3.3rc2?
All 4 cores are almost fully utilized (>=97% in C0) and operating
at highest frequency. Also the GPU part of your APU is loaded.
Obviously in your scenario the APU (CPU+GPU) is operating at its
design limits (power, thermal) and there is no room to switch any
of your cores into a boosted P-state.
AMD's Turbo Core (similar to Intel's Turbo Boost) can increase
frequency of cores if the entire processor is operating below its
power and thermal limits.
For example a Phenom X6 1090T Processor is able to boost 3 cores if
the other 3 cores are idle. On your processor the decision whether
cores can boost depends on current CPU and GPU workload and the
corresponding power consumption.
I think it's best to quote from the BKDG:
"CPB hardware dynamically monitors processor activity and
generates an approximation of power consumption. If power
consumption exceeds a defined power limit, a P-state limit
is applied by CPB hardware to reduce
power consumption. CPB ensures that average power consumption
over a thermally significant time period remains
at or below the defined power limit. This allows P-states
to be defined with higher frequencies and voltages
than could be used without CPB. These P-states are
referred to as boosted P-states."
After switch GPU in APU to low power profile (that probably reduce power consumption and temperature of APU) at least one core under load increase frequency up to 1.8 GHz.
Thank you for a full and detailed explanation. I'm sorry I take your time, but wikipedia article about AMD Turbo Core is available only in Deutsch. On AMD official web-site (in the consumer part) there is just short description "AMD Turbo Core Technology - Automatically scales performance on-demand to provide extra performance when you need it most. Amazing performance when you're pushing your system to the limits, with scaled back power consumption for everyday activities." that in my opinion doesn't explain real cpb behavior.
I guess this AMD A8-3500M is a family 12h CPU (/proc/cpuinfo, cpu family -> 18)?
If yes (or if it's fam14h, cpu family -> 20), can you give latest cpupower monitor tool a try from here:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/brodo/cpupowerutils.git
make # make sure pciutils-devel or whatever provides pci.h is installed
Do you get a fam12h or fam14h monitor column?
If yes, you should be able to obtain additional info from HW which deep sleep states were really entered, which core boosts, etc.
There is one special column: nbp1 (North Bridge P-state 1).
This one is only entered if graphics also enters power states.
It's a yes/no flag which always gets reset at measure beginning.
If you install cpupower, cpupower monitor --help should give you some more details, otherwise man -l man/*.1 shows you some additional info.
When I tried, I realized that the kernel radeon driver prevented the platform to enter NBP1 state (even with powersave profile). fglrx worked and NBP1 was entered immediately.
-> I add the cpufreq list again. This one sounds interesting for others and having this in the cpufreq archives for googling shouldn't be that bad.
cpupower monitor could need a -t (top) param, but you can use:
watch -n1 cpupower monitor to constantly track sleep states, frequency, boost, etc. behavior.