上個月把原本使用 AMD Athlon 64 X2 的伺服器轉為 firewall, 然後把主要的伺服器換成 Intel E6300 之後, 原本有個 k8temp 的模組, 可以用來偵測每個核心的溫度, 但是在 Intel 的 CPU 上頭, 當時並沒有看到有類似的模組可以使用. 所以, 就沒有針對每個核心去偵測溫度了. 不過... 今天不小心在這篇說明中, 看到有類似的模組可以使用, 就上網找了一下, 裝起來用看看了.
首先, 在 Google 找了一下 lm-sensors coretemp, 果然找到了這篇文章, 其中的附件就是用來新增 coretemp 模組的 patch. 下載之後, 自己加上這個 patch, 重新編了一次 kernel, 把這個新的 module 載入之後, 在 /etc/sensors.conf 中加入下頭的設定:
# Core0
chip "coretemp-isa-0000"
label temp1 "Core0 Temp"
# Core1
chip "coretemp-isa-0001"
label temp1 "Core1 Temp"
果然可以在執行 sensors 指令時, 出現這兩個的訊息, 不過... 並沒有內容:
coretemp-isa-0000
Adapter: ISA adapter
coretemp-isa-0001
Adapter: ISA adapter
弄了半天, 正想會不會是沒有重開機的關係? 可是, 模組的載入又很正常, 依據以往的經驗, 新增 kernel 的模組, 並不用重新開機就應該可以正常使用.
接著到 lm-sensors 的官方網站中, 找了一下 coretemp, 發現 userspace 的程式也需要修正才可以. 應該是目前我用的 Debian 所使用的 2.10.1 版本沒有包含這個修正. 所以自己加上了這個 patch 之後, 果然, 現在就可以正確的抓出 CPU 每個核心的溫度了.
coretemp-isa-0000
Adapter: ISA adapter
Core0 Temp:
+40°C (high = +85°C)
coretemp-isa-0001
Adapter: ISA adapter
Core1 Temp:
+40°C (high = +85°C)
在得到每個核心的溫度後, 與之前的 CPU 溫度一比較, 發現之前在 /etc/sensors.conf 中把 it8718 直接套用 it8716 的設定, 所得到 temp1 並不是 CPU 的溫度, 看起來 temp2 比較像是 (因為在編 kernel 時, temp1 的溫度幾乎不動, 而 temp2 的溫度會上升 10 幾度). 所以就把這兩個溫度設定給換了過來.
不過又發現另一個問題, 就是 temp2 抓到的溫度, 與 coretemp 抓出來的有不小的差距, 隨著溫度的變化, 一般 temp2 會比 coretemp 的溫度低上 8-10 度左右, 所以就在 /etc/sensors.conf 中加上了這段:
compute temp2 (@ +9),(@ - 9)
把 temp2 加個 9 度. 這樣子 temp2 與 coretemp 的數字就會十分接近了.
2.6.20下是否ok阿?
k8temp 的模組, 现在是用那个阿?coretemp-isa?
C2D 的要自己 patch, 或者用 2.6.22.
K8 的, 在 2.6.20 內應該就有 k8temp 模組了.
無論如何, lm-sensors 的軟體也必須足夠新才有包含 k8temp 或 coretemp 模組的偵測.