process affinity что это

Что за зверь CPU Affinity и с чем его едят при майнинге

При майнинге на процессоре продвинутые майнеры используют возможность тонкой настройки параметров вычислений путем установки параметра CPU Affinity. Это дает потенциальную возможность выиграть дополнительные 1-2 процента в хешрейте.

Некоторые не знают значение данного параметра и для чего он служит. Между тем, правильная установка CPU Affinity на майнинг ригах с достаточно мощными процессорами способна обеспечить небольшое увеличение хешрейта при майнинге на процессоре при сохранении необходимой для основного майнера и системы вычислительной мощности CPU.

Рассмотрим подробнее, что такое параметр CPU Affinity, как он влияет на распределение ресурсов процессора и производительность майнинга.

Что такое CPU Affinity и как этот параметр влияет на режим работы процессора?

CPU Affinity – это программная привязка (закрепление) к ядрам процессора определенных вычислительных процессов. Такая привязка отдает ресурс назначенного пользователем физического ядра процессора нужному сервису/программе (например, майнеру), минуя автоматические (неэффективные) алгоритмы, использующиеся операционной системой. Ручная установка параметра AFFINITY прекращает прыгание исполняемой программы по ядрам процессора, которое бесполезно расходует машинное время и кэш CPU.

Закрепление ядра CPU позволяет увеличить время работы процессора по выполнению задач выбранной программы, в том числе майнера и тем самым увеличить хешрейт.

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

При включенной по умолчанию технологии Hyper Threading (HT) число доступных ядер удваивается за счет виртуализации. В этом случае нужно задействовать только физические ядра (нужно включать affinity для нечетного номера соответствующего виртуального потока).

Как на практике настроить параметр CPU Affinity для предоставления ресурсов процессора выбранным приложениям?

При настройке параметра CPU Affinity нужно выделать ресурсоемким приложениям физические, а не виртуальные ядра процессора. Например, при использовании процессора с двумя физическими и 4 виртуальными ядрами (0,1,2,3) нужно задействовать либо ядра 0, 2, либо 1 и 3

Для этого в батнике майнера для параметра cpuaffinity указывается маска с числовым значением, задающим номера ядер процессора, которые будут использоваться при проведении вычислений.

Эта опция будет полезна на практике только на достаточно производительных процессорах, у которых есть свободные мощности. На CPU с одним ядром и парой виртуальных потоков включение опции CPU Affinity ничего хорошего не даст.

Не стоит выделать майнеру все имеющиеся физические ядра при одновременном майнинге на видеокартах и выполнении других приложений на компьютере, так как это может привести к подвисаниям или уменьшению хешрейта на GPU.

В bat-файле майнера под Windows задействование 5 физических ядер из общего количества 6 реальных и 12 виртуальных будет выглядеть так:

Операционные системы Windows и Linux иногда по-разному нумеруют реальные и виртуальные ядра, поэтому для одинаковых процессоров значения CPU-affinity в этих системах могут быть разными.

Для удобства пользователя далее приведены значения аргумента cpu-affinity для Linux и Windows для вставки в батник xmrig в зависимости от количества использующихся физических ядер.

Таблица значений CPU affinity в соответствии с задействованными физическими ядрами процессора для Windows:

Физические ядра CPU

0 (1/1 Core/Thread)0x1Intel Atom0 (1/2 Core/Thread)0x0Pentium0,1 (2/2 Cores/Threads)0x30,2 (2/4 Cores/Threads)0x50,2,3 (3/3 Cores/Threads)0x70,2,3 (3/6 Cores/Threads)0x15AMD0,1,2,3 (4/4 Cores/Threads)0xFIntel i5-4670,
Intel I3-81001,2,30x7Включение 3 ядер для CPU 4/4 Cores/Threads0,2,4,6 (4/8 Cores/Threads)0x55Intel i7-77002,4,60x15Включение 3 ядер для CPU 4/8 Cores/Threads0,2,4,6,80x1550,2,4,6,8,100x555Intel i7-8700K2,4,6,8,100x155Включение 5 ядер для CPU 6/12 Cores/Threads0,2,4,6,8,10,120x15550,2,4,6,8,10,12,140x55550,2,4,6,8,10,12,14,160x155550,2,4,6,8,10,12,14,16,180x555550,2,4,6,8,10,12,14,16,18,200x1555550,2,4,6,8,10,12,14,16,18,20,220x5555550,2,4,6,8,10,12,14,16,18,20,22,240x15555550,2,4,6,8,10,12,14,16,18,20,22,24,260x55555550,2,4,6,8,10,12,14,16,18,20,22,24,26,280x155555550,2,4,6,8,10,12,14,16,18,20,22,24,26,28,300x55555555

Чтобы посчитать значение аффинити для Windows для своей конфигурации задействования ядер, нужно использовать написать в бинарном виде включенные/выключенные ядра/потоки (единица означает включение ядра) с последующей конвертацией в шестнадцатиричный формат.

Вычисление значения cpu-affinity на примере процессора Intel Core i7-8700K (6/12 ядер/потоков)

Чтобы найти значение affinity для процессора Intel Core i7-8700K:

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Полученное число 555 записываем в формате 0x555 и проставляем в батник майнера в качестве аргумента параметра cpu-affinity.

Если задействуется 5 ядер из 6, то берем значение cpu-affinity для 0,2,4,6,8-х ядер, равное 155.

Пример батника для xmrig с использованием параметра cpu-affinity для задействованных 5 ядер:

Значения cpu-affinity для Linux

В Linux ядра/потоки считаются по другому, ниже приводятся значения CPU affinity для Linux.

Таблица значений CPU affinity в соответствии с задействованными физическими ядрами процессора для Linux:

Физические ядра CPU (Cores)

Значение cpu-affinity для майнера xmrig

00x10,10x30,1,20x70,1,2,30xF0,1,2,3,40x1F0,1,2,3,4,50x3F0,1,2,3,4,5,60x7F0,1,2,3,4,5,6,70xFF0,1,2,3,4,5,6,7,80x1FF0,1,2,3,4,5,6,7,8,90x3FF0,1,2,3,4,5,6,7,8,9,100x7FF0,1,2,3,4,5,6,7,8,9,10,110xFFF0,1,2,3,4,5,6,7,8,9,10,11,120x1FFF0,1,2,3,4,5,6,7,8,9,10,11,12,130x3FFF0,1,2,3,4,5,6,7,8,9,10,11,12,13,140x7FFF0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,150xFFFF

Закрепление ядер за процессом штатными средствами Windows

В Windows закрепить ядра процессора за программой/сервисом можно с помощью диспетчера задач (ctrl+alt+del, задать сходство):

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

В открывшемся окне выбирают задействованные ядра (нужно выбирать одно физическое из пары реальное-виртуальное ядро):

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Что на практике дает включение опции CPU Affinity при майнинге?

Активация функции CPU Affinity при майнинге на процессоре дает прирост хешрейта до 3-4% на алгоритмах типа RandomX. На других algo прирост может быть более существенным.

Хешрейт без включенной опции CPU Affinity на 4 потоках процессора Intel I7-7700 при майнинге Safex на алгоритме RandomSFX составляет примерно 2500 h/s (Windows 8.1):process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

С включенным режимом CPU Affinity выдает хешрейт около 2620 h/s (на 4 процента больше):

Источник

Вадим Стеркин

Узнал о возможности задавать соответствие процессам, на нагрузку одного или нескольких ядер процессора. А вот чтобы этот параметр закрепить за *.exe файлом, такого нигде нет (за исключением использования сторонней программы, но это не вариант). В итоге приходится постоянно при загрузке задавать соответствие этому процессу. Может есть способ через ярлык или реестр указать, сколько ядер разрешено использовать тому или иному процессу?

Windows вполне эффективно управляет сходством процесса, поэтому менять это следует только в том случае, если в этом есть насущная необходимость, т.е. вы четко понимаете, что вы делаете и что это дает.

Для формирования ярлыка нужно знать шестнадцатеричное число, определяющее комбинацию желаемых процессоров.

1. Определите двоичное число

В диспетчере задач щелкните правой кнопкой мыши на процессе → Задать сходство.
Появится диалог со списком ЦП. Допустим, их 8 — от ЦП0 до ЦП7.

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Выбранные ЦП обозначаются двоичным числом, в котором столько цифр, сколько у вас ЦП. Выбранные ЦП обозначаются единицами, не выбранные — нулями. Самая правая цифра — ЦП0, самая левая — ЦП7.

При стандартном запуске (картинка выше) выбраны все ЦП, поэтому число состоит из восьми единиц: 11111111. Если вы хотите только ЦП1 и ЦП4, число будет 00010010.

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

2. Конвертируйте двоичное число в шестнадцатеричное

Соответствующее шестнадцатеричное число — HEX. В данном случае — 12.

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

3. Сформируйте команду для ярлыка

Используйте команду start, чтобы указать шестнадцатеричное число в качестве значения для ключа /affinity

В Windows XP команда start не поддерживает ключ /affinity. В этом случае надо использовать утилиту psexec с ключом /a из набора Systinternals PSTools.

Источник

Process. Processor Affinity Свойство

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Получает или задает процессоры, на которых может быть запланировано выполнение потоков данного процесса.

Значение свойства

Битовая маска, представляющая процессоры, на которых могут выполняться потоки связанного процесса. По умолчанию маска зависит от числа процессоров в компьютере. Значение по умолчанию — 2 n – 1, где n — число процессоров.

Исключения

Не удается задать или получить сведения о ProcessorAffinity от связанного ресурса процесса.

-или- Идентификатор процесса или дескриптор процесса равен нулю. (Процесс не был запущен.)

Вы пытаетесь получить доступ к свойству ProcessorAffinity процесса, выполняющегося на удаленном компьютере. Это свойство доступно только для процессов, запущенных на локальном компьютере.

-или- Процесс завершен.

Комментарии

Значение, возвращаемое этим свойством, представляет самое последнее обновленное сходство процесса. Чтобы получить наиболее актуальное соответствие, необходимо Refresh() сначала вызвать метод.

в Windows 2000 и более поздних версиях поток процесса может переходить с процессора на процессор, при этом каждый процесс миграции перезагружает кэш процессора. При высоких нагрузках на систему указание того, какой процессор должен запустить конкретный поток, может повысить производительность, уменьшая количество раз, когда кэш процессора перезагружается. Связь между процессором и потоком называется сходством процессоров.

Каждый процессор представляется в виде бита. Бит 0 — первый процессор, бит 1 — второй процессор и т. д. Если установить бит равным значению 1, соответствующий процессор будет выбран для назначения потоков. Если ProcessorAffinity значение равно нулю, то алгоритмы планирования операционной системы устанавливают сходство потока. Если ProcessorAffinity значение равно любому ненулевому значению, оно интерпретируется как битовая маска, указывающая, какие процессоры могут быть выбраны для выбора.

В следующей таблице приведены ProcessorAffinity значения для системы из восьми процессоров.

Источник

Настройка Processor Affinity с помощью PowerShell

По умолчанию запущенное в Windows приложение может выполняться на любом из ядер процессора, а распределением процессорных мощностей занимается операционная система. Обычно она неплохо справляется с этой задачей, но иногда все же требуется ручная настройка. Для этой цели в Windows есть функционал Processor Affinity, который позволяет осуществлять привязку вычислительных процессов к ядрам процессора.

При помощи этого функционала можно указать сходство (affinity) процесса с определенными ядрами процессора, тем самым привязав процесс к этим ядрам. Если вы установили для процесса привязку к определенным ядрам, то он будет выполняться только на этих ядрах.

В какой ситуации может потребоваться настройка Processor Affinity:

• Для ограничения потребления ресурсов конкретным приложением. Самый простой и эффективный, хотя и достаточно грубый способ ограничить для приложения потребляемую процессорную мощность.
• Для обеспечения совместимости. К примеру требуется запустить устаревшее приложение, которое работает некорректно в многопроцессорной системе.
• Для повышения производительности. В случае с ресурсоемкими приложениями (напр. рендеринг видео) иногда рекомендуют выделить программе отдельные ядра процессора. Это гарантирует, что ядра будут всегда доступны для выполнения задачи и не будет задержек, связанных с выбором и переключением между ядрами.

Проще всего осуществить привязку с помощью диспетчера задач (Task Manager). Для этого надо на вкладке Details (Подробности) найти нужный процесс, кликнуть на нем правой клавишей мыши и в контекстном меню выбрать пункт Set Affinity (Задать сходство).

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

В открывшемся окне буду показаны все имеющиеся ядра процессора. Те, которые процесс может использовать, отмечены галочкой. Для изменения просто убираем галочку с ненужных ядер и жмем ОК.

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Можно осуществлять привязку и с помощью PowerShell. Для примера запустим Блокнот (notepad) и выведем его текущее значение командой:

Get-Process notepad | fl ProcessorAffinity

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

А теперь давайте разберемся, откуда взялась цифра 15. Дело в том, что ProcessorAffinity представляет из себя битовую маску (bitmask), где каждому биту соответствует ядро процессора. Если для ядра отмечено сходство (affinity), то бит выставляется в 1, если нет — то в 0. В нашем случае отмечены все ядра, поэтому маска выглядит так:

CPU3CPU2CPU1CPU0
1111

Примечание. При использовании технологии HyperThreading каждое физическое ядро определяется операционной системой как два отдельных процессора (два логических ядра).

Теперь переведем двоичные значения в десятичные и получим:

CPUBitMaskDec
CPU000011 (2 0 )
CPU100102 (2 1 )
CPU201004 (2 2 )
CPU310008 (2 3 )

Складываем полученные десятичные значения и получаем:

1 + 2 + 4 +8 = 15

Таким образом число 15 означает, что используются все 4 ядра процессора. Если мы хотим это изменить и привязать процесс к определенным ядрам, то складываем только те значения, которые соответствуют этим ядрам. Например, требуется привязать процесс к первым трем ядрам, соответственно значение будет складываться так:

1 + 2 + 4 = 7

Значение получено, теперь осуществим привязку. Для этого выполним следующие команды:

$process = Get-Process notepad
$process.ProcessorAffinity = 7

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Проверим результат и в графической оснастке. Как видите, нашему процессу сопоставлены три ядра процессора, как и было задумано 🙂

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Таким образом можно осуществить привязку уже запущенного процесса, а можно ли запустить процесс сразу с привязкой к определенным ядрам? Можно, с помощью утилиты командной строки start с ключом /affinity. Например, для запуска блокнота с привязкой к первому ядру достаточно выполнить команду:

start /affinity 1 notepad

Эта команда отлично работает в командной консоли, но если вы попытаетесь выполнить ее при помощи PowerShell, то получите ошибку. Дело в том, что в PowerShell команда start является алиасом для командлета Start-Command, для которого указанные параметры являются недопустимыми.

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Поэтому, если все же требуется запуск именно из PowerShell, то команду придется немного видоизменить. Например так:

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

Указывать значение маски в данном случае надо не в десятичном, а в шестнадцатеричном виде. К примеру десятичное значение 15 в шестнадцатеричном виде будет равно F, а команда для запуска процесса с привязкой к четырем ядрам будет выглядеть так:

process affinity что это. Смотреть фото process affinity что это. Смотреть картинку process affinity что это. Картинка про process affinity что это. Фото process affinity что это

И еще, если требуется уточнить количество ядер процессора, то это можно сделать с помощью переменной окружения, командой:

Источник

Process. Processor Affinity Property

Definition

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Gets or sets the processors on which the threads in this process can be scheduled to run.

Property Value

Exceptions

ProcessorAffinity information could not be set or retrieved from the associated process resource.

The process identifier or process handle is zero. (The process has not been started.)

You are attempting to access the ProcessorAffinity property for a process that is running on a remote computer. This property is available only for processes that are running on the local computer.

The process Id was not available.

The process has exited.

Remarks

The value returned by this property represents the most recently refreshed affinity of the process. To get the most up to date affinity, you need to call Refresh() method first.

In Windows 2000 and later, a thread in a process can migrate from processor to processor, with each migration reloading the processor cache. Under heavy system loads, specifying which processor should run a specific thread can improve performance by reducing the number of times the processor cache is reloaded. The association between a processor and a thread is called the processor affinity.

Each processor is represented as a bit. Bit 0 is processor one, bit 1 is processor two, and so forth. If you set a bit to the value 1, the corresponding processor is selected for thread assignment. When you set the ProcessorAffinity value to zero, the operating system’s scheduling algorithms set the thread’s affinity. When the ProcessorAffinity value is set to any nonzero value, the value is interpreted as a bitmask that specifies those processors eligible for selection.

The following table shows a selection of ProcessorAffinity values for an eight-processor system.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *