是否有可以更改的设置(或可以添加的registry项)来设置服务的处理器关联性? 我想要设置亲和力,并在重新启动时保持此设置(因此在启动服务后手动更改亲和力对我不起作用)。
某些服务(如IIS)可以从registry中读取位掩码,并在启动时使用它来设置自己的CPU关联,但这不是每个服务的function。
我可能会创build一个设置为在事件上触发的任务,事件将是“MyService服务已启动”…在系统事件日志中。 这个任务将运行这个Powershell代码:
# TODO: Add error checking Add-Type -TypeDefinition @' using System; using System.Runtime.InteropServices; public class Affinity { [DllImport("kernel32.dll")] static extern bool SetProcessAffinityMask(IntPtr Handle, UIntPtr AffinityMask); public static void SetAffinity(IntPtr Handle, UIntPtr AffinityMask) { SetProcessAffinityMask(Handle, AffinityMask); } } '@ $Process = Get-Process MyService If (-Not($Process)) { Return } # This is a bitmask. $AffinityMask = New-Object UIntPtr 1 # TODO: Foreach loop to set affinity for each instance of the process [Affinity]::SetAffinity($Process.Handle, $AffinityMask)
编辑:哈哈,我很抱歉,这是比它需要更复杂的方式。 PowerShell已经具备了这个能力,只需要做到这一点:
$Process = Get-Process MyService $Process.ProcessorAffinity = 1
位掩码表示十进制值1表示“仅第一个CPU”,十进制值2(二进制10)表示“仅第二个CPU”,十进制值3(二进制11)表示“CPU 1和2”等等等等。