=== Совместное управление производительностью процессоров (CPPC) Контакт: ShengYi Hung + Контакт: Olivier Certner Совместное управление производительностью процессоров (Collaborative Processor Performance Control, CPPC) — это стандарт, представленный ACPI, позволяющий операционной системе управлять производительностью и, соответственно, эффективностью процессоров благодаря абстрактной шкале производительности, в общем случае не коррелирующей с простыми уровнями частоты и обеспечивающей более тонкую настройку, чем они. Intel и AMD уже несколько лет предоставляют реализации процессоров с поддержкой ACPI CPPC. FreeBSD поддерживала включение CPPC, но только для процессоров Intel и позволяла управлять полезным, но очень ограниченным подмножеством его функциональности благодаря драйверу man:hwpstate_intel[4], добавленному в 2020 году. Автономный выбор целевой производительности аппаратным обеспечением в зависимости от рабочей нагрузки принудительно включён, и только основной соответствующий аппаратный параметр, называемый Efficiency/Performance Preference (EPP), доступен администратору через параметр man:sysctl[8]. Мы добавили поддержку реализации CPPC от AMD в существующий драйвер man:hwpstate_amd[4], который, в отличие от man:hwpstate_intel[4], до сих пор управлял только «обычными» P-состояниями. Драйвер предоставляет 4 параметра man:sysctl[8]: минимальная производительность, максимальная производительность, желаемая производительность и EPP. Минимальная, максимальная и желаемая производительность — это значения от 0 до 255, но в зависимости от аппаратного обеспечения эффект может иметь только поддиапазон. Начальные значения минимальной и максимальной производительности устанавливаются равными границам эффективного поддиапазона в соответствии с указаниями платформы (если они доступны). Управление EPP служит для выражения предпочтения в сторону эффективности или производительности и представляет собой значение от 0 (максимальное предпочтение производительности) до 255 (максимальное предпочтение эффективности). Желаемая производительность может быть установлена на любое значение между минимальной и максимальной производительностью или на специальное значение 0 для включения аппаратного автономного выбора целевой производительности в зависимости от текущей рабочей нагрузки. Управление минимальной производительностью, максимальной производительностью и EPP применяется независимо от того, включён ли автономный выбор или указана конкретная желаемая производительность. Обратите внимание, что эффект каждой комбинации этих значений зависит от модели процессора, и мы уже смогли наблюдать сильно различающееся поведение на нескольких из них. Поэтому ожидайте, что вам придётся экспериментировать, чтобы найти значения, подходящие для ваших сценариев использования на конкретной машине. man:hwpstate_amd[4] включён в ядро `GENERIC` (через man:cpufreq[4]) и использует CPPC, если процессоры поддерживают его, если только явно не указано иное (через параметр `machdep.hwpstate_amd_cppc_enable`). Следовательно, чтобы избежать регрессии производительности, на данный момент мы решили установить вышеупомянутые параметры управления на максимальную производительность, так как это поведение по умолчанию для традиционной поддержки P-состояний, а также для любого другого драйвера man:cpufreq[4], за исключением man:hwpstate_intel[4] (который в настоящее время принудительно включает аппаратный автономный выбор и устанавливает EPP по умолчанию в `0x80` (50%)). Это может быть пересмотрено позже, в зависимости от того, сможем ли мы надёжно определить, является ли работающий компьютер ноутбуком. Следующие шаги: 1. Изменить man:hwpstate_intel[4], чтобы он соответствовал поддержке CPPC от man:hwpstate_amd[4] с точки зрения функциональности и поведения по умолчанию. Это включает: - Улучшенную обработку ошибок и вывод отладочной информации - Предоставление параметров для всех вышеупомянутых элементов управления - Изменение шкалы EPP (с процентов на 8-битное значение) - Изменение значений по умолчанию 2. Написать справочную страницу для man:hwpstate_amd[4] (тем временем объяснений здесь и встроенной документации параметров man:sysctl[8] должно быть достаточно). 3. Обучить man:powerd[8] параметрам управления CPPC и некоторым простым политикам их установки. 4. Обучить man:cpufreq[4] абстрактным значениям производительности, чтобы предоставить унифицированный интерфейс для их получения или установки. 5. Реализовать в man:cpufreq[4] поддержку настроек на каждый процессор. 6. Выбирать значения управляющих параметров по умолчанию на основе типа платформы (вероятно, из поля `Preferred_PM_Profile` ACPI ``FADT``). 7. Возможно, переместить политики man:powerd[8] в пространство ядра. Спонсор: Фонд FreeBSD // // The FreeBSD Russian Documentation Project // // Original EN revision (18.04.2026): 0771c0223246c9d535601c99a435a3f7199a6c45 //