在 Windows Server 2003 上设置亲和性

在 Windows Server 2003 上设置亲和性

我有一个程序,默认情况下只在一个 CPU 上运行。我尝试使用start /affinity x notepad.exe批处理命令,但无法让它运行我的程序。它更改了命令行窗口的标题,但没有执行程序。这个启动命令对记事本有效,所以它可能只是软件的问题。我已经通过任务管理器手动设置了亲和性,所以我知道它有效。

我不是该软件的程序员,因此改变这一点是不可能的。

更新:我现在可以运行该程序了。我将命令添加exit到批处理脚本的末尾。现在我需要知道 /affinity 标志如何工作。我似乎无法让它使用 4 个 CPU。

更新 2:所以我终于搞清楚了 /affinity 标志需要一个十六进制数。我现在可以为记事本正确设置亲和性,但仍然无法为我正在使用的软件设置它。可能是因为该软件不支持多线程?

答案1

它是按位计算的,因此将二进制转换为十进制。例如 0001 = 1 = cpu1,1000 = 8 = cpu4,1111 = 15 = 全部四个 cpu

答案2

如果它“更改了命令行窗口的标题,但没有执行程序”,那么这看起来像是一个命令行问题。您可以发布实际的命令行吗?它是否包含空格、引号或其他参数?


编辑:

很高兴知道您已成功运行。正如其他人所说,“affinity”参数是一个位掩码;因此,您需要使用“1”表示“CPU 1”,“2”表示“CPU 2”,“4”表示“CPU 3”,“8”表示“CPU 4”,依此类推;您可以通过添加这些数字来将亲和性设置为多个 CPU,因此,如果您希望您的进程使用 CPU 3 和 4(但不是1 和 2) 您将使用“12”。您应该使用“15”来表示“所有前 4 个 CPU”。


编辑2:

当然,如果您的程序不是多线程的,那么拥有更多可用 CPU 根本无济于事。要排除这种情况,请使用任务管理器设置其亲和性并查看其行为;如果您有四个 CPU,但该程序最多只使用系统总 CPU 时间的 25%,则它是单线程的;如果它达到 50%,则它最多运行两个线程。如果它设法达到 100%,那么它可以充分利用您的服务器(但要小心不要减慢其他一切)。

答案3

我遇到的第一个问题是批处理文件无法运行我的程序。这最终是因为路径中的空格问题。我不知道如何转义它们,所以我只使用了短名称。(例如,c:/progra~1/ 而不是 c:/program files/)

第二个问题是设置亲和力。结果发现启动命令中的亲和力标志采用十六进制数。软件仍然无法工作,但这与软件有关。开发人员正在修复它。(耶!)

至于软件不是多线程的,我认为 Windows 会进行一些负载平衡,因为如果您手动将其设置为使用所有处理器,则软件会使用所有处理器并运行得更快。

相关内容