PEPC ย่อมาจาก "Power, Energy และ Performance Configurator" นี่คือเครื่องมือบรรทัดคำสั่งสำหรับการกำหนดค่าคุณสมบัติการจัดการพลังงาน CPU
สำคัญ : นี่คือเครื่องมือสำหรับการดีบักและวัตถุประสงค์ในการวิจัยเท่านั้น ต้องใช้การอนุญาตรูทและจะต้องใช้ในสภาพแวดล้อมห้องปฏิบัติการที่แยกได้เท่านั้นไม่ใช่ในการผลิต
มีเครื่องมือ Linux มากมายสำหรับการกำหนดค่าการจัดการพลังงานใน Linux และส่วนย่อยนี้พยายามอธิบายว่าทำไมเราถึงสร้างอีกอันหนึ่ง
เรากำลังทำงานจำนวนมากที่เกี่ยวข้องกับพลังงานและประสิทธิภาพเช่นการวัดเวลาแฝงของ C-State โดยใช้ Wult การใช้งานเวิร์กโหลดที่หลากหลายและการรวบรวมสถิติพลังงานและประสิทธิภาพโดยใช้สถิติ เรามักจะต้องกำหนดค่าพลังงานและประสิทธิภาพที่หลากหลายของระบบตัวอย่างเช่นเปิดใช้งานหรือปิดใช้งาน C-states จำกัด CPU หรือความถี่ที่ไม่ได้รับการดูแลคุณลักษณะฮาร์ดแวร์ปรับแต่งเช่น Demotion C1 และอื่น ๆ
ก่อนที่ 'PEPC' จะถูกสร้างขึ้นเราต้องใช้เครื่องมือที่แตกต่างกันมากมายเช่น 'cpupower' หรือ 'LSCPU' จำเส้นทาง SYSFS สำหรับปุ่มต่างๆเช่นเส้นทางเพื่อปิดการใช้งาน C-State นี่เป็นเรื่องยากและผิดพลาดได้ง่าย มันก็ไม่ยืดหยุ่นพอสำหรับเรา ตัวอย่างเช่นการปิดการใช้งาน C1 สำหรับโมดูล CPU หนึ่งโมดูลเดียวเป็นงานที่ยากเพราะต้องคิดออกก่อนว่าหมายเลข CPU ในโมดูลนั้นคืออะไรและปิดการใช้งาน C1 ใน CPU ทุกตัว และในที่สุดคุณสมบัติฮาร์ดแวร์หลายอย่างเช่น Demotion C1 ต้องการความรู้เกี่ยวกับการลงทะเบียน MSR และหมายเลขบิตเพื่อสลับ 'WRMSR' และ 'RDMSR' เป็นเครื่องมือที่มีประโยชน์ แต่ก็ไม่ง่ายพอที่เราจะใช้เป็นประจำ
เราสร้าง 'PEPC' เพื่อให้งานการกำหนดค่าพลังงานและประสิทธิภาพง่ายขึ้น ด้วย PEPC เราไม่จำเป็นต้องจำเส้นทาง SYSFS และหมายเลข MSR เฉพาะแพลตฟอร์ม (การลงทะเบียนเฉพาะรุ่น) เครื่องมือนี้มีความยืดหยุ่นรองรับ CPU หลายรุ่นโครงสร้างที่ดีและยังให้ Python API สำหรับโครงการ Python อื่น ๆ ที่จะใช้
PEPC รองรับการค้นพบและกำหนดค่าคุณสมบัติต่อไปนี้
คุณสมบัติบางอย่างเป็นฮาร์ดแวร์ที่ไม่ขึ้นกับฮาร์ดแวร์ แต่บางอย่างเป็นฮาร์ดแวร์เฉพาะ
หมายเหตุในขณะที่ 'PEPC' มีให้บริการผ่านแพ็คเกจ OS แต่โดยทั่วไปแล้วพวกเขาจะไม่ให้เวอร์ชันล่าสุด ใช้วิธีการติดตั้ง "PIP" เพื่อรับเวอร์ชัน 'PEPC' ล่าสุด
'PEPC' มีให้บริการบน Fedora 38 และ 39 เพื่อติดตั้ง 'PEPC', Run
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' มีให้สำหรับสตรีม CentOS 9 ผ่านที่เก็บ 'Epel' นี่คือวิธีเพิ่ม 'Epel' และติดตั้ง 'PEPC'
sudo dnf install epel-release
sudo dnf install pepc
แพ็คเกจ Epel ได้รับการดูแลโดย Ali ErdinçKöroğlu [email protected]
เราไม่ได้จัดเตรียมแพ็คเกจ Ubuntu/Debian ดังนั้นคุณจะต้องใช้วิธีการติดตั้ง '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
คำสั่งนี้จะดาวน์โหลด 'PEPC' จากสาขา 'รีลีส' ของที่เก็บ Git และติดตั้งไว้ในระบบ
อีกวิธีหนึ่งในการทำเช่นนี้คือการโคลนที่เก็บ Git และวิ่งเป็นครั้งแรก
git clone https://github.com/intel/pepc.git --branch release pepc
cd pepc
pip3 install --upgrade .
หมายเหตุ 'PEPC' จะต้องทำงานด้วยสิทธิพิเศษ superuser (root) ในหลายกรณีและถ้าคุณติดตั้งด้วยตัวเลือก '-USER' ของ 'PIP3' มันจะไม่ทำงาน "ออกจากกล่อง" นี่คือเหตุผลที่เราไม่แนะนำให้ใช้ '-ผู้ใช้'
นอกจากนี้คุณยังสามารถสร้างเครื่องมือนี้แบบสแตนด์อโลนได้โดยการโคลนนิ่งที่เก็บและเรียกใช้คำสั่งสองสามคำสั่ง ด้านล่างเป็นตัวอย่าง คุณอาจต้องการปรับ '#!/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)"
คุณสามารถวางบรรทัดนี้ไปยังไฟล์ '.bashrc' ของคุณเพื่อให้แท็บ 'PEPC' เสร็จสมบูรณ์โดยค่าเริ่มต้น
$ 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 จัดเรียงใหม่เป็น [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)
ล็อคความถี่ CPU ไปยังความถี่ฐาน (HFM) สำหรับซีพียูทั้งหมดในคอร์ 0 และ 4 ของแพ็คเกจ 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
ตรวจสอบ
$ 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)
ปิดการใช้งาน 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 ทั้งหมดในซีพียูทั้งหมด
$ 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)
ปิดการใช้งาน C1E และ C6 บนแพ็คเกจ 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)
รับข้อมูลขีด จำกัด ของแพ็คเกจ C-State
$ 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
เนื่องจาก Package C-State Limit 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
พี่น้องหลักคือซีพียูกับหนึ่งแกน บนชิป Intel มี hyperthreads หากระบบมีซีพียูสองตัว (หน่วยดำเนินการ, hyperthreads) ต่อแกน, ดัชนีพี่น้องหลักของพวกเขาคือ 0 และ 1. เพื่อปิดการใช้งาน hyperthreads, ออฟไลน์พี่น้องหลักทั้งหมดด้วยดัชนี 1
$ pepc cpu-hotplug offline --cpus all --core-siblings 1
คำแนะนำ: ใช้ 'PEPC Topology Info -Columns Core, CPU' เพื่อหาความสัมพันธ์ระหว่างหมายเลข CORE และ 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, Core, NUMA Node และหมายเลขแพ็คเกจเกี่ยวข้องกันอย่างไร
คุณสมบัติ 'PEPC' บางอย่าง (เช่น '-PKG-CSTATE-LIMIT') จะถูกนำมาใช้เฉพาะสำหรับแพลตฟอร์ม Intel บางอย่างเท่านั้น นี่ไม่ได้หมายความว่าฟีเจอร์นี้ไม่ได้รับการสนับสนุนโดยแพลตฟอร์มอื่น ๆ นั่นหมายความว่าเราตรวจสอบในแพลตฟอร์มจำนวน จำกัด เพื่อให้อยู่ในด้านที่ปลอดภัยเราปฏิเสธที่จะเปลี่ยนการลงทะเบียน MSR พื้นฐานบนแพลตฟอร์มที่เราไม่ได้ตรวจสอบ
หาก 'PEPC' ล้มเหลวด้วยข้อความเช่น "คุณสมบัตินี้ไม่รองรับบนแพลตฟอร์มนี้" สำหรับคุณอย่าลังเลที่จะติดต่อผู้เขียนด้วยคำขอ บ่อยครั้งที่มันจบลงด้วยการเพิ่ม CPU ID ลงในรายการแพลตฟอร์มที่รองรับและอาจเป็นไปได้ว่าคุณสามารถทำได้ด้วยตัวเองและส่งคำขอแพทช์/ดึง