• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

Windows Парковка ядер процессора

Phoenix

Активный пользователь
Сообщения
2,093
Симпатии
2,041
#1
Одним из проблемных моментов современных многоядерных процессоров является их энергопотребление, для минимизации которого производители процессоров используют свои аппаратные технологии. Кроме того, производители процессоров дают рекомендации разработчикам операционных систем, за счет чего можно дополнительно снизить энергопотребление. При разработке Windows 7 и Windows 2008 R2 компания Microsoft прислушалась к таким рекомендациям от Intel.

Как известно, при работе на многоядерных процессорах, операционная система производит ротацию потоков между ядрами. Другими словами, переносит поток с более загруженных на менее загруженные ядра, что обеспечивает равномерную загрузку всех ядер системы. Но такая постоянная ротация приводит к потере производительности и повышению энергопотребления. Чтобы изменить ситуацию в Windows 7 и Windows 2008 R2, была реализована функция "идеального ядра", которая оставляет выполнение процесса на том ядре, на котором он начался, до полного его завершения. Такой подход позволяет получить более отзывчивую систему. Кроме того, с подходом "идеального ядра", была реализована функция "парковка ядер", позволяющая переносить все задачи на одно ядро, а остальные переводить в бездействие, если это позволяет уровень основной нагрузки. Соответственно, совместная работа двух функций позволяет минимизировать число использования ядер в режиме бездействия, что в свою очередь приведет к снижению энергопотребления и получению более отзывчивой системы.



Core Parking в конфигурации с минимальным энергопотреблением.



Работа Core Parking при возрастании вычислительной нагрузки.

Для отображения параметров парковки ядра в графическом интерфейсе панели управления необходимо импортировать в реестр следующие значения:

Код:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\0cc5b647-c1df-4637-891a-dec35c318583]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\3b04d4fd-1cc7-4f23-ab1c-d1337819c4bb]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\5d76a2ca-e8c0-402f-a133-2158492d58ad]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\a55612aa-f624-42c6-a443-7397d064c04f]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\ea062031-0e34-4ff1-9b6d-eb1059334028]
"Attributes"=dword:00000000
После этого перейти в Панель управления -> Электропитание -> Настройка плана электропитания -> Изменить дополнительные параметры питания -> Управлением питания процессора и выставить следующие значения параметров:



  • В Минимальное число ядер в состоянии простоя (Processor performance core parking min cores) - Установить 25% для четырех ядерного процессора - или 50% для двух ядерного процессора.
  • В Разрешить состояния снижения питания (Allow Throttle States) – Включить.
  • В Отключение простоя процессора (Processor idle disable) - Включить состояние простоя.
  • В Переопределение ядра приостановки ядра производительности процессора (Processor performance core parking core override) – Отключено.
  • В Максимальное число ядер в состоянии простоя (Processor performance core parking max cores) - Установить 75% для четырех ядерного процессора или 50% для двух ядерного процессора.
Вызвав Монитор ресурсов через Диспетчер задач, на вкладке ЦП можно будет увидеть, что часть ядер припаркована.


Парковка ядер многоядерных процессоров в Windows 7
 

Вложения

Последнее редактирование:

Phoenix

Активный пользователь
Сообщения
2,093
Симпатии
2,041
#2
Код:
Windows Registry Editor Version 5.00
; добавляет в электр.питания управл.процессором пункт время увеличения занятости ядер производительности процессора
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\2ddd5a84-5a71-437e-912a-db0b8c788732]
"Description"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
5c,00,70,00,6f,00,77,00,72,00,70,00,72,00,6f,00,66,00,2e,00,64,00,6c,00,6c,\
00,2c,00,2d,00,37,00,36,00,38,00,2c,00,53,00,70,00,65,00,63,00,69,00,66,00,\
79,00,20,00,74,00,68,00,65,00,20,00,6d,00,69,00,6e,00,69,00,6d,00,75,00,6d,\
00,20,00,6e,00,75,00,6d,00,62,00,65,00,72,00,20,00,6f,00,66,00,20,00,70,00,\
65,00,72,00,66,00,20,00,63,00,68,00,65,00,63,00,6b,00,20,00,69,00,6e,00,74,\
00,65,00,72,00,76,00,61,00,6c,00,73,00,20,00,74,00,68,00,61,00,74,00,20,00,\
6d,00,75,00,73,00,74,00,20,00,65,00,6c,00,61,00,70,00,73,00,65,00,20,00,62,\
00,65,00,66,00,6f,00,72,00,65,00,20,00,6d,00,6f,00,72,00,65,00,20,00,63,00,\
6f,00,72,00,65,00,73,00,2f,00,70,00,61,00,63,00,6b,00,61,00,67,00,65,00,73,\
00,20,00,63,00,61,00,6e,00,20,00,62,00,65,00,20,00,75,00,6e,00,70,00,61,00,\
72,00,6b,00,65,00,64,00,2e,00,00,00
"FriendlyName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
5c,00,70,00,6f,00,77,00,72,00,70,00,72,00,6f,00,66,00,2e,00,64,00,6c,00,6c,\
00,2c,00,2d,00,37,00,36,00,39,00,2c,00,50,00,72,00,6f,00,63,00,65,00,73,00,\
73,00,6f,00,72,00,20,00,70,00,65,00,72,00,66,00,6f,00,72,00,6d,00,61,00,6e,\
00,63,00,65,00,20,00,63,00,6f,00,72,00,65,00,20,00,70,00,61,00,72,00,6b,00,\
69,00,6e,00,67,00,20,00,69,00,6e,00,63,00,72,00,65,00,61,00,73,00,65,00,20,\
00,74,00,69,00,6d,00,65,00,00,00
"ValueMin"=dword:00000001
"ValueMax"=dword:00000064
"ValueIncrement"=dword:00000001
"ValueUnits"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,\
00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,\
5c,00,70,00,6f,00,77,00,72,00,70,00,72,00,6f,00,66,00,2e,00,64,00,6c,00,6c,\
00,2c,00,2d,00,37,00,31,00,38,00,2c,00,54,00,69,00,6d,00,65,00,20,00,63,00,\
68,00,65,00,63,00,6b,00,20,00,69,00,6e,00,74,00,65,00,72,00,76,00,61,00,6c,\
00,73,00,00,00
"Attributes"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\2ddd5a84-5a71-437e-912a-db0b8c788732\DefaultPowerSchemeValues]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\2ddd5a84-5a71-437e-912a-db0b8c788732\DefaultPowerSchemeValues\381b4222-f694-41f0-9685-ff5bb260df2e]
"AcSettingIndex"=dword:00000003
"DcSettingIndex"=dword:00000003

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\2ddd5a84-5a71-437e-912a-db0b8c788732\DefaultPowerSchemeValues\8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c]
"AcSettingIndex"=dword:00000007
"DcSettingIndex"=dword:00000007

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\2ddd5a84-5a71-437e-912a-db0b8c788732\DefaultPowerSchemeValues\a1841308-3541-4fab-bc81-f71556f20b4a]
"AcSettingIndex"=dword:00000001
"DcSettingIndex"=dword:00000001
Добро пожаловать на сайт команды WST! • Просмотр темы - Полезные советы при работе с Windows 8
 

Вложения

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,593
Симпатии
5,446
#3
А ещё можно залочить почти любой (уже запущенный) процесс для работы только на конкретном(ых) процессорах.
Вручную это делается через Диспетчер задач -> Процессы -> Правый клик -> Задать соответствие ...)

TaskM_manual_1.png TaskM_manual_2.png

А если автоматически, то можно воспользоваться моей программой Affinity

Affinity v.1.0 (Автор: Dragokas)
Задание маски сходства процесса с процессорами в многоядерных системах.
Другими словами: можно распределять нагрузку на конкретные процессоры для определенного процесса.

Реализация в 2 вариантах C++:
1) с меню
2) с поддержкой аргументов командной строки.

Синтаксис командной строки:
Код:
Affinity.exe [Process ID] [битовая маска - опционально]
Код:
Affinity 1000
Покажет сумму битовой маски сходства для процесса с PID = 1000
Код:
Affinity 1000 3
Задаст процессу с PID = 1000 битовую маску сходства = 3 (привязка к 0-му (DEC=1) и 1-му (DEC=2) процессорам).

Примеры, как считать битовые суммы масок найдете в википедии или из примера запуском EXE без аргументов.
Aff_args.png
Aff_menu.png
0 - Успех
1 - не смог получить/установить маску сходства (обычно, когда неверно задана маска или недопустима в данной ОС/аппаратной конф-ции).
5 - не смог открыть процесс и получить дескриптор (когда неверно задан Process ID или не хватает прав для доступа к процессу).
Запускать с теми же правами, как и процесс, которому нужно задать новую маску сходства.

P.S. Если процесс ещё не запущен, ему можно задать маску сходства с процессорами прямо при запуске.
Это делается через батник с командой start. Пример для запуска блокнота на 0-м процессоре:
Код:
start "" /AFFINITY 0x1 notepad.exe
 

Вложения