Вопрос или проблема
У меня есть ПК, превращенный в домашний сервер, который я использую для запуска самохостинговых сборок для Azure Pipeline. У меня есть 3 агента сборки, работающие на одном ПК. ПК/сервер имеет процессор Intel i7-12700f с 8 P ядрами и 4 E ядрами. Когда я запускаю несколько задач Pipeline, все 4 E ядра загружаются на полную мощность, но P ядра остаются неактивными.
Чтобы создать сервисы, я просто запускаю run.cmd, загруженный из Azure.
Если я отключу E ядра в BIOS, сервисы будут использовать 8 P ядер. Но в этом случае потребление энергии ПК увеличивается, и я не хочу ненужным образом потреблять энергию и выделять CO2.
Я пытался установить “Выбрать, как распределять ресурсы процессора” (в Настройках, Система, О системе. Системная информация. Расширенные системные настройки. Вкладка “Дополнительно”) на Фоновая служба, но это не оказало никакого влияния на распределение ядер.
План электропитания Windows сбалансированный, и я не хочу менять его на Высокую производительность, потому что этот ПК не работает 99% времени.
Как заставить эти три сервиса использовать только P ядра и при этом сохранить E ядра активными?
Ответ или решение
Запуск служб Windows на P-ядрах Intel: запрос, ответ и решение
Введение
Ваша текущая задача заключается в оптимизации работы служб Windows на вашем сервере домашнего ПК с процессором Intel i7-12700f. Этот процессор имеет 8 производительных (P) ядер и 4 эффективных (E) ядра, и вы столкнулись с проблемой: E-ядра перегружены, тогда как P-ядра остаются неактивными. Настройка распределения нагрузки между ядрами CPU — это важная задача для повышения производительности и снижения углекислого газа, что соответствует вашим экологическим принципам.
Проблема
Вы заметили, что при запуске нескольких агентов сборки Azure E-ядра сильно загружены, в то время как P-ядра остаются неиспользованными. Вы отключили E-ядра в BIOS, и это решило проблему, однако это привело к увеличению потребления электроэнергии, что нежелательно. Параметры управления ресурсами процессора в Windows и выбранный план питания "Сбалансированный" не привели к нужному результату.
Решение
Чтобы наладить эффективную работу служб на P-ядрах, одновременно оставляя E-ядра активными, воспользуйтесь следующими методами:
-
Установка приоритетов процессов:
Вы можете задать более высокий приоритет для процессов, связанных с вашими службами. Откройте диспетчер задач (Ctrl+Shift+Esc), найдите вашу службу, щелкните правой кнопкой мыши, выберите "Установить приоритет" и выберите "Высокий". Это увеличит вероятность того, что Windows выделит для этих процессов P-ядра. -
Использование
PowerShell
для управления процессами:
Если вы предпочитаете автоматизацию, создайте скрипт PowerShell для задания привязки процессов к определенным ядрам. Используйте командуStart-Process
, чтобы запустить службы с привязкой к ядрам. Вот как это можно сделать:$process = Start-Process "C:\path\to\your\service.exe" -ArgumentList "your arguments" -PassThru $parentId = $process.Id $affinity = [int64] 255 # Устанавливаем маску для P-ядер (например, 11111111) (Get-WmiObject Win32_Process | Where-Object {$_.ProcessId -eq $parentId}).SetProcessorAffinity($affinity)
-
Тонкая настройка планов питания:
Хотя вы используете сбалансированный план, настройте его для более активного использования P-ядр, оптимизировав параметры производительности для вашего приложения. Настройте план питания, избегая излишней производительности, когда система не загружена, и активируйте ресурсы P-ядр при выполнении задач. -
Управление через BIOS и ОС:
Проверьте настройки BIOS. Некоторые материнки позволяют настраивать, какие ядра могут быть использованы в определенных режимах. Убедитесь, что нет ограничений на использование P-ядр. Вдобавок изучите возможность настройки управляемых приоритетов на уровне ОС. -
Мониторинг производительности:
Используйте инструменты мониторинга, такие как Windows Performance Monitor и Resource Monitor, для отслеживания использования ядер в реальном времени. Это позволит вам понять, как система распределяет задачи и при необходимости корректировать подход.
Заключение
Необходимо тщательно анализировать и настраивать использование ресурсов для достижения оптимальной производительности, избегая избыточного потребления энергии. Комбинация приоритетов процессов, использование PowerShell, адаптация настроек BIOS и тонкая настройка планов питания позволит вам эффективно управлять использованием P-ядр на вашем сервере при одновременной работе E-ядр. Эти шаги помогут вам соблюсти баланс между производительностью разработки и экологической ответственностью.