PEPC는 "전력, 에너지 및 성능 구성 자"를 나타냅니다. CPU 전원 관리 기능을 구성하기위한 명령 줄 도구입니다.
중요 : 이것은 도구는 디버그 및 연구 목적으로 만 사용됩니다. 루트 권한이 필요하며 생산이 아닌 고립 된 실험실 환경에서만 사용해야합니다.
Linux에는 전원 관리를 구성하기위한 많은 Linux 도구가 있으며,이 하위 섹션은 왜 우리가 또 다른 것을 만든 이유를 설명하려고합니다.
우리는 WULT를 사용한 C-States 대기 시간 측정, 다양한 워크로드 실행 및 STATS-Collect를 사용하여 전력 및 성능 통계를 수집하는 등 전력 및 성능과 관련된 많은 작업을 수행하고 있습니다. 예를 들어, C-States를 활성화 또는 비활성화하고 CPU 또는 무한한 주파수를 제한하거나 C1 Demotion과 같은 하드웨어 기능 등과 같은 시스템의 다양한 전력 및 성능 측면을 구성해야합니다.
'PEPC'가 만들어지기 전에 'CPUPOWER'또는 'LSCPU'와 같은 다양한 도구를 사용해야했으며 C- 상태를 비활성화하는 다양한 손잡이의 SYSFS 경로를 기억해야했습니다. 이것은 어렵고 오류가 발생했습니다. 또한 우리에게 충분히 유연하지 않았습니다. 예를 들어, 하나의 CPU 모듈에 대해서만 C1을 비활성화하는 것은 어려운 작업이었습니다. 왜냐하면 먼저 해당 모듈의 CPU 숫자가 무엇인지 파악한 다음 모든 CPU에서 C1을 비활성화해야하기 때문입니다. 마지막으로 C1 Demotion과 같은 많은 하드웨어 기능에는 MSR 레지스터에 대한 지식과 비트 번호가 필요합니다. 'wrmsr'및 'rdmsr'는 유용한 도구이지만 정기적으로 사용하기에 쉽지 않았습니다.
우리는 전력 및 성능 구성 작업을보다 쉽게 만들기 위해 'PEPC'를 만들었습니다. PEPC를 사용하면 SYSFS 경로 및 플랫폼 별 MSR (모델 별 레지스터) 번호를 기억할 필요가 없습니다. 이 도구는 유연하고 많은 CPU 모델을 지원하고 잘 구조화되며 다른 Python 프로젝트를 사용할 수있는 Python API를 제공합니다.
PEPC는 다음 기능을 발견하고 구성하는 것을 지원합니다.
일부 기능은 하드웨어 독립적이지만 일부는 하드웨어 별입니다.
'PEPC'는 OS 패키지를 통해 사용할 수 있지만 일반적으로 최신 버전을 제공하지 않습니다. "PIP"설치 방법을 사용하여 최신 'PEPC'버전을 얻으십시오.
'PEPC'는 Fedora 38 및 39에서 사용할 수 있습니다. 'PEPC'를 설치하려면 실행하십시오.
sudo dnf install pepc
Fedora 패키지는 Ali Erdinç Köroğlu [email protected]에 의해 유지됩니다.
Fedora 37 이상의 Fedora의 경우 'PIP'설치 방법을 사용하십시오. 그러나 실행하여 의존성을 설치하십시오
sudo dnf install -y rsync openssl-devel util-linux procps-ng
sudo dnf install -y python3-colorama python3-paramiko python3-argcomplete
'PEPC'는 'Epel'저장소를 통해 Centos 9 Stream에서 사용할 수 있습니다. 'Epel'을 추가하고 'PEPC'를 설치하는 방법은 다음과 같습니다.
sudo dnf install epel-release
sudo dnf install pepc
Epel 패키지는 Ali Erdinç Köroğlu [email protected]에 의해 유지됩니다.
우분투/데비안 패키지를 제공하지 않으므로 'PIP'설치 방법을 사용해야합니다. 그러나 다음 종속성을 설치하십시오.
sudo apt install -y rsync libssl-dev util-linux procps python3 git
sudo apt install -y python3-pip python3-colorama python3-paramiko python3-argcomplete
다음 명령을 실행하십시오.
sudo pip3 install --upgrade git+https://github.com/intel/pepc.git@release
이 명령은 git 저장소의 '릴리스'브랜치에서 'pepc'를 다운로드하여 시스템에 설치합니다.
이 작업을 수행하는 다른 방법은 먼저 git 저장소를 복제하고 실행하는 것입니다.
git clone https://github.com/intel/pepc.git --branch release pepc
cd pepc
pip3 install --upgrade .
'PEPC'는 많은 경우 슈퍼 사용자 (루트) 권한으로 실행해야하며 'PIP3'의 '-user'옵션으로 설치하면 "상자에서"작동하지 않습니다. 그렇기 때문에 '--user'를 사용하지 않는 것이 좋습니다.
저장소를 복제하고 몇 가지 명령을 실행 하여이 도구의 독립형 버전을 만들 수도 있습니다. 아래는 예입니다. '#!/usr/bin/python3'shebang을 조정할 수 있습니다.
우선 아래 명령이 "좋은"인쇄를 확인하십시오. '/usr/bin/python3'버전이 3.8보다 큽니다.
/usr/bin/python3 -c 'import sys; ver=sys.version_info;
print("Good") if ver.major>2 and ver.minor>7 else print("Bad")'
'PEPC'의 독립형 버전을 만듭니다.
git clone https://github.com/intel/pepc.git --branch release pepc
cd pepc
echo '#!/usr/bin/python3' > pepc.standalone
git archive --format zip HEAD >> pepc.standalone
chmod ug+x pepc.standalone
이렇게하면 'pepc.standalone'파일이 생성되며 어디서나 이름을 바꾸고 복사 할 수 있습니다. 독립형 프로그램으로 작동합니다.
'PEPC'에는 탭 완료 지원이 있지만 특정 환경 변수가 정의 된 경우에만 작동합니다. 다음 명령이이를 수행합니다.
eval "$(register-python-argcomplete pepc)"
기본적으로 'pepc'탭 완료를 활성화하려면이 줄을 '.bashrc'파일에 넣을 수 있습니다.
$ pepc pstates info
Source: Linux sysfs file-system
- Min. CPU frequency: '1.2GHz' for CPUs 0-87 (all CPUs)
- Max. CPU frequency: '3.6GHz' for CPUs 0-87 (all CPUs)
- Min. supported CPU frequency: '1.2GHz' for CPUs 0-87 (all CPUs)
- Max. supported CPU frequency: '3.6GHz' for CPUs 0-87 (all CPUs)
- Base CPU frequency: '2.2GHz' for CPUs 0-87 (all CPUs)
- Turbo: 'on' for CPUs 0-87 (all CPUs)
- Min. uncore frequency: '1.2GHz' for CPUs 0-87 (all CPUs)
- Max. uncore frequency: '2.8GHz' for CPUs 0-87 (all CPUs)
- Min. supported uncore frequency: '1.2GHz' for CPUs 0-87 (all CPUs)
- Max. supported uncore frequency: '2.8GHz' for CPUs 0-87 (all CPUs)
- EPB: '7' for CPUs 0-87 (all CPUs)
- CPU frequency driver: intel_pstate
- Operation mode of 'intel_pstate' driver: 'passive' for CPUs 0-87 (all CPUs)
- CPU frequency governor: 'schedutil' for CPUs 0-87 (all CPUs)
- Available CPU frequency governors: conservative, ondemand, userspace, powersave, performance, schedutil
Source: Model Specific Register (MSR)
- Bus clock speed: '100MHz' for CPUs 0-87 (all CPUs)
- Min. CPU operating frequency: '800MHz' for CPUs 0-87 (all CPUs)
- Max. CPU efficiency frequency: '1.2GHz' for CPUs 0-87 (all CPUs)
- Max. CPU turbo frequency: '3.6GHz' for CPUs 0-87 (all CPUs)
- EPB: '7' for CPUs 0-87 (all CPUs)
$ pepc pstates info --base-freq --driver
Base CPU frequency: '2.2GHz' for CPUs 0-87 (all CPUs)
CPU frequency driver: intel_pstate
모든 CPU의 CPU 주파수 재 배열을 [1.5GHz, 2GHz]로 제한하십시오.
$ pepc pstates config --min-freq 1.5GHz --max-freq 2GHz
Min. CPU frequency: set to '1.5GHz' for CPUs 0-87 (all CPUs)
Max. CPU frequency: set to '2GHz' for CPUs 0-87 (all CPUs)
확인하십시오.
$ pepc pstates info --min-freq --max-freq
Min. CPU frequency: '1.5GHz' for CPUs 0-87 (all CPUs)
Max. CPU frequency: '2GHz' for CPUs 0-87 (all CPUs)
패키지 1의 코어 0 및 4의 모든 CPU에 대한 CPU 주파수를 기본 주파수 (HFM)로 잠그십시오.
pepc pstates config --min-freq base --max-freq base --packages 1 --cores 0,4
Min. CPU frequency: set to '2.2GHz' for CPUs 1,9,45,53
Max. CPU frequency: set to '2.2GHz' for CPUs 1,9,45,53
확인하십시오.
$ pepc pstates info --min-freq --max-freq
Min. CPU frequency: '1.5GHz' for CPUs 0,2-8,10-44,46-52,54-87
Min. CPU frequency: '2.2GHz' for CPUs 1,9,45,53
Max. CPU frequency: '2GHz' for CPUs 0,2-8,10-44,46-52,54-87
Max. CPU frequency: '2.2GHz' for CPUs 1,9,45,53
모든 CPU에서 CPU 주파수를 잠금 해제하십시오.
$ pepc pstates config --min-freq min --max-freq max
Min. CPU frequency: set to '1.2GHz' for CPUs 0-87 (all CPUs)
Max. CPU frequency: set to '3.6GHz' for CPUs 0-87 (all CPUs)
확인하십시오.
$ pepc pstates info --min-freq --max-freq
Min. CPU frequency: '1.2GHz' for CPUs 0-87 (all CPUs)
Max. CPU frequency: '3.6GHz' for CPUs 0-87 (all CPUs)
먼저, 현재 총재의 이름과 지원하는 총재 목록을 얻으십시오.
$ pepc pstates info --governor --governors
CPU frequency governor: 'schedutil' for CPUs 0-87 (all CPUs)
Available CPU frequency governors: conservative, ondemand, userspace, powersave, performance, schedutil
"성능"주지사로 전환하십시오.
$ pepc pstates config --governor performance
CPU frequency governor: set to 'performance' for CPUs 0-87 (all CPUs)
확인하십시오.
$ pepc pstates info --governor
CPU frequency governor: 'performance' for CPUs 0-87 (all CPUs)
$ pepc cstates info
Source: Linux sysfs file-system
- POLL: 'on' for CPUs 0-87 (all CPUs)
- description: CPUIDLE CORE POLL IDLE
- expected latency: 0 us
- target residency: 0 us
- C1: 'on' for CPUs 0-87 (all CPUs)
- description: MWAIT 0x00
- expected latency: 2 us
- target residency: 2 us
- C1E: 'on' for CPUs 0-87 (all CPUs)
- description: MWAIT 0x01
- expected latency: 10 us
- target residency: 20 us
- C3: 'off' for CPUs 0-87 (all CPUs)
- description: MWAIT 0x10
- expected latency: 40 us
- target residency: 100 us
- C6: 'on' for CPUs 0-87 (all CPUs)
- description: MWAIT 0x20
- expected latency: 133 us
- target residency: 400 us
Source: Model Specific Register (MSR)
- Package C-state limit: 'PC6' for CPUs 0-87 (all CPUs)
- Package C-state limit lock: 'on' for CPUs 0-87 (all CPUs)
- Available package C-state limits: PC0, PC2, PC3, PC6, unlimited
- C1 demotion: 'off' for CPUs 0-87 (all CPUs)
- C1 undemotion: 'off' for CPUs 0-87 (all CPUs)
- C1E autopromote: 'off' for CPUs 0-87 (all CPUs)
- C-state prewake: 'on' for CPUs 0-87 (all CPUs)
Source: Linux sysfs file-system
- Idle driver: intel_idle
- Idle governor: 'menu' for CPUs 0-87 (all CPUs)
- Available idle governors: menu
$ pepc cstates info --cstates C1 --c1e-autopromote --c1-demotion
C1: 'on' for CPUs 0-87 (all CPUs)
- description: MWAIT 0x00
- expected latency: 2 us
- target residency: 2 us
C1E autopromote: 'off' for CPUs 0-87 (all CPUs)
C1 demotion: 'off' for CPUs 0-87 (all CPUs)
모든 C- 상태를 비활성화하지만 모든 CPU에서 폴링하십시오.
$ pepc cstates config --disable all --enable POLL
POLL: set to 'off' for CPUs 0-87 (all CPUs)
C1: set to 'off' for CPUs 0-87 (all CPUs)
C1E: set to 'off' for CPUs 0-87 (all CPUs)
C3: set to 'off' for CPUs 0-87 (all CPUs)
C6: set to 'off' for CPUs 0-87 (all CPUs)
POLL: set to 'on' for CPUs 0-87 (all CPUs)
모든 CPU에서 모든 C- 상태를 활성화하십시오.
$ pepc cstates config --enable all
POLL: set to 'on' for CPUs 0-87 (all CPUs)
C1: set to 'on' for CPUs 0-87 (all CPUs)
C1E: set to 'on' for CPUs 0-87 (all CPUs)
C3: set to 'on' for CPUs 0-87 (all CPUs)
C6: set to 'on' for CPUs 0-87 (all CPUs)
패키지 1에서 C1E 및 C6을 비활성화합니다.
$ pepc cstates config --disable C1E,C6 --packages 1
C1E: set to 'off' for CPUs 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87 (package 1)
C6: set to 'off' for CPUs 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87 (package 1)
패키지 C- 상태 제한 정보를 얻으십시오.
$ pepc cstates info --pkg-cstate-limit
Package C-state limit: 'PC6' for CPUs 0-87 (all CPUs)
Package C-state limit lock: 'off' for CPUs 0-87 (all CPUs)
Available package C-state limits: PC0, PC2, PC3, PC6, unlimited
패키지 C-State 한계 MSR이 잠겨 있지 않으므로 한계를 수정할 수 있습니다. 모든 패키지에서 가장 깊은 패키지 C-State를 PC0으로 설정하십시오.
$ pepc cstates config --pkg-cstate-limit PC0 --packages all
Package C-state limit set to 'PC0' for CPUs 0-87 (all CPUs)
$ pepc power info
Source: Model Specific Register (MSR)
- TDP: 83W for all CPUs
- RAPL PPL1: 83W for all CPUs
- RAPL PPL1: 'on' for all CPUs
- RAPL PPL1 clamping: 'on' for all CPUs
- RAPL PPL1 time window: 1s for all CPUs
- RAPL PPL2: 99.625W for all CPUs
- RAPL PPL2: 'on' for all CPUs
- RAPL PPL2 clamping: 'on' for all CPUs
- RAPL PPL2 time window: 1s for all CPUs
$ pepc aspm info
ASPM policy: default
Available policies: default, performance, powersave, powersupersave
먼저 현재 온라인/오프라인 상황을 확인하십시오.
$ pepc cpu-hotplug info
The following CPUs are online: 0-87
No offline CPUs
오프라인 CPU 5,6,7,8 및 CPU 87.
$ pepc cpu-hotplug offline --cpus 5-8,87
Offlining CPU5
Offlining CPU6
Offlining CPU7
Offlining CPU8
Offlining CPU87
$ pepc cpu-hotplug online --cpus all
Onlining CPU5
Onlining CPU6
Onlining CPU7
Onlining CPU8
Onlining CPU87
핵심 형제 자매는 하나의 핵심을 가진 CPU입니다. 인텔 칩에는 하이퍼 스레드가 있습니다. 시스템에 코어 당 두 개의 CPU (실행 장치, 하이퍼 스레드)가있는 경우, 핵심 형제 지수는 0과 1입니다. 하이퍼 스레드를 비활성화하려면 모든 핵심 형제 자매를 인덱스 1로 오프라인 상태로 유지합니다.
$ pepc cpu-hotplug offline --cpus all --core-siblings 1
힌트 : 'PEPC 토폴로지 정보 -컬럼 코어, CPU'를 사용하여 코어와 CPU 번호의 관계를 파악하십시오.
멀티 소켓 시스템에는 여러 CPU 패키지가 있습니다. 패키지의 모든 CPU를 오프라인하여 효과적으로 "비활성화"할 수 있습니다. 패키지 1에 대한 방법은 다음과 같습니다.
$ pepc cpu-hotplug offline --packages 1
$ pepc topology info
CPU Core Node Package
0 0 0 0
1 0 1 1
2 1 0 0
3 1 1 1
... snip ...
85 27 1 1
86 28 0 0
87 28 1 1
이 테이블은 CPU, 코어, NUMA 노드 및 패키지 번호가 서로 관련되는 방법에 대한 아이디어를 제공합니다.
일부 'PEPC'기능 (예 : '--pkg-cstate-limit')은 특정 인텔 플랫폼에 대해서만 구현됩니다. 이것은 반드시 다른 플랫폼에서 기능이 지원되지 않는다는 것을 의미하지는 않으며, 제한된 양의 플랫폼에서만 확인했음을 의미합니다. 안전한 측면에 있기 위해서는 검증하지 않은 플랫폼에서 기본 MSR 레지스터 변경을 거부합니다.
'PEPC'가 "이 기능 이이 플랫폼에서 지원되지 않는다"와 같은 메시지로 실패하면 요청과 함께 저자에게 연락하십시오. 종종 지원되는 플랫폼 목록에 CPU ID를 추가하면 직접 수행하고 패치/풀 요청을 제출할 수 있습니다.