Можно ли установить привязку процессора службы и сохранить эту привязку при перезагрузках?

Есть ли параметр, который можно изменить (или добавить ключ 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". и так далее и тому подобное.

Другие вопросы по тегам