Майнинг,  Статьи

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

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

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

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

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

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

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

При включенной по умолчанию технологии 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 виртуальных будет выглядеть так:

--cpu-affinity 0x155

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

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

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

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

Что проставлять в параметр cpu-affinity для xmrig

Примечание

0 (1/1 Core/Thread) 0x1 Intel Atom
0 (1/2 Core/Thread) 0x0 Pentium
0,1 (2/2 Cores/Threads) 0x3
0,2 (2/4 Cores/Threads) 0x5
0,2,3 (3/3 Cores/Threads) 0x7
0,2,3 (3/6 Cores/Threads) 0x15 AMD
0,1,2,3 (4/4 Cores/Threads) 0xF Intel i5-4670,
Intel I3-8100
1,2,3 0x7 Включение 3 ядер для CPU 4/4 Cores/Threads
0,2,4,6 (4/8 Cores/Threads) 0x55 Intel i7-7700
2,4,6 0x15 Включение 3 ядер для CPU 4/8 Cores/Threads
0,2,4,6,8 0x155
0,2,4,6,8,10 0x555 Intel i7-8700K
2,4,6,8,10 0x155 Включение 5 ядер для CPU 6/12 Cores/Threads
0,2,4,6,8,10,12 0x1555
0,2,4,6,8,10,12,14 0x5555
0,2,4,6,8,10,12,14,16 0x15555
0,2,4,6,8,10,12,14,16,18 0x55555
0,2,4,6,8,10,12,14,16,18,20 0x155555
0,2,4,6,8,10,12,14,16,18,20,22 0x555555
0,2,4,6,8,10,12,14,16,18,20,22,24 0x1555555
0,2,4,6,8,10,12,14,16,18,20,22,24,26 0x5555555
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28 0x15555555
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 0x55555555

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

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

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

  1. Расписываем его 6 физических ядер (12 потоков) в двоичном (бинарном) виде. При этом включенные физические ядра процессора обозначаются единицей (например, каждое четное):

010101010101

  1. Конвертируем бинарный код для выбранных ядер в 16-ричный формат в любом онлайн-калькуляторе:

  1. Значение cpu-affinity указывается в майнере в формате:
--cpu-affinity 0x(+HEX)

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

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

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

xmrig-notls -a rx/sfx -o randomsfx.mine.zergpool.com:4450 -u 15xWA28oEzGmUcRZ9k1aGju3zLYEEa27uP -p c=BTC,worker -k --asm=intel --cpu-priority 0 -t 5 --cpu-affinity 0x155 --keepalive --randomx-mode=fast --randomx-cache-qos

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

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

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

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

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

0 0x1
0,1 0x3
0,1,2 0x7
0,1,2,3 0xF
0,1,2,3,4 0x1F
0,1,2,3,4,5 0x3F
0,1,2,3,4,5,6 0x7F
0,1,2,3,4,5,6,7 0xFF
0,1,2,3,4,5,6,7,8 0x1FF
0,1,2,3,4,5,6,7,8,9 0x3FF
0,1,2,3,4,5,6,7,8,9,10 0x7FF
0,1,2,3,4,5,6,7,8,9,10,11 0xFFF
0,1,2,3,4,5,6,7,8,9,10,11,12 0x1FFF
0,1,2,3,4,5,6,7,8,9,10,11,12,13 0x3FFF
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 0x7FFF
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 0xFFFF

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

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

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

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

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

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

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

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

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

English EN French FR German DE Russian RU Spanish ES