Some good guidance on using open source IPMIUtil to quiet annoying fans
I run a Supermicro MBD-X10SDV-TLN4F-O in my home lab with ESXi for various software projects.
The board has two Noctua NF-S12B redux-1200 PWM fans connected to it for case cooling in a NCASE M1 v5. The stock Supermicro CPU fan was replaced with a quieter Gelid Silent5 50mm Silent Case Fan though I may be swapping that back to a PWM fan now that I know how to control fan speeds.
The problem is, the stock BMC settings for the lower thresholds on the large 120 mm fans are too high causing the motherboard to try and “jump start” the fans when the RPM’s reach the lower threshold. This leads to a very annoying oscillating voltage delivered to the fan and subsequent audible awesomeness. 🙁
The fix: IPMIUtil
$ sudo dnf install ipmiutil $ ipmiutil sensor -N <<Your Server BMC IP>> -U <<Username>> -P <<Password>> -c -g fan
The output will be similar to this:
ipmiutil ver 2.99 isensor: version 2.99 -- BMC version 3.46, IPMI version 2.0 ID | SDRType | Type |SNum| Name |Status| Reading 021c | Full | Fan | 41 | FAN1 | Absent | 0.00 na 025f | Full | Fan | 42 | FAN2 | OK | 4600.00 RPM 02a2 | Full | Fan | 43 | FAN3 | OK | 1100.00 RPM 02e5 | Full | Fan | 44 | FAN4 | OK | 1200.00 RPM ipmiutil sensor, completed successfully
Now note the SNum of the fans you would like to change. I’m setting my fans lower threshold to 250 RPM, upper threshold must be set too even if you are not editing it; if omitted will set value to zero. A reboot was not required for the settings to take effect for me:
$ ipmiutil sensor -N <<Your Server BMC IP>> -U <<Username>> -P <<Password>> -n 43 -l 250 -h 25500
ipmiutil ver 2.99
isensor: version 2.99
sensor_num = 0x43
-- BMC version 3.46, IPMI version 2.0
_ID_ SDR_Type_xx ET Own Typ S_Num Sens_Description Hex & Interp Reading
0004 SDR Full 01 01 20 a 01 snum 01 CPU Temp = 28 OK 40.00 degrees C
0047 SDR Full 01 01 20 a 01 snum 0b System Temp = 24 OK 36.00 degrees C
008a SDR Full 01 01 20 a 01 snum 0c Peripheral Temp = 29 OK 41.00 degrees C
00cd SDR Full 01 01 20 a 01 snum 0d MB_10G Temp = 29 OK 41.00 degrees C
0110 SDR Full 01 01 20 a 01 snum b0 DIMMA1 Temp = 27 OK 39.00 degrees C
0153 SDR Full 01 01 20 a 01 snum b1 DIMMA2 Temp = 28 OK 40.00 degrees C
0196 SDR Full 01 01 20 a 01 snum b4 DIMMB1 Temp = 28 OK 40.00 degrees C
01d9 SDR Full 01 01 20 a 01 snum b5 DIMMB2 Temp = 27 OK 39.00 degrees C
021c SDR Full 01 01 20 a 04 snum 41 FAN1 = 00 Absent 0.00 na
025f SDR Full 01 01 20 a 04 snum 42 FAN2 = 2d OK 4500.00 RPM
02a2 SDR Full 01 01 20 a 04 snum 43 FAN3 = 0a OK 1000.00 RPM
Setting SDR 02a2 sensor 43 to lo=03 hi=ff
02e5 SDR Full 01 01 20 a 04 snum 44 FAN4 = 09 OK 900.00 RPM
0328 SDR Full 01 01 20 a 02 snum 20 VCCP = ba OK 1.86 Volts
036b SDR Full 01 01 20 a 02 snum 24 VDIMM = 7c OK 1.20 Volts
03ae SDR Full 01 01 20 a 02 snum 30 12V = bb OK 12.13 Volts
03f1 SDR Full 01 01 20 a 02 snum 31 5VCC = ba OK 5.00 Volts
0434 SDR Full 01 01 20 a 02 snum 32 3.3VCC = bf OK 3.37 Volts
0477 SDR Full 01 01 20 a 02 snum 33 VBAT = 70 OK 3.28 Volts
04ba SDR Full 01 01 20 a 02 snum 38 5V Dual = ba OK 5.03 Volts
04fd SDR Full 01 01 20 a 02 snum 39 3.3V AUX = be OK 3.32 Volts
0540 SDR Full 01 6f 20 a 05 snum aa Chassis Intru = 00 OK 0.00 na
0583 SDR FRU 11 12 dev: 20 00 80 26 00 00 BMC FRU
05c6 SDR IPMB 12 13 dev: 20 00 26 00 00 ATEN BMC
0609 SDR EvtO 03 1b 20 a dc snum 80 NM exception = 0000 OK
064c SDR EvtO 03 1b 20 a dc snum 81 NM health = 0000 OK
068f SDR EvtO 03 1b 20 a dc snum 82 NM op cap = 0000 OK
06d2 SDR EvtO 03 1b 20 a dc snum 83 NM alert = 0000 OK
0715 SDR OEM c0 0b Intel: NM(0,2c,0) health=25 excep=24 capab=26 thresh=27
SDR IPMI sensor: Power On Hours = 1 hours
GetThreshold[43]: 43 3f 07 05 03 fd fe ff
SetThreshold[43]: 43 07 03 02 01 00 00 00
SetSensorThreshold[43] to lo=03(250.000) hi=ff(25500.000), ret = 0
ipmiutil sensor, completed successfully
*** Edit: Newer versions of IPMI spec may require a 6 value string like below (Note the middle two values that are not displayed on the BMC UI):
$ ipmiutil sensor -N <<Your Server BMC IP>> -U <<Username>> -P <<Password>> -n 41 -u 100:100:100:25400:25400:25500
ipmiutil ver 2.99
isensor: version 2.99
sensor_num = 0x41
-- BMC version 3.46, IPMI version 2.0
_ID_ SDR_Type_xx ET Own Typ S_Num Sens_Description Hex & Interp Reading
0004 SDR Full 01 01 20 a 01 snum 01 CPU Temp = 30 OK 48.00 degrees C
0047 SDR Full 01 01 20 a 01 snum 0b System Temp = 24 OK 36.00 degrees C
008a SDR Full 01 01 20 a 01 snum 0c Peripheral Temp = 2c OK 44.00 degrees C
00cd SDR Full 01 01 20 a 01 snum 0d MB_10G Temp = 33 OK 51.00 degrees C
0110 SDR Full 01 01 20 a 01 snum b0 DIMMA1 Temp = 24 OK 36.00 degrees C
0153 SDR Full 01 01 20 a 01 snum b1 DIMMA2 Temp = 25 OK 37.00 degrees C
0196 SDR Full 01 01 20 a 01 snum b4 DIMMB1 Temp = 26 OK 38.00 degrees C
01d9 SDR Full 01 01 20 a 01 snum b5 DIMMB2 Temp = 27 OK 39.00 degrees C
021c SDR Full 01 01 20 a 04 snum 41 FAN1 = 05 AboveCrit 500.00 RPM
Setting SDR 021c sensor 41 to lo=01 hi=fe
025f SDR Full 01 01 20 a 04 snum 42 FAN2 = 03 OK 300.00 RPM
02a2 SDR Full 01 01 20 a 04 snum 43 FAN3 = 03 OK 300.00 RPM
02e5 SDR Full 01 01 20 a 04 snum 44 FAN4 = 04 OK 400.00 RPM
0328 SDR Full 01 01 20 a 02 snum 20 VCCP = b9 OK 1.85 Volts
036b SDR Full 01 01 20 a 02 snum 24 VDIMM = 7b OK 1.19 Volts
03ae SDR Full 01 01 20 a 02 snum 30 12V = ba OK 12.06 Volts
03f1 SDR Full 01 01 20 a 02 snum 31 5VCC = b9 OK 4.97 Volts
0434 SDR Full 01 01 20 a 02 snum 32 3.3VCC = be OK 3.35 Volts
0477 SDR Full 01 01 20 a 02 snum 33 VBAT = 6d OK 3.20 Volts
04ba SDR Full 01 01 20 a 02 snum 38 5V Dual = b9 OK 5.00 Volts
04fd SDR Full 01 01 20 a 02 snum 39 3.3V AUX = bd OK 3.30 Volts
0540 SDR Full 01 6f 20 a 05 snum aa Chassis Intru = 00 OK 0.00 na
0583 SDR FRU 11 12 dev: 20 00 80 26 00 00 BMC FRU
05c6 SDR IPMB 12 13 dev: 20 00 26 00 00 ATEN BMC
0609 SDR EvtO 03 1b 20 a dc snum 80 NM exception = 0000 OK
064c SDR EvtO 03 1b 20 a dc snum 81 NM health = 0000 OK
068f SDR EvtO 03 1b 20 a dc snum 82 NM op cap = 0000 OK
06d2 SDR EvtO 03 1b 20 a dc snum 83 NM alert = 0000 OK
0715 SDR OEM c0 0b Intel: NM(0,2c,0) health=25 excep=24 capab=26 thresh=27
SDR IPMI sensor: Power On Hours = 0 hours
GetThreshold[41]: 41 3f ff fe fe 01 01 01
SetThreshold[41]: 41 3f 01 01 01 fe fe ff
SetSensorThreshold[41] to lo=01(100.000) hi=fe(25400.000), ret = 0
ipmiutil sensor, completed successfully
Helpful output from the IPMIUtil –help:
$ ipmiutil --help
ipmiutil ver 2.99
Usage: ipmiutil <command> [other options]
where <command> is one of the following:
alarms show/set the front panel alarm LEDs and relays
leds show/set the front panel alarm LEDs and relays
discover discover all IPMI servers on this LAN
cmd send a specified raw IPMI command to the BMC
config list/save/restore BMC configuration parameters
dcmi get/set DCMI parameters
ekanalyzer run EKeying analyzer on FRU files (deprecated, see fru)
events decode IPMI events and display them
firewall show/set firmware firewall functions
fru show decoded FRU inventory data, write asset tag
fwum OEM firmware update manager extensions
getevt get IPMI events and display them, event daemon
getevent get IPMI events and display them, event daemon
health check and show the basic health of the IPMI BMC
hpm HPM firmware update manager extensions
lan show/set IPMI LAN parameters and PEF table
picmg show/set picmg extended functions
power issue IPMI reset or power control to the system
reset issue IPMI reset or power control to the system
sel show/clear firmware System Event Log records
sensor show Sensor Data Records, readings, thresholds
serial show/set IPMI Serial & Terminal Mode parameters
sol start/stop an SOL console session
smcoem SuperMicro OEM functions
sunoem Sun OEM functions
delloem Dell OEM functions
tsol Tyan SOL console start/stop session
wdt show/set/reset the watchdog timer
common IPMI LAN options:
-N node Nodename or IP address of target system
-U user Username for remote node
-P/-R pswd Remote Password
-E use password from Environment IPMI_PASSWORD
-F force driver type (e.g. imb, lan2)
-J 0 use lanplus cipher suite 0: 0 thru 14, 3=default
-T 1 use auth Type: 1=MD2, 2=MD5(default), 4=Pswd
-V 2 use priVilege level: 2=user(default), 4=admin
-Y prompt for remote password
-Z set slave address of local MC
For help on each command (e.g. 'sel'), enter:
ipmiutil sel -?
ipmiutil , usage or help requested
Many thanks to this post on the FreeNAS community forum!
Hello, how alter speed fan?
[…] issue I encountered was when I added some Noctua cooling fans, and discovered that I needed to modify the fan thresholds. When I chose to add a second ESXi host, direct connecting the onboard Intel X552/X557-AT 10Gb […]