Политика Intel CPU Cache
У меня есть ноутбук с процессором Intel® Core ™ TM i5-2450M с тактовой частотой 2,50 ГГц. Я на Ubuntu 12.04 (x86_64) и пытаюсь найти информацию о моем процессоре.
Я смог найти большую часть информации, которую искал, используя
cat /proc/cpuinfo
а также
lscpu
То, что я также хочу выяснить, - это политика кэширования, которая используется на каждом уровне кэша. Это написать обратно или написать через?
Есть ли какой-нибудь инструмент, который я могу использовать, чтобы узнать такую информацию?
Заранее спасибо.
2 ответа
Это не то, что вы можете запросить из CPUID или чего-то подобного, и вы не можете настроить свой CPU на выполнение одного или другого, поэтому не существует инструмента для запросов. Вы можете запросить ассоциативность кэша, размер строки кэша и размер кэша, например, через /proc/cpuinfo
,
Все Intel-совместимые процессоры в течение последних одного-двух десятилетий использовали стратегию обратной записи для кэшей (которая предполагает выбор строки кэша в первую очередь для частичной записи). Конечно, это теория, реальность немного сложнее, чем это.
Практически все процессоры (включая вашу модель) имеют одну или несколько форм комбинирования записи (или заполняют буферы, как Intel называет это со времен Merom), и все, кроме самых старых, совместимых с Intel процессоров, поддерживают некэшированные записи из регистров SSE (в котором снова используется форма сочинения-сочинения). И, конечно же, существуют такие вещи, как протоколы когерентности кэша на кристалле и snoop-фильтрация и другие механизмы, обеспечивающие когерентность кэша как между ядрами одного процессора, так и между различными процессорами в многопроцессорной системе.
Тем не менее, общая политика кэширования все еще имеет обратную запись.
Очень хорошая запись Дэвида Кантера для Intel Sandybridge охватывает подсистему памяти и архитектуру кеша: L1D - это обычная для Intel обратная запись, а для каждого ядра L2 - обратная запись. Так же как и L3 (большой инклюзивный кеш, общий для всех ядер чипа).
AMD использует совершенно другой подход: их кэш-память первого уровня - сквозная, но с крошечным 4-килобайтным комбинирующим кэшем. Постоянное переписывание буфера размером более 4 Кбайт в AMD будет узким местом на (медленном) L2 вместо L1.
Один из постеров в этой ветке в блоге Агнера утверждает, что L2 BD также записан, но комментарии Пола Клэйтона на этот ответ не согласны. (Я склонен верить Полу.)
AMD Ryzen, к счастью, использует нормальный 8-канальный L1D с обратной записью 32 кБ, с частной записью 512 кБ L2. L3 - это общий 8 МБ кэш-памяти жертв. Это обратная запись, но кэш-память жертвы означает, что данные поступают в нее только при удалении из L1/L2, а не напрямую для загрузки / предварительной выборки. Каждый ядро-кластер (модуль CCX) из 4 ядер имеет свой собственный 8 МБ L3, и задержка / пропускная способность между ядрами в разных кластерах плохая.
Об иерархии кэша можно сказать гораздо больше, чем просто обратная запись или сквозная запись, хотя большинство различий не имеют значения для однопоточных программ. (Если планировщик процессов ОС не перемещает их между кластерами на Ryzen, в этом случае это плохо.)
В моей системе SnB:
sudo dmidecode
производит продукцию, которая включает в себя:
Handle 0x0005, DMI type 7, 19 bytes
Cache Information
Socket Designation: L1-Cache
Configuration: Enabled, Not Socketed, Level 1
Operational Mode: Write Back
Location: Internal
Installed Size: 32 kB
Maximum Size: 32 kB
Supported SRAM Types:
Other
Installed SRAM Type: Other
Speed: Unknown
Error Correction Type: None
System Type: Unified
Associativity: 8-way Set-associative
Так что тот факт, что кэш-память с обратной записью, по крайней мере в BIOS, если это заслуживает доверия. Мне любопытно, что это показывает на процессоре AMD, или если разработчики BIOS имеют тенденцию просто "что-то придумывать", а иногда и помещать туда неправильные значения.
Как указывает этот вопрос, информация для L2 является своего рода фальшивой: она насчитывает частный 256k на ядро L2:
Handle 0x0006, DMI type 7, 19 bytes
Cache Information
Socket Designation: L2-Cache
Configuration: Enabled, Not Socketed, Level 2
Operational Mode: Varies With Memory Address
Location: Internal
Installed Size: 1024 kB
Maximum Size: 1024 kB
Supported SRAM Types:
Other
Installed SRAM Type: Other
Speed: Unknown
Error Correction Type: None
System Type: Unified
Associativity: 8-way Set-associative
Handle 0x0007, DMI type 7, 19 bytes
Cache Information
Socket Designation: L3-Cache
Configuration: Enabled, Not Socketed, Level 3
Operational Mode: Unknown
Location: Internal
Installed Size: 6144 kB
Maximum Size: 6144 kB
Supported SRAM Types:
Other
Installed SRAM Type: Other
Speed: Unknown
Error Correction Type: None
System Type: Unified
Associativity: Other
Это на i5-2500k (четырехъядерный процессор SnB с 6 МБ L3)