cpupower: Make TSC read per CPU for Mperf monitor
[ Upstream commit
c2adb1877b76fc81ae041e1db1a6ed2078c6746b ]
System-wide TSC read could cause a drift in C0 percentage calculation.
Because if first TSC is read and then one by one mperf is read for all
cpus, this introduces drift between mperf reading of later CPUs and TSC
reading. To lower this drift read TSC per CPU and also just after mperf
read. This technique improves C0 percentage calculation in Mperf monitor.
Before fix: (System 100% busy)
| Mperf || RAPL || Idle_Stats
PKG|CORE| CPU| C0 | Cx | Freq || pack | core || POLL | C1 | C2
0| 0| 0| 87.15| 12.85| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 0| 256| 84.62| 15.38| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 1| 1| 87.15| 12.85| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 1| 257| 84.08| 15.92| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 2| 2| 86.61| 13.39| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 2| 258| 83.26| 16.74| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 3| 3| 86.61| 13.39| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 3| 259| 83.60| 16.40| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 4| 4| 86.33| 13.67| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 4| 260| 83.33| 16.67| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 5| 5| 86.06| 13.94| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 5| 261| 83.05| 16.95| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
0| 6| 6| 85.51| 14.49| 2695||
168659003|
3970468|| 0.00| 0.00| 0.00
After fix: (System 100% busy)
| Mperf || RAPL || Idle_Stats
PKG|CORE| CPU| C0 | Cx | Freq || pack | core || POLL | C1 | C2
0| 0| 0| 98.03| 1.97| 2415||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 0| 256| 98.50| 1.50| 2394||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 1| 1| 99.99| 0.01| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 1| 257| 99.99| 0.01| 2375||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 2| 2| 99.99| 0.01| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 2| 258|100.00| 0.00| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 3| 3|100.00| 0.00| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 3| 259| 99.99| 0.01| 2435||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 4| 4|100.00| 0.00| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 4| 260|100.00| 0.00| 2435||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 5| 5| 99.99| 0.01| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 5| 261|100.00| 0.00| 2435||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 6| 6|100.00| 0.00| 2401||
163295480|
3811189|| 0.00| 0.00| 0.00
0| 6| 262|100.00| 0.00| 2435||
163295480|
3811189|| 0.00| 0.00| 0.00
Cc: Thomas Renninger <trenn@suse.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Fixes: 260023008ddc ("cpupowerutils - cpufrequtils extended with quite some features")
Signed-off-by: Wyes Karny <wyes.karny@amd.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>