Error enabling states
Opened this issue · 16 comments
When I try to enable a state, I get the following output:
# ./zenstates.py --enable --pstate 7
Current P7: Disabled
Enabling state
Traceback (most recent call last):
File "./zenstates.py", line 103, in <module>
print('New P' + str(args.pstate) + ': ' + pstate2str(new))
File "./zenstates.py", line 40, in pstate2str
ratio = 25*fid/(12.5 * did)
ZeroDivisionError: float division by zero
I notice in the listings:
# ./zenstates.py -l
P0 - Enabled - FID = 88 - DID = 8 - VID = 20 - Ratio = 34.00 - vCore = 1.35000
P1 - Enabled - FID = 78 - DID = 8 - VID = 2C - Ratio = 30.00 - vCore = 1.27500
P2 - Enabled - FID = 84 - DID = C - VID = 68 - Ratio = 22.00 - vCore = 0.90000
P3 - Disabled
P4 - Disabled
P5 - Disabled
P6 - Disabled
P7 - Disabled
C6 State - Package - Enabled
C6 State - Core - Enabled
Am I missing something?
After a little toying, I set up the following for my 1700x:
# ./zenstates.py -l
P0 - Enabled - FID = 94 - DID = 8 - VID = 20 - Ratio = 37.00 - vCore = 1.35000
P1 - Enabled - FID = 88 - DID = 8 - VID = 2C - Ratio = 34.00 - vCore = 1.27500
P2 - Enabled - FID = 78 - DID = 8 - VID = 38 - Ratio = 30.00 - vCore = 1.20000
P3 - Enabled - FID = 70 - DID = 8 - VID = 3A - Ratio = 28.00 - vCore = 1.18750
P4 - Enabled - FID = 68 - DID = 8 - VID = 40 - Ratio = 26.00 - vCore = 1.15000
P5 - Enabled - FID = 60 - DID = 8 - VID = 48 - Ratio = 24.00 - vCore = 1.10000
P6 - Enabled - FID = 58 - DID = 8 - VID = 68 - Ratio = 22.00 - vCore = 0.90000
P7 - Enabled - FID = 48 - DID = 8 - VID = 78 - Ratio = 18.00 - vCore = 0.80000
C6 State - Package - Enabled
C6 State - Core - Enabled
How do I know if this actually takes effect? I notice that the output of /proc/cpuinfo doesn't seem to shift from 2.2GHz...
You can benchmark you CPU with 7zip, like
7za b
Or you can use I-Nex tool, It is like CPU-z for Linux.
https://github.com/i-nex/I-Nex
Let me know if this tool helps you activate p-states functionality at Gigabyte board that doesn't have support for p-states ;)
you can also use the cpupower tool, e.g.
# cpupower monitor -i 5
will calculate CPU frequencies after a 5 second sample
Ok, so I've been tinkering more - and it seems on the 1700x in a Gigabyte AB350 Gaming 3 we get the following:
scaling_available_frequencies: 3400000 3000000 2200000
This explains why I see what I see when running zenstates.py without any further modification.
Right now, I'm setting:
### The 1700x only seems to support P0/1/2
## P0 = 3.900GHz, 1.3500v
./zenstates.py -p 0 -f 9C -d 8 -v 20
## P1 = 3.700GHz, 1.3000v
./zenstates.py -p 1 -f 94 -d 8 -v 28
## P2 = 1.800GHz, 0.8000v
./zenstates.py -p 2 -f 48 -d 8 -v 78
This gives me:
# 7za b
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_AU.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs AMD Ryzen 7 1700X Eight-Core Processor (800F11),ASM,AES-NI)
AMD Ryzen 7 1700X Eight-Core Processor (800F11)
CPU Freq: 2978 3883 3883 3881 3887 3884 3885 3880 3885
RAM size: 16058 MB, # CPU hardware threads: 16
RAM usage: 3530 MB, # Benchmark threads: 16
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 40061 1366 2853 38972 | 563145 1531 3137 48031
23: 37400 1371 2780 38107 | 560896 1555 3122 48529
24: 35574 1391 2751 38249 | 545391 1537 3114 47872
25: 34130 1445 2697 38969 | 535094 1545 3083 47622
---------------------------------- | ------------------------------
Avr: 1393 2770 38574 | 1542 3114 48013
Tot: 1467 2942 43294
If I set the CPU back to defaults:
# 7za b
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_AU.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs AMD Ryzen 7 1700X Eight-Core Processor (800F11),ASM,AES-NI)
AMD Ryzen 7 1700X Eight-Core Processor (800F11)
CPU Freq: 2867 3379 3379 3388 3388 3387 3386 3386 3387
RAM size: 16058 MB, # CPU hardware threads: 16
RAM usage: 3530 MB, # Benchmark threads: 16
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 36118 1333 2636 35136 | 488122 1516 2746 41632
23: 35279 1384 2598 35945 | 481296 1522 2736 41642
24: 32930 1373 2579 35407 | 460925 1483 2728 40458
25: 31540 1402 2569 36012 | 472302 1553 2707 42033
---------------------------------- | ------------------------------
Avr: 1373 2595 35625 | 1518 2729 41441
Tot: 1446 2662 38533
Ok, from playing more - it seems the best I can get out of it is:
## P0 = 3.900GHz, 1.3500v
./zenstates.py -p 0 -f 9C -d 8 -v 20
## P1 = 3.700GHz, 1.3000v
./zenstates.py -p 1 -f 94 -d 8 -v 28
## P2 = 1.800GHz, 0.8000v
./zenstates.py -p 2 -f 48 -d 8 -v 68
That seems to output:
# 7za b
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_AU.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs AMD Ryzen 7 1700X Eight-Core Processor (800F11),ASM,AES-NI)
AMD Ryzen 7 1700X Eight-Core Processor (800F11)
CPU Freq: 3155 3885 3887 3886 3887 3886 3886 3886 3886
RAM size: 16058 MB, # CPU hardware threads: 16
RAM usage: 3530 MB, # Benchmark threads: 16
Compressing | Decompressing
Dict Speed Usage R/U Rating | Speed Usage R/U Rating
KiB/s % MIPS MIPS | KiB/s % MIPS MIPS
22: 40506 1385 2844 39405 | 575141 1561 3143 49054
23: 38120 1427 2723 38840 | 563731 1558 3131 48775
24: 36009 1407 2751 38718 | 549774 1555 3103 48256
25: 34011 1426 2723 38833 | 533815 1543 3079 47508
---------------------------------- | ------------------------------
Avr: 1411 2760 38949 | 1554 3114 48398
Tot: 1483 2937 43674
If I try to go any higher than 3.900 (ie 3.95Ghz), then I get a system crash and have to hit the reset button. I tried at 3.95Ghz @ 1.36v with no better luck.
Now, as far as P-States 3-7. I can enable these via software - but I'm not sure how to check if they are working or not. Interestingly enough, when I reboot after enabling 3-7, I get a prompt from the BIOS saying that things "aren't compatible" with expected values. This seems to cause the values in the BIOS to reset.
The other fun part - I flashed a mod'ed BIOS for the mainboard from here:
http://www.win-raid.com/t2739f44-OFFER-Gigabyte-GA-AX-Aorus-Gaming-BIOS-mod.html
When I try to select any P-State customisation in the BIOS menus, it refused to let me select anything but P-State 0. I wasn't able to set any P1/P2/P3 etc to any slot.
So I'm gathering at the moment that either:
- The p-states are enabled properly; or
- The p-states are set up, but not working for P3-P7; or
- Nothing is happening at all
The question is, how to tell? :)
Wow, scripts looks working! At least for P-0. So I can buy Gigabyte Mini ITX AM board for my purposes.
Indeed "7za b" tells what your CPU freq, which is
With mod: 3886, Without 3387, calculated. You can assume that, It's 3.9Ghz and 3.4Ghz.
For 4Ghz, probably you need to push ~1.425v or similar. For me It's O.K. for experiment but will produce too much heat, stress your VRMs. Not worth for extra 100Mhz in terms of efficiency.
Why do you need every P-States?
Most important state is P-0 because it's for overclocking and it's already working.
If you are on High CPU load, than CPU is overclocked with that P-0 setting.
For other power states, it's not easy to tell if it's working with 7za but if P-0 works proper, you can assume other power states working well too.
Yeah - I figure the P0 change is working - but not sure about the P2 state. I hear a lot that the 1700x can't get below 2.2GHz - so it may well not be capable of going below that physically. Not that it really matters I guess.
I settled on the following script settings:
### The 1700x only seems to support P0/1/2
## Defaults are:
# P0 - Enabled - FID = 88 - DID = 8 - VID = 20 - Ratio = 34.00 - vCore = 1.35000
# P1 - Enabled - FID = 78 - DID = 8 - VID = 2C - Ratio = 30.00 - vCore = 1.27500
# P2 - Enabled - FID = 84 - DID = C - VID = 68 - Ratio = 22.00 - vCore = 0.90000
## P0 = 3.900GHz, 1.3500v
./zenstates.py -p 0 -f 9C -d 8 -v 20
## P1 = 3.700GHz, 1.3000v
./zenstates.py -p 1 -f 94 -d 8 -v 28
## P2 = 1.700GHz, 0.8000v
./zenstates.py -p 2 -f 66 -d C -v 78
As I said, I'm not sure P2 is actually working...
As for speeds, the biggest issue I have (even at stock speeds) is that the VRM temps will often get over 100c - I've seen it hit 105c on stock speeds using prime95 in Windows 10. It doesn't seem to get anywhere near that during normal usage - but I'm a bit concerned about that for long runs of very high CPU usage.
I'm using a H110i AIO cooler - so CPU temps never seem to get above around 50c - and the water never gets above about 37c - so there's heaps of capacity there.... Just a dodgy VRM :P
You better to put some slow rotating fan on VRM.
Also such units might help you much: http://www.enzotechnology.com/mst_81.htm
The "Gigabyte AB350 Gaming 3" already has a heatsink on the VRM... I'm not quite sure how effective it is though...
I'm looking to get one of these printed up at work:
http://www.overclock.net/t/1626601/post-your-ryzen-vrm-temperatures
in linux, you can check your current P-State with
cpupower frequency-info
Ah - I was looking for this... For anyone else that stumbles across this later, Fedora 22 onwards has the 'cpupower' program in the 'kernel-tools' package... Output shows:
# cpupower frequency-info
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: Cannot determine or is not supported.
hardware limits: 2.20 GHz - 3.40 GHz
available frequency steps: 3.40 GHz, 3.00 GHz, 2.20 GHz
available cpufreq governors: conservative userspace powersave ondemand performance schedutil
current policy: frequency should be within 2.20 GHz and 3.40 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency: 2.20 GHz (asserted by call to hardware)
boost state support:
Supported: no
Active: no
Boost States: 0
Total States: 3
Pstate-P0: 1100MHz
Pstate-P1: 900MHz
Pstate-P2: 2700MHz
Not even sure what to make of that ;)
Also:
# cpupower monitor
|Mperf || Idle_Stats
CPU | C0 | Cx | Freq || POLL | C1 | C2
0| 0.14| 99.86| 2805|| 0.00| 0.00| 99.87
1| 1.12| 98.88| 1921|| 0.00| 0.00| 98.88
2| 0.16| 99.84| 1487|| 0.00| 0.37| 99.47
3| 0.00|100.00| 1398|| 0.00| 0.00|100.00
4| 0.10| 99.90| 1476|| 0.00| 0.00| 99.91
5| 0.00|100.00| 1421|| 0.00| 0.00|100.00
6| 0.04| 99.96| 1482|| 0.00| 0.00| 99.96
7| 0.08| 99.92| 1476|| 0.00| 0.00| 99.91
8| 1.71| 98.29| 2657|| 0.00| 0.70| 97.59
9| 1.64| 98.36| 1942|| 0.00| 0.00| 98.39
10| 0.56| 99.44| 1510|| 0.00| 0.27| 99.20
11| 0.55| 99.45| 1511|| 0.00| 0.00| 99.45
12| 0.99| 99.01| 1506|| 0.00| 0.00| 99.03
13| 2.31| 97.69| 1517|| 0.00| 0.24| 97.48
14| 0.33| 99.67| 1512|| 0.00| 0.19| 99.50
15| 0.06| 99.94| 1523|| 0.00| 0.00| 99.94
Do you run commands with "original" CPU P-States?
If you are, than this "cpupower frequency-info" result is perfectly normal.
I believe freqency-info has some problem with detecting real P-States table clocks due Ryzen is new processor?? Who knows.
Ok - so the final piece of the puzzle here is to get this stuff to apply on startup. I created this script called enable-pstates
after copying zenstates.py to /usr/local/bin/
#!/bin/sh
### The 1700x only seems to support P0/1/2
## Defaults are:
# P0 - Enabled - FID = 88 - DID = 8 - VID = 20 - Ratio = 34.00 - vCore = 1.35000
# P1 - Enabled - FID = 78 - DID = 8 - VID = 2C - Ratio = 30.00 - vCore = 1.27500
# P2 - Enabled - FID = 84 - DID = C - VID = 68 - Ratio = 22.00 - vCore = 0.90000
## P0 = 3.900GHz, 1.3500v
zenstates.py -p 0 -f 9C -d 8 -v 20
## P1 = 3.700GHz, 1.3000v
zenstates.py -p 1 -f 94 -d 8 -v 28
## P2 = 1.700GHz, 0.8000v
zenstates.py -p 2 -f 66 -d C -v 78
## List the result.
zenstates.py -l
I also have the following systemd service file in /etc/systemd/system/ryzen-overclock.service
[Unit]
Description=Ryzen Overclocker
DefaultDependencies=no
After=sysinit.target local-fs.target
Before=basic.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/enable-pstates
[Install]
WantedBy=basic.target
This causes the script to be called fairly early on in the boot - meaning you get the most benefit out of it.
Happy if you want to change that - and/or add it to the repo...
EDIT: As a thought, it may be worthwhile adding the full path to the enable-pstates script - or renaming it etc - as some distros may not have /usr/local/bin/ in $PATH...
@CRCinAU
Nice startup script, I'm using a modified version of it. Unless you are loading the msr driver earlier by default, the script will fail. I added these lines into my script before the the 3 power states are set.
## Load the model-specific registers (MSR) driver
modprobe msr
Also as a note for the not so advanced linux users wanting to use this script. You need to set the script as executable and enable the service:
# chmod +x /usr/local/bin/enable-pstates
# systemctl enable ryzen-overclock.service
It seems that states p3-7 does not work at all. I have Ryzen 5 2600 and ASRock b450 pro4, it allows to set p-states in bios in the similar way to ZenStates. When p3 or later state is set to custom, Linux does not boots.