configuration details for fancontrol on Linux on the X399a PRIME

i’m my own biggest fan

I had a bit of a tricky time getting the fans set up on my system, despite it being rather basic.

chassis / mainboard fan configuration

I’ve got a radiator with 3 PWM fans (4 pin) that connect to a PWM hub (provides extra power) and from there, the CPU fan header on the mainboard. The board has a WPUMP header on the opposite end for my water cooling pump.

The cutest little fan lives inside the I/O shield on the X399a PRIME, and this is used to cool the VRMs and MOSFETs used for delivering high levels of CPU and other chipset power - more than 300W for overclocked first-gen (1900X, 1920X, 1950X) Threadripper chips.

unfortunately this guide might not answer all of your questions

But I hope that I’ve helped set you on the right path.. You see, I’ve got other fans for the chassis that are irrelevant to fancontrol - they are all connected to an external controller that uses a k-probe I store in the VRMs to provide additional cooling when the proverbial shit hits the metaphorical fan - or when I’m simply doing some GPU passthrough gaming (Ashes of the Singularity, anyone?) - mostly because they are not 4-pin PWM fans and don’t work as efficiently.

The onboard PWM controller supports several onboard fans (it exposes 6 ports and then 4 more if you use the EXT_FAN card) but since I’m only using the two most important (not mapping CHA1, CHA2, or M.2FAN / AIOFAN) you need to do your own investigation for these other ports.

it87 kernel module required by most Ryzen chipsets

The onboard it87 chip provides i2c bus access but as of 4.15.12, was not included in the upstream kernel release. You can obtain the driver from groeck’s github here - it did compile against 4.15.12-gentoo at the time of writing. He’s rather active, so ping his issue tracker if any issues arise.

the configuration file

For fancontrol we’ll use pwmconfig to generate /etc/fancontrol like this. This profile gives me a quiet PC while also maintaining reasonable temperatures - and I’m also not afraid to let it crank up to max to get things done - this is a productivity machine! My external fan controller detects an overly warm VRM heatsink and quickly evacuates the heat before dropping the RPMs - it’s a bit jarring, and I’m not totally a fan, but it works, for now (it’s the NZXT Sentry if you’re looking for something to buy or avoid).

# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
DEVPATH=hwmon0=devices/pci0000:00/0000:00:18.3 hwmon2=devices/platform/it87.656
DEVNAME=hwmon0=k10temp hwmon2=it8665
FCTEMPS=hwmon2/pwm6=hwmon2/temp1_input hwmon2/pwm5=hwmon2/temp1_input hwmon2/pwm1=hwmon0/temp1_input
FCFANS=hwmon2/pwm6=hwmon2/fan6_input hwmon2/pwm5=hwmon2/fan1_input hwmon2/pwm1=
MINTEMP=hwmon2/pwm6=10 hwmon2/pwm5=20 hwmon2/pwm1=30
MAXTEMP=hwmon2/pwm6=50 hwmon2/pwm5=50 hwmon2/pwm1=50
MINSTART=hwmon2/pwm6=22 hwmon2/pwm5=22 hwmon2/pwm1=150
MINSTOP=hwmon2/pwm6=20 hwmon2/pwm5=20 hwmon2/pwm1=0

required physical cooling

I’ve got liquid cooling set up with a 360mm radiator (a custom EKWB slim 360 with TR4 block) so increasing its RPM too drastically for short spikes is annoying and unnecessary - my ample reservoir of water will warm up and dump heat out into the room gradually and the CPU recovers easily without ramp-up when we’re not under load.

I’ve got 7x 120mm fans on the top of my case as an exhaust, 2x 120mm fans at the rear as an intake, 1x 120mm on the side (bottom half, basement fan) as intake and a 200mm intake fan on the front.

5 of the exhaust fans on top (3 on the rad and 2 toward the front of the case) are run through a PWM hub to the CPU header on the motherboard, simply because that’s all I could manage due to cable lengths.

I have the fans run slower than the BIOS would normally do (idling about 1400rpm).

I have the curve for the CPU header set to a 30C minimum and a 50C maximum. This means essentially the radiator fans won’t kick up to 100% until the CPU thermistor is operating under 250W or more (in my ambient environment).

The curve for the pump is set more aggressively (explained below) - it has a 10C minimum and a 50C maximum. We never want the pump to stop, but if the room is sufficiently cold, why not? It’ll kick it back in when things warm back up, anyway.

The VRM fan curve is set with a 20C minimum and a 50C maximum. This is more aggressive than the CPU radiator fan because it is smaller and is less effective. You might want to tune this for your needs if the whirring sound is a bit much for you - and consider an EKWB liquid cooling monoblock for the board’s CPU and VRMs.

an interesting fact about this X399 board’s sensors

Like all temperature management in AMD’s world, the X399’s CPU temperature is a rather mystical beast. The CPU temperature is linked to the VRM temperature as a minimum - the VRMs are going to override that CPU temperature value. If you’re overclocking and you see high CPU temperatures, make sure it’s not actually the VRMs heating up instead.

Actually, I don’t know if it’s like this in the Intel world - I know the Intel PCH on certain board certainly doesn’t override the CPU temp, as it’s gotten quite hot with no warning until we inspected and saw 55C vs 25C CPU reading.

my (winter) idle / ambient temperatures

My office is generally 18.5C in winter and there is a heater running to maintain this minimum. I haven’t owned this system during summer yet but I’ll update this page with new information, when I do.

The CPU idles at 29-32C with this profile and the VRMs at 29-32C as well. My MB sensor prints out 28.0C - I can not figure out how to tell the PCH temperature from Linux..

My bloody NVIDIA GPU sits idling at 40-42C but I can’t find any way to link it with fancontrol just yet.

I say “bloody NVIDIA GPU” because the AMD GPU in the same machine idles at a nice 34C. Well, when I say a GPU is idling, it’s actually doing a bit of 2D work and storing maybe ~520MiB of bitmaps / other data.

33 degrees of silence

When I run the chassis fans, the system idles at about 29C instead of 33C, and the noise isn’t actually too bad after removing noisy models and optimising the case layout… but sometimes I record voiceovers, so if I can do without it, why not?

Shutting down all of the fans doesn’t hurt me as long as we’re not under significant load - audio recording goes pretty well.

CPU clock scaling considerations

I use the conservative CPU governor for Linux - the 1900X is so powerful compared to my previous E5 2670 (v1 Sandy Bridge) that the 2.2GHz idle clock is more than enough to do most of my day-to-day activities. This doesn’t completely pin the CPU to the lowest frequency (use the powersave governor for that), but it does delay the upscaling far more than the default, ondemand.

To pin the CPU at its maximum frequency, use the performance governor - though, this won’t keep the CPU running at full power, and this can be confirmed by measuring at the wall. What it will do is keep the CPU in an active C state.

an interesting fact about X399 CPU sleep states

Threadripper reports a 2.2GHz CPU clock when its cores are in a deep sleep even though they are really operating in the sub-1GHz range. This is because the CPU is in such a deep sleep that it can not be probed

(excerpt):

Zen cores can enter into and out of the CC sleep states up to 1000 times a second, and will spend the majority of their time in a CC sleep state when not under active load. The effective frequency for a core in this condition is sub-1GHz and sub-1V. Unfortunately there isn’t really a tool that can capture this, because the act of probing the core’s sleep condition is sufficient load to wake the core and ruin the power savings of the CC state.

If you’re disappointed about the relatively high idle frequency, don’t be. You should be concerned about CPU/VRM temperatures! If you are running kernel <4.15.14 and your system reports 60C idle, stop using it until you can determine the problem. Maybe you just need to reapply thermal paste - this platform is difficult to get right.

results of temperature under load test

Geekbench4

with fancontrol

We start with idle CPU/VRM temperature of 33.5C @ 800rpm and both quickly “spike” to 44.5C during the beginning of the test, from the VRM overriding the CPU.

The VRMs idle at 42.5C and the VRM fan is at 1645rpm. The rad fans only ramp up on certain tests (HDR, Gaussian Blur, Speech Recognition) and the VRM fan ramps up to 2064 when the VRM reported 54.4C during multi-core ray tracing. It drops to 55C quickly once fancontrol kicked in the higher VRM fan rate at 2500rpm (near max) and even sooner after to 50C and finishes the test at 36C.

system defaults

The UEFI is not aggressive enough with the VRM fans, and they immediately spike to 52.5C during test initialization.

The whole test runs at about 60.5C with spikes up to 65C unless I am running all 11 fans in the system at full tilt, then it might continue throughout the test at 55C

summary

Before I got the it87 driver working, I didn’t realise the VRM was not being effectively cooled, leading to higher CPU temperatures.

Hopefully this guide thingy has helped in some way; maybe to reduce your fan noise, or maybe make it worse - whatever you want.