تعني PEPC "الطاقة والطاقة والمكون الأداء". هذه أداة سطر الأوامر لتكوين ميزات إدارة طاقة وحدة المعالجة المركزية.
المهم : هذه الأداة هي لأغراض التصحيح والأبحاث فقط. يتطلب أذونات الجذر ، ويجب استخدامه فقط في بيئة مختبر معزولة ، وليس في الإنتاج.
هناك العديد من أدوات Linux لتكوين إدارة الطاقة في Linux ، ويحاول هذا القسم الفرعي شرح سبب إنشائنا مجموعة أخرى.
نحن نقوم بالكثير من العمل المتعلق بالطاقة والأداء ، مثل قياس زمن استجابة C-States باستخدام Wult ، وتشغيل أعباء العمل المختلفة وجمع إحصائيات الطاقة والأداء باستخدام إحصائيات التجميع. غالبًا ما نحتاج إلى تكوين جوانب مختلفة من الطاقة والأداء للنظام ، على سبيل المثال ، تمكين أو تعطيل الدول C ، والحد من وحدة المعالجة المركزية أو التردد UNC ، وميزات تعديل الأجهزة مثل تخفيض C1 ، وما إلى ذلك.
قبل إنشاء "PEPC" ، كان علينا استخدام العديد من الأدوات المختلفة ، مثل "Cpupower" أو "LSCPU" ، تذكر مسارات SYSFS لمقابض مختلفة ، مثل هذا الطريق لتعطيل الحالة C. كان هذا صعبًا ومعرضًا للخطأ. كما أنه لم يكن مرنًا بما يكفي بالنسبة لنا. على سبيل المثال ، كان تعطيل C1 فقط لوحدة وحدة المعالجة المركزية واحدة مهمة صعبة ، لأنه يتعين على المرء أولاً معرفة أرقام وحدة المعالجة المركزية في تلك الوحدة ، ثم تعطيل C1 على كل وحدة المعالجة المركزية. وأخيراً ، تتطلب العديد من ميزات الأجهزة مثل C1 Demotion معرفة سجل MSR ورقم البت للتبديل. تعد "WRMSR" و "RDMSR" أدوات مفيدة ، لكنها لم تكن سهلة بما يكفي لاستخدامها بشكل منتظم.
لقد أنشأنا "PEPC" لجعل مهام تكوين الطاقة والأداء أسهل. مع PEPC ، ليس علينا أن نتذكر مسارات SYSFS وأرقام MSR الخاصة بالمنصة (سجل محدد النموذج). الأداة مرنة ، ويدعم العديد من نماذج وحدة المعالجة المركزية ، ومنظمة جيدة ، وتوفر أيضًا Python API لمشاريع بيثون الأخرى لاستخدامها.
تدعم PEPC اكتشاف الميزات التالية وتكوينها.
بعض الميزات مستقلة عن الأجهزة ، ولكن بعضها خاص بالأجهزة.
ملاحظة ، في حين أن "PEPC" متاح عبر حزم نظام التشغيل ، فإنها عادة لا تقدم أحدث إصدار. استخدم طريقة تثبيت "PIP" للحصول على أحدث إصدار "PEPC".
"PEPC" متاح على Fedora 38 و 39. لتثبيت "PEPC" ، تشغيل
sudo dnf install pepc
يتم الحفاظ على حزم Fedora من قبل علي إردينس Köroğlu [email protected].
في حالة Fedora 37 أو فيدورا الأقدم ، استخدم طريقة تثبيت "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 من قبل علي إردينا كودوğ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 (الجذر) في كثير من الحالات ، وإذا قمت بتثبيته مع خيار "-المستخدم" لـ "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" على دعم إكمال TAB ، ولكن هذا لن يعمل إلا إذا كان لديك بعض متغيرات البيئة المحددة. الأمر التالي سيفعل ذلك:
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
الحد من تردد وحدة المعالجة المركزية إعادة ترتيب [1.5 جيجا هرتز ، 2 جيجا هرتز] لجميع وحدات المعالجة المركزية.
$ 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)
قفل تردد وحدة المعالجة المركزية لتردد الأساس (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
فتح تردد وحدة المعالجة المركزية على جميع وحدات المعالجة المركزية.
$ 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 ولكن استطلاع على جميع وحدات المعالجة المركزية.
$ 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)
تمكين جميع الدول 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)
تعطيل 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.
$ 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
نظرًا لأن حزمة الحد الأقصى للحزمة 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
وحدات المعالجة المركزية غير متصلة بالإنترنت 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. إذا كان لدى النظام اثنين من وحدات CPU (وحدتي التنفيذ ، HyperThreads) لكل قلب ، فإن مؤشرات الأخوة الأساسية الخاصة بهم هي 0 و 1. لتعطيل Hyperthreads ، في وضع عدم الاتصال بجميع الأشقاء الأساسيين مع الفهرس 1.
$ pepc cpu-hotplug offline --cpus all --core-siblings 1
تلميح: استخدم "معلومات طوبولوجيا PEPC -COREMS CORE ، وحدة المعالجة المركزية" لمعرفة العلاقة بين أرقام CORE و 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
يعطي الجدول فكرة عن كيفية ارتباط أرقام وحدة المعالجة المركزية ، Core ، Noda Node و Package ببعضها البعض.
يتم تنفيذ بعض ميزات "PEPC" (على سبيل المثال ، "-PKG-CSTATE-LIMIT") فقط لبعض منصات Intel. هذا لا يعني بالضرورة أن الميزة لا تدعمها منصات أخرى ، فهذا يعني فقط أننا تحققنا من ذلك على كمية محدودة من المنصات. لنكون على جانب آمن ، نرفض تغيير سجلات MSR الأساسية على المنصات التي لم نتحقق منها.
إذا فشلت "PEPC" برسالة مثل "هذه الميزة غير مدعومة على هذا النظام الأساسي" ، فلا تتردد في الاتصال بالمؤلفين مع طلب. في كثير من الأحيان ينتهي الأمر فقط بإضافة معرف وحدة المعالجة المركزية إلى قائمة المنصات المدعومة ، وقد يمكنك القيام بذلك بنفسك وتقديم طلب تصحيح/سحب.