Ryzen/Threadripper 온도 센서: 어떤 센서가 어떤 커널 모듈과 관련되어 있으며 이를 활성화하는 방법

Ryzen/Threadripper 온도 센서: 어떤 센서가 어떤 커널 모듈과 관련되어 있으며 이를 활성화하는 방법

Linux 환경에서 ASRock x399 Taichi 마더보드의 AMD Threadripper 1950x에서 어떤 센서를 모니터링할 수 있습니까? 다음에 따르면 작년에 Ryzen 프로세서에 대한 온도 모니터링이 발표되었으며 이 기능은 4.15 커널에 포함되었다고 합니다.https://www.phoronix.com/scan.php?page=news_item&px=AMD-Zen-Temps-Hwmon-Next. 그러나 온도 변화가 있는 것으로 보였으며 이는 커널 4.18.6에서 다음과 같이 수정되었습니다.https://www.phoronix.com/scan.php?page=news_item&px=Linux-4.18.6-k10temp-올바른

내가 아는 한, Windows에서처럼 Linux에서는 코어별 온도 모니터링이 전혀 없습니다.

그러나 다른 소스에 따르면 내 마더보드를 기반으로 모듈을 특별히 제작해야 할 수도 있습니다. 이 지침은 센서 감지의 출력을 기반으로 적절한 커널 드라이버를 구축할 수 있음을 나타내는 것 같습니다.https://linuxconfig.org/monitor-amd-ryzen-temporals-in-linux-with-latest-kernel-modules

센서 감지에 따르면 nct6775가 있지만 적절한 커널 모듈이 있다는 표시를 찾을 수 없습니다(lsmod를 사용하면 표시되지 않습니다. 찾아야 할 다른 곳이 있습니까?). 안타깝게도 저장소가 더 이상 github에 없기 때문에 저장소에서 빌드할 수 없습니다.

그래서 내 질문은 다음과 같습니다.

  1. 어떤 드라이버와 커널 모듈이 어떤 정보를 제공합니까? 구체적으로 어떤 것이 Windows에서 사용 가능한 코어당 판독값을 제공합니까?

  2. Linux에서 Ryzen 온도 드라이버의 상태는 무엇입니까: 완전함, 불완전함, 패치워크 및 영원히 신뢰할 수 없음?

  3. nct6775를 만들 수 있다면 이미 가지고 있는 K10 외에 무엇을 얻을 수 있을까요? 빌드에 필요한 소스 코드는 어디서 구할 수 있나요?

  4. 왜 이것이 그렇게 잘 문서화되어 있지 않습니까? 출시 후 1년 반 동안 이 문제에 대한 명확한 정보가 없는 AMD는 업계 표준에 비해 유난히 무력한 것입니까?

답변1

[OP 삭제된 답변:] 아직도 궁금합니다. 왜 nct6775를 지금 사용할 수 있나요?

다음 링크에는 일반적인 질문에 답하려는 많은 시도가 있습니다. 불행히도 그 중 어느 것도 포괄적이지 않으므로 개선하도록 노력하겠습니다. Linux: 장치에서 사용하는 장치 드라이버를 찾는 방법은 무엇입니까?

귀하의 경우 센서 장치는 에 표시된 링크 중 하나로 찾을 수 있습니다 ls -l /sys/class/hwmon/*. 명령을 확장하여 즉시 커널 모듈을 찾을 수 있습니다.

ls -l /sys/class/hwmon/*/device/driver/module

그러나 순서에는 몇 가지 가정이 있습니다. 모든 상황에서 작동하지는 않습니다. 해당 명령이 작동하지 않으면 체인의 각 개별 링크를 확인하여 범위를 좁히십시오. 세 가지 가능한 상황이 있습니다.

  1. driver링크 가 있지만 module링크가 없습니다.

    이는 드라이버가 커널에 내장되어 있음을 의미합니다! 이것은 귀하의 질문에 대한 답변이 될 수 있습니다 :-).

    ls -l링크 도 마찬가지입니다 driver. 즉, 드라이버 이름을 보려면 위 명령을 변경하여 해당 /module부분을 제거하십시오. 일반적으로 드라이버 이름은 로드 가능한 모듈 이름과 동일하지만 때로는 다른 경우도 있습니다.

  2. 링크 driver는 아님다음 device은 하지만...

    위 명령이 작동하지 않으면 등 device으로 바꿔야 할 수도 있습니다.device/device

    device링크를 클릭하면 상위 장치로 이동됩니다. 그러나 때로는 드라이버가 상위 장치에 있거나 그 이상인 경우도 있습니다. :-).

  3. device상위 링크가 없거나 driver상위 링크가 전혀 없습니다.device

    device링크를 클릭하면 상위 장치로 이동됩니다. 예를 들어 네트워크 장치가 있고 공급자를 가리킬 수 /sys/class/wlan0있습니다 ./sys/class/wlan0/devicewlan0

    귀하의 경우에는 표준 버스에 장치와 같은 것이 없다고 상상할 수 있습니다 pci. 이 경우 운전자는~해야 한다에서 사용자 정의 장치를 정의하십시오 /sys/devices/platform/. 이것이 바로 coretemp내 Intel CPU 드라이버가 수행하는 작업입니다.

    그러나 드라이버에서 오류가 발생하면 상위 장치 없이 장치가 생성되므로 device링크도 생성되지 않습니다. 센서( hwmon장치)는 가장 잘 알려지지 않은 하위 장치 중 하나입니다. 이전에도 이런 일이 여러 번 발생했습니다. 살펴보면 ls /sys/devices/virtual/*이 오류가 발생하는 장치가 3개 있는 것 같은데 모두 hwmon장치입니다.

    "본문"/부모가 없으면 device하나도 있을 수 없습니다 driver. 이는 루프백( lo) 또는 bridge네트워크 장치 와 같은 실제 가상 장치에서 예상되는 동작입니다 . 이는 Linux 커널의 장치 모델을 반영합니다. 물리적 장치에서 바인딩된 드라이버를 제거하고 다른 드라이버를 바인딩할 수도 있습니다. 물리적 장치 없이 이를 지원하는 것은 의미가 없습니다. 가상 장치를 구현하는 모듈을 찾는 유사한 방법이 없기 때문에 불행한 일입니다.


콘텐츠:

  1. /sys에서 찾기 결과 예시
  2. 모듈 이름을 찾았는데 이제...

1. /sys에서 샘플 결과 찾기

$ cd /sys/class/hwmon/
$ ls -l *
total 0
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon0 -> ../../devices/virtual/thermal/thermal_zone0/hwmon0
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon1 -> ../../devices/virtual/hwmon/hwmon1
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon2 -> ../../devices/virtual/thermal/thermal_zone8/hwmon2
lrwxrwxrwx. 1 root root 0 Dec  2 17:50 hwmon3 -> ../../devices/platform/coretemp.0/hwmon/hwmon3

$ ls -l hwmon3/device/driver/module
lrwxrwxrwx. 1 root root 0 Dec  2 18:32 /sys/class/hwmon/hwmon3/device/driver/module -> ../../../../module/coretemp

그러나 다른 결과는 그다지 도움이 되지 않는 것 같습니다 :-). 무엇인가요 virtual/thermal/thermal_zone0/hwmon0?

hwmon장치(및 일부 다른 유형)에도 name센서 가 있는데 iwlwifi, 이는 실제로 내 Intel Wi-Fi 카드에서 제공됩니다. 그런데 드라이버에 결함이 있어서 가상장치라고 선언합니다.

$ head */name
==> hwmon0/name <==
acpitz

==> hwmon1/name <==
dell_smm

==> hwmon2/name <==
iwlwifi

==> hwmon3/name <==
coretemp

이것은 드라이버가 "조부모"에 있는 다른 장치입니다.

$ ls -l */device/device/driver
lrwxrwxrwx. 1 root root 0 Dec  2 18:33 /sys/class/hwmon/hwmon0/device/device/driver -> ../../../../bus/acpi/drivers/thermal

또한 드라이버가 커널에 내장되어 있으므로 이 드라이버에 대한 모듈이 없습니다. 커널 빌드 구성에서 해당 옵션을 찾을 수 있으면 이를 확인할 수 있습니다. 그러나 이것이 반드시 모듈 이름 지정과 동일하지는 않습니다.

$ ls -l */device/device/driver/module
ls: cannot access '*/device/device/driver/module': No such file or directory

$ grep CORETEMP= /boot/config-$(uname -r)
CONFIG_SENSORS_CORETEMP=m
$ grep ACPI_THERMAL= /boot/config-$(uname -r)
CONFIG_ACPI_THERMAL=y

2.모듈 이름을 찾았는데 이제...

당신은 자신이 한 일이 100% 확실하지 않다고 말했습니다. 모듈 이름을 찾았으나 알 수 없는 웹사이트에서 설치되었는지 기억나지 않아 걱정된다면 다음 사항을 확인해 보세요.

모듈을 다시 로드하고 모듈이 다시 로드되는 경로를 확인할 수 있습니다.

$ modprobe --remove coretemp

$ modprobe -v coretemp
insmod /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz

그런 다음 패키지 관리자에게 쿼리하여 모듈 파일이 배포 커널 패키지에서 나온 것인지 확인할 수 있습니다. 예를 들어 RPM의 경우:

$ rpm -q --whatprovides /lib/modules/4.19.4-200.fc28.x86_64/kernel/drivers/hwmon/coretemp.ko.xz
kernel-core-4.19.4-200.fc28.x86_64

$ rpm -q --whatprovides /boot/vmlinuz-$(uname -r)
kernel-core-4.19.4-200.fc28.x86_64

또한 패키지 관리자를 사용하면 설치된 패키지 파일이 수정되지 않았는지 확인할 수 있습니다.

패키지의 출처를 확인하는 것은 그리 간단하지 않습니다 :-). 일반적으로 패키지 이름을 보고 추측합니다 :-). 예를 들어 사용 가능한 패키지 목록과 해당 패키지의 출처를 얻을 수 있지만 dnf info kerneldnf가 설치된 RPM 파일이나 사용 가능한 RPM의 체크섬을 표시할 수는 없을 것 같습니다.

관련 정보