Эффекты программного включения «Эффективного режима» для служб в Windows 11?

Предположим, есть служба, которая очень загружена днем, но обычно простаивает ночью.

В настоящее время Диспетчер задач показывает Режим эффективности не включен

Однако при применении приведенных ниже изменений кода диспетчер задач показывает Efficiency mode включенным

Он достигает этого режима, применяя эти методы

  • Во-первых, Efficiency mode снижает приоритет фонового процесса. задач, чтобы Windows не выделяла важные ресурсы для этих Программы.
  • Во-вторых, он развертывает что-то под названием EcoQoS, которое является Качеством Пакет услуг, снижающий тактовую частоту для эффективных задач.

Чтобы значок Efficiency mode появился в диспетчере задач, необходимы как минимум эти два (методом проб и ошибок):

  1. Установите класс приоритета процесса на IDLE_PRIORITY_CLASS.
  2. Уменьшите мощность процессора с помощью PROCESS_POWER_THROTTLING_EXECUTION_SPEED.

#include <windows.h>

// Sets the process priority to IDLE_PRIORITY_CLASS.
void set_process_priority()
{
    SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
}

// Enables EcoQos to reduce the clock speed.
void enable_ecoqos()
{
    PROCESS_POWER_THROTTLING_STATE PowerThrottling = { 0 };
    PowerThrottling.Version = PROCESS_POWER_THROTTLING_CURRENT_VERSION;
    PowerThrottling.ControlMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED;
    PowerThrottling.StateMask = PROCESS_POWER_THROTTLING_EXECUTION_SPEED;

    SetProcessInformation(GetCurrentProcess(), ProcessPowerThrottling, &PowerThrottling, sizeof(PowerThrottling));
}

int main(int argc, char* argv[])
{
    set_process_priority();
    enable_ecoqos();

    // Process is now running in Efficiency mode...

    return 0;
}

Вопрос

Не приведет ли включение Efficiency mode к снижению производительности в течение дня, когда служба очень загружена? (Попытка снизить затраты на использование ЦП/памяти и сделать его более дружественным к «зеленому» программному обеспечению).

Существуют ли другие варианты эффективности, которые можно было бы включить для улучшения общего Efficiency mode?

Вы задали этот вопрос вчера, затем, поскольку не получили ответа, удалили его и отправили снова. Не делай это.

0___________ 08.01.2023 17:45

Бездействующий процесс (GetMessage, WaitFor... и т. д.) не использует ЦП, поэтому присвоение ему более низкого приоритета ничего не изменит.

Anders 09.01.2023 06:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку режим эффективности сокращает ресурсы, выделяемые службе, и снижает ее приоритет по отношению к другим запущенным службам, переключение процесса в режим эффективности, вероятно, снизит его общую производительность.

Важно это или нет, зависит от многих факторов. Однако если служба хорошо спроектирована, она все равно должна работать адекватно. Операционная система обычно отдает предпочтение службам, пользующимся повышенным спросом.

Смысл сокращения ресурсов заключается не в повышении производительности (для тех процессов, которые имеют более высокий приоритет); это чтобы система оставалась отзывчивой. Для фонового процесса нет особого смысла потреблять большое количество ресурсов, если он проводит большую часть своего времени в режиме ожидания.

Однажды я работал в компании, у которой был сервер, который опрашивал конечную точку SQL Server десять раз в секунду. Как вы понимаете, это пустая трата времени, если сервер простаивает большую часть дня и выполняет основную часть своей работы ночью. Я изменил код так, чтобы после шести секунд бездействия он уменьшал интервал опроса до одного раза в секунду. После еще одной минуты бездействия он сократил опрос до одного раза в минуту. Если опрос производил запрос активности, интервал снова увеличивался до 10 в секунду.

Это привело к устранению большей части расточительной деятельности, но при этом заставило сервер реагировать в часы пик.

Служба работает практически в своем собственном контейнере. Не так много других конкурирует с ним, поэтому, возможно, производительность может немного снизиться, но в целом все еще будет достаточно отзывчивой. Спасибо за идеи, надо будет стресс-тестировать.

vengy 08.01.2023 18:02

Другие вопросы по теме