- •Последовательность адресов в пакетном цикле Pentium
- •Характеристики элементов кэша для процессоров Pentium
- •Доступность методов кэширования в процессорах
- •Типы памяти, определяемые регистром pat и регистрами mttr
- •Выбор элемента в pat, а также тип памяти, определяемый по аппаратному сбросу
- •Тип памяти страницы для процессоров использующих бит paTi
- •Вопросы для самопроверки.
Характеристики элементов кэша для процессоров Pentium
Средство |
Характеристики |
Кэш трассировки |
Pentium 4: 12K-микроопераций, 8WSA |
Кэш инструкций L1 |
Pentium 4: отсутствует P6 и Pentium: 8/16 КB (2WSA в первых Pentium’ax). |
Кэш данных L1 |
Pentium 4: 8KB, 4WSA P6 и Pentium: 8/16 КB, 4WSA (2WSA в первых процессорах Pentium и Р6). |
Объединенный кэш L2 |
Pentium 4: 256/512КВ, 8WSAS P6: 128/256/512/1024/2048 Кбайт, 4WSA Pentium: внешний, на плате, обычно 256/512 КВ, 4WSA |
Объединенный кэш L3 |
Pentium 4: 512/1024КВ, 8WSAS P6, Pentium: отсутствует |
TLB инструкций для 4КB страниц |
Pentium 4: 128 элементов, 4WSA P6, Pentium: 32 элемента, 4WSA Pentium MMX: 32 элемента, ассоциативный |
TLB данных для 4КB страниц |
Pentium 4: 64 элемента, ассоциативный; общий с TLB данных для больших страниц P6, Pentium: 64 элемента, 4WSA Pentium MMX: 64 элемента, ассоциативный; общий с TLB данных для больших страниц |
TLB инструкций для больших страниц |
Pentium 4: большие страницы фрагментируются P6: 2 элемента, ассоциативный тип Pentium: тот же, что и для 4КВ страниц |
TLB данных для больших страниц |
Pentium 4: тот же, что и для 4КВ страниц P6: 8 элементов, 4WSA Pentium: 8 элементов, 4WSA Pentium MMX: тот же, что и для 4КВ страниц |
Буферы записи |
Pentium 4: 24 элемента P6: 12 элементов Pentium: 2 буфера по 1 элементу Pentium MMX: 4 буфера по 1 элементу |
WC-буферы |
Pentium 4: 6 элементов P6: 4 элемента Pentium: отсутствует |
Пояснения.
nWSA – n-канальный наборно-ассоциативный кэш (Ways Set-Associative),
nWSAS – n-канальный наборно-ассоциативный, секторированный кэш (Ways Set-Associative, Sectored)
Кэш-память процессоров строится с учетом возможности обращений к памяти со стороны внешних абонентов – других процессоров или иных контроллеров шины. Процессоры имеют механизмы внешнего слежения за состоянием собственного кэша с соответствующими аппаратными интерфейсами. Для поддержания согласованности данных кэша и основной памяти процессор отрабатывает циклы слежения или опроса (Snoop Cycle или Inquire Cycle), инициированные внешней (для него) системой. В этих циклах, происходящих при обращении к памяти со стороны внешнего абонента, процессор определяет присутствие затребованной области в своем собственном кэше. Если область отображается в кэше, то действия процессора зависят от состояния соответствующей строки кэша и типа внешнего обращения. Обращение по записи вызовет аннулирование данной строки. Обращение по чтению к области, соответствующей модифицированной («грязной») строке, вызовет выгрузку ее содержимого в основную память, прежде чем внешний абонент выполнит реальное считывание. В процессорах P6+ обращение к «грязной» строке со стороны другого процессора может вызывать выгрузку ее содержимого непосредственно в обращающийся процессор, что экономит время. Выгрузка этой строки в основную память будет произведена позже, согласно алгоритму обратной записи.
Кэш процессоров, начиная с Pentium, поддерживает протокол MESI, названный по определяемым им состояниям М (Modified), E (Exclusive), S (Shared) и I (Invalid). Состояния строк для каждого процессора определяются следующим образом:
М-состояние – строка присутствует в кэше только этого процессора и модифицирована, то есть отличается от содержимого основной памяти. Запись в эту строку не приведет к генерации внешнего (по отношению к локальной шине) цикла обращения;
E-состояние – строка присутствует в кэше только этого процессора, но не модифицирована (ее копия в основной памяти действительна). Запись переведет ее в М-состояние, не вызывая внешнего цикла обращения;
S-состояние – строка присутствует в кэше этого процессора и потенциально может присутствовать в кэшах других процессоров, копия в памяти действительна. Запись в нее должна сопровождаться сквозной записью в основную память, что повлечет аннулирование соответствующих строк в других кэшах;
I-состояние – строка отсутствует в кэше, ее чтение может привести к генерации цикла заполнения строки. Запись в нее будет сквозной и выйдет на внешнюю шину.
Кэш инструкций L1 реализует протокол лишь в части «SI», поскольку он не допускает записи. Процессор контролирует операции записи в память на попадание в область, представленную в кэше инструкций. Контроль выполняется на уровне физических адресов, в случае попадания строка аннулируется. На случай самомодифицирующегося кода в Р5+ дополнительно выполняется контроль на попадание записи в предварительно выбранные инструкции. Этот контроль выполняется на уровне линейных адресов, в случае попадания очередь предварительно выбранных инструкций аннулируется. Если программа модифицирует область кода, обращаясь к нему через иной линейный адрес, чем тот, что используется в потоке инструкций (например путем наложения сегментов данных и инструкций), то перед выполнением модифицированной инструкции должна выполняться сериализация (см. раздел ??).
Процессоры 486 опирались на механизм, работающий аналогично протоколу MESI и контроль модификации предварительно выбранных инструкций не производился. Для корректного выполнения кода после его модификации, должна была выполняться инструкция перехода, что приводило к аннулированию очереди выбранных инструкций.
В пространстве памяти компьютера имеются области, для которых кэширование принципиально недопустимо (например, разделяемая память адаптеров) или для которых непригодна политика обратной записи. Кроме того, кэширование иногда полезно отключать при выполнении однократно исполняемых участков программы (например, инициализации) с тем, чтобы из кэша не вытеснялись более полезные фрагменты.
В процессорах шестого поколения в связи с их «беспорядочностью» и «спекулятивностью» обращения к памяти могут производиться с различными методами повышения эффективности. По возможностям кэширования память можно классифицировать следующим образом.
Некэшируемая память UC (Uncacheable). Все обращения процессора по чтению и записи выполняются строго в порядке, предписанном программным кодом, и выходят на системную шину. Никакие спекулятивные чтения и предварительные выборки не используются. Такой тип требуется для ввода/вывода, отображенного на память. Работа процессора в таком режиме с обычным ОЗУ приведет к значительному снижению производительности. Некэшируемая память делится на два подтипа:
Строго не кэшируемая память (Strong Uncacheable). К ней полностью относится приведенное определение, и она обычно обозначается UC.
Мягко не кэшируемая память (UC-), которая может быть переопределена в WC, с помощью перепрограммирования регистров MTRR.
Память с комбинируемой записью WC (Write Combining). Некэшируемая память, когерентность памяти не поддерживается протоколом шины. Спекулятивное чтение допустимо, записи могут комбинироваться и откладываться в WC буфер для снижения обращений к памяти. Пока WC буфер не заполнен, записи могут откладываться до любого события, вызывающего сериализацию (выполнение инструкции SFENCE, MFENCE, CPUID, обращение к некэшируемой памяти, прерывание, либо выполнение инструкции типа LOCK). Такой тип применим, например, для видеопамяти графического адаптера (порядок записей не важен).
Память со сквозной записью WT (Write-through). Кэшируемая память, все операции записи и отражаются в кэше, и выходят на системную шину. Чтения по возможности выполняются из кэша, кэш-промахи вызывают заполнение строк кэша. Спекулятивное чтение и комбинирование записей разрешено. Данный тип применим, например, для буферов кадров, а также для памяти, к которой могут обращаться устройства, подключенные к шине и не поддерживающие протоколов обеспечения когерентности.
Память с обратной записью WB (Write-back). Кэшируемая память, все операции чтения и записи по возможности выполняются только с кэш-памятью. Запись на системную шину выходит только при необходимости освобождения строк или по требованию от других абонентов шины, что уменьшает необязательный трафик шины. Спекулятивное чтение и комбинирование записи разрешено. Этот тип самый производительный, но требует поддержки протокола обеспечения когерентности от всех абонентов шины, обращающихся к данной области памяти.
Память с защищенной записью WP (Write protected). Кэшируемая память, чтения по возможности выполняются из кэша, промахи вызывают заполнение строк. Записи выходят на системную шину и вызывают аннулирование строк в кэшах всех остальных абонентов шины (процессоров).
Доступные методы кэширования зависят от возможностей процессора (табл. $.3). Базовые методы (сквозная и обратная запись или отмена кэширования) управляются атрибутами PCD (Page Cache Disable – запрет кэширования страницы) и PWT (Page Write Through – сквозная запись для страницы) системы управления страничной переадресации, более совершенные методы программируются только через регистры MTRR или PAT (см. ниже), если таковые имеются в процессоре.
Таблица $.3.
