Страница 2 из 9 Механизмы вытеснения блоков из кэшей Рассмотрим теперь механизмы вытеснения блоков данных из кэшей в случаях, когда необходимо освободить место для новых блоков. Существует несколько способов организации кэшей в этой части. Основным отличительным признаком является момент времени, когда в кэш следующего уровня переписывается вытесняемый модифицированный блок данных — то есть такой блок, в который с момента загрузки его в кэш произошла запись (и содержимое которого изменилось). Запись модифицированных данных в кэш более высокого уровня (L2-кэш) может происходить либо одновременно с их записью в L1-кэш, либо позднее, в момент вытеснения блока из L1-кэша. При вытеснении не модифицированного блока он обычно просто удаляется, однако при так называемой «эксклюзивной» организации он также переписывается в L2-кэш. На практике встречаются следующие разновидности кэшей: - Write-through — со сквозной (немедленной) записью модифицированных данных в L2-кэш;
- Write-back — с отложенной записью модифицированных данных из L1-кэша в L2-кэш;
- Exclusive — эксклюзивный, с отложенной записью из L1-кэша в L2-кэш как модифицированных, так и не модифицированных (чистых) данных.
В процессорах P-4 и PPC970 используется L1-кэш со сквозной записью, в P-III, P-M, P-M2 и P8 — L1-кэш с отложенной записью, а в K8 — эксклюзивный кэш. Каждый из двух основных механизмов (со сквозной и с отложенной записью) имеет свои преимущества и недостатки. Сквозная запись увеличивает нагрузку на L2-кэш, так как при каждой записи данных в L1-кэш производится их немедленное копирование в L2. С другой стороны, при необходимости освободить место в L1-кэше такой модифицированный блок может быть немедленно удалён из него, так как в L2-кэше уже имеется его копия. При отложенной записи копирование в L2-кэш производится только в момент вытеснения модифицированного блока — что позволяет избегать лишних пересылок данных, но приводит к усложнению кэшей и необходимости создания очереди для буферизации вытесняемых блоков. Термин «эксклюзивный» обычно относят к кэшу 2-го уровня, но на самом деле это совместное свойство обоих кэшей — L1 и L2. При такой организации искусственно поддерживается состояние, когда блок данных хранится только в одном из кэшей — L1 либо L2. При первоначальной загрузке из памяти блок помещается непосредственно в L1-кэш, минуя L2-кэш. При вытеснении из L1-кэша этот блок переписывается в L2-кэш для последующего сохранения (даже если он не был модифицирован). При повторном считывании блока из L2-кэша в L1-кэш он снова удаляется из L2-кэша. Необходимость копирования не модифицированных данных при вытеснении блока приводит к дополнительной нагрузке на шины передачи данных и может увеличить эффективное время доступа к L2-кэшу. С другой стороны, эффективный размер L2-кэша при эксклюзивной организации увеличивается. Например, в случае тяжёлой нагрузки на кэши данных этот эффективный размер может достигать суммы размеров кэшей L1 и L2, что подтверждается тестами. В процессоре K8 кэш инструкций также имеет эксклюзивную организацию. Такая организация позволяет при вытеснении блоков с инструкциями сохранять в L2-кэше также и служебную информацию об истории условных переходов — так называемые селекторы переходов (branch selectors). Они записываются в поля ECC (кода контроля ошибок) L2-кэша и восстанавливаются при повторном считывании инструкций в L1-кэш. Эксклюзивная организация кэша инструкций приводит к дополнительному увеличению эффективного размера L2-кэша. «Не-эксклюзивная» организация кэшей L1 и L2 не подразумевает их обязательной «инклюзивности» — блок данных или инструкций может быть вытеснен из L2-кэша и при этом сохраниться в соответствующем L1-кэше. Таким не-эксклюзивным (но и не инклюзивным) способом организованы кэши в процессорах P-III, P-4, P-M, P-M2 и P8. В процессоре PPC970 L1-кэш организован чисто инклюзивно по отношении к L2-кэшу. При вытеснении блока из L2-кэша проверяется, не сохранился ли он в L1-кэше — и в этом случае искусственно удаляется оттуда тоже. Наряду с использованием механизма сквозной записи для вытеснения данных из L1-кэша это позволяет упростить так называемую проверку когерентности кэшей в многопроцессорной (многоядерной) системе, когда другой CPU проверяет наличие данных в кэшах текущего CPU. При инклюзивной организации достаточно ограничиться проверкой L2-кэша, в то время как при других организациях необходимо проверять кэши обоих уровней. Вытеснение модифицированных данных из кэша 2-го уровня в память всегда производится по механизму отложенной записи. |