CPU 전력 소모를 줄이고 성능을 얻는 방법: 더 친환경적이고 강력하게
요약
본 문서는 CPU의 전력 소모를 줄이면서도 성능을 극대화하는 방법인 PowerMonkey에 대해 설명합니다. 사용자는 이 도구를 통해 시스템 설정을 최적화하고, 언더볼팅(Undervolting) 및 V/F 포인트 조정을 수행하여 효율성과 성능 향상을 동시에 얻을 수 있습니다.
핵심 포인트
- PowerMonkey는 CPU 전력 소모를 줄이고 성능을 높이는 도구입니다.
- 언더볼팅과 V/F 포인트 조정이 핵심 최적화 방법입니다.
- 빌드 및 배포 과정에 대한 상세 가이드가 포함되어 있습니다.
CPU 전력 소모를 줄이고 성능을 얻는 방법 - 더 친환경적이고 강력하게
______ ______ _
(_____ \ | ___ \ | |
_____) )___ _ _ _ ____ ___ | | _ | | ___ ____ | | _ ____ _ _
...
- CPU 전력 소모를 줄이고 성능을 얻는 방법 - 더 친환경적이고 강력하게
PowerMonkey란 무엇인가?
배경
2020년대에 이르러 사람들은 '오버클럭킹(overclocking)'이 무엇인지 모두 알고 있습니다. 이는 시스템의 작동 주파수나 전압을 높여 한계까지 끌어올리는 것을 의미합니다. 이 과정은 예전에는 오류가 발생하기 쉬웠지만, 그동안 완벽하게 다듬어져서 심지어 일부 대형 브랜드 시스템들은 처음부터 '공장 오버클럭' 상태로 출시되기도 합니다.
하지만, 사람들은 그 사촌 격인 **언더볼팅(undervolting)**에 대해서는 훨씬 적게 들어봤을 것입니다. 언더볼팅은 일종의 오버클럭킹과 반대되는 과정입니다. CPU 전압을 낮춰서 CPU가 훨씬 적은 전력을 소비하고 훨씬 적은 열을 발생하게 하는 것입니다.
흥미롭게도, 노트북이나 SFF(small form factor) PC와 같이 열 제한이 걸린 시스템에 이를 적용하면 열을 줄일 뿐만 아니라 성능까지 향상시킬 수 있습니다! 마법일까요? 아닙니다. 물리 법칙입니다! 노트북 냉각 시스템이 배출할 수 있는 열량에는 한계가 있고, 이 경로가 고갈되면 치명적인 고장을 막기 위해 CPU를 스로틀링(throttling)하는 것 외에는 다른 선택지가 없습니다. 따라서 높은 주파수에서 전압을 낮추면 전력 및 열 출력이 크게 감소하여 시스템이 더 시원해지고 더 빨라지게 만듭니다.
어려움 (Challenges)
안타깝게도, 일반적인 노트북을 최적화하는 것은 점점 어려워지고 있습니다. 첫째, 언더볼팅은 대부분의 OEM(Original Equipment Manufacturer)에 의해 기본적으로 잠겨버렸습니다. 이 문제는 ThrottleStop과 같은 훌륭한 애플리케이션이 제 역할을 할 수 있도록 펌웨어 설정을 '잠금 해제'함으로써 완화할 수 있습니다 (단, 플랫폼이 완전히 잠겨 있는 경우는 제외).
하지만 새로운 문제들이 눈앞에 다가오고 있습니다. Microsoft Hyper-V와 같은 하이퍼바이저(Hypervisor)는 이제 WSL2(Windows Subsystem for Linux)와 같은 최종 사용자 애플리케이션에서도 사용됩니다. 하이퍼바이저는 가상 머신이 호스트 하드웨어 레지스터의 대부분을 수정하는 것을 허용하지 않기 때문에, ThrottleStop이나 Intel의 XTU와 같은 애플리케이션은 전압을 조정할 수 없습니다.
애플리케이션이 하드웨어 레지스터에 쓰기를 시도할 때, 하이퍼바이저(Hypervisor)가 이 시도를 가로채서 실제 쓰기 작업을 수행하지 않습니다. 이론적으로는 하이퍼바이저 벤더가 쓰기 기능을 구현할 수도 있지만, 가능성은 매우 낮습니다. 이는 언더볼팅(undervolting) 및 유사한 유형의 하드웨어 트윅에 새로운 장벽을 만들었습니다.
위와 같은 문제는 OEM(Original Equipment Manufacturer)이 고객에게 펌웨어 설정에서 설정을 조정하도록 허용한다면 문제가 되지 않을 것입니다. 하지만 대부분의 노트북은 최소한의 구성 옵션만 제공하여, 소유자가 하드웨어를 조정하는 것을 막고 있습니다. PowerMonkey POC는 바로 이 문제를 해결하고자 하며, 이 저장소는 그러한 접근 방식의 실현 가능성을 보여주는 첫 번째 '개념 증명(proof-of-concept)'입니다.
PowerMonkey는 어떻게 작동하나요?
이 개념 증명은 UEFI 펌웨어가 OS 부트로더가 호출되기 전에 소위
PowerMonkey.efi는 펌웨어 설정 모듈에서 전압/주파수(Voltage/Frequency) 오버라이드 구성이 불가능하지만, 펌웨어가 OC/CFG가 잠금 해제되었거나 어떤 수단으로든 (예: NVRAM EFI 변수 편집) 그렇게 할 수 있는 시스템을 사용하는 전문가를 위한 개념 증명(proof-of-concept)입니다. PowerMonkey.efi의 주요 목적은 하이퍼바이저(Hypervisor) 사용도 원하는 그러한 시스템에서 V/F 오버라이드를 허용하는 것입니다.
활성화된 기능 (Enabled Features)
참고: Alder Lake 지원은 베타 버전입니다 (P-코어 전용, E-코어가 활성화될 때 간헐적인 충돌이 발견됨)
PowerMonkey는 POC이며 몇몇 CML, RKL 및 ADL* 시스템 외에는 테스트되지 않았습니다. 이 단계에서는 개발자와 전문가가 주의를 기울여 사용할 것을 권장합니다. CPU 호환성 검사가 없으므로 충돌이 발생할 수 있습니다. 컴퓨터를 벽돌(brick)로 만들거나 모든 종류의 방식으로 오작동하게 할 수 있습니다!
| 기능 (Feature) | 구성 가능 여부 (Configurable) |
|---|---|
| 전압/주파수 오버라이드 | |
| ... |
시작하기 (Getting Started)
설정 (Configuration)
모든 관련 구성 옵션은 CONFIGURATION.c 및 CONFIGURATION.h 파일에 저장되어 있으며, 여기에 전체 구성 인터페이스와 옵션이 포함됩니다. 구성 과정은 모든 빌드 방식에서 정확히 동일하며 빌드 툴체인 선택에 의존하지 않습니다. 단순히 오버라이드를 적용하여 CONFIGURATION.c 및 CONFIGURATION.h를 편집하고 PowerMonkey.efi 실행 파일을 이후에 빌드하기만 하면 됩니다!
참고: 이 가이드는 '언더볼팅 방법(Undervolting HowTo)'이 아닙니다. 시스템의 최적 설정을 이미 알고 있다고 가정합니다. 그렇지 않다면, ThrottleStop 가이드나 NotebookReview 포럼 가이드와 같은 훌륭한 가이드를 확인해 주십시오.
바이너리 빌드 (Build the binaries)
현재 PowerMonkey가 '개념 증명(proof-of-concept)' 단계에 있기 때문에, 사용자의 CPU에 맞게 CPU 전압/주파수/전력 오버라이드 파라미터를 조정하는 것이 필요합니다. 따라서 PowerMonkey를 소스 코드로부터 빌드하는 것이 필수적입니다.
-
PowerMoneky 저장소 클론 (이 저장소)
-
'공식' UEFI EDK(TianoCore)를 사용하여
PowerMonkey.efi를 빌드할지, 아니면 Visual Studio에서 모든 것을 처리하고 싶은지 결정합니다?
빌드 - "Visual Studio" 경로:
이 경로는 Alex Ionescu의 훌륭한 VisualUEFI 프로젝트를 기반으로 합니다. 이 접근 방식의 장점은 EDK2 빌드 시스템 및 구성 파일(config files)을 다룰 필요가 없다는 것입니다.
-
https://github.com/ionescu007/VisualUefi에서 VisualUEFI를 가져와 필수 전제 조건들을 빌드합니다 (지침을 따르세요).
-
PowerMonkey 디렉토리(및 하위 디렉토리)를 클론된 VisualUEFI 저장소의 루트에 직접 배치합니다:
VisualUEFI
├── debugger/
├── EDK-II/
...
PmWorkspace.sln을 열고 Visual Studio에서 프로젝트를 직접 빌드합니다. 이 과정에서는 경고나 오류가 발생해서는 안 됩니다. 결과물은 EFI 실행 파일인/PowerMonkey/x64/Release/PowerMonkey.efi여야 합니다.
빌드 - EDK2 경로:
참고: MSVC (VS2019), gcc (GCC5), Clang (CLANGDWARF) 툴체인만 검증되었습니다.
CLANGDWARF 툴체인의 경우, 다음을 추가해야 합니다:
DEBUG_CLANGDWARF_X64_DLINK_FLAGS =-z notext ... <p>RELEASE_CLANGDWARF_X64_DLINK_FLAGS =-z notext ... <p>NOOPT_CLANGDWARF_X64_DLINK_FLAGS =-z notext ...
EDK2 빌드 단계:
-
https://github.com/tianocore/edk2에서 EDK2 소스를 다운로드합니다. 이상적으로는, 사용 중인 UEFI 펌웨어가 TianoCore 기반인 경우, EDK2 버전이 컴퓨터 펌웨어의 “기준 EDK2 버전(baseline EDK2 version)”과 일치해야 합니다.
-
PowerMonkeyApp 디렉터리(및 하위 디렉터리)를 EDK2 작업 공간의
/MdeModulePkg/Application하위 디렉터리에 저장합니다. 결과는 다음과 유사할 것입니다 (더 많은 디렉터리가 있을 것입니다):EDK ├── BaseTools/ ├── Conf/ ... -
/MdeModulePkg/MdeModulePkg.dsc파일을 편집하고 PowerMonkey 프로젝트를 추가합니다:[Components] MdeModulePkg/Application/PowerMonkeyApp/PowerMonkey.inf -
이후의 빌드 프로세스는 다른 모든 EDK2 프로젝트와 동일합니다 (edksetup.bat, build, ...).
배포(Deployment)
테스트 중 가장 쉽고 권장되는 경로는 PowerMonkey.efi를 EFI 시스템 파티션에 복사하여 UEFI 셸에서 테스트하는 것입니다. 설정이 작동하고 안정적임을 확인하면, PowerMonkey.efi를 UEFI 부트 매니저에 추가하고 OS 부트로더보다 먼저 로드되도록 설정할 수 있습니다 (사용자 플랫폼 펌웨어에서 지원되는 경우). 펌웨어에 의한 직접적인 로드가 불가능한 경우, 부트 매니저 스크립팅을 사용하여 OS 부트로더 이전에 로드할 수 있습니다.
테스트
재부팅 루프를 방지하기 위해서는 PowerMonkey.efi 파일을 EFI 셸(shell)이나 별도의 부트로더 항목(예: GRUB2)에서 로드하여 먼저 테스트하는 것이 매우 권장됩니다. 이렇게 하면 원래 설정으로 되돌리기가 쉽습니다.
PowerMonkey.efi는 OS 부트로더보다 먼저 실행되어야 합니다. 이는 여러 가지 방법으로 달성할 수 있으며, 가장 명확하고 자동화가 덜 된 방법은 EFI 셸을 통한 호출입니다. PowerMonkey.efi를 실행하면 다음과 같은 결과가 나타납니다:
실패하는 경우, 충돌 정보(crash information)나 멈춘 컴퓨터 화면이 보일 수 있습니다. 모든 것이 정상적으로 작동했다면, EFI 셸의 화면은 다음과 같아야 합니다:

비상 종료(Emergency Exit)
PowerMonkey는 기본적으로 "비상 종료" 기능을 활성화하고 있습니다. 이 기능은 프로그래밍 시작 전에 3초를 기다리며, 사용자에게 ESC 키를 눌러 프로그래밍을 중단할 수 있게 합니다. 이 옵션은 PowerMonkey.efi가 임시 부트로더(Transient Boot Loader)로 설치되어 OS 부트로더보다 먼저 실행될 때 유용합니다. ESC 키를 누르면 CPU는 프로그래밍되지 않으며, 응답은 다음과 같습니다:

컴퓨터가 여전히 살아 있고 멈추지 않았다면, 선택한 OS로 진행하여 설정이 적용되었는지 확인해 볼 수 있습니다. 가상 머신(VM)에서 전압을 실제로 확인할 수 없게 되므로, 먼저 하이퍼바이저(Hypervisor)를 비활성화하는 것을 잊지 마십시오. CONFIGURATION.c 파일에 적용된 설정을 제 CPU에 적용한 결과는 다음과 같습니다 (ThrottleStop과 XTU가 CPU의 값을 읽어온 사진):
해결할 수 없는 멈춤 현상(Cannot resolve hanging) - 복구 추적(Tracing to the Rescue)
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기