2016-01-22 3 views

ответ

1

Существует, по крайней мере, три метода для отслеживания виртуального адреса L1-кеша с использованием физических адресов.

Возможно, наиболее очевидным является использование инклюзивного кэша L2, адресованного физическими адресами, и включая информацию о том, какой набор и способ занимает блок (если он находится в L1). Свойству включения нужно применять только теги, например, предоставляя в два раза больше способов ассоциативности в тегах, как в блоках данных из памяти. Это может привести к пропуску в L2, требующему выселения строки кеша L1, когда ассоциативность L2 недостаточна для обработки всех блоков в L1, которые сопоставляются с данным индексом. Такие выселения, как правило, редко приводят к типичной емкости L2 и ассоциативности.

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

Второй метод тесно связан с первым - это повторить теги в физически адресуемой структуре. (Если эта структура связана с L2, ее можно рассматривать как версию тега-включительно L2.) Это позволяет процессору получить доступ к кешу с использованием виртуальных адресов, в то время как snoops используют физические адреса. Физически адресуемое хранилище тегов может иметь относительно высокую ассоциативность, но поскольку snoops являются менее распространенными, чем кэш-память процессора, запросы могут быть сделаны медленнее, чтобы экономить энергию (и область).

(Теоретически это вспомогательное хранилище тегов может быть фильтром, например, с использованием частичных тегов, которые обычно указывают на пропуски snoop и, как правило, ограничивают возможности для одного. Имея только один виртуальный тег в L1 для проверки, производительность потеря от отслеживания доступа к фактически индексированным тегам L1 и использование TLB для перевода может быть приемлемым. Хотя snoop может в принципе получить все возможные виртуальные теги, соответствующие физическому адресу, и перевести их и проверить, это, как правило, было бы неприемлемыми служебными данными. Для прямого отображения L1, не превышающего размер страницы, это может быть приемлемым, поэтому это может считаться другим методом. Кроме того, могут быть предложены другие механизмы фильтрации. Раскраска страниц может уменьшить количество адресов, которые будут переведены в ассоциативность от L1.)

Третий способ - предоставить обратный TLB, который преобразует физические адреса в виртуальные адреса. (Я, кажется, помню, что читал, что процессор HP-RISC использовал этот метод.) Обратный промах TLB указывает, что исследуемый физический адрес не находится в L1. Это может привести к обратному недействительности, когда новый перевод должен удалить перевод, который все еще имеет блоки в L1.

Фактически проиндексировано и физически отмечено L1 может просто исследовать дополнительные возможные способы отслеживания. Это может помешать доступу процессора к L1, но в скалярном процессоре может быть достаточная пропускная способность тега кэша данных, чтобы обычно поддерживать зонды доступа и snoop, если только один или два бита индексации виртуальных адресов не соответствуют физическим битам адреса, тогда только два или потребуется четыре зонда. (Дополнительная ширина полосы пропускания, предоставляемая для отслеживания, также может использоваться для предварительных настроек программного обеспечения и для обеспечения последовательного доступа к данным тегов для экономии энергии, когда больше доступа готово для проверки кеша, чем поддерживаются путями данных.)