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

Значения идентификатора ядра процессора не смежны

Я пытаюсь понять последовательность "core_id". На моей машине 2 сокета, 20 ядер и включена гиперпоточность (80 ЦП). Я смотрю на значения "core_id", которые сообщаются с использованием:

root@mybox:~# cat /sys/devices/system/cpu/cpu*/topology/core_id  |  sort -n | uniq
0
1
2
3
4
8
9
10
11
12
16
17
18
19
20
24
25
26
27
28
root@mybox:~#
root@mybox:~# cat /sys/devices/system/cpu/cpu*/topology/core_id  |  sort -n | uniq | wc -l
20
root@mybox:~#

Здесь я вижу, что идентификаторы core_id не являются смежными. Они следуют шаблону. Последние 3 числа каждого октета пропускаются (5, 6, 7, затем 13, 14, 15, затем 21, 22, 23). Итак, для перечисления 20 ядер он использовал порядковые номера от 0 до 28.

Я пытаюсь понять, почему он пропускает некоторые порядковые номера, но не могу найти соответствующую документацию по ним. Может ли кто-нибудь помочь мне лучше понять это.

Спасибо.

Обычно это происходит по одной из двух причин:

  1. На самом деле у процессора больше ядер, и прошивка отключила некоторые из них (или производитель отключил некоторые).
  2. Прошивка оставляет место в различных таблицах, из которых ОС считывает эти данные, для возможности горячего подключения больших ЦП.

Учитывая, что это 2-сокетная система, я держу пари, что это второй случай, поскольку довольно стандартно иметь возможность горячего удаления пакета ЦП, а затем горячего подключения нового, а прошивка должна обрабатывать случай, когда у нового ЦП больше ядер, чем у старого. Разделение на 4 группы по 5, вероятно, также соответствует расположению кристаллов самого процессора.