Выявление, какое логическое ядро ​​является многопоточным, а какое нет - PullRequest
3 голосов
/ 03 сентября 2011

У меня есть эта информация из / proc / cpuinfo (показана ниже). Мой вопрос в том, какое ядро ​​здесь является гиперпоточным. Во-вторых, какое ядро ​​лежит на каком процессоре, поскольку здесь есть два четырехъядерных процессора, так как это система с двумя сокетами, всего 8 ядер.

Я интерпретирую это как: ядра 0, 2, 4 и 6 - это 4 физических ядра процессора 1, а ядра 1, 3, 5 и 7 - 4 физических ядра процессора 0. Ядра 9-15 - это многопоточные. из них. Правильна ли моя интерпретация?

-bash-3.2$ cat /proc/cpuinfo | grep 'physical id'
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
physical id     : 1
physical id     : 0
-bash-3.2$ cat /proc/cpuinfo | grep 'core id'
core id         : 0
core id         : 0
core id         : 1
core id         : 1
core id         : 2
core id         : 2
core id         : 3
core id         : 3
core id         : 0
core id         : 0
core id         : 1
core id         : 1
core id         : 2
core id         : 2
core id         : 3
core id         : 3
-bash-3.2$ cat /proc/cpuinfo | grep 'processor'
processor       : 0
processor       : 1
processor       : 2
processor       : 3
processor       : 4
processor       : 5
processor       : 6
processor       : 7
processor       : 8
processor       : 9
processor       : 10
processor       : 11
processor       : 12
processor       : 13
processor       : 14
processor       : 15

Ответы [ 4 ]

3 голосов
/ 05 сентября 2011

Можете ли вы опубликовать dmesg результаты загрузки? Они должны содержать описание coreids:

http://lxr.linux.no/linux+v3.0.4/arch/x86/kernel/cpu/common.c#L493

 493        if (!printed && (c->x86_max_cores * smp_num_siblings) > 1) {
 494                printk(KERN_INFO  "CPU: Physical Processor ID: %d\n",
 495                       c->phys_proc_id);
 496                printk(KERN_INFO  "CPU: Processor Core ID: %d\n",
 497                       c->cpu_core_id

Другой вариант - использовать hwloc: http://www.open -mpi.org / projects / hwloc /

Он был создан для выявления топологии любой системы. Пример нормальной системы:

Example of topology in graphic form

И это будет представлять HT-ядер:

Example of HT-topology in graphic form

Вывод этой утилиты может быть представлен в текстовом формате, в формате xml.

1 голос
/ 03 сентября 2011

Лучший способ сделать это - просто оценить его.

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

Я бы доверял такому критерию, как и все остальное.

В Windows логические / физические ядра чередуются. Ядра 0,1 находятся на одном физическом ядре. Ядра 2,3 находятся на одном и том же ... Ядра 4,5 на одном и том же ... и т.д ...

В Linux может отличаться.

0 голосов
/ 20 июня 2017

Обращаясь только к вопросу о том, как интерпретировать /proc/cpuinfo: пару с гиперпоточностью можно определить, выбрав записи «процессора», которые имеют одинаковые значения для cpu id и для core id.

Таким образом, в выходных данных, представленных в исходном вопросе, процессор 0 и процессор 8 являются гиперзаходной парой, также как 1 и 9, 2 и 10 и т. Д.

0 голосов
/ 05 сентября 2011

При включении Hyperthreading все процессоры становятся виртуальными.Нет чисто физических процессоров.Как Рэймонд Чен объясняет :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...