After further investigation on my X9SRL-F, I have found that there is definitely a Linux solution for fan speed control on all boards that cannot be controlled by IPMI but where the BMC does control the fans.
Like many other Supermicro boards, the X9SRL-F has just two fan zones:
- CPU, which controls FAN1, FAN2, FAN3, FAN4
- Peripheral, which controls FANA
You can't change this, and you cannot set the duty cycle for the zone through IPMI commands (e.g., ipmitool raw).
But, just like other boards, if you set the IPMI fan speed to "Full", then the BMC doesn't try to make any changes to the fan speed unless one of the fans hits an "unrecoverable" RPM (either high or low).
The key to actually managing the fan speeds is the Linux hwmon subsystem. The easiest way is to install
lm-sensors, run
sensors-detect, and allow the changes to be made to
/etc/modules (or manually add the changes to a file in
/etc/modules-load.d). You will then have directories in
sysfs that describe the sensors. This will allow the
fancontrol program (an optional package that supplements
lm-sensors) to control fan speed by associating temperature sensors to PWM control and creating curves.
Or, you can just do something like the following to set the CPU zone fan speed to 50%:
Bash:
PWM_PCT=50
echo $(($PWM_PCT * 255 / 100)) > /sys/class/hwmon/hwmon1/pwm2
What this allowed me to do was to use the FANA as the "CPU" zone and all the other headers as "peripheral". Since I have a CPU heatsink with a fan, this solves the biggest problem I had where any real CPU activity sent the noise up to unacceptable levels because all the fans were controlled by the CPU temperature. I tried using a splitter cable connected to FANA, but there were just too many fans and not enough current available from one header.