P

Supermicro X9/X10/X11 Fan Speed Control

gyrene2083

New Member
Sep 2, 2019
6
0
1
Hello All,

I have a Supermicro X10DRU-i+, it doesn't have a FANA or FANB, it only has Fans1-8. How would you configure this board that doesn't have those two zones?

Thanks in advance.
 

DaveInTexas

Member
Oct 28, 2021
45
45
18
@PigLover 's reference document is exceedingly useful, however it's not fully accurate on one point. This supplemental information (below) may help others who are new to manually controlling Supermicro motherboard fan speeds.

1. The description of fan speed step zones is partially incorrect and needs a bit of clarification, IMHO.

"You can also set the PWM duty cycle for each of the fan zones. PWM values are set 64 steps using hex values from 00-FF (ox00 to 0x64). 0x00 is minimum speed, 0x64 is full speed, and 0x32 is 50%, etc."

There are in fact 100 intervals, not 64. Those are hexadecimal values (base-16), and therefore 0x00 - 0x64 is equivalent to 0 - 100 decimal (base-10). In other words, 0x00 - 0x64 (hex) is a range of 100 (decimal) steps, where each step = 1% in fan speed change.

10x = 16
20x = 32
etc.
64x = 100

I don't know what happens if you plug in a value of 0x65 or higher. Out-of-range behavior is likely dependent how any given BMC controller handles such data. Some ignore values out of range and some roll the value over (e.g. 0x65 becomes 0x00).

--------------

2. The information above is true for certain Supermicro motherboards, but not all of them.

The 0x00 - 0x64 step utilization mentioned above works on Supermicro generation X10 and X11 motherboards. The hex value is directly correlated to decimal percentage equivalents, which is nice for humans as it makes it easier for us to do the math. :cool:

In short, X10 and X11 mobos use a literal percentage expression. But, what if you have a Supermicro X9 motherboard?

On X9 boards, you have to convert an 8-bit hexadecimal range (0-FF) into its corresponding decimal range (0-255), and then break that into increments of 1/100 to find the equivalent decimal percentage us humans are used to, expressed as its equivalent hex range.

In order to set your fan speed correctly, you must convert from a 100-point with increments of 1, as a decimal scale, to a 256-point scale divided by increments of 1/100. In other words, you must think of 0-100% stepping along a scale of 0 - 255 ( x00 - xFF ).

For X9 boards you must treat it like a scale, where you are pegging a percentage to the corresponding value along the scale. In human-readable decimal terms, we are talking about a 0 - 100 integer scale (percentage) cross-referenced to an 8-bit hexadecimal scale (00 - FF).

Examples:

00 decimal =0x00 hexadecimal
10 decimal = 0x1A hex (10% of FF or 255 = 25.5 rounded = 26)
25% = 0x40 (25% of 255 is 63.75 = rounded to 64 decimal or x40 hex { 4 x 16 + 0 = 64 decimal }
50% = 0x7F
75% = 0xBF (75% of 255 = 191.25 = rounded to 191 decimal = { 11 x 16 + 15 = 191 decimal }
100% = 0xFF

Basically, for X9 boards you have to convert your desired percentage value from decimal to hexadecimal, while at the same time mapping a decimal value (percentage) to an 8-bit hexadecimal scale equivalent. This is because while 0x00 = 0%, since 0xFF = 100%, it means in order to determine how to set your power percentage for any given fan zone, the formula is:

(( percentage / 100 ) * 255 )

or

(( percentage * 255 ) / 100 )

You then convert the value to hexadecimal. For example, 50% = 0x7F: 7F = 128 = 50% of 256

Note: It's normally good practice to use lowercase letters when expressing hex values in code. They are written in uppercase in this post to make it easier to read. Also, the "0x" preceding each hex value clarifies the value following the "0x" is hexadecimal and not decimal. Not every operating system or programming language supports that syntax, but many do.

--------------

3. FYI: Raw fan speed IPMI commands are different for Supermicro X9 vs. X10/X11 boards:

X9: ipmitool raw 0x30 0x91 0x5A 0x03 "zone" "duty"
X10/X11: ipmitool raw 0x30 0x70 0x66 0x01 "zone" "duty"

where "zone" = 0x00 or 0x01
where "duty" = 0x00 --> 0xFF or 0x00 --> 0x64 depending on mobo gen, as explained above
 
  • Like
Reactions: Nils S and gseeley

Negative Entropy

New Member
May 20, 2020
21
15
3
Hello All,

I have a Supermicro X10DRU-i+, it doesn't have a FANA or FANB, it only has Fans1-8. How would you configure this board that doesn't have those two zones?

Thanks in advance.
You may be able to get a list of the "sensors" too. That's how I handled it using IPMIUTIL. Each fan header was its own sensor (numbered 41, 42, etc.). This on a shiny new X13 board. Then I could issue commands against that sensor number.
 
  • Like
Reactions: gyrene2083

AveryFreeman

consummate homelabber
Mar 17, 2017
411
52
28
41
Near Seattle
averyfreeman.com
Something I just figured out: you can send the commands directly without ipmitool using the ipmiview app for Android, but when you send the commands they have to omit the 0x bit at the start.

So, for example, this: 0x30 0x70 0x66 0x01 0x00 0x16

Become this: 30 70 66 1 0 16

Which is 25% duty cycle for zone 0 (which is all my board has afaik). Tested on an X10SRW-F which doesn't have "optimal" option available (grr).

Also, not sure if I had to set speed to full before it started working, but I tried that as the first step just in case (will verify later, just so glad rn it's working at all!)

If I remember correctly, full was: 30 45 1 but might need a zone in there if you (unlike me) have a board with more than 1.

I wonder if since these were set directly if they'll survive reboot... Seems like I'm pushing it at this point, just going to enjoy being able to hear myself think for a bit...

Btw Android ipmiview app has a PDF reference that explains how to input the raw commands, Google if interested.

Thanks so much for posting this guidance!

Edit: I am pretty sure this works without having to make it full first (at least on my board) but it resets itself to full on reboot, so even though the commands were sent directly using ipmiview, they are not persistent

Does anyone know of a copy of ipmitool I can put on the efi partition to run at the boot screen? Having to suffer through full fan speed all the way through OS startup would be torturous. At least with the phone I can hit send on the string again as soon as I hear the fans spinning up into the red zone

I'm also replacing my FAN-0126L4 with FAN-0094L4, so maybe they'll be perfectly tolerable at the 50% standard setting. The 0126 is nidec 7000RPM 80mm fans, the San Ace 0094 manages to have more static pressure and move more air (CFM) at 6300RPM. Gotta love progress.

4200 is the 50% duty on my 0126 fans, I'm hoping the 0094s will be true to form and run at 3150. That sounds like a godsend, but knowing this board it'll probably kick them up to 3800 as a matter of tradition.
 
Last edited:

IvanM07

New Member
Aug 28, 2022
1
1
1
I don't know if this will help anyone but this was just a quick script I made for my two ESXi hosts that run on startup in /etc/rc.local.d/ and have worked well so far.

I have 2x 1u X10SRI-f and all fans are 'CPU' fans, so there isn't any finesse to the fan settings in this script.

I didn't like the static settings that SuperMicro had or just setting it to a static setting like 33%, even though 90% of the time i'm under 15% CPU Utilization.


#!/bin/sh
test="$(/opt/ipmitool/ipmitool sensor |cut -d '|' -f2|awk 'NR==1{print $1}')"
test1="${test%\.*}"
while true
do
if [ "$test1" -lt 40 ]; then
/opt/ipmitool/ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x18
echo "Fan Speed adjusted 25%"
fi
if [ "$test1" -gt 40 ]; then
/opt/ipmitool/ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x24
echo "Fan Speed adjusted 37.5%"
fi
if [ "$test1" -gt 50 ]; then
/opt/ipmitool/ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x32
echo "Fan Speed adjusted 50%"
fi
if [ "$test1" -gt 60 ]; then
/opt/ipmitool/ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x48
echo "Fan Speed adjusted 75%"
fi
if [ "$test1" -gt 70 ]; then
/opt/ipmitool/ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x66
echo "Fan Speed adjusted 100%"
fi
sleep 5
done
 
  • Like
Reactions: AveryFreeman

nickf1227

Active Member
Sep 23, 2015
185
112
43
32

Patrik Dufresne

New Member
Oct 19, 2016
22
2
3
37
@nickf1227

Last time I check, X10 and more recent board doesn't provide access to the BCM using i2c. This make it impossible to control the fan from the operating system.
 

Nils S

New Member
Mar 20, 2021
2
3
3
@PigLover 's reference document is exceedingly useful, however it's not fully accurate on one point. This supplemental information (below) may help others who are new to manually controlling Supermicro motherboard fan speeds...

3. FYI: Raw fan speed IPMI commands are different for Supermicro X9 vs. X10/X11 boards:

X9: ipmitool raw 0x30 0x91 0x5A 0x03 "zone" "duty"
X10/X11: ipmitool raw 0x30 0x70 0x66 0x01 "zone" "duty"

where "zone" = 0x00 or 0x01
where "duty" = 0x00 --> 0xFF or 0x00 --> 0x64 depending on mobo gen, as explained above
This is exactly what I've been searching for and big props to both of you, fantastic stuff in there. I wanted to add one thing that I found when working on my 1027GR-TR (X9DRG-HF): it has a bit of a weird zone setup; everyone I've seen talk about this reference 0x00 for the CPU zone and 0x01 for whatever other zone A; however, on this server it has 3 zones.
  • CPU Zone which has the ID of 0x10 and fans 1-4.
  • Left Zone (looking at it from the front) with ID 0x12 and fans A-D.
  • Right Zone with ID 0x13 and fans E-H (I only have E-F but I assume G/H are included).
So the commands to change the CPU fans to half speed would be:
ipmitool raw 0x30 0x91 0x5a 0x03 0x10 0x80

Took me a while just slamming options in there so I thought I'd put this here to save other people some time.
 

audiophonicz

Member
Jan 11, 2021
67
30
18
Has anyone ever figured out how to quiet down the PSUs on the X9s? Some genius hardcoded the PSU fan to 8050RPM at idle and I cant even get a fan spoofer to work and of course they never made the SQ PSUs for my chassis.
 

graczunia

New Member
Jul 11, 2022
19
12
3
if you have a 1u SM chassis like the CSE-512F which uses a fan wall of stacked 40mm fans, i've recently found great success using the stock fans together with noctua low noise adapters and lowering the IPMI alert threshold with ipmitool - works great with my X10SDV-TP8F, the CPU is about 38 deg C in idle and seems to be quieter than the 40mm noctua in my brocade icx6450 :)
 

TexasDave

New Member
Jan 14, 2023
4
2
3
Surrey, UK
I am running with a SuperMicro X10SL7-F. I have ipmitool setup and my thresholds are good.

I am trying to figure out the command to set fan speed manually with the raw command.

I know there are two groups of fans (1-4 + A).

I also understand that one of the parameters is the fan speed percentage.

Can someone post the commend for setting the fan speed manually for the SuperMicro X10SL7-F?

Many thanks!
 

DaveInTexas

Member
Oct 28, 2021
45
45
18
Can someone post the commend for setting the fan speed manually for the SuperMicro X10SL7-F?

Many thanks!
Great minds think alike when it comes to usernames! LoL :cool: :D

The IPMI command you need is broken down like this (# = byte position)

1: 0x30
2: 0x70
3: 0x66
4: 0x01
5: zone id
6: duty_hex range 0-100 (same as human %age in hex, i.e. 0x00 to 0x64)

These examples should work for you:

Set fan zone 0 (numeric; e.g. FAN1) to 50%:
Code:
sudo ipmitool raw 0x30 0x70 0x66 0x01 0x00 0x32

Set FANA's fan zone (zone 1) to 25%:
Code:
sudo ipmitool raw 0x30 0x70 0x66 0x01 0x01 0x19
 
  • Like
Reactions: TexasDave

DaveInTexas

Member
Oct 28, 2021
45
45
18
Adding a bit more context... on the X10 boards, the fans are grouped into "zones." You can only manipulate their fan speed manually by changing the speed of all the fans in the same group or zone at the same time. You cannot set each fan's speed individually.

Now, there are some other important bits of information you need to be aware of in order to preserve your sanity.

  1. Supermicro boards have 4 settings in the BMC or BIOS for the fan system's "mode." On the X10 boards, this should be configurable in the BMC (i.e. via ipmitool on a Linux box). You could also do this manually if you have access to the BMC's GUI (IPMI via dedicated or shared NIC).
  2. You will not be able to tweak fan speeds on an X10 board unless you first set the fan mode = FULL prior to attempting to set the speeds of the fan zones.
  3. Your BMC also has lower and upper fan speed thresholds. These can be set via the BMC's GUI or set via ipmitool from a command line, just like the raw commands for the speeds of the fan zones.
    • This part is a bit more complicated.
    • The fan speed thresholds are expressed in RPM
    • The gist of these is if you attempt to manually set your fans to a power level which causes their RPMs to fall below these lower fan speed threshold speeds, depending on which speed threshold they violate your BMC may force your fans into panic mode. This is when your fans will all go to 100% whether you like it or not. The fans will remain at 100% until they no longer violate the lower fan speed threshold. Once that happens, the fans will taper down to the fan speed setting you applied. Then, considering why the BMC entered panic mode in the first place, the cycle will repeat over and over. This will drive you insane.
    • The same is true for the upper fan speed thresholds, except in the opposite direction. If your fans are spinning too fast (i.e. they exceed one or more of particular upper speed thresholds), same thing. Panic mode. I know that sounds counter-intuitive. Why would you want to spin all the fans up to 100% if they're spinning too fast, right? I don't know what the logic was here, but that's how they work. :eek:
      • and btw, if you trigger panic mode b/c your fans are spinning too fast... once their power is set to 100%, guess what? they are still spinning too fast. So, if your fans suddenly ramp up to 100% on their own and stay there, this is the most likely cause, as the "stop panicking" level is never reached, so the fans stay amped up forever until you reset the server or fix your fan settings one way or another.
    • Unfortunately, explaining all the nuances of the lower/upper thresholds is actually a rather lengthy topic, so I'll not do that here atm in the interest of brevity and my time.
EDIT: forgot to explain how you place the BMC in "FULL" fan mode (mode = 1) via command line:

sudo ipmitool 0x30 0x45 0x01 0x01

If you ever want to 'read' the mode to see which one it is in currently, execute this command:

sudo ipmitool 0x30 0x45 0x00
 
Last edited:
  • Like
Reactions: TexasDave

TexasDave

New Member
Jan 14, 2023
4
2
3
Surrey, UK
@DaveInTexas - Many thanks for this - THANK YOU! I am a Texan, now in the UK. :)

Everything you say matches my own research and I had been using the exact same commands. I can confirm I am in FULL SPEED mode. I can also access the IPMI GUI.

But I get strange behavior. I attach two screen shots. The first shows generic FULL SPEED mode. All is as expected.

The next shows the results after I execute your sample commands. Again, I agree with these commands based on my own search and knowledge.

My fan speeds go crazy after the commands. I am not sure I believe the readings. In the end, my server is in the loft and the noise does not affect anyone. But it is bugging me that these commands do not work - they should.

Any other ideas before I just leave it in FULL mode? THANKS!
 

Attachments

  • Like
Reactions: DaveInTexas