#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
Информация для вашего процессора верна.