Ограничьте число ядер ЦП, используемых службой Windows, запущенной из команды net start - PullRequest
0 голосов
/ 30 апреля 2020

Я запускаю тест для PostgreSQL 12 на Windows 10. Я хочу ограничить количество ядер ЦП, используемых службой PostgreSQL, чтобы проверить, как производительность ЦП влияет на TPU.

Теперь я запускаю сервис PostgreSQL с помощью следующей команды:

 net start postgresql-x64-12

, и я знаю, как ограничить количество ядер процессора для обычного Windows приложения, такого как:

 start /affinity 1 "" "C:\Windows\System32\calc.exe"

Как можно ограничить количество ядер ЦП, используемых службой Windows, запущенной из команды запуска net? Есть ли /affinity эквивалентный параметр в команде net start?

1 Ответ

0 голосов
/ 08 мая 2020

Я нашел решение. Во-первых, вы не можете установить привязку ЦП к Windows системным процессам или службам (см. https://www.atmarkit.co.jp/ait/articles/0703/16/news151.html (японский)).

В моей ситуации я могу запустить PostgreSQL процесс из pg_ctl команда из cmd.exe с параметром /affinity, например:

cmd.exe /c "start /affinity 1F /B c:\path\to\PostgreSQL\12\bin\pg_ctl.exe start -w -s -D C:\path\to\PostgreSQL\12\data"

Обратите внимание, что вы не можете использовать Start-Process командлет и свойство ProcessorAffinity, например this:

$app = Start-Process 'c:\path\to\PostgreSQL\12\bin\pg_ctl.exe' 'start -D C:\path\to\PostgreSQL\12\data' -PassThru -NoNewWindow
$app.ProcessorAffinity = 0x3

Это вызывает SetValueInvocationException, потому что pg_ctl.exe немедленно завершается после запуска PostgreSQL instance.

...