Можно ли установить привязку процессора службы и сохранить эту привязку при перезагрузках?
Есть ли параметр, который можно изменить (или добавить ключ reg) для установки привязки процессора к услуге? Я хотел бы установить сходство и сохранить этот параметр при перезагрузке (поэтому ручное изменение сходства после запуска службы не будет работать для меня).
1 ответ
Некоторые сервисы, такие как IIS, построены с возможностью считывать битовую маску из реестра и использовать ее для установки собственной привязки к ЦП при запуске, но это не является особенностью каждого сервиса.
Я бы, вероятно, создал задачу, которая запускается для события, и событие будет "Служба 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 означает "только первый ЦП", десятичное значение 2 (двоичный 10) означает "только второй ЦП", десятичное значение 3 (двоичный 11) означает "ЦП 1 и 2". и так далее и тому подобное.