PEPC означает «Конфигуратор энергии, энергии и производительности». Это инструмент командной строки для настройки функций управления питанием ЦП.
Важно : это инструмент только для целей отладки и исследований. Это требует корневых разрешений и должно использоваться только в изолированной лабораторной среде, а не в производстве.
Существует много инструментов Linux для настройки управления питанием в Linux, и этот подраздел пытается объяснить, почему мы создали еще одну.
Мы выполняем много работы, связанных с мощностью и производительностью, такой как измерение задержки C-государства с использованием WULT, запуск различных рабочих нагрузок и сборы статистики мощности и производительности с использованием статистических собраний. Нам часто необходимо настроить различные аспекты мощности и производительности системы, например, включение или отключение C-государства, ограничить частоту процессора или отключения, настраивать аппаратные функции, такие как поведение C1 и так далее.
До создания «PEPC» нам пришлось использовать множество различных инструментов, таких как «Cpupower» или «LSCPU», запомните пути SYSFS для различных ручек, такой путь к отключению C-состояния. Это было сложно и подвержено ошибкам. Это также не было достаточно гибким для нас. Например, отключение C1 только для одного модуля процессора была сложной задачей, потому что нужно сначала выяснить, какие числа ЦП в этом модуле, а затем отключить С1 на каждом процессоре. И, наконец, многие аппаратные функции, такие как понижение C1, требуют знаний о регистрации MSR и количестве битов для переключения. «WRMSR» и «rdmsr» - это полезные инструменты, но они были недостаточно просты для того, чтобы мы могли бы использовать на регулярной основе.
Мы создали «PEPC», чтобы упростить задачи конфигурации питания и производительности. С помощью PEPC нам не нужно помнить, что пути SYSFS и номера MSR (специфические регистры модели), специфичные для платформы. Инструмент гибкий, поддерживает многие модели ЦП, хорошо структурированные, а также предоставляет Python API для других проектов Python для использования.
PEPC поддерживает обнаружение и настройку следующих функций.
Некоторые из функций зависят от аппаратного обеспечения, но некоторые из них специфичны для оборудования.
Обратите внимание, что в то время как «PEPC» доступен через пакеты ОС, они обычно не предоставляют последнюю версию. Используйте метод установки «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» доступен для потока CentOS 9 через репозиторий «EPEL». Вот как добавить «epel» и установить «Pepc».
sudo dnf install epel-release
sudo dnf install pepc
Пакеты Epel поддерживаются Али Эрдинч Кёроглу Али[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» должен запускать с привилегиями суперпользователя (корень) во многих случаях, и если вы установите его с опцией «-пользователя» «PIP3», он не будет работать «из коробки». Вот почему мы не рекомендуем использовать '-user'.
Вы также можете создать автономную версию этого инструмента, клонируя репозиторий и запустив пару команд. Ниже приведен пример. Вы можете настроить «#!/Usr/bin/python3» Шебанг.
Прежде всего, убедитесь, что команда ниже напечатает «хорошо». Он проверяет, что ваша версия '/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
Ограничьте частоту процессора перестраиваться до [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
Поскольку пакет 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
Офлайн -процессоры 5,6,7,8 и процессор 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 есть гиперподборы. Если у системы есть два процессора (единицы выполнения, гиперподрыки) на ядро, то их основные индексы братьев и сестры составляют 0 и 1. Чтобы отключить гипертерели, автономные все ядро сестер с индексом 1.
$ pepc cpu-hotplug offline --cpus all --core-siblings 1
Подсказка: используйте «Информация о топологии PEPC -COLUNMS CORE», CPU », чтобы выяснить связь между номерами 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
В таблице дается представление о том, как ЦП, ядро, узлы NUMA и номера пакетов связаны друг с другом.
Некоторые функции «PEPC» (например, «-PKG-CSTATE-Limit») реализованы только для определенных платформ Intel. Это не обязательно означает, что эта функция не поддерживается другими платформами, это означает только то, что мы проверили ее на ограниченном количестве платформ. Просто чтобы быть на безопасной стороне, мы отказываемся изменять базовые регистры MSR на платформах, которые мы не проверили.
Если «PEPC» не удается с таким сообщением, как «Эта функция не поддерживается на этой платформе» для вас, не стесняйтесь обращаться к авторам с запросом. Очень часто заканчивается просто добавлением идентификатора процессора в список поддерживаемых платформ, и, возможно, вы можете сделать это самостоятельно и отправить запрос на патч/вывод.