Политика кэширования процессора Intel

У меня есть ноутбук с процессором Intel (R) Core (TM) i5-2450M с процессором 2,50 ГГц. Я на Ubuntu 12.04 (x86_64), и я пытаюсь найти информацию о моем процессоре.

Мне удалось найти большую часть информации, которую я искал, используя

cat /proc/cpuinfo

и

lscpu

То, что я хочу узнать, - это политика кэша, используемая на каждом уровне кеша. Это запись или запись через?

Есть ли какой-нибудь инструмент, который я могу использовать для поиска такой информации?

Спасибо заранее.

Ответ 1

Это не то, что вы можете запросить у CPUID или такого, и вы не можете настроить свой CPU на то, чтобы сделать то или другое, поэтому не существует инструмента для запросов. То, что вы можете запросить, - это ассоциативность кэша, размер строки кеша и размер кеша, например, через /proc/cpuinfo.

Все Intel-совместимые процессоры в течение последних одного/двух десятилетий использовали стратегию обратной записи для кэшей (которая предполагает выборку первой строки кэша для частичной записи). Конечно, теория, реальность намного сложнее, чем это.

Практически все процессоры (включая вашу модель) имеют одну или несколько форм комбинирования записи (или заполняют буферы, как Intel называет ее с Merom), и все, кроме самых античных Intel-совместимых процессоров, поддерживают неактивные записи из регистров SSE (что снова использует форму записи-объединения). И, конечно же, есть такие вещи, как протоколы согласованности кеш-памяти и фильтрация snoop и другие механизмы для обеспечения согласованности кеша как между ядрами одного процессора, так и между разными процессорами в многопроцессорной системе.
Тем не менее - общая политика кэширования все еще сохраняется.

Ответ 2

Дэвид Кантер (David Kanter): отличная запись Intel Sandybridge охватывает подсистему памяти и архитектуру кеша: L1D - это обычная для Intel обратная запись, а для каждого ядра L2 - обратная запись. Как и L3 (большой инклюзивный кеш, общий для всех ядер чипа).

См. Также Какой метод отображения кэша используется в процессоре Intel Core i7? для более подробной информации о различных поколениях процессоров Intel.


AMD использует совершенно другой подход: их кэш-память первого уровня является сквозной, но с крошечным 4-килобайтным комбинирующим кэшем записи. Постоянное переписывание буфера размером более 4 Кбайт в AMD будет узким местом на (медленном) L2 вместо L1.

Один из авторов этой темы в блоге Агнера утверждает, что BD L2 также записан, но комментарии Пола Клэйтона к этому ответу не совпадают. (Я склонен верить Полу.)

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 с 6MiB L3)