Проблема с информацией, отображаемой командой cpuid

#caching #x86 #cpu-architecture #cpu-cache #cpuid

# #кэширование #x86 #cpu-архитектура #процессор-кэш #cpuid

Вопрос:

Информация о llc кэше, отображаемая с помощью cpuid command linux, является:

   --- cache 3 ---
      cache type                           = unified cache (3)
      cache level                          = 0x3 (3)
      self-initializing cache level        = true
      fully associative cache              = false
      extra threads sharing this cache     = 0x1f (31)
      extra processor cores on this die    = 0xf (15)
      system coherency line size           = 0x3f (63)
      physical line partitions             = 0x0 (0)
      ways of associativity                = 0x13 (19)
      ways of associativity                = 0x6 (6)
      WBINVD/INVD behavior on lower caches = false
      inclusive to lower caches            = true
      complex cache indexing               = true
      number of sets - 1 (s)               = 24575
 

Почему их два ways of associativity ? И он показывает 20 в /sys/devices/system/cpu/cpu0/cache/index3/number_of_sets файле? Является ли 20 степенью ассоциации LLC? Что ways of associativity = 0x6 (6) здесь показывает? Как мне определить, сколько наборов кэша имеет каждый фрагмент? Спасибо.

Я использую сервер. Версия: Linux version 4.15.0-122-generic (buildd@lcy01-amd64-010) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)) #124~16.04.1-Ubuntu SMP.

Информация о процессоре

 Architecture: x86_64
 CPU operating mode: 32-bit, 64-bit
 Byte Order: Little Endian
 CPU(s): 48
 On-line CPU(s) list: 0-47
 Number of threads per core: 2
 Number of audits per seat: 12
 Socket(s): 2
 NUMA nodes: 2
 Vendor ID: GenuineIntel
 CPU series: 6
 Model: 79
 Model name: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
 Step: 1
 CPU MHz: 2500.119
 CPU max MHz: 2900.0000
 CPU min MHz: 1200.0000
 BogoMIPS: 4401.87
 Virtualization: VT-x
 L1d cache: 32K
 L1i cache: 32K
 L2 cache: 256K
 L3 cache: 30720K
 NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42 ,44,46
 NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43 ,45,47
 

Ответ №1:

Использование других номеров, которые вам дал Linux:

 size = bytes_per_line * sets * associativity
30720 KiB = 64 * 24576 * associativity
30720 KiB = 1536 KiB * associativity
30720 KiB / 1536 KiB = associativity
20 = associativity
 

Использование информации из https://ark.intel.com/content/www/us/en/ark/products/91767/intel-xeon-processor-e5-2650-v4-30m-cache-2-20-ghz.html и https://en.wikichip.org/wiki/intel/microarchitectures/broadwell_ (клиент)) для проверки; эти источники указывают, что каждое из 12 ядер имеет 2,5 Мбайт (20-полосного ассоциативного) кэша L3, соединенного своего рода кольцевой шиной (что дает в общей сложности 30 Мбайт кэша L3 для чипа).

Используя это как «дважды проверенную реальность», я бы предположил, что оба отображаемых значения «способов ассоциативности» неверны; и что первое («способы ассоциативности = 19») может отображать «ассоциативность — 1″ (аналогично тому, как они были слишком ленивы, чтобы добавить 1 к»количество наборов — 1»), не говоря об этом (не говоря «способы ассоциативности — 1 = 19»). Я понятия не имею, откуда взялся второй «способ ассоциативности = 6» (чип использует «6-way associative» для общего TLB, поэтому, возможно, он отобразил это в неправильном месте).

Обратите внимание, что у вас есть 2 чипа (в 2 сокетах), и все вышеперечисленное указано «на чип» (это будут две отдельные группы кэшей L3 объемом 30 Мбайт).

Комментарии:

1. Спасибо за ваш ответ. Это действительно полезно. Но я хочу знать, как каждое из 12 ядер имеет 2,5 Мбайт (20-полосного ассоциативного) кэша L3? Потому что всего 30 МБ и всего 12 ядер. Вычисляется ли 30 МБ / 12 = 2,5 МБ? Означает ли это, что каждое ядро подключено к срезу LLC? Означает ли это, что будет столько срезов, сколько ядер?

2. @cyj: Как правило, да, процессоры Intel имеют один фрагмент L3 на ядро, как я прокомментировал ваш предыдущий вопрос. Для процессора может быть отключено ядро, но не его фрагмент L3, но я не знаю, есть ли у Intel какие-либо артикулы (номера моделей) с большим количеством L3, чем вы ожидаете на ядро для этой микроархитектуры. (У некоторых было меньше L3 на ядро, чем 2,5М)

3. Xeon E5 (v1, v2, v3, v4) имеют как ядро, так и фрагмент размером 2,5 МиБ ООО в каждом местоположении на кольце (кольцах). Большинство моделей имеют одинаковое количество включенных ядер и срезов LLC, но в некоторых включено больше срезов LLC, чем ядер. Похоже, что некоторые модели могут включать только 2,0 МБАЙТ каждого среза LLC (при 16-полосной ассоциативности), но большинство из них включают все 2,5 Мбайт. Аналогичные проблемы возникают с более новыми процессорами Xeon Scalable, но с фрагментами размером 1,375 ООО Мб (11-полосная ассоциативная связь). Во многих моделях с меньшим количеством ядер включено больше срезов LLC, чем ядер, например, в Xeon Gold 5222 включено 4 ядра и 12 срезов LLC.

Ответ №2:

cpuid в версиях 20150606 до 20170122 включительно есть ошибка, из-за которой количество способов кэширования печатается дважды при декодировании CPUID информации конечного кэша 0x4. Во второй раз используется значение в регистре EDX , которое фактически кодирует разные фрагменты информации (см. Руководство). Это значение равно 110 в двоичном формате на вашем процессоре.

cpuid версии до 20200-120 неправильно отображали «способы ассоциативности» вместо «способы ассоциативности — 1». Некоторая CPUID информация кодируется как фактическое число минус один, потому что для кодирования того же диапазона положительных целых чисел потребовалось бы на один бит меньше.

Начиная с cpuid версии 20200211, автор инструмента изменил свое мнение и решил, что автоматическое добавление инструмента лучше, чем отображение необработанных значений. Таким образом, в этих версиях вы получите для своего процессора следующий вывод:

 ways of associativity                = 0x14 (20)
.
.
.
number of sets (s)                   = 24576
 

Вы можете отслеживать изменения в cpuid инструменте на веб-сайте инструмента. Кстати, в старых версиях много ошибок.

В некоторых случаях CPUID информация, предоставляемая самим процессором, неверна. Обычно, когда есть несоответствие между различными официальными источниками, по крайней мере, один из них неверен. CPUID Информация для вашего процессора верна.