2.10. Måling af CPU-temperatur

Med Pentium II, III, AMD K6 II og lignende nyere processorer kan man direkte måle temperatur på CPU'en samt holde styr på blæseren på CPU'en. Det er noget som CPU'en skal have indbygget at det virker via en I2C kanal.

Det første der skal gøres er at installere lm_sensors. På Red Hat 7.2 gøres dette med rpm -ivh lm_sensors*.rpm hvis man står i cd-rom'ens RPMS-katalog.

Dernæst skal man detektere maskinen ved at køre /usr/sbin/sensors-detect. Programmet er selvforklarende. Det første der gøres er at indlæse de kerne-moduler der skal til at lave målingers f.eks. i2c-piix4. Programmet prøver at gætte dette selv og man skal oftest bare trykke return et par gange.

...
 I will now generate the commands needed to load the I2C modules.
 Sometimes, a chip is available both through the ISA bus and an I2C bus.
 ISA bus access is faster, but you need to load an additional driver module
 for it. If you have the choice, do you want to use the ISA bus or the
 I2C/SMBus (ISA/smbus)?

WARNING! If you have some things built into your kernel, the
below list will contain too many modules. Skip the appropriate ones!
To load everything that is needed, add this to some /etc/rc* file:

#----cut here----
# I2C adapter drivers
modprobe i2c-matroxfb
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe w83781d
#----cut here----

To make the sensors modules behave correctly, add these lines to either
/etc/modules.conf or /etc/conf.modules:

#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----cut here----

Som det ses skal giver sensors-detect et par linjer som skal indsættes i f.eks. /etc/rc.local (SuSE /etc/rc.d/boot.local) og tilsvarende til /etc/modules.conf

Når maskinen har været genstartet kan man med kommandoen sensors detektere temperatur osv. Dette kan se således ud.

w83781d-i2c-0-2d
Adapter: SMBus PIIX4 adapter at 5000
Algorithm: Non-I2C SMBus adapter
VCore 1:   +1.98 V  (min =  +1.80 V, max =  +2.20 V)
VCore 2:   +1.47 V  (min =  +1.80 V, max =  +2.20 V)       ALARM
+3.3V:     +3.42 V  (min =  +2.97 V, max =  +3.63 V)
+5V:       +4.97 V  (min =  +4.50 V, max =  +5.48 V)
+12V:     +11.70 V  (min = +10.79 V, max = +13.11 V)
-12V:     -11.40 V  (min = -10.78 V, max = -13.18 V)
-5V:       -4.94 V  (min =  -4.50 V, max =  -5.48 V)
fan1:     4066 RPM  (min = 3000 RPM, div = 2)
fan2:        0 RPM  (min = 3000 RPM, div = 2)              ALARM
fan3:        0 RPM  (min = 3000 RPM, div = 2)              ALARM
temp1:    +31.0°C   (limit = +60°C, hysteresis = +50°C)
temp2:    +208.0°C   (limit = +60°C, hysteresis = +50°C)
temp3:    +25.0°C   (limit = +60°C, hysteresis = +50°C)
vid:      +2.00 V
alarms:   Chassis intrusion detection
beep_enable:
          Sound alarm disabled

Man kan således se at CPU-blæseren kører 4066 omdrejninger per minut og der er tre CPU-temperaturer. Desuden er der 3 falske alarmer. Derfor skal der foretages justeringer i filen /etc/sensors.conf i sektionen om den chip som blev fundet tidligere. Chippen w83781d deler data med flere andre chips.

chip "lm78-*" "lm78-j-*" "lm79-*" "w83781d-*"

    label in0 "VCore 1"
    label in1 "VCore 2"
    label in2 "+3.3V"
    label in3 "+5V"
    label in4 "+12V"
    label in5 "-12V"
    label in6 "-5V"

    set in0_min 2.8*0.95
    set in0_max 2.8*1.05
    set in1_min 2.8*0.95
    set in1_max 2.8*1.05
    set in2_min 3.3 * 0.95
    set in2_max 3.3 * 1.10
    set in3_min 5.0 * 0.95
    set in3_max 5.0 * 1.05
    set in4_min 12 * 0.95
    set in4_max 12 * 1.05
    set in5_min -12 * 0.93
    set in5_max -12 * 1.07
    set in6_min -5 * 0.95
    set in6_max -5 * 1.05

    ignore in1
    set fan2_min 0
    set fan3_min 0

Hver af chippens interne måle-punkter (f.eks. in0) tildeles et navn som f.eks."VCore 1". Hvert måle-punkt skal holde sig indenfor et vist område, der som regel sættes til at være nominalværdien plus/minus 5%. Tolerancerne kan selvfølgelig tilpasses maskinen. Især måle-punkterne in0 og in1 bør konfigureres og tilpasses processoren. Man kan genstarte maskinen og kigge i dens BIOS og kigge især efter om der måles "VCore". Hvis der kun måles en værdi, kan sensors indstilles som ovenfor, til at ignorere måle-punktet in1.

Ændringer i filen /etc/sensors.conf må indlæses i modulerne, ved at køre følgende som root

[root@linus /root]# sensors -s

Resultatet kan straks undersøges med kommandoen sensors w83781d-i2c-0-2d eller bare med kommandoen sensors hvis man ønsker resultater fra alle konfigurerede chips.

Der er en masse forklarende kommentar i filen /etc/sensors.conf, så når man har bestemt hvilke chips (der kan nemlig være flere) der er i ens maskine, kan man fordybe sig i hvordan den skal konfigureres.

2.10.1. Fejlfinding

Overvågning af computerens maskinel, skal bruge passende moduler til maskinen samt i2c bus understøttelse.

Når sensors modulerne er installeret i kernen, dannes filerne: /proc/sys/dev/sensors/* /proc/bus/i2c* . Hvis disse filer ikke er at finde, er sensors modulerne ikke installeret i kernen.

Hvis i2c bus modulerne eller hardware modulerne findes på computeren kan de findes med kommandoerne

[root@linus /root]# ls -l /lib/modules/`uname -r`/kernel/drivers/i2c/ 
[root@linus /root]# ls -l /lib/modules/`uname -r`/kernel/drivers/sensors/ 

Ovennævnte placering gælder for en specialbygget kerne i Debian unstable, men kan formodes at gælde for alle 2.4 kerner.

Hvis maskinovervågningen giver forkerte oplysninger, kan der være flere årsager:

2.10.2. Indsamling af oplysninger til fejlrapport

Hvis opsætnings-programmet danner en fejlagtig opsætning kan man overveje at indsende en fejl-rapport direkte til udviklings-holdet for lm-sensors på web adressen: http://www2.lm-sensors.nu/~lm78/ Fejl-rapporten kan indeholde oplysninger om PCI bussen og en dump udskrift af i2c bussen. Der kan også laven en dump udskrift af ISA bussen men der advares kraftigt imod at gøre det, idet områder i hukommelsen kan blive overskrevet, som kan indeholde oplysninger der er vitale for maskinens stabilitet. Hvis man absolut skal dumpe ISA bussen, bør man genstarte maskinen i enkeltbrugertilstand fra diskette eller cd-rom. På den måde er der mindst risiko for at miste oplysninger eller endda et helt filsystem.

Oplysninger om PCI-bussen i en maskine med et Asus bundkort med Intel TX chipsæt og Realtek 8139 netkort, kan se således ud:

[tyge@hven /]$ /bin/lspci -n 
00:00.0 Class 0600: 8086:7100 (rev 01)
00:01.0 Class 0601: 8086:7110 (rev 01)
00:01.1 Class 0101: 8086:7111 (rev 01)
00:01.2 Class 0c03: 8086:7112 (rev 01)
00:01.3 Class 0680: 8086:7113 (rev 01)
00:09.0 Class 0200: 10ec:8139 (rev 10)
00:0c.0 Class 0100: 9004:5078 (rev 03)

Modulet i2c-dev skal være installeret før man kan dumpe i2c bussen. En dump udskrift af i2c bussen kan se således ud:

[root@linus /root]# /usr/sbin/i2cdump 0 0x18
Warning: no size specified (using byte-data access)
  WARNING! This program can confuse your I2C bus, cause data loss and worse!
  I will probe file /dev/i2c-0, address 0x18, mode byte
  You have five seconds to reconsider and press CTRL-C!

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 20 00 04 3c 20 00 04 3c 20 00 04 3c 20 00 04 3c 
10: 20 00 04 3c 20 00 04 3c 20 00 04 3c 20 00 04 3c 
... 

Parametrene til i2cdump kan man få ved at kigge på filnavnene i mappen /proc/sys/dev/sensors/ hvor der tilfældigvis findes mappen max1617-i2c-0-18.

Desuden bør man medtage alle øvrige oplysninger der kan være af nytte ved opklaringen af problemet.