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 […]