从 net start 命令限制 Windows 服务 运行 使用的 CPU 核心数

Limit the number of CPU cores used by an Windows service running from net start command

我是 运行 Windows 10 上 PostgreSQL 12 的基准测试。我想限制 PostgreSQL 服务使用的 CPU 核心数来测试 CPU 性能影响 TPU。

现在我使用以下命令启动 PostgreSQL 服务:

 net start postgresql-x64-12

而且我知道如何限制普通 Windows 应用程序的 CPU 核心数量,例如:

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

如何通过 net start 命令限制 Windows 服务 运行 使用的 CPU 核心数? net start 命令中是否有等效的 /affinity 选项?

我找到了解决办法。首先,您 不能 将 CPU 亲和力设置为 Windows 系统进程或服务(参见 https://www.atmarkit.co.jp/ait/articles/0703/16/news151.html(日语))。

在我的情况下,我可以从 cmd.exe 的 pg_ctl 命令 运行 PostgreSQL 进程和 /affinity 选项,例如:

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

请注意,您不能像这样使用Start-Process cmdlet 和ProcessorAffinity 属性:

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

这导致 SetValueInvocationException 因为 pg_ctl.exe 在启动 PostgreSQL 实例后立即退出。