Linux에서 AMDGPU 드라이버 사용 중 Navi 10 그래픽카드의 전압/클럭 조정

2020. 10. 29. 20:34카테고리 없음

진행 환경: Ubuntu 20.04 LTS / AMDGPU(Radeon™ Software for Linux®) 20.40

Polaris 시절까지만 해도 /sys/class/drm/card[0-9]/device/ 하위 pp_od_clk_voltage 값을 조절하는 식으로 손쉽게 해결을 볼 수 있었던 내용이지만, Navi에서는 그렇지 않네요. 직접 PowerPlay 테이블을 수정해야 합니다.

GUI 환경에서 진행하신다면 powerupp 사용을 권장합니다만은, headless 환경에서 이거 하나 쓰려고 X11에 GTK까지 까는 것도 조금 그러니... 커맨드라인으로 해결을 볼 수 있는 방법에 대해 알아보겠읍니다

upp 설치

$ pip3 install upp

PowerPlay 테이블 열람

$ upp -p /sys/class/drm/card1/device/pp_table dump

(card1 부분은 사용하는 그래픽카드에 맞춰 바꾸세요)

여기에서 중요한 값들은 다음과 같습니다:

  • smc_pptable/MaxVoltageGfx: 그래픽 코어의 최대 전압 (단위 mV×4)
  • smc_pptable/MinVoltageGfx: 그래픽 코어의 최소 전압 (단위 mV×4)
  • smc_pptable/MaxVoltageSoc: SoC 최대전압 (단위 mV×4)
  • smc_pptable/MinVoltageSoc: SoC 최소전압 (단위 mV×4)
  • smc_pptable/FreqTableGfx/1: 그래픽 코어의 최대 클럭 (단위 MHz)
  • smc_pptable/MemMvddVoltage/[0-3]: VRAM의 전압 (단위 mV×4)
  • smc_pptable/MemVddciVoltage/[0-3]: VDDCI(컨트롤러)의 전압 (단위 mV×4)
  • smc_pptable/FreqTableUclk/[0-3]: VRAM의 클럭 (단위 ½MHz)

예를 들어 MemMvddVoltage/3이 5400이고 FreqTableUclk/3이 875라면, 실제 VRAM 최대 전압은 1.35V에 클럭은 1750MHz라는 것이지요.

적용

그래픽 코어의 최대 클럭을 1550MHz로, 최대전압을 0.985V로 언더클럭/언더볼팅하려면:

$ sudo upp -p /sys/class/drm/card1/device/pp_table set smc_pptable/MaxVoltageGfx=3940 smc_pptable/FreqTableGfx/1=1550 --write

실제로는 SoC 전압도 같이 조정해주세요?