LINUX.ORG.RU

Как мы в Linux узнаём связи между ядрами процессора?

 ,


1

1

«Расстояние между ядрами определяется количеством переходов по кольцевой шине. Переход на соседнюю остановку на кольце (ring stop) занимает 1 такт.

Дополнительная задержка в 5 тактов добавляется, если для связи нужно пересечь буферный свитч между левым и правым кольцом.

Без точной карты процессора мы не можем с уверенностью сказать, находятся ли ядра 0 и 9 на одном кольце или на разных.»

«В сложных системах одна NUMA-нода может включать несколько колец, каждое кольцо может обслуживать отдельный кластер, но все они будут частью одной NUMA-ноды. В этом случае задержка доступа к памяти внутри NUMA-ноды может различаться в зависимости от расположения ядер относительно контроллера памяти.»



Последнее исправление: Saakx (всего исправлений: 1)
Ответ на: комментарий от annulen

я так понимаю, это более высокий уровень чем то что нужно ТСу. Если NUMA-нод одна штука, то с помощью этих lstopo можно максимум узнать, соответствуют ли 2 виртуальных ядра одному физическому при включенном гипертрединге. Но для этого в принципе дополнительный софт не нужен, можно просто в sysfs полазить.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

показывает пары:
cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -u

показывает, какие ядра используют общий кэш L3:
cat /sys/devices/system/cpu/cpu0/cache/index3/shared_cpu_list

«инструменты вроде likwid-topology, lstopo, lscpu и numactl показывают только ту информацию, которую процессор предоставляет через стандартные интерфейсы, а в них описываются лишь логические уровни (потоки, ядра, кэши, NUMA-узлы)»

Saakx
() автор топика
Последнее исправление: Saakx (всего исправлений: 2)
Ответ на: комментарий от annulen

«В процессорах Intel есть специальные счетчики производительности, которые могут считать события на кольцевой шине (например, UNC_H_RING_AD_USED — использование кольца данных). Их можно прочитать утилитами perf или likwid-perfctr»

# likwid-perfctr -a
    Group name  Description
--------------------------------------------------------------------------------
   UOPS_RETIRE  UOPs retirement
    UOPS_ISSUE  UOPs issueing
     UOPS_EXEC  UOPs execution
          UOPS  UOPs execution info
           TMA  Top down cycle allocation
     TLB_INSTR  L1 Instruction TLB miss rate/ratio
      TLB_DATA  L2 data TLB miss rate/ratio
          SBOX  Ring Transfer bandwidth
      RECOVERY  Recovery duration
           QPI  QPI Link Layer data
          NUMA  Local and remote memory accesses
           MEM  Main memory bandwidth in MBytes/s
       L3CACHE  L3 cache miss rate/ratio
            L3  L3 cache bandwidth in MBytes/s
       L2CACHE  L2 cache miss rate/ratio
            L2  L2 cache bandwidth in MBytes/s
        ICACHE  Instruction cache miss rate/ratio
            HA  Main memory bandwidth in MBytes/s seen from Home agent
     FLOPS_AVX  Packed AVX MFLOP/s
   FALSE_SHARE  False sharing
        ENERGY  Power and Energy consumption
        DIVIDE  Divide unit information
          DATA  Load to store ratio
  CYCLE_STALLS  Cycle Activities (Stalls)
CYCLE_ACTIVITY  Cycle Activities
         CLOCK  Power and Energy consumption
          CBOX  CBOX related data and metrics
        CACHES  Cache bandwidth in MBytes/s
        BRANCH  Branch prediction miss rate/ratio

«Каждое ядро имеет уникальный номер на аппаратном уровне, он называется APIC ID (Advanced Programmable Interrupt Controller ID).»

Saakx
() автор топика
Последнее исправление: Saakx (всего исправлений: 2)

Какой-то жутко расплывчатый вопрос. Кто мы? Про какие конкретно связи эти мы хотят знать? Для каких моделей процессоров? А что если там не кольцо а mesh/grid? А что если в следующей итерации intel к P, E и LPE ядрам, добавит какие-нибудь Super P?

cobold ★★★★★
()
Ответ на: комментарий от cobold

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

zloy_starper ★★★
()
Ответ на: комментарий от zloy_starper

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

cobold ★★★★★
()
Ответ на: комментарий от zloy_starper

В любой ОС общего назначения контроль времени исполнения операций выполняется с точностью плюс минус телеграфный столб.

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

VIT ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.