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!