명령줄에서 Mac GPU 주파수 제어하기 (apple-gpu-dvfs)
요약
이 기사는 명령줄 도구 `apple-gpu-dvfs`를 사용하여 M1부터 M5까지의 Apple Silicon Mac GPU 주파수와 전력을 제어하는 방법을 안내합니다. 이 도구는 커널 확장이나 탈옥 없이도 원하는 와트(watt) 수준으로 전력 제한을 설정하고, 시스템 정보를 조회할 수 있게 합니다.
핵심 포인트
- 명령줄 도구를 통해 GPU의 전력 및 주파수를 직접 제어 가능
- M1부터 M5까지 Apple Silicon 기반 Mac에서 작동하며 Xcode Command Line Tools 필요
- 전력 제한은 `sudo` 권한이 필요하지만, 정보 조회는 불필요함
- AGX 경로와 CLPC 폴백 경로를 모두 지원하여 안정적임
Mac의 GPU 주파수를 명령줄에서 제어할 수 있습니다. GPU 전력을 원하는 와트(watt) 수준으로 제한하고, 전체 하드웨어 DVFS 테이블을 추출하며, 커널 확장(kernel extensions), SIP 변경 또는 탈옥(jailbreaking) 없이 즉시 복원할 수 있습니다.
M1, M2, M3, M4, M5 Mac에서 작동합니다.
- Apple Silicon 기반 macOS (M1/M2/M3/M4/M5)
- Xcode Command Line Tools (
xcode-select --install) 필요
주파수 제어 시에는 sudo가 필요하며, table 또는 info 사용 시에는 필요하지 않습니다.
git clone https://github.com/maderix/apple-gpu-dvfs.git
cd apple-gpu-dvfs
# 옵션 A: 래퍼(wrapper) 사용 (첫 실행 시 자동 빌드)
...
sudo ./gpu-dvfs set low # 2W 제한
sudo ./gpu-dvfs set medium # 10W 제한
sudo ./gpu-dvfs set high # 15W 제한
...
| 프리셋 (Preset) | 전력 (Power) | M4 GFLOPS | M5 Max GFLOPS |
|---|---|---|---|
min | 1W | ~41 | ~592K |
low | 2W | ~278 | — |
medium | 10W | ~405 | ~988K |
high | 15W | ~450 | ~1.24M |
max | uncap | ~554 | ~2.75M |
와트 값(watt value)을 직접 전달할 수도 있습니다: sudo ./gpu-dvfs set 7.5
./gpu-dvfs info # SoC, GPU 클래스, 코어 개수 (sudo 불필요)
./gpu-dvfs table # 디바이스 트리(device tree)의 전체 P-state 테이블 (sudo 불필요)
sudo ./gpu-dvfs status # AGX + CLPC 상태, 측정된 GPU 속도
...
이 도구는 변경 전 원래의 전력 제한을 저장합니다. set max 또는 uncap을 사용하면 AGX 경로를 통해 즉시 복원됩니다. PID 통합기(PID integrator) 문제가 없습니다. 단순히 레지스터 쓰기만 합니다.
| 플래그 (Flag) | 효과 (Effect) |
|---|---|
| -v , --verbose | IOKit 호출 및 원시 속성 값 표시 |
--confirm | 주파수 확인을 위해 제한/제한 해제 후 powermetrics 실행 |
--no-burn | 워밍업 단계 건너뛰기 (더 빠름) |
--clpc | AGX 대신 CLPC 폴백 경로 강제 사용 |
--no-color | 색상 출력 비활성화 |
AGX GPU 드라이버는 GPU 서비스에서 쓰기가 가능한 전력 제한을 노출합니다:
// GPU 전력을 5W (5000 mW)로 설정
CFMutableDictionaryRef d = CFDictionaryCreateMutable(...);
CFDictionarySetValue(d, CFSTR(
| 속성 | 접근 | 설명 |
|---|---|---|
`MaxGPUAbsolutePower` | 읽기 | 현재 전력 제한(mW) |
`SetMaxGPUAbsolutePower` | 쓰기 (트리거) | `AbsoluteTarget`과 함께 `true`로 설정
`AbsoluteTarget` | 쓰기 | 밀리와트 단위의 목표 전력 |
`FilteredGPUPower` | 읽기 | 실시간 GPU 전력 소비(mW)|
이것은 **GPU 전용**이며 (CPU에 영향을 주지 않음), **즉각적**으로 작동하며 (PID 지연 없음), M4 (`AGXAcceleratorG16G`)와 M5 (`AGXAcceleratorG17X`) 모두에서 작동합니다.
만약 AGX 경로가 실패하면, 이 도구는 CLPC (Closed Loop Performance Controller)로 폴백(fallback)됩니다. 이는 M1–M4에서 작동하지만:
- **전체 패키지** (CPU + GPU)에 영향을 줍니다 - **PID 적분기 지연** (~15분 시정수)이 있습니다 - 전력 제한을 해제하려면 `pkg-low-power-target`을 -16777216으로 복원해야 합니다. 만약 멈춘 경우: `sudo pmset sleepnow`가 CLPC 펌웨어 상태를 재설정합니다.
이 경로를 강제하려면 `--clpc` 플래그를 사용하세요.
sudo pmset -a lowpowermode 1 # ~50% GPU 스로틀링, 시스템 전체
sudo pmset -a lowpowermode 0 # 복원
이진(Binary) (켜기/끄기)이지만, 모든 곳에서 작동하는 공개 macOS API입니다.
GPU의 전압/주파수 동작점은 macOS 장치 트리(device tree)의 `sgx` 노드에 있는 `perf-states` 속성에 있습니다. 각 항목은 8바이트로 구성됩니다:
`[frequency_Hz (u32), voltage_mV (u32)]`.
예시 (M4, 10코어 GPU, `gpu,t8132`):
P0 (유휴) 0 MHz 125 mV SRAM 780 mV
P1 338 MHz 615 mV SRAM 780 mV
P2 618 MHz 645 mV SRAM 780 mV
...
**M4 (AGX 경로, SetMaxGPUAbsolutePower, 레벨당 10초 버닝인):**
| 제한 | GFLOPS | 필터링된 전력 |
|---|---|---|
| 20W (기본값) | 367 | 7368 mW |
| ... |— |
AGX 펌웨어는 낮은 제한 값으로 수렴하기 위해 약 10초의 지속적인 GPU 부하가 필요합니다. `FilteredGPUPower`는 제한 값을 정확하게 추적하며 (±5 mW), 복구는 즉각적입니다.
**M5 최대 128GB** (@Beamsters1에 의해 커뮤니티 검증):
M5 최대 128GB (Beamsters1 커뮤니티 검증):
| Cap | Settled Freq | Power | GFLOPS |
|---|---|---|---|
| 5W | 338 MHz | 5014 mW | 591,631 |
| ... | | | |
| SoC | AGX class | AGX power cap | CLPC fallback | Status |
|---|---|---|---|---|
| M1 | AGXAcceleratorG13G | Should work | Yes | Untested |
| ... |M4 |
AGXAcceleratorG16G |
Yes |
Yes |
Verified |
M5 |
AGXAcceleratorG17X |
Yes |
Unknown | Community verified |
이 도구는 SoC와 AGX 클래스를 자동 감지합니다. 각 세대 내의 Pro/Max/Ultra 변형 모델은 동일한 드라이버와 인터페이스를 공유합니다.
**M4가 아닌 칩에서 테스트하는 경우**, `./gpu-dvfs info` 및 `./gpu-dvfs table` 출력을 포함하여 이슈를 열어주십시오.
GPU 장치 트리 노드 찾기
ioreg -l -w 0 -r -c AppleARMIODevice | grep -B5 -A200 "device_type" = <"sgx">"
perf-states 블롭 디코딩
...
gpu_freq_ctl.m 메인 도구 — AGX 전력 제한 + CLPC 폴백 + 벤치마크
gpu-dvfs Shell wrapper — 자동 빌드, 이름 지정된 프리셋, sudo 처리
matmul_dvfs_bench.m 타일형 FP32 matmul — DVFS 스케일링 데모 (~560 GFLOPS 피크)
...
— naive 16×16 타일 커널 (~560 GFLOPS). DVFS 스케일링을 보여주며, 최대 처리량(peak throughput)은 아닙니다. `matmul_dvfs_bench.m`
— `matmul_mma_bench.m`의 `simdgroup_matrix_multiply_accumulate`를 사용하여 **3.4 TFLOPS**(M4의 ~4.6 TFLOPS FP32 피크의 74%)를 사용합니다.
**리버스 엔지니어링.** Apple은 모든 macOS 업데이트에서 AGX/CLPC 인터페이스를 변경할 수 있습니다.**AGX 전력 제한은 GPU에만 영향을 미칩니다.** CLPC 폴백은 전체 패키지에 영향을 미칩니다.**직접적인 P-state 선택 불가.** 이 도구는 전력 예산을 제어하며, 펌웨어가 P-state를 선택합니다.**CLPC PID 컨트롤러는 긴 시간 상수(long time constants)를 가집니다.** CLPC 폴백을 사용하고 GPU가 스로틀링으로 멈추는 경우, `sudo pmset sleepnow`가 펌웨어를 재설정합니다.
MIT
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기