Я заметил, что процессоры в 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, который влияет на нумерацию?
И по каким причинам разные производители используют разные схемы нумерации (и даже меняют их от поколения к поколению)?