PEPC steht für "Leistung, Energie und Leistungskonfigurator". Dies ist ein Befehlszeilen-Tool zum Konfigurieren von CPU-Leistungsverwaltungsfunktionen.
WICHTIG : Dies ist das Tool nur für Debug- und Forschungszwecke. Es erfordert Wurzelberechtigungen und darf nur in einer isolierten Laborumgebung verwendet werden, nicht in der Produktion.
Es gibt viele Linux-Tools für die Konfiguration der Stromverwaltung unter Linux, und dieser Unterabschnitt versucht zu erklären, warum wir noch einen anderen erstellt haben.
Wir leisten eine Menge Arbeit im Zusammenhang mit Kraft und Leistung, z. B. die Messung der Latenz von C-States mit Wult, Ausführung verschiedener Workloads und das Sammeln von Strom- und Leistungsstatistiken mithilfe von Statistiken. Wir müssen häufig verschiedene Leistung und Leistungsaspekte des Systems konfigurieren, z.
Bevor "Pepc" erstellt wurde, mussten wir viele verschiedene Tools verwenden, wie z. Dies war schwierig und fehleranfällig. Es war auch nicht flexibel genug für uns. Beispielsweise war das Deaktivieren von C1 nur für ein CPU -Modul eine schwierige Aufgabe, da man zuerst herausfinden muss, was die CPU -Zahlen in diesem Modul sind, und dann C1 bei jeder CPU deaktivieren muss. Und schließlich erfordert viele Hardware -Funktionen wie C1 -Herabstufung Kenntnisse über das MSR -Register und die Bitnummer, um umzuschalten. Das 'WRMSR' und 'rdmsr' sind hilfreiche Werkzeuge, aber sie waren nicht einfach genug für uns, regelmäßig zu verwenden.
Wir haben 'PEPC' erstellt, um Leistung und Leistungskonfigurationsaufgaben zu erleichtern. Mit PEPC müssen wir uns nicht an SysFS-Pfade und plattformspezifische MSR-Nummern (Modellspezifische Register) erinnern. Das Tool ist flexibel, unterstützt viele CPU-Modelle, die gut strukturiert sind, und bietet auch Python-API für andere zu verwendende Python-Projekte.
PEPC unterstützt das Erkennen und Konfigurieren der folgenden Funktionen.
Einige der Funktionen sind hardwareunabhängig, andere jedoch hardwarespezifisch.
Hinweis, während 'PEPC' über Betriebssystempakete erhältlich ist, bieten sie normalerweise nicht die neueste Version an. Verwenden Sie die Installationsmethode "PIP", um die neueste "PEPC" -Version zu erhalten.
'Pepc' ist auf Fedora 38 und 39 erhältlich. Um 'PEPC' zu installieren, rennen
sudo dnf install pepc
Fedora -Pakete werden von Ali Erdinç Köroğlu [email protected] gepflegt.
Verwenden Sie bei Fedora 37 oder älterer Fedora die "PIP" -Anstallationsmethode. Installieren Sie die Abhängigkeiten jedoch durch Ausführen
sudo dnf install -y rsync openssl-devel util-linux procps-ng
sudo dnf install -y python3-colorama python3-paramiko python3-argcomplete
"PEPC" ist für den CentOS 9 -Stream über das "Epel" -Repository erhältlich. Hier erfahren Sie, wie Sie 'epel' hinzufügen und 'PEPC' installieren.
sudo dnf install epel-release
sudo dnf install pepc
Epel -Pakete werden von Ali Erdinç Köroğlu [email protected] gepflegt.
Wir bieten keine Ubuntu/Debian -Pakete an, daher müssen Sie die Installationsmethode "PIP" verwenden. Installieren Sie jedoch die folgenden Abhängigkeiten.
sudo apt install -y rsync libssl-dev util-linux procps python3 git
sudo apt install -y python3-pip python3-colorama python3-paramiko python3-argcomplete
Führen Sie den folgenden Befehl aus:
sudo pip3 install --upgrade git+https://github.com/intel/pepc.git@release
In diesem Befehl wird 'PEPC' aus der "Release" -Ast des Git -Repositorys heruntergeladen und an dem System installiert.
Die andere Möglichkeit, dies zu tun
git clone https://github.com/intel/pepc.git --branch release pepc
cd pepc
pip3 install --upgrade .
Beachten Sie, dass 'PEPC' in vielen Fällen mit Superuser (Root) -Regilegien ausgeführt werden muss. Wenn Sie sie mit der Option "PIP3" von '--user' installieren, funktioniert es nicht "aus der Box". Deshalb empfehlen wir nicht, "--User" zu verwenden.
Sie können auch eine eigenständige Version dieses Tools erstellen, indem Sie das Repository klonen und einige Befehle ausführen. Unten ist ein Beispiel. Möglicherweise möchten Sie die '#!/Usr/bin/python3' Shebang darin anpassen.
Stellen Sie zunächst sicher, dass der folgende Befehl "gut" druckt. Es prüft, dass Ihre Version "/usr/bin/python3" größer als 3,8 ist:
/usr/bin/python3 -c 'import sys; ver=sys.version_info;
print("Good") if ver.major>2 and ver.minor>7 else print("Bad")'
Erstellen Sie die eigenständige Version von '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
Dadurch wird die Datei "pepc.standalone" erstellt, die Sie überall umbenennen und kopieren können. Es wird als eigenständiges Programm wirken.
'PEPC' hat Unterstützung für Registerkarten, aber dies funktioniert nur, wenn Sie bestimmte Umgebungsvariablen definieren. Der folgende Befehl wird es tun:
eval "$(register-python-argcomplete pepc)"
Sie können diese Zeile in Ihre ".bashrc" -Datei einfügen, um die Registerkarte "PEPC" standardmäßig aktiviert zu haben.
$ 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
Begrenzen Sie die CPU -Frequenz für alle CPUs auf [1,5 GHz, 2GHz] um.
$ 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)
Überprüfen Sie es.
$ 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)
Sperren Sie die CPU -Frequenz auf die Basisfrequenz (HFM) für alle CPUs in den Kernen 0 und 4 des Pakets 1.
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
Überprüfen Sie es.
$ 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
Schalten Sie die CPU -Frequenz auf allen CPUs frei.
$ 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)
Überprüfen Sie es.
$ 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)
Holen Sie sich zunächst den Namen des aktuellen Gouverneurs und die Liste der unterstützten Gouverneure.
$ 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
Wechseln Sie zum Gouverneur "Performance".
$ pepc pstates config --governor performance
CPU frequency governor: set to 'performance' for CPUs 0-87 (all CPUs)
Überprüfen Sie es.
$ 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)
Deaktivieren Sie alle C-States, aber die Umfrage zu allen CPUs.
$ 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)
Aktivieren Sie alle C-States auf allen CPUs.
$ 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)
Deaktivieren Sie C1E und C6 auf Paket 1.
$ 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)
Paket C-State-Grenzinformationen erhalten.
$ 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
Da das Paket-St-State-Limit MSR nicht gesperrt ist, können wir die Grenze ändern. Stellen Sie den tiefsten Paket C-State auf PC0 auf allen Paketen ein.
$ 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
Überprüfen Sie zunächst die aktuelle Online-/Offline -Situation.
$ pepc cpu-hotplug info
The following CPUs are online: 0-87
No offline CPUs
Offline -CPUs 5,6,7,8 und 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
Kerngeschwister sind CPUs mit einem Kern. Auf Intel Chips gibt es die Hyperthreads. Wenn ein System zwei CPUs (Ausführungseinheiten, Hyperthreads) pro Kern hat, beträgt die Kerngeschwisterindizes 0 und 1. Um Hyperthreads zu deaktivieren, offline alle Kerngeschwister mit Index 1.
$ pepc cpu-hotplug offline --cpus all --core-siblings 1
Hinweis: Verwenden Sie 'PEPC Topology Info --Säulenkern, CPU', um die Beziehung zwischen Kern- und CPU -Zahlen herauszufinden.
Auf einem mehrkundigen System gibt es mehrere CPU-Pakete. Sie können alle CPUs eines Pakets offline offline, um es effektiv zu "deaktivieren". Hier erfahren Sie, wie Sie es für Paket 1 machen.
$ 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
Die Tabelle gibt eine Vorstellung davon, wie CPU-, Kern-, NUMA -Knoten- und Paketnummern miteinander zusammenhängen.
Einige "PEPC" -Funktionen (z. B. "--pkg-cstate-limit") werden nur für bestimmte Intel-Plattformen implementiert. Dies bedeutet nicht unbedingt, dass die Funktion nicht von anderen Plattformen unterstützt wird, sondern nur, dass wir es auf einer begrenzten Anzahl von Plattformen überprüft haben. Um nur auf einer sicheren Seite zu sein, weigern wir die Änderung der zugrunde liegenden MSR -Register auf Plattformen, die wir nicht überprüft haben.
Wenn 'PEPC' mit einer Nachricht wie "Diese Funktion wird auf dieser Plattform nicht unterstützt" für Sie fehlschlägt, können Sie die Autoren mit einer Anfrage kontaktieren. Sehr oft addiert es nur eine CPU -ID in die Liste der unterstützten Plattformen und kann es sein, dass Sie dies selbst tun und eine Patch/Pull -Anfrage einreichen können.