Background
Intel chips have been failing for some months, and it’s been a bit mysterious. Users have been patient for about ~~6 months? a year? while Intel investigates. Recently intel said:
Our analysis of returned processors confirms that the elevated operating voltage is stemming from a microcode algorithm resulting in incorrect voltage requests to the processor.
What’s the incorrect voltage? They didn’t say. 1.55v? That’s what Tom’s Hardware suggested.
In my own investigation on Linux I hadn’t really noticed any unusual operating voltages, but I wasn’t really looking for that either because nearly all the population I was looking at were CPUs running at stock, or stock with XMP, or stock without eTVB or boosts beyond 5.5ghz. (And a smaller set of 35w 13700T cpus!)
I knew that the i7z utility will report core voltages, but it doesn’t seem like this utility has been updated for a few years, and it has some quirks such as not reporting a loaded core when the load has been assigned to a hyperthread.
I decided to write my own utility that dumps MSR 0x198, which is the voltage the CPU is requesting. Once I got that running, I wanted to double check it was working. It lined up okay with i7z but… since it hadn’t been maintained in years I thought I should double check.
I also understand the voltage requested by the cpu and the voltage delivered by the motherboard to the cpu based on this request are not necessarily remotely the same.
I know that, on windows, often gamer boards have extra chips for monitoring voltage (super io chips) and can be fancier.
I asked about this online as I don’t do much extreme overclocking; not sure that went well, really, (1) but Buildzoid said I could get it “from bios” but that’s not really true for T series chips:
Asus ROG bioses have a feature for “gamer” CPUs to print what voltages your specific CPU will request under specific load conditions.
That’s this:
However, I was having trouble finding this for T series processors, and it turns out not to be a thing.
Buildzoid said that a hwinfo64 report would provide this, so I said “You mean it should be in this report?”
but it’s not there either. One can use the sensors part of hwinfo64 to look at voltages the cpus requesting, but it doesn’t print a report like this (which is what I kinda wanted to build for linux anyway). Hwinfo64 will also print voltages sent to your cpu that are read from superio, diesense, or other (which can be unreliable for other reasons).
(BTW the internet randos did not know that the Asus ROG bios does not actually print a table like this for T series cpus. There is no table in the asus bios for T series CPUs. period.)
Anyay, whatever, drama as an internet clout strategy has never really been my thing, but I do like having tools for gathering information that might be useful for failure analysis.
My problem revolves mainly around W680 boards – not gamer boards – and I’ve already generally found that the are 1.5v, or less, all the time anyway even before the 2024 updates. At a 5.5ghz cap, they rarely ask for more than 1.4v, in fact. Still, I’d like a better utility than i7z – maybe one that stresses the CPU in a similar way to the gaming server workloads that see these chips degrade.
I decided to channel my annoyance to write my own voltage ID dumper utility for linux, and to submit upstream to the linux kernel modifications for turbostat.c to print the voltage IDs requested by the CPU. That’s now --vid or -V
Patching Turbostat.c
Turbostat is bundled with the kernel, and it prints loads of useful info (but not voltage).
I added this functionality to turbostat.c, here’s the patch.
The Patch
fix.patch (5.3 KB)
Part 1:
Modify turbostat.c ← you are here
Part 2: (still TODO ing)
Post the source for my voltage ID query/dump utility which mimics the output of asus’ bios in that it tries to do some differnet load/core configs and look at the resulting request voltages.
turbostat version 2024.05.10 - Len Brown <[email protected]>
Kernel command line: BOOT_IMAGE=/vmlinuz-6.8.0-38-generic root=/dev/mapper/ubuntu--vg-ubuntu--lv ro
CPUID(0): GenuineIntel 0x20 CPUID levels
CPUID(1): family:model:stepping 0x6:b7:1 (6:183:1) microcode 0x125
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR SMX EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, HWPpkg, EPB
cpu0: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): No-SGX Hybrid
CPUID(0x15): eax_crystal: 2 ebx_tsc: 156 ecx_crystal_hz: 38400000
TSC: 2995 MHz (38400000 Hz * 156 / 2 / 1000000)
CPUID(0x16): base_mhz: 3000 max_mhz: 4300 bus_mhz: 100
cpu0: MSR_PLATFORM_INFO: 0x8080838f1811e00
8 * 100.0 = 800.0 MHz max efficiency frequency
30 * 100.0 = 3000.0 MHz base frequency
cpu0: MSR_TURBO_RATIO_LIMIT: 0x3737373737373a3a
55 * 100.0 = 5500.0 MHz max turbo 8 active cores
55 * 100.0 = 5500.0 MHz max turbo 7 active cores
55 * 100.0 = 5500.0 MHz max turbo 6 active cores
55 * 100.0 = 5500.0 MHz max turbo 5 active cores
55 * 100.0 = 5500.0 MHz max turbo 4 active cores
55 * 100.0 = 5500.0 MHz max turbo 3 active cores
58 * 100.0 = 5800.0 MHz max turbo 2 active cores
58 * 100.0 = 5800.0 MHz max turbo 1 active cores
cpu0: MSR_SECONDARY_TURBO_RATIO_LIMIT: 0x0000002b
43 * 100.0 = 4300.0 MHz max turbo 1 active cores
cpu0: MSR_CONFIG_TDP_NOMINAL: 0x0000001e (base_ratio=30)
cpu0: MSR_CONFIG_TDP_LEVEL_1: 0x00000000 ()
cpu0: MSR_CONFIG_TDP_LEVEL_2: 0x00000000 ()
cpu0: MSR_CONFIG_TDP_CONTROL: 0x80000000 ( lock=1)
cpu0: MSR_TURBO_ACTIVATION_RATIO: 0x00000000 (MAX_NON_TURBO_RATIO=0 lock=0)
cpu0: cpufreq driver: intel_pstate
cpu0: cpufreq governor: performance
cpufreq intel_pstate no_turbo: 0
cpu0: MSR_MISC_PWR_MGMT: 0x000030c2 (ENable-EIST_Coordination ENable-EPB DISable-OOB)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x010b2746 (high 70 guar 39 eff 11 low 1)
cpu0: MSR_HWP_REQUEST: 0x00004646 (min 70 max 70 des 0 epp 0x0 window 0x0 pkg 0x0)
cpu0: MSR_HWP_REQUEST_PKG: 0x8000ff01 (min 1 max 255 des 0 epp 0x80 window 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000001 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000004 (No-Guaranteed_Perf_Change, Excursion_Min)
cpu0: EPB: 6 (balanced)
cpu0: MSR_IA32_POWER_CTL: 0x00c4005f (C1E auto-promotion: ENabled)
cpu0: MSR_PKG_CST_CONFIG_CONTROL: 0x74008008 (UNdemote-C1, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu0: POLL: CPUIDLE CORE POLL IDLE
cpu0: C1ACPI: ACPI FFH MWAIT 0x0
cpu0: C2ACPI: ACPI FFH MWAIT 0x21
cpu0: C3ACPI: ACPI FFH MWAIT 0x60
cpu0: MSR_PKGC3_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu0: MSR_PKGC6_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu0: MSR_PKGC8_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu0: MSR_PKGC10_IRTL: 0x00000000 (NOTvalid, 0 ns)
Uncore Frequency package0 die0: 800 - 5000 MHz (800 - 5000 MHz) 4600 MHz
RAPL: 2097 sec. Joule Counter Range, at 125 Watts
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x000003e8 (125 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x4287d000df83e8 (UNlocked)
cpu0: PKG Limit #1: ENabled (125.000 Watts, 56.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (250.000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_VR_CURRENT_CONFIG: 0x00000be0
cpu0: PKG Limit #4: 380.000000 Watts (UNlocked)
cpu0: MSR_DRAM_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 0
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 0
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x80641400 (100 C) (100 default - 0 offset)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88440800 (32 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x02000003 (100 C, 100 C)
cpu0: MSR_MISC_FEATURE_CONTROL: 0x00000000 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)
Core CPU Avg_MHz Busy% Bzy_MHz TSC_MHz IPC IRQ SMI POLL C1ACPI C2ACPI C3ACPI POLL% C1ACPI% C2ACPI% C3ACPI% CPU%c1 CPU%c6 CPU%c7 CoreTmp CoreThr Voltage PkgTmp Totl%C0 Any%C0 GFX%C0 CPUGFX% Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc8 Pk%pc10 CPU%LPI SYS%LPI PkgWatt CorWatt GFXWatt RAMWatt PKG_% RAM_% UncMHz
- - 1 0.04 2044 2995 0.63 894 0 46 881 381 1119 0.00 0.04 0.18 99.74 0.53 66.43 32.90 29 0 1.2708 33 1.79 1.30 0.00 0.00 92.70 0.00 0.00 0.00 0.00 0.00 0.00 7.10 0.52 0.00 0.00 0.00 0.00 4900
0 0 1 0.05 2284 2995 0.29 21 0 13 20 3 96 0.01 0.05 0.02 99.88 1.30 0.01 98.39 27 0 1.2708 33 1.79 1.30 0.00 0.00 92.71 0.00 0.00 0.00 0.00 0.00 0.00 7.10 0.52 0.00 0.00 0.00 0.00 4900
0 1 0 0.00 2068 2995 0.77 8 0 0 0 0 6 0.00 0.00 0.00 100.00 1.30
4 2 0 0.04 1121 2995 0.35 20 0 0 2 1 45 0.00 0.01 0.02 99.94 0.01 0.13 99.60 26 0 1.2358
4 3 0 0.01 1552 2995 0.43 10 0 0 0 6 5 0.00 0.00 0.11 99.88 0.01
8 4 0 0.02 1487 2995 0.40 6 0 0 0 0 41 0.00 0.00 0.00 99.98 0.54 0.00 99.25 25 0 1.2358
8 5 0 0.00 2180 2995 0.77 10 0 0 8 0 4 0.00 0.14 0.00 99.85 0.54
12 6 0 0.02 1463 2995 0.38 20 0 0 13 3 34 0.00 0.10 0.01 99.87 0.98 0.01 98.80 28 0 1.2708
12 7 0 0.00 1943 2995 0.83 11 0 0 8 0 4 0.00 0.14 0.00 99.86 0.98
16 8 4 0.10 3533 2995 0.40 19 0 0 0 0 44 0.00 0.00 0.00 99.90 0.00 0.30 99.25 25 0 1.2358
16 9 1 0.07 957 2995 0.42 39 0 0 0 16 44 0.00 0.00 0.31 99.62 0.00
20 10 8 0.20 3898 2995 1.26 88 0 25 784 55 133 0.02 0.55 0.08 99.19 3.49 0.04 95.98 23 0 1.2424
20 11 0 0.01 1203 2995 0.57 6 0 0 0 0 11 0.00 0.00 0.00 99.99 3.49
24 12 1 0.06 2172 2995 0.33 24 0 0 4 3 31 0.00 0.03 0.02 99.89 0.45 0.00 99.28 25 0 1.2424
24 13 0 0.00 2760 2995 0.74 3 0 0 0 0 4 0.00 0.00 0.00 100.00 0.45
28 14 2 0.10 1814 2995 0.35 40 0 1 6 4 54 0.00 0.04 0.04 99.82 0.57 0.00 99.05 25 0 1.2424
28 15 0 0.02 1059 2995 0.38 8 0 0 0 0 14 0.00 0.00 0.00 99.98 0.57
32 16 0 0.04 1165 2995 0.32 28 0 0 1 5 25 0.00 0.00 0.06 99.90 0.00 99.76 0.00 27 0 1.2775
33 17 3 0.26 1127 2995 0.18 222 0 0 9 145 92 0.00 0.04 2.61 97.11 0.69 98.49 0.00 27 0 1.2474
34 18 0 0.01 3471 2995 0.49 4 0 0 1 0 29 0.00 0.01 0.00 99.98 0.01 99.81 0.00 27 0 1.2474
35 19 0 0.01 3595 2995 0.42 5 0 0 1 0 29 0.00 0.01 0.00 99.98 0.01 99.81 0.00 27 0 1.2474
36 20 0 0.01 1255 2995 0.56 11 0 0 0 0 13 0.00 0.00 0.00 99.99 0.00 99.81 0.00 28 0 1.2424
37 21 0 0.01 3505 2995 0.44 7 0 0 1 0 30 0.00 0.01 0.00 99.98 0.01 99.81 0.00 28 0 1.2474
38 22 0 0.01 3486 2995 0.48 7 0 0 3 0 31 0.00 0.03 0.00 99.97 0.03 99.79 0.00 28 0 1.2474
39 23 0 0.01 3487 2995 0.48 3 0 0 1 0 28 0.00 0.01 0.00 99.99 0.01 99.82 0.00 28 0 1.2474
40 24 0 0.02 1274 2995 0.43 10 0 0 0 0 18 0.00 0.00 0.00 99.98 0.00 99.80 0.00 28 0 1.2424
41 25 0 0.02 1921 2995 0.27 11 0 1 1 2 34 0.00 0.00 0.03 99.95 0.00 99.80 0.00 28 0 1.2925
42 26 0 0.02 2444 2995 0.27 11 0 1 1 0 37 0.00 0.00 0.00 99.98 0.00 99.81 0.00 28 0 1.2474
43 27 1 0.13 1139 2995 0.18 130 0 1 9 85 62 0.00 0.06 1.62 98.21 0.44 99.03 0.00 28 0 1.2474
44 28 0 0.04 1225 2995 0.31 45 0 0 2 27 22 0.00 0.01 0.52 99.44 0.25 99.47 0.00 29 0 1.2524
45 29 0 0.02 2495 2995 0.29 22 0 1 3 9 34 0.00 0.02 0.14 99.83 0.02 99.78 0.00 29 0 1.2524
46 30 0 0.01 3410 2995 0.30 10 0 3 2 2 33 0.00 0.01 0.03 99.95 0.01 99.80 0.00 29 0 1.2474
47 31 1 0.02 3202 2995 1.49 35 0 0 1 15 32 0.00 0.01 0.30 99.67 0.70 99.10 0.00 29 0 1.2474
Here’s the output of the other program I’m working on. Note that with microcode 0x125 the boosts over 5.4 are so fleeting the program in its current state doesn’t pick up those boosts. But the voltages are much more conservative, with this i9 staying well under 1.4v, interestingly.
Core i9 13900k
eTVB/TVB: disabled
Microcode Version: 0x125
Max MHz:
Core 9: 5800 *
Core 8: 5800 *
Core 11: 5800 *
Core 10: 5800 *
Core 7: 5500
Core 6: 5500
Core 5: 5500
Core 4: 5500
Core 3: 5500
Core 2: 5500
Core 15: 5500
Core 1: 5500
Core 14: 5500
Core 13: 5500
Core 12: 5500
Core 0: 5500
Core 31: 4300
Core 30: 4300
Core 29: 4300
Core 28: 4300
Core 27: 4300
Core 26: 4300
Core 25: 4300
Core 24: 4300
Core 23: 4300
Core 22: 4300
Core 21: 4300
Core 20: 4300
Core 19: 4300
Core 18: 4300
Core 17: 4300
Core 16: 4300
Progressive Stress Test:
1 core(s) loaded:
Core 9: VCore = 1.3728 V, Frequency = 4299.98 MHz
2 core(s) loaded:
Core 9: VCore = 1.27771 V, Frequency = 4299.94 MHz
Core 8: VCore = 1.31116 V, Frequency = 4300.06 MHz
3 core(s) loaded:
Core 9: VCore = 1.30652 V, Frequency = 4300.06 MHz
Core 8: VCore = 1.30603 V, Frequency = 4299.92 MHz
Core 11: VCore = 1.30151 V, Frequency = 4300.02 MHz
4 core(s) loaded:
Core 9: VCore = 1.27405 V, Frequency = 4299.99 MHz
Core 8: VCore = 1.32703 V, Frequency = 4300.14 MHz
Core 11: VCore = 1.32239 V, Frequency = 4299.99 MHz
Core 10: VCore = 1.33398 V, Frequency = 4300.1 MHz
5 core(s) loaded:
Core 9: VCore = 1.31042 V, Frequency = 4299.94 MHz
Core 8: VCore = 1.32336 V, Frequency = 4300.11 MHz
Core 11: VCore = 1.32812 V, Frequency = 4299.98 MHz
Core 10: VCore = 1.36047 V, Frequency = 4299.92 MHz
Core 7: VCore = 1.42993 V, Frequency = 5484.01 MHz
6 core(s) loaded:
Core 9: VCore = 1.33252 V, Frequency = 4300.01 MHz
Core 8: VCore = 1.33081 V, Frequency = 4299.99 MHz
Core 11: VCore = 1.33984 V, Frequency = 4299.97 MHz
Core 10: VCore = 1.40491 V, Frequency = 4300.05 MHz
Core 7: VCore = 1.39526 V, Frequency = 5500.06 MHz
Core 6: VCore = 1.43274 V, Frequency = 5449.93 MHz
7 core(s) loaded:
Core 9: VCore = 1.32349 V, Frequency = 4299.98 MHz
Core 8: VCore = 1.39307 V, Frequency = 4299.86 MHz
Core 11: VCore = 1.37146 V, Frequency = 4300.11 MHz
Core 10: VCore = 1.37744 V, Frequency = 4299.99 MHz
Core 7: VCore = 1.3938 V, Frequency = 5499.94 MHz
Core 6: VCore = 1.44104 V, Frequency = 5445.17 MHz
Core 5: VCore = 1.34302 V, Frequency = 4836.15 MHz
8 core(s) loaded:
Core 9: VCore = 1.35803 V, Frequency = 4299.85 MHz
Core 8: VCore = 1.37463 V, Frequency = 4300 MHz
Core 11: VCore = 1.37756 V, Frequency = 4300.03 MHz
Core 10: VCore = 1.39294 V, Frequency = 4300.1 MHz
Core 7: VCore = 1.3844 V, Frequency = 5500 MHz
Core 6: VCore = 1.43066 V, Frequency = 5466.09 MHz
Core 5: VCore = 1.3866 V, Frequency = 5106.97 MHz
Core 4: VCore = 1.41272 V, Frequency = 5334.92 MHz