Назад | Перейти на главную страницу

Последовательная нумерация ЦП в многопроцессорной системе NUMA Linux

Я заметил, что процессоры в Linux нумеруются по совершенно разным схемам в разных многопроцессорных системах NUMA.

Я имею в виду номера ЦП, которые вы используете в параметрах ядра, таких как isolcpus= или при настройке близости потоков.

Вы можете проверить нумерацию ЦП с помощью numactl --hardware или lscpu -e.

Примеры: (каждая система имеет 2 процессора по 8 ядер без гиперпоточности)

node 0 cpus: 0 1 2 3 8  9  10 11
node 1 cpus: 4 5 6 7 12 13 14 15

=> видел это с HP, с полосой с расстоянием 4

node 0 cpus: 0 2 4 6 8 10 12 14
node 1 cpus: 1 3 5 7 9 11 13 15

=> также с HP, чередование с расстоянием разделения 1 - или чередование - или циклический

node 0 cpus: 0 1  2  3  4  5  6  7
node 1 cpus: 8 9 10 11 12 13 14 15

=> наблюдается с Supermicro, последовательная нумерация, т.е. полные полосы с расстоянием между ними #cores_per_cpu

Последняя схема, возможно, является «естественной». Я имею в виду, что если у вас всего 16 ядер с 2 сокетами, зачем вам нумеровать их по-другому?

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

Таким образом, мой вопрос: есть ли способ указать Linux всегда последовательно нумеровать процессоры в одном сокете?

Если это невозможно настроить в Linux, есть ли параметр BIOS, который влияет на нумерацию?

И по каким причинам разные производители используют разные схемы нумерации (и даже меняют их от поколения к поколению)?