サービスのプロセッサアフィニティを設定するために変更できる設定(または追加できる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
ビットマスクは、10進値1が「最初のCPUのみ」を意味し、10進値2(バイナリ10)は「2番目のCPUのみ」を意味し、10進値3(バイナリ11)は「CPU 1と2」を意味しますなどなど。