Проблема с информацией, отображаемой командой 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

person c yj    schedule 09.12.2020    source источник


Ответы (2)


Используя другие числа, которые дал вам 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_(client) ) для проверки; эти источники указывают, что каждое из 12 ядер имеет 2,5 МБ (20-канального ассоциативного) кэша L3, соединенного своего рода кольцевой шиной (что дает в общей сложности 30 МБ кэш-памяти L3 для чипа).

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

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

person Brendan    schedule 09.12.2020
comment
Спасибо за ваш ответ. Это действительно полезно. Но я хочу знать, как получается у каждого из 12 ядер по 2,5 МБ (20-канального ассоциативного) кэша L3? Потому что это всего 30 МБ и всего 12 ядер. Рассчитано ли 30 МБ/12 = 2,5 МБ? Означает ли это, что каждое ядро ​​подключено к слайсу LLC? Означает ли это, что слайсов будет столько, сколько ядер? - person c yj; 09.12.2020
comment
@cyj: Как правило, да, процессоры Intel имеют по одному фрагменту L3 на ядро, как я прокомментировал ваш предыдущий вопрос. Для ЦП возможно может быть отключено ядро, но не его часть L3, но я не знаю, есть ли у Intel какие-либо SKU (номера моделей) с большим количеством L3, чем вы ожидаете на ядро. для этой микроархитектуры. (У некоторых было меньше L3 на ядро, чем 2,5M) - person Peter Cordes; 09.12.2020
comment
Xeon E5 (v1, v2, v3, v4) имеет как ядро, так и слайс LLC размером 2,5 МБ в каждом месте кольца. Большинство моделей имеют одинаковое количество включенных ядер и сегментов LLC, но в некоторых из них включено больше сегментов LLC, чем ядер. Похоже, что некоторые модели могут поддерживать только 2,0 МБ каждого слайса LLC (при 16-сторонней ассоциативности), но большинство из них позволяют использовать все 2,5 МБ. Аналогичные проблемы возникают с более новыми масштабируемыми процессорами Xeon, но с слайсами LLC размером 1,375 МБ (11-канальная ассоциативная связь). Во многих моделях с меньшим количеством ядер включено больше слайсов LLC, чем ядер, например, Xeon Gold 5222 имеет 4 ядра и 12 слайсов LLC. - person John D McCalpin; 10.12.2020

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

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

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

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

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

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

person Hadi Brais    schedule 09.12.2020