是否有可以更改的设置(或可以添加的reg键)来设置服务的处理器关联?我想设置亲和力,并在重新启动后保持此设置(因此在启动服务后手动更改关联对我不起作用).
某些服务(如IIS)的构建能够从注册表中读取位掩码,并在启动时使用它来设置自己的cpu关联,但这不是每个服务的功能.
我可能会创建一个设置为触发事件的任务,事件将是“MyService service is started”…在系统事件日志中.然后该任务将运行此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”,等等等等.