PEPC adalah singkatan dari "Power, Energy, dan Performance Configurator". Ini adalah alat baris perintah untuk mengonfigurasi fitur manajemen daya CPU.
PENTING : Ini adalah alat debug dan penelitian saja. Dibutuhkan izin akar, dan hanya boleh digunakan dalam lingkungan lab yang terisolasi, bukan dalam produksi.
Ada banyak alat Linux untuk mengonfigurasi manajemen daya di Linux, dan sub-bagian ini mencoba menjelaskan mengapa kami membuat yang lain.
Kami melakukan banyak pekerjaan yang berkaitan dengan kekuatan dan kinerja, seperti mengukur latensi C-states menggunakan WULT, menjalankan berbagai beban kerja dan mengumpulkan daya dan statistik kinerja menggunakan statistik-collect. Kita sering perlu mengkonfigurasi berbagai aspek daya dan kinerja sistem, misalnya, mengaktifkan atau menonaktifkan c-states, membatasi CPU atau frekuensi yang tidak diputar, tweak fitur perangkat keras seperti penurunan pangkat C1, dan sebagainya.
Sebelum 'PEPC' dibuat, kami harus menggunakan banyak alat yang berbeda, seperti 'cpupower' atau 'lscpu', ingat jalur sysfs untuk berbagai tombol, jalan seperti itu untuk menonaktifkan c-state. Ini sulit dan rawan kesalahan. Itu juga tidak cukup fleksibel bagi kami. Misalnya, menonaktifkan C1 hanya untuk satu modul CPU adalah tugas yang sulit, karena seseorang harus terlebih dahulu mencari tahu apa angka CPU dalam modul itu, dan kemudian menonaktifkan C1 pada setiap CPU. Dan akhirnya, banyak fitur perangkat keras seperti penitipan C1 membutuhkan pengetahuan tentang register MSR dan nomor bit untuk beralih. 'WRMSR' dan 'RDMSR' adalah alat yang bermanfaat, tetapi mereka tidak cukup mudah untuk kita gunakan secara teratur.
Kami membuat 'PEPC' untuk membuat tugas konfigurasi daya dan kinerja lebih mudah. Dengan PEPC, kita tidak harus mengingat jalur SYSFS dan nomor MSR khusus platform (model register spesifik). Alat ini fleksibel, mendukung banyak model CPU, terstruktur dengan baik, dan juga menyediakan API Python untuk proyek Python lainnya untuk digunakan.
PEPC mendukung menemukan dan mengonfigurasi fitur -fitur berikut.
Beberapa fitur adalah perangkat keras-independen, tetapi ada yang khusus perangkat keras.
Catatan, sementara 'PEPC' tersedia melalui paket OS, mereka biasanya tidak memberikan versi terbaru. Gunakan metode instalasi "PIP" untuk mendapatkan versi 'PEPC' terbaru.
'PEPC' tersedia di Fedora 38 dan 39. Untuk menginstal 'PEPC', jalankan
sudo dnf install pepc
Paket Fedora dikelola oleh Ali Erdinç Köroğlu [email protected].
Dalam hal Fedora 37 atau lebih tua Fedora, gunakan metode instalasi 'PIP'. Tapi instal dependensi dengan berjalan
sudo dnf install -y rsync openssl-devel util-linux procps-ng
sudo dnf install -y python3-colorama python3-paramiko python3-argcomplete
'PEPC' tersedia untuk aliran CentOS 9 melalui repositori 'EPEL'. Berikut adalah cara menambahkan 'epel' dan menginstal 'pepc'.
sudo dnf install epel-release
sudo dnf install pepc
Paket EPEL dikelola oleh Ali Erdinç Köroğlu [email protected].
Kami tidak menyediakan paket Ubuntu/Debian, jadi Anda harus menggunakan metode instalasi 'PIP'. Instal dependensi berikut.
sudo apt install -y rsync libssl-dev util-linux procps python3 git
sudo apt install -y python3-pip python3-colorama python3-paramiko python3-argcomplete
Jalankan perintah berikut:
sudo pip3 install --upgrade git+https://github.com/intel/pepc.git@release
Perintah ini akan mengunduh 'pepc' dari cabang 'rilis' dari repositori git dan menginstalnya ke sistem.
Cara lain melakukan ini adalah dengan pertama -tama mengkloning repositori git dan berlari
git clone https://github.com/intel/pepc.git --branch release pepc
cd pepc
pip3 install --upgrade .
Catatan, 'PEPC' harus dijalankan dengan hak istimewa superuser (root) dalam banyak kasus, dan jika Anda menginstalnya dengan opsi '--user' dari 'PIP3', itu tidak akan berhasil "di luar kotak". Inilah sebabnya kami tidak merekomendasikan menggunakan '-Pengguna'.
Anda juga dapat membuat versi mandiri dari alat ini dengan mengkloning repositori dan menjalankan beberapa perintah. Di bawah ini adalah contoh. Anda mungkin ingin menyesuaikan shebang '#!/Usr/bin/python3' di dalamnya.
Pertama -tama, pastikan perintah di bawah ini mencetak "bagus". Ini memverifikasi bahwa versi '/usr/bin/python3' Anda lebih besar dari 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")'
Buat versi mandiri '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
Ini akan membuat file 'pepc.standalone', yang dapat Anda ganti dan salin di mana saja. Ini akan berfungsi sebagai program mandiri.
'PEPC' memiliki dukungan penyelesaian tab, tetapi ini hanya akan berfungsi jika Anda memiliki variabel lingkungan tertentu yang ditentukan. Perintah berikut akan melakukannya:
eval "$(register-python-argcomplete pepc)"
Anda dapat meletakkan baris ini ke file '.bashrc' Anda untuk memiliki penyelesaian tab 'PEPC' diaktifkan secara default.
$ 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
Batasi pengaturan ulang frekuensi CPU ke [1.5GHz, 2GHz] untuk semua CPU.
$ 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)
Verifikasi.
$ 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)
Kunci frekuensi CPU ke frekuensi dasar (HFM) untuk semua CPU dalam inti 0 dan 4 dari paket 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
Verifikasi.
$ 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
Buka frekuensi CPU pada semua 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)
Verifikasi.
$ 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)
Pertama, dapatkan nama gubernur saat ini dan daftar gubernur yang didukung.
$ 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
Beralih ke gubernur "kinerja".
$ pepc pstates config --governor performance
CPU frequency governor: set to 'performance' for CPUs 0-87 (all CPUs)
Verifikasi.
$ 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)
Nonaktifkan semua c-states tetapi jajak pendapat di semua 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)
Aktifkan semua c-states di semua CPU.
$ 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)
Nonaktifkan C1E dan C6 pada 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)
Dapatkan Paket C-State Batas Informasi.
$ 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
Karena paket C-state batas MSR tidak terkunci, kami dapat memodifikasi batasnya. Atur paket C-state yang diizinkan ke PC0 pada semua paket.
$ 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
Pertama, periksa situasi online/offline saat ini.
$ pepc cpu-hotplug info
The following CPUs are online: 0-87
No offline CPUs
Offline CPU 5,6,7,8 dan 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
Saudara inti adalah CPU dengan satu inti. Pada chip Intel, ada hyperthreads. Jika suatu sistem memiliki dua CPU (unit eksekusi, hyperthread) per inti, maka indeks saudara inti mereka adalah 0 dan 1. Untuk menonaktifkan hyperthreads, offline semua saudara inti dengan indeks 1.
$ pepc cpu-hotplug offline --cpus all --core-siblings 1
Petunjuk: Gunakan 'Info Topologi PEPC -Inti kolom, CPU' untuk mengetahui hubungan antara nomor inti dan CPU.
Pada sistem multi-soket ada beberapa paket CPU. Anda dapat offline semua CPU dari paket untuk secara efektif "menonaktifkan" itu. Inilah cara melakukannya untuk paket 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
Tabel memberikan ide tentang bagaimana CPU, Core, NUMA Node dan nomor paket terkait satu sama lain.
Beberapa fitur 'PEPC' (misalnya, '--pkg-cstate-limit') diimplementasikan hanya untuk platform Intel tertentu. Ini tidak berarti bahwa fitur ini tidak didukung oleh platform lain, itu hanya berarti bahwa kami memverifikasinya pada jumlah platform yang terbatas. Hanya untuk berada di sisi yang aman, kami menolak mengubah register MSR yang mendasarinya pada platform yang tidak kami verifikasi.
Jika 'PEPC' gagal dengan pesan seperti "fitur ini tidak didukung pada platform ini" untuk Anda, jangan ragu untuk menghubungi penulis dengan permintaan. Sangat sering berakhir dengan hanya menambahkan ID CPU ke daftar platform yang didukung, dan mungkin Anda dapat melakukannya sendiri dan mengirimkan permintaan tambalan/tarik.