Jump to content
bubbaQ

Temperature-based fan speed control for unRAID


57 posts in this topic Last Reply

Recommended Posts

There have been several threads regarding automatically adjusting fan speeds based on drive/system temps.

 

Some motherboards support variable-speed fan headers, but the ones that do, often only support it on one fan header.  It also limits your mobo choices if you need fan speed control on the mobo.  And you run into driver issues under Linux.

 

I decided to look at hardware based solutions independent of the mobo.

 

What I really would like, is the Sunbeam Theta, with a few changes.... but alas, it is long out of production.

 

I got a Matrix Orbital LED MX-series matrix display, not necessarily for the display, but because it had headers for variable seed fan control, and temperature sensors.

 

There is decent documentation for the MX, but I had to develop for it in C.  I now have a C class for reading and storing all unRAID server info (output from /proc/mdcmd) and the prototype of the unraid-specific fan control is working.

 

I got the Matrix Orbital since it has largest market share and community support.  However, the Crystal Fontz CFA633 series has similar abilities for a little less, about $60.

 

  http://www.crystalfontz.com/product/CFA633TMCKU

 

I also found the T-Balancer? bigNG MultiFunction Fan / Pump Controller which sits in an empty slot cover... so no drive bay is needed.... but it is the most expensive at $90.

 

  http://www.sidewindercomputers.com/tbalancerbigng.html

 

Comments?

 

Share this post


Link to post

I like the idea of an LCD screen to display stuff, but frankly I would probably never see it unless I was working on the server.  My server sits in the basement out of the way, so as not to be seen or heard.

 

I use the email notifications to keep on top of things that are happening to the system.

 

I like the internal T-Balancer for that reason.  I wish it was a little less expensive but I could probably foot out for it.

Share this post


Link to post

I got a Matrix Orbital LED MX-series matrix display, not necessarily for the display, but because it had headers for variable seed fan control, and temperature sensors.

Would we be able to use the LCD to display information about the server (drive status, temperatures, free space, etc - the kind of stuff available in the unRAID main webpage)?  Or would it simply to be for fan control?  If it could display server information, I'd be interested; otherwise, $60 is kinda high to just control fan speeds IMHO.

Share this post


Link to post

I got a Matrix Orbital LED MX-series matrix display, not necessarily for the display, but because it had headers for variable seed fan control, and temperature sensors.

Would we be able to use the LCD to display information about the server (drive status, temperatures, free space, etc - the kind of stuff available in the unRAID main webpage)?  Or would it simply to be for fan control?  If it could display server information, I'd be interested; otherwise, $60 is kinda high to just control fan speeds IMHO.

 

+1 , drive failures and currant temps would be great info.

Share this post


Link to post

If anyone has a Matrix Orbital MX series and is willing to beta test some unRAID fan control software, please PM me.

Share this post


Link to post

Ok..... here's another option, but less universal.  I can do this project by varying a PWM fan on the motherboard.  But 1) some mobos don't use the it87 chip, 2) those that do often don't have PWM control of fan speeds except for the CPU fan.

 

On your unraid box, see what hardware monitoring is available:

 

ls -la /sys/devices/platform

 

and see if you have something with it87.

 

If a lot of people have it87 chips, it may be worth it to code a fan control applet for unRAID that will talk to the it87.

Share this post


Link to post

When I run that command on my server I get the following output:

 

root@Tower:~# ls -la /sys/devices/platform/
total 0
drwxr-xr-x 7 root root    0 Mar 11 11:20 ./
drwxr-xr-x 8 root root    0 Mar 10 04:35 ../
drwxr-xr-x 4 root root    0 Mar 11 11:20 floppy.0/
drwxr-xr-x 4 root root    0 Mar 11 11:20 i8042/
drwxr-xr-x 4 root root    0 Mar 11 11:20 pcspkr/
drwxr-xr-x 2 root root    0 Mar 11 11:20 power/
drwxr-xr-x 4 root root    0 Mar 11 11:20 serial8250/
-rw-r--r-- 1 root root 4096 Mar 11 11:20 uevent

Share this post


Link to post

What happens if you issue this command:

 

modprobe it87

 

Also try:

 

ls -la /sys/class/hwmon

 

Share this post


Link to post

What happens if you issue this command:

 

modprobe it87

I just get returned to the command prompt

 

 

 

ls -la /sys/class/hwmon

I get this:

root@Tower:~# ls -la /sys/class/hwmon/
total 0
drwxr-xr-x  2 root root 0 Mar 11 11:27 ./
drwxr-xr-x 27 root root 0 Mar 11 11:27 ../
lrwxrwxrwx  1 root root 0 Mar 11 11:27 hwmon0 -> ../../devices/platform/it87.656                                 /hwmon/hwmon0/

 

NOTE: This is on a system running 4.4.2 and BubbaRAID.  I have a 4.5.3 system setup but no remote access to it at this point.

 

Share this post


Link to post

Try the command:

 

ls -la /sys/devices/platform

 

again now after you have issued the modprobe it87.

 

In the latest version of unRAID, the IT87 driver is built into the kernel... perhaps in your version it was not, and must be modprobed.

Share this post


Link to post

Try the command:

 

ls -la /sys/devices/platform

 

again now after you have issued the modprobe it87.

 

In the latest version of unRAID, the IT87 driver is built into the kernel... perhaps in your version it was not, and must be modprobed.

 

It would seem you are correct.  When I run the above command now I get:

root@Tower:~# ls -la /sys/devices/platform/
total 0
drwxr-xr-x 8 root root    0 Mar 11 11:26 ./
drwxr-xr-x 8 root root    0 Mar 10 04:35 ../
drwxr-xr-x 4 root root    0 Mar 11 11:20 floppy.0/
drwxr-xr-x 4 root root    0 Mar 11 11:20 i8042/
drwxr-xr-x 4 root root    0 Mar 11 11:27 it87.656/
drwxr-xr-x 4 root root    0 Mar 11 11:20 pcspkr/
drwxr-xr-x 2 root root    0 Mar 11 11:20 power/
drwxr-xr-x 4 root root    0 Mar 11 11:20 serial8250/
-rw-r--r-- 1 root root 4096 Mar 11 11:20 uevent

Share this post


Link to post

How many fan headers on your motherboard (other than CPU fan)?

 

Do you have enough fan's to put one on each fan header for testing?

Share this post


Link to post

How many fan headers on your motherboard (other than CPU fan)?

 

Do you have enough fan's to put one on each fan header for testing?

 

I am using this motherboard, and I should have enough fans hidden away somewhere to do testing.

Share this post


Link to post

The ITE 87 variants are very common... on both AMD and Intel mobos.  They all use the same linux driver, and that driver is in unRAID as of the last several minor versions.  I has an easy interface to reading fan speeds and controlling them with PWM (as long as the mobo manufacturer implemented the hardware for it).

Share this post


Link to post

On your unraid box, see what hardware monitoring is available:

ls -la /sys/devices/platform

and see if you have something with it87.

If a lot of people have it87 chips, it may be worth it to code a fan control applet for unRAID that will talk to the it87.

root@Tower:~# ls -la /sys/devices/platform
total 0
drwxr-xr-x 6 root root    0 Mar 12 10:39 ./
drwxr-xr-x 8 root root    0 Mar 12 10:39 ../
drwxr-xr-x 5 root root    0 Mar 12 10:39 i8042/
drwxr-xr-x 4 root root    0 Mar 12 10:39 pcspkr/
drwxr-xr-x 2 root root    0 Mar 12 10:42 power/
drwxr-xr-x 4 root root    0 Mar 12 10:39 serial8250/
-rw-r--r-- 1 root root 4096 Mar 12 10:42 uevent
root@Tower:~#

I don't have it.

Share this post


Link to post

Nope. I don't have it either.

Linux 2.6.32.9-unRAID.
root@Tower:~# ls -la /sys/devices/platform
total 0
drwxr-xr-x 8 root root    0 Mar 11 11:19 ./
drwxr-xr-x 6 root root    0 Mar 11 11:19 ../
drwxr-xr-x 5 root root    0 Mar 11 11:19 i8042/
drwxr-xr-x 4 root root    0 Mar 11 11:19 pcspkr/
drwxr-xr-x 2 root root    0 Mar 11 11:51 power/
drwxr-xr-x 3 root root    0 Mar 11 11:19 rtc_cmos/
drwxr-xr-x 4 root root    0 Mar 11 11:19 serial8250/
-rw-r--r-- 1 root root 4096 Mar 11 11:19 uevent
drwxr-xr-x 4 root root    0 Mar 11 11:19 w83627hf.2560/
root@Tower:~#

 

Share this post


Link to post

It did not show up for me either until I did a modprobe it87 first.  Then when I reran the command it showed up.

Share this post


Link to post

It did not show up for me either until I did a modprobe it87 first.  Then when I reran the command it showed up.

Nope.  "FATAL: Module it87 not found."

Linux 2.6.32.9-unRAID.
root@Tower:~# modprobe it87
FATAL: Module it87 not found.
root@Tower:~# ls -la /sys/devices/platform
total 0
drwxr-xr-x 8 root root    0 Mar 11 11:19 ./
drwxr-xr-x 6 root root    0 Mar 11 11:19 ../
drwxr-xr-x 5 root root    0 Mar 11 11:19 i8042/
drwxr-xr-x 4 root root    0 Mar 11 11:19 pcspkr/
drwxr-xr-x 2 root root    0 Mar 11 11:51 power/
drwxr-xr-x 3 root root    0 Mar 11 11:19 rtc_cmos/
drwxr-xr-x 4 root root    0 Mar 11 11:19 serial8250/
-rw-r--r-- 1 root root 4096 Mar 11 11:19 uevent
drwxr-xr-x 4 root root    0 Mar 11 11:19 w83627hf.2560/
root@Tower:~#

 

Share this post


Link to post

jupilerman, try running "modprobe it87" first.

 

Purko, you have the Winbond 83627.  I think I can work with that one too.  

 

 

Share this post


Link to post

Purko, you have the Winbond 83627.  I think I can work with that one too.  

Then I'm your guinea pig.  Bring it on.

 

Share this post


Link to post

Here's the result of those two commands on my unRAID server:

Linux 2.6.31.12-unRAID.
root@JohnsMediaServer:~# modprobe it87
FATAL: Module it87 not found.
root@JohnsMediaServer:~# ls -la /sys/class/hwmon
total 0
drwxr-xr-x  2 root root 0 Mar  9 23:35 ./
drwxr-xr-x 26 root root 0 Mar  9 23:35 ../
lrwxrwxrwx  1 root root 0 Mar  9 23:35 hwmon0 -> ../../devices/platform/coretemp.0/hwmon/hwmon0/
lrwxrwxrwx  1 root root 0 Mar  9 23:35 hwmon1 -> ../../devices/platform/coretemp.1/hwmon/hwmon1/
lrwxrwxrwx  1 root root 0 Mar  9 23:35 hwmon2 -> ../../devices/platform/it87.656/hwmon/hwmon2/

Looks like I have the ITE 87.  I have one 4-pin PWM fan for my CPU and one 3-pin fan for my case (will be getting a second 3-pin fan for my case).  If it helps for testing purposes I can get a second 4-pin PWM fan for the second header on my motherboard.  (I have two 3-pin headers and two 4-pin headers)

 

Please let me know if I can help.  (posts in this thread, PM, email, IM, whatever, just let me know)

Share this post


Link to post

I'm working on a universal app to do this, but for those who want to experiment, here is how PWM (pulse width modulation) for fan control works on Linux.

 

You need to have hardware monitoring support installed.  UnRAID has some drivers available, although you may need to load them.

 

First, see what devices you have:

 

ls -la /sys/devices/platform

 

What you want to see is a directory beginning with “it87" or “w83627” and that is your hardware monitoring driver.  If you don’t see one, try these command to load, then, and then list the directory again.

 

modprobe it87
modprobe w83627hf
ls -la /sys/devices/platform

 

Once you find the directory for your monitoring chip, change to that directory.  On my test system, it is “it87.552" so I enter:

cd /sys/devices/platform/it87.552

 

In that directory should be several files beginning with fan* and pwm* which we will use.

 

Fan1_input is the speed of fan 1

pwm1_freq is the pwm setting (from 0 to 255) for fan 1

pwm1_enable has either a 1 or 0 (1 is enabled, 2 is disabled)

 

To read fan1 speed, use:

 

cat fan1_input

 

To set a PWM setting for fan one, first you have to enable PWM changing:

 

echo 1 > pwm1_enable

 

Then you write a value to pwm1.  To set the fan on high, you use

 

echo 255 > pwm1  

 

To set the fan speed to a lower value, use a lower setting for PWM, such as 50:

 

echo 50 > pwm1  

 

You have to experiment to find what PWM settings will produce what RPM on each fan.  I usually pull out the manual for the mobo, and write in it noting which fan header is which unr Linux, for future reference.

 

You also have to experiment to find out which fan headers on the mobo are fan1, fan2, and fan3.  Fan1 is often the CPU fan, but not always.  All fan headers on the mobo are not necessarily accessible via the hardware monitoring chip.

 

 

 

 

 

 

 

Share this post


Link to post

Alright, this is pretty sweet.  I just tried controlling my fan1 (CPU PWM fan).  I found that

echo 199 > pwm1

is the lowest my CPU fan can spin (110 RPM!)  Touching the fan blades causes them to stop.

echo 255 > pwm1

gives me 886 RPM.  So this must be a 900 RPM fan...which explains why it's so quiet!  (it's the fan that came with my Xigmatek S-1283 heatsink, a 120mm CPU fan :o. Really quite overkill for unRAID, but it sure is quiet.)

 

Edit:

Tried plugging my CPU fan into my second PWM header.  This one works as well, but my fan spins faster by default.  Could be a BIOS setting?

echo 120 > pwm2

gives me 150 RPM and

echo 255 > pwm2

gives me 1493 RPM.  I don't think I can control the 3-pin headers, but it could just be a different command. (I tried echo 200 > fan3 and it didn't work)  I CAN however see the speed of the fans on the 3-pin headers.

Share this post


Link to post

You can get odd results on the CPU fan header likely because as soon as you set it, the thermal control of the system resets it to something else.... and in particular will impose max/min settings. 

 

In short, you are unlikely to get reliable or consistent with the CPU fan header.... so ignore it.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.