Mengapa Linux menyimpan suhu cpu pada banyak file?

10

Saya punya laptop (thinkpad) dengan 2 CPU. Saat ini saya dapat membaca suhu cpu dari file di bawah ini dengan cat (1):

cat /sys/class/thermal/thermal_zone0/temp
cat /sys/class/thermal/thermal_zone1/temp

cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_input
cat /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input

cat /sys/devices/LNXSYSTM:00/LNXCPU:00/thermal_cooling/subsystem/thermal_zone1/temp
cat /sys/devices/LNXSYSTM:00/LNXCPU:01/thermal_cooling/subsystem/thermal_zone0/temp

Pertanyaan saya adalah mengapa kernel menyimpan informasi ini di banyak tempat yang berbeda dan mana yang merupakan file "standar" untuk membaca suhu cpu?

Apakah ini terjadi karena systemd (saya menggunakan Arch Linux) atau distro Linux non-systemd seperti Slackware memiliki pendekatan yang berbeda?

yaku
sumber

Jawaban:

12

Sebenarnya suhunya tidak disimpan di mana pun. /sysadalah sistem file di dalam memori , dan membaca dari file dalam /sysmemanggil kode dalam kernel yang menghitung nilai dengan cepat.

Direktori yang berbeda sesuai dengan berbagai cara perangkat keras dapat melaporkan suhu. The temp*_inputfile telah sebuah terkait temp*_labelyang mengidentifikasi yang komponen suhu dilaporkan.

Lokasi di bawah /syscenderung bervariasi dari versi kernel ke versi kernel (bukan dari distribusi ke distribusi). Itulah kesulitan yang /sysharus dijalani penulis program yang membaca data dalam ( contoh ).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih, itu adalah masalah saya. (Saya menggunakan i3 dan i3status dan dari waktu ke waktu saya harus mengubah jalur suhu cpu) Saat itulah saya memutuskan untuk menulis sebuah program kecil untuk melakukan hal ini.
yaku
7

Pertama, /sys/classadalah cara yang mudah untuk menemukan sesuatu di /sys. Anda akan menemukan semua yang ada di dalamnya sebenarnya adalah symlink; Saya cukup yakin bait pertama Anda terhubung dengan bait ketiga Anda.

Bait ke-2 adalah kernel yang membaca suhu langsung dari CPU / chipset. Bait ke-3 adalah kernel yang mendapatkan nilai dari BIOS melalui ACPI. Sementara di sistem Anda mereka mungkin memberikan jawaban yang sama, mereka tidak perlu (misalnya, BIOS bisa menggunakan sensor yang berbeda, rata-rata beberapa bersama-sama, atau menerapkan beberapa penyesuaian papan khusus).

Akhirnya, setiap bait memiliki dua bacaan yang berbeda karena ada dua termometer. Atau setidaknya, API perangkat keras memungkinkan untuk itu.

derobert
sumber
Terima kasih untuk balasan Anda. Ini membuat segalanya lebih jelas. Namun pada laptop yang berbeda dengan dua core jalurnya bisa berbeda kan? (Mungkinkah /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp0_input /sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_input misalnya?).
yaku
@Yaku Ya, jalan bisa bervariasi. Misalnya, laptop dapat memiliki zona pendinginan untuk (misalnya,) hard disk, atau northbridge, atau apa pun.
derobert
3

Lihat file * _label untuk melihat apa yang dilaporkan - inilah i5 saya:

$ grep "" /sys/devices/platform/coretemp.?/hwmon/hwmon?/temp?_label
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp1_label:Physical id 0
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp2_label:Core 0
/sys/devices/platform/coretemp.0/hwmon/hwmon1/temp3_label:Core 1

(grep "" hanya digunakan sebagai "kucing dengan nama file")

Jadi, inilah suhu total CPU, ditambah suhu per inti.

Pada sistem multi-CPU yang lebih besar, Anda dapat melihat lusinan entri.

jm73
sumber