Tại sao Linux lưu trữ nhiệt độ cpu trên nhiều tệp như vậy?


10

Tôi có một máy tính xách tay (thinkpad) với 2 cpus. Hiện tại tôi có thể đọc nhiệt độ cpu từ các tệp bên dưới với 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

Câu hỏi của tôi là tại sao kernel lưu trữ thông tin này ở nhiều nơi khác nhau và tệp nào là tệp "chuẩn" để đọc nhiệt độ của cpu?

Điều này có xảy ra do systemd (Tôi đang sử dụng Arch Linux) hoặc các bản phân phối Linux không có hệ thống như Slackware có cách tiếp cận khác không?

Câu trả lời:


12

Trên thực tế, nhiệt độ không được lưu trữ ở bất cứ đâu. /syslà một hệ thống tệp trong bộ nhớ và đọc từ các tệp trong /sysmã gọi trong kernel để tính toán các giá trị một cách nhanh chóng.

Các thư mục khác nhau tương ứng với các cách khác nhau mà phần cứng có thể báo cáo nhiệt độ. Các temp*_inputtập tin có liên quan temp*_labelxác định nhiệt độ của thành phần nào được báo cáo.

Các vị trí theo /sysxu hướng thay đổi từ phiên bản kernel sang phiên bản kernel (không phải từ phân phối đến phân phối). Đó là một khó khăn mà các tác giả của các chương trình đọc dữ liệu /sysphải sống cùng ( ví dụ ).


Cảm ơn, đó là vấn đề chính xác của tôi. (Tôi sử dụng i3 và i3status và thỉnh thoảng tôi phải thay đổi đường dẫn nhiệt độ cpu) Đó là khi tôi quyết định viết một chương trình nhỏ để làm việc này.
yaku

7

Đầu tiên, /sys/classlà một cách thuận tiện để tìm thấy những thứ trong /sys. Bạn sẽ tìm thấy mọi thứ bên trong thực sự là một liên kết tượng trưng; Tôi khá chắc chắn rằng khổ thơ đầu tiên của bạn là symlink'd đến khổ thơ thứ ba của bạn.

Khổ thứ 2 là hạt nhân đọc nhiệt độ trực tiếp từ CPU / chipset. Khổ thứ 3 là hạt nhân nhận giá trị từ BIOS thông qua ACPI. Mặc dù trên hệ thống của bạn, họ có thể đưa ra cùng một câu trả lời, nhưng họ không cần (ví dụ: BIOS có thể đang sử dụng một cảm biến khác nhau, lấy trung bình một số cùng nhau hoặc áp dụng một số điều chỉnh cụ thể cho bo mạch).

Cuối cùng, mỗi khổ thơ có hai cách đọc khác nhau vì có khả năng có hai nhiệt kế. Hoặc ít nhất, API của phần cứng cho phép.


Cảm ơn vì đã trả lời. Điều này làm cho mọi thứ rõ ràng hơn. Tuy nhiên, trên một máy tính xách tay khác nhau với hai lõi, các đường dẫn có thể khác nhau phải không? (Ví dụ:
yaku

@yaku Có, các đường dẫn có thể thay đổi. Ví dụ: máy tính xách tay có thể có vùng làm mát cho (ví dụ:) đĩa cứng hoặc cầu bắc hoặc bất cứ thứ gì.
derobert

3

Hãy xem các tệp * _label để xem những gì đang được báo cáo - đây là i5 của tôi:

$ 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 "" chỉ được sử dụng là "con mèo có tên tập tin")

Vì vậy, đây là tổng nhiệt độ của CPU, cộng với nhiệt độ trên mỗi lõi.

Trên một hệ thống đa CPU lớn hơn, bạn có thể thấy hàng tá mục nhập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.