- Nov 23, 2001
- 6,712
- 142
- 106
I recently modified my linux kernel to use custom CPPC numbers for each core, and use intel's preferred core scheduler code because AMD hasn't implemented that yet.
I wrote a program to stress each core with affinity and measure MHz and power usage and generate my own CPPC numbers.
The factory numbers reported to the os essentially become worthless once you modify your curve offsets.
Basically if I rank them by efficiency I get something like:
freq_per_watts_cppc: 160, 208, 224, 208, 160, 224, 192, 208, 224, 224, 176, 192, 240, 224, 240, 240
If I rank by average MHz only:
freq_avg_avg_cppc: 224, 208, 208, 224, 240, 192, 224, 224, 224, 208, 176, 192, 208, 224, 240, 208
default:
236, 231, 211, 226, 236, 206, 221, 216, 196, 166, 191, 186, 171, 181, 201, 176
My PBO2 curve offsets are (all negative):
8, 13, 15, 21, 18, 26, 30, 27, 28, 30, 18, 27, 27, 28, 28, 28
I have not done any extensive benchmarking, but from the little I have done performance seems to be impacted slightly (0.5-2%).
Since the boost steps are so small this makes sense.
I wrote a program to stress each core with affinity and measure MHz and power usage and generate my own CPPC numbers.
The factory numbers reported to the os essentially become worthless once you modify your curve offsets.
Code:
CPU:0 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.100000 max_avg: 5.066667 avg_highest: 4.894227 avg_avg: 4.891066 w_avg: 16.299639
CPU:1 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.025000 max_avg: 5.008333 avg_highest: 4.842415 avg_avg: 4.841027 w_avg: 13.917639
CPU:2 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.000000 max_avg: 5.000000 avg_highest: 4.833374 avg_avg: 4.832275 w_avg: 13.477283
CPU:3 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.050000 max_avg: 5.033333 avg_highest: 4.880210 avg_avg: 4.876766 w_avg: 14.034264
CPU:4 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.150000 max_avg: 5.133333 avg_highest: 5.002861 avg_avg: 4.998986 w_avg: 16.302015
CPU:5 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.000000 max_avg: 5.000000 avg_highest: 4.830933 avg_avg: 4.824229 w_avg: 13.229335
CPU:6 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.025000 max_avg: 5.025000 avg_highest: 4.903685 avg_avg: 4.900039 w_avg: 14.734373
CPU:7 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.025000 max_avg: 5.025000 avg_highest: 4.887772 avg_avg: 4.884295 w_avg: 14.408365
CPU:8 samples: 3 min_lowest: 2.880000 min_avg: 3.360000 max_highest: 5.100000 max_avg: 5.050000 avg_highest: 4.911133 avg_avg: 4.903595 w_avg: 13.478444
CPU:9 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.000000 max_avg: 5.000000 avg_highest: 4.857170 avg_avg: 4.849847 w_avg: 13.423134
CPU:10 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 4.975000 max_avg: 4.975000 avg_highest: 4.785836 avg_avg: 4.780011 w_avg: 14.585408
CPU:11 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 4.975000 max_avg: 4.975000 avg_highest: 4.830589 avg_avg: 4.824020 w_avg: 14.657932
CPU:12 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.025000 max_avg: 5.016667 avg_highest: 4.840999 avg_avg: 4.838628 w_avg: 12.877928
CPU:13 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.000000 max_avg: 5.000000 avg_highest: 4.868457 avg_avg: 4.862312 w_avg: 13.372452
CPU:14 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.125000 max_avg: 5.091667 avg_highest: 4.934036 avg_avg: 4.931505 w_avg: 13.465855
CPU:15 samples: 3 min_lowest: 3.600000 min_avg: 3.600000 max_highest: 5.025000 max_avg: 5.008333 avg_highest: 4.839930 avg_avg: 4.838426 w_avg: 13.173962
RANKED:
freq_min_lowest: 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1
freq_min_avg: 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1
freq_max_highest: 2, 5, 10, 4, 0, 10, 5, 5, 2, 10, 14, 14, 5, 10, 1, 5
freq_max_avg: 2, 8, 10, 4, 0, 10, 5, 5, 3, 10, 14, 14, 7, 10, 1, 8
freq_avg_highest: 4, 9, 12, 6, 0, 13, 3, 5, 2, 8, 15, 14, 10, 7, 1, 11
freq_avg_avg: 4, 9, 12, 6, 0, 13, 3, 5, 2, 8, 15, 14, 10, 7, 1, 11
freq_avg_avg_cppc: 224, 208, 208, 224, 240, 192, 224, 224, 224, 208, 176, 192, 208, 224, 240, 208
freq_per_watts_cppc: 160, 208, 224, 208, 160, 224, 192, 208, 224, 224, 176, 192, 240, 224, 240, 240
All Core averages:
min_lowest: 3.555000 min_avg: 3.585000 max_highest: 5.037500 max_avg: 5.025521 avg_highest: 4.871477 avg_avg: 4.867314 w_avg_avg: 14.089877 f_per_watt: 0.346974
Basically if I rank them by efficiency I get something like:
freq_per_watts_cppc: 160, 208, 224, 208, 160, 224, 192, 208, 224, 224, 176, 192, 240, 224, 240, 240
If I rank by average MHz only:
freq_avg_avg_cppc: 224, 208, 208, 224, 240, 192, 224, 224, 224, 208, 176, 192, 208, 224, 240, 208
default:
236, 231, 211, 226, 236, 206, 221, 216, 196, 166, 191, 186, 171, 181, 201, 176
My PBO2 curve offsets are (all negative):
8, 13, 15, 21, 18, 26, 30, 27, 28, 30, 18, 27, 27, 28, 28, 28
I have not done any extensive benchmarking, but from the little I have done performance seems to be impacted slightly (0.5-2%).
Since the boost steps are so small this makes sense.