How to: Get CPU temp



  • I've got pfSense running on an Intel Atom N270 and I was kinda worried about CPU temps because the CPU is passively cooled.  I tried adding the mbmon package but it couldn't find any sensors to read.

    [2.0-RC3][root@pfsense.ph.cox.net]/boot/kernel(48): mbmon
    No Hardware Monitor found!!
    InitMBInfo: Unknown error: 0
    [2.0-RC3][root@pfsense.ph.cox.net]/boot/kernel(52): mbmon -A
    InitMBInfo: Unknown error: 0
    This program needs "setuid root"!!
    
    

    Kinda bummed me out and through searching I couldn't really find a way to check temps.  I noticed someone said you could just check the acpi stats for temp.  Well, no go on my motherboard for that one too.  I came across one post telling you to add coretemp_load="YES" to loader.conf so I went ahead and did that.  No go, couldn't figure out why.

    Well, after reading a post by jimp:

    If you have a modern AMD or Intel chip, the amdtemp/coretemp modules help, but we don't build them on pfSense (grab them from a FreeBSD 8.1 install).

    I went ahead and vboxed a FreeBSD 8.1 install and copied the coretemp.ko module to my pfsense RC2 box and ran kldload coretemp.
    This popped up in my pfSense system log: :)

    kernel: coretemp0: <cpu on-die="" thermal="" sensors="">on cpu0
    kernel: coretemp1: <cpu on-die="" thermal="" sensors="">on cpu1</cpu></cpu> 
    

    Success.

    [2.0-RC3][root@pfsense.ph.cox.net]/boot/kernel(53): sysctl -a | grep temperature
    dev.cpu.0.temperature: 64.0C
    dev.cpu.1.temperature: 64.0C
    

    Hope this helps someone else.

    EDIT:Thank you PTT for hosting the following files :)

    Cliffnotes:

    cd /boot/kernel
    pkg_add -r wget
    pkg_add -r unzip
    rehash
    wget http://ptt.4mg.com/pfSense/coretemp32.zip //if you are on i386
    wget http://ptt.4mg.com/pfSense/coretemp64.zip //if you are on AMD64
    unzip coretemp32.zip (or coretemp64.zip)
    kldload coretemp
    sysctl -a | grep temperature
    

    If you would like to change the text to have a degree symbol:
    1.  Change line 240 in /usr/local/www/widgets/widgets/system_information.widget.php
    from

    " />
    

    to

    " />
    

    Also, to help anyone else out that stumbled across this problem after they copied a coretemp.ko they either found on the internet or copied from an existing FreeBSD install.

    [2.0-RC3][root@pfsense.ph.cox.net]/boot/kernel(29): ls | grep core
    coretemp.ko
    [2.0-RC3][root@pfsense.ph.cox.net]/boot/kernel(26): kldload coretemp
    kldload: can't load coretemp: No such file or directory
    
    

    or

    kernel: KLD coretemp.ko: depends on kernel - not available or version mismatch
    

    I came across this error because I tried to get someone in ##freebsd to send me their coretemp.ko file.  Turns out that they were on FreeBSD 8.2 and the kernel module wasn't compatible with 8.1.


  • Netgate Administrator

    Nice post!  :)

    Steve



  • thanks! nice post!



  • How does one get this module loaded on every boot?

    I found that the system information widget almost has temperature built in.

    Edit the following files:

    /usr/local/www/includes/functions.inc.php

    
    function has_temp() {
    
    	/* no known temp monitors available at present */
    
    	/* should only reach here if there is no hardware monitor */
    	return true;
    }
    
    function get_temp() {
    	$temp_out = "";
    	exec("/sbin/sysctl dev.cpu.0.temperature | /usr/bin/awk '{ print $2 }' | /usr/bin/cut -d 'C' -f 1", $dfout);
    	$temp_out = trim($dfout[0]);
    
    	return $temp_out;
    }
    
    

  • Netgate Administrator

    @GoldServe:

    How does one get this module loaded on every boot?

    Add the line:
    coretemp_load="yes"

    to /boot/loader.conf.local
    Create the file if necessary. That file is copied across a firmware update, however the kernel module will not be (i think).

    Steve

    Edit: corrected syntax



  • @GoldServe:

    How does one get this module loaded on every boot?

    I found that the system information widget almost has temperature built in.

    Edit the following files:

    /usr/local/www/includes/functions.inc.php

    That's pretty cool! :)



  • Can we get this functionality added to future snapshots.. especially amd64 ?



  • @asterix  I agree, this is nice little feature!! if yoru hardware supports it

    @RedRep and i thought my box was hot at 52c

    I noticed coretemp reads 52 but my IPMI sensor show 57… Who is correct? I wonder if the BIOS screen would read something different

    but either case, its good to to have on the dash...


  • Netgate Administrator

    There's surely some reason that isn't included already?
    What happens if coretemp isn't loaded?

    Steve



  • @stephenw10:

    There's surely some reason that isn't included already?
    What happens if coretemp isn't loaded?

    Steve

    let see, i ran kldunload coretemp then looked at the dash… its in the dash but only reads C

    I loaded it up and it showed on the dash without refreshing the page :-)


  • Netgate Administrator

    Right, so it needs some code to stop it showing "temperature C" if you don't have the right hardware/driver installed.

    Steve

    Edit: Should be °C if you ask me.  ;)



  • @stephenw10:

    Right, so it needs some code to stop it showing "temperature C" if you don't have the right hardware/driver installed.

    Steve

    Edit: Should be °C if you ask me.  ;)

    There is a function in functions.inc.php for that; I will add that functionality tonight after work. I also grabbed the coretemp module for the amd release which I will upload somewhere as well.  On an iPad right now though. :(

    @Cino:

    @RedRep and i thought my box was hot at 52c

    It is completely fanless. :)



  • Eagerly waiting for the amd64 coretemp module !!  ;D

    Keeping myself ready for the change.. I am getting the below error.

    [2.0-RC3][admin@pfsense.localdomain]/boot/kernel(5): pkg_add -r wget
    Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/Latest/wget.tbz… Done.
    Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/All/libiconv-1.13.1_1.tbz... Done.
    Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/All/gettext-0.18_1.tbz... Done.
    [2.0-RC3][admin@pfsense.localdomain]/boot/kernel(6): wget http://encodable.com/uploaddemo/files/pfsense/coretemp.ko
    wget: Command not found.

    Not sure why my wget command isin't working? Is this too 32/64 bit sensitive? I have amd64 installed.

    Maybe "fetch" would work.. but not sure what would be the precise syntax for it to download the coretemp.ko file.

    Edit:
    Nevermind.. I used File Manager to upload the file for testing. Doesn't work..lol. Will wait for the amd64 version.


  • Netgate Administrator

    You have to issue a rehash after you've added a package so Freebsd knows where to find it. Or reboot.

    [2.0-RC3][root@pfsense.fire.box]/root(1): rehash
    

    Steve



  • Aah I see. Thanks for the info. Not much of a FreeBSD user so learning every day.

    Can't wait to try the amd64 coretemp.



  • My N270 is 52-55C in a totally passively cooled solution (Lanner netapp).





  • Thank you !!



  • It's working !!

    [2.0-RC3][admin@pfsense.localdomain]/root(1): sysctl -a | grep temperature
    dev.cpu.0.temperature: 59.0C
    dev.cpu.1.temperature: 54.0C
    dev.cpu.2.temperature: 57.0C
    dev.cpu.3.temperature: 51.0C

    Added to local.conf to auto load at boot.. yeehaa !!!

    Now how do I make the temp show up at the main system information for all 4 cores?



  • @stephenw10:

    Right, so it needs some code to stop it showing "temperature C" if you don't have the right hardware/driver installed.

    Steve

    Edit: Should be °C if you ask me.  ;)

    agreed…. I did try to add ° but it didn't like it.... Figure we need ANSI code or something for it to display in the widget



  • Hi RedRep,
    I'm very interested in your way to get CPU temperature.
    Unfortunately, The link you indicate to download the coretemp.ko package is no more available.
    I'm trying to get it from another URL but no success.

    Could you put it on pfsense forum or sharing website like megaupload ?

    It would be very nice.

    thank you very much.



  • Uploaded the AMD64 version to here

    http://www.megaupload.com/?d=628LSQRC

    I don't have the 386 version but I do have a long term unlimited megaupload account so if someone sends it to me I can upload it for others to use as well.



  • I downloaded the AMD64 8.1 iso from the freebsd FTP servers.
    Opened it with WinRAR and browsed to the /boot/kernel/ folder and dragged and dropped "coretemp.ko" into a WinSCP session connected to pfsense.
    Edited the file properties to 555. (r-xr-xr-x)
    Done!



  • Any ideas on why I cannot get the main screen to show my tmeps?

    Aug 5 17:16:45 kernel: p4tcc1: <cpu frequency="" thermal="" control="">on cpu1
    Aug 5 17:16:45 kernel: p4tcc0: <cpu frequency="" thermal="" control="">on cpu0</cpu></cpu>


  • Rebel Alliance

    Just tested on my 2 pfSense Boxes, ATOM D510 & AMD X2 5600+ and works fine ;D

    Thanks RedRep, GoldServe, stephenw10 & Tikimotel

    If someone needs, here are the coretemp ( i386 ) & amdtemp ( amd64 )

    ( just remove the txt ext )

    coretemp.ko.txt
    amdtemp.ko.txt



  • I would love to see this officially added  to pfsense.
    However, what about multi core cpus?



  • Thanks for a fun thread.

    My AMD Geode is 44 C just in case anyone is interested.  A jetway board in a matx case.



  • Superb work guys !!

    Now 2 things added to this will make it even more kewl !! :D

    1. Add a degree (°) before the C
    2. Show all cores temp on the dash


  • @asterix:

    Superb work guys !!

    Now 2 things added to this will make it even more kewl !! :D

    1. Add a degree (°) before the C
    2. Show all cores temp on the dash

    1.  Change line 240 in /usr/local/www/widgets/widgets/system_information.widget.php
    from

    " />
    

    to

    " />
    

    2.  Working on that, but this code:

    function has_temp() {
    	$numcores = "";
    	exec("/sbin/sysctl -A | grep temperature | wc -l", $dfout);
    	$numcores = trim($dfout[0]);
    	if($numcores == "0") {
    		return false;
    		} else {
    		return true;
    		}
    }
    

    Will check to see if you have temperatures reporting and trigger it to show the temps.  Having it show all of the cores separately will take more work - I'm no coder but I will give it a shot. :)

    @breese:

    Any ideas on why I cannot get the main screen to show my tmeps?

    Aug 5 17:16:45 kernel: p4tcc1: <cpu frequency="" thermal="" control="">on cpu1
    Aug 5 17:16:45 kernel: p4tcc0: <cpu frequency="" thermal="" control="">on cpu0</cpu></cpu>

    What is the output of sysctl -a | grep temperature



  • @RedRep Nice work!



  • @RedRep: u da man !!

    This code needs to be incorporated in the future 2.0 snapshots. Who can make it happen?

    If there is a function defined to do the following..

    1. auto check if mobo supports temp monitor
    2. If yes.. execute the coretemp.ko functions, make it to auto load on boot and display the temp in (degree) C for all cores on the dash
    3. If not.. hide the Temperature field from the dash.


  • GREAT POST!

    Followed the steps showed in the post.
    However I ran into a small issue.
    I am on 2.0-RC3  (i386) built on Fri Aug 5 12:14:15 EDT 2011

    I downloaded the i386 coretemp.ko.txt from the post here, removed the txt extension.
    Copied the file (coretemp.ko) to /boot/kernel/
    Made sure the rights were set to 555
    Ran the command kldload coretemp and got this error:

    Fatal trap 12: page fault while in kernel mode
    Cupid = 0; apci id = 00
    Fault virtual address     = 0x3afaf300
    Fault code                   = supervisor write, page not present
    Instruction pointer       = 0x20:0xc70dcf13
    Stack pointer               = 0x28:0xeed30988
    Frame pointer              = 0x28:0xeed309b0
    Code segment             =  base 0x0, limit 0xfffff, type 0x1b
                                    = DPL 0, press 1, def32 1, gran 1
    Processor eflags          = interrupt enabled, resume IOPL = 0
    Current process          = 25901 (kldload)



  • Does anyone else have this issue?  Someone mind hosting two 8kb kernel extensions?


  • Rebel Alliance

    You can try from here: http://ptt.4mg.com/pfSense/


  • Netgate Administrator

    The problem could be that the kernel modules attached to a post in this thread used the .txt extension.
    For some reason this causes a problem when they are downloaded corrupting the file.
    If you attach binaries with the .png extension this won't happen.

    Steve



  • @ptt:

    You can try from here: http://ptt.4mg.com/pfSense/

    Hi ptt - thanks - but when I try to download fro the link then this:
    Forbidden
    Host:
    You do not have permission to access this page or file
    The extension 7z is currently not supported by FreeServers.
    If you think there is an error or you wish to have the extension 7z added to the mime definitions, please take the time to notify customer support.
    Thank you for using FreeServers.

    Steen



  • @stephenw10:

    The problem could be that the kernel modules attached to a post in this thread used the .txt extension.
    For some reason this causes a problem when they are downloaded corrupting the file.
    If you attach binaries with the .png extension this won't happen.

    Steve

    Thanks Steve, where from can I then get the file?
    Cheers Steen


  • Netgate Administrator

    Here is the coretemp.ko file from FreeBSD 8.1 release (386).
    Remove the .png extension. The file should be 8054 bytes.

    Steve

    coretemp.ko.png


  • Rebel Alliance

    Greatly sorry, changed to zip, now is OK  ( http://ptt.4mg.com/pfSense/ )

    You have:

    coretemp32.zip–> inside amdtemp.ko & coretemp.ko  ( FreeBSD-8.1-RELEASE-i386 )

    coretemp64.zip--> inside amdtemp.ko & coretemp.ko ( FreeBSD-8.1-RELEASE-amd64 )



  • @stephenw10:

    Here is the coretemp.ko file from FreeBSD 8.1 release (386).
    Remove the .png extension. The file should be 8054 bytes.

    Steve

    Hi Steve!

    BINGO!
    IT WORKS!
    Thanks so much!
    Steen


Locked