Thursday, February 15, 2007

Mengamankan CPU Dari Overheat

Kernel Linux menyediakan fasilitas yang membantu kita dari bahaya kerusakan CPU karena overheat. Fasilitas tersebut merupakan gabungan dari ACPI thermal, ACPI fan, dan CPU frequency scaling. Fungsi utama CPU frequency scaling (cpufreq) sebenarnya lebih ke penghematan batere untuk laptop, tapi juga dapat dimanfaatkan untuk mencegah CPU overheat pada situasi khusus.

Kita coba mulai dari source code drivers/acpi/thermal.c:

        num = sscanf(limit_string, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d",
&critical, &hot, &passive,
&active[0], &active[1], &active[2], &active[3], &active[4],
&active[5], &active[6], &active[7], &active[8],
&active[9]);

Bila kita berikan perintah:
# echo "100:100:80:70:60:40" > /proc/acpi/thermal_zone/THRM/trip_points

lalu kita cek hasilnya:
$ cat /proc/acpi/thermal_zone/THRM/*
cooling mode: active
polling frequency: 10 seconds
state: ok
temperature: 40 C
critical (S5): 100 C
passive: 80 C: tc1=3 tc2=1 tsp=258 devices=0xc18a3540
active[0]: 70 C: devices=0xc18ad874
active[1]: 60 C: devices=0xc18ad810
active[2]: 40 C: devices=0xc18ad7c0

Apa artinya? Notebook saya memiliki 3 buah fan. Setting di atas akan menyebabkan fan #1 mulai hidup pada suhu 40°C, fan #2 pada 60°C, dan fan #3 pada 70°C. Ketika suhu mencapai 80° maka pengaturan suhu beralih ke mode pasif, dimana frekuensi prosesor mulai dimainkan/diturunkan. Pengaturan ini memanfaatkan cpufreq. Kalau penurunan frekuensi masih tidak memadai, dan prosesor masih terus memanas sampai ke suhu kritis, yaitu 100°C, maka kernel akan memaksakan proses shutdown untuk mencegah kerusakan CPU yang lebih parah.

Sayang pengendalian suhu dengan cara memaksakan fan #1-#3 otomatis hidup/mati ini tidak berjalan mulus setelah laptop di-resume dari hibernate.