Its behaving as if the duty cycle commands aren't working.
First thing, do you have 4 pin PWM fans? I assume you do since the fan speeds do go up when it sets the fan mode to full.
Have there been any system event logs posted in IPMI?
This is the code that sets the fan zone duty cycle (which is what doesn't seem to be working)
Code:
# zone,dutycycle%
sub set_fan_zone_duty_cycle
{
my ( $zone, $duty ) = @_;
if( $zone < 0 || $zone > 1 )
{
bail_with_fans_full( "Illegal Fan Zone" );
}
if( $duty < 0 || $duty > 100 )
{
dprint( 0, "illegal duty cycle, assuming 100%\n");
$duty = 100;
}
dprint( 1, "Setting Zone $zone duty cycle to $duty%\n");
`$ipmitool raw 0x30 0x70 0x66 0x01 $zone $duty`;
return;
}
So, without running the fan controller, firstly, set the fan mode to Full
ipmitool raw 0x30 0x45 0x01 1
And verify that your fans spin up
ipmitool sdr | grep FAN
Then try setting fan zone 0 to 50%
ipmitool raw 0x30 0x70 0x66 0x01 0 50
again, try
ipmitool sdr | grep FAN
FAN4 should slow down to about half speed (1000RPM?)
It might take a few seconds (10?) for it to finish slowing down.
What happens when you try?
Also, you can try increasing $debug value to a higher value to provide some more info, but it really does seem like its doing everything except actually setting the duty cycle.
Well, well, well, when a firmware update can do wonders.... :) I'm happy to report to anyone with an X10SL7-F that the stock BMC firmware ver 1.42, that mine at least came with, is garbage and going to the latest 3.27 will allow the script to work properly. :) Sorry I was unable to respond earlier.
So, yes. Script works, sort of... I have a question too about the massage fan speed *= 0.8
Why is it needed and why at 0.8? Can we comment it out? I believe the fans won't spin below their minimum designated speed and the BMC or script gets the wrong math somewhere, or it could be a BMC interpretation of the code. Or the code is wrong. Or maybe the correlation between the 3 and 4, respectively, settings for the CPU and HDD. I just don't know.
Example. CPU max fan speed is set to 2000 in script. I set Med value to the percentage below:
Duty set at 15%, I expect 300 RPM, instead I get 1000 RPM. Which is 50%.
Duty set at 20%, I expect 400 RPM, instead I get 1000 RPM. Which is 50%.
Duty set at 25%, I expect 500 RPM, instead I get 1100 RPM. Which is 55%
Duty set at 30%, I expect 600RPM, instead I get 1100 RPM. Which is 55%
Duty set at 35%, I expect 700 RPM, instead I get 1200 RPM. Which is 60%
Duty set at 40%, I expect 800 RPM, instead, I get 1300 RPM. Which is 65%.
Duty set at 45%, I expect 900 RPM, instead, I get 1300 RPM. Which is 65%.
Duty set at 50%, I expect 1000 RPM, instead I get 1400 RPM. Which is 70%.
Duty set at 55%, I expect 1100 RPM, instead I get 1400 RPM. Which is 70%.
Duty set at 60%, I expect 1200 RPM, instead I get 1500 RPM. Which is 75%.
Duty set at 65%, I expect 1300 RPM, instead I get 1500 RPM. Which is 75%.
Duty set at 70%, I expect 1400 RPM, instead I get 1600 RPM. Which is 80%.
and so on. I did not have time to run the full tests
Example. HDD max fan speed is set to 6300 in script. I set Med_high value to the percentage below, and set same value in other low and med value (maybe that's why I'm getting these results but I did not do it for the CPU):
Duty set at 25%, I expect 1575 RPM, instead I get 2700 RPM. Which is 43%.
Duty set at 30%, I expect 1900 RPM, instead I get 3000 RPM. Which is 47.5%.
Duty set at 40%, I expect 2500 RPM, instead I get 3600 RPM. Which is 57%.
Duty set at 50%, I expect 3150 RPM, instead I get 4100 RPM. Which is 65%.
Duty set at 60%, I expect 3800 RPM, instead I get 4700 RPM. Which is 75%.
Duty set at 70%, I expect 4400 RPM, instead I get 5200 RPM. Which is 82.5%. BMC resets all the time due to 5200>5040
Duty set at 80%, I expect 5040 RPM, instead I get 5600 RPM. Which is 89%. BMC resets all the time due to 5600>5040
Duty set at 90%, I expect 5670 RPM, instead I get 6000 RPM. Which is 95%. BMC resets all the time due to 6000>5040
Can anyone better at math and reading code take a look.