Как ЦП делает запрос данных через TLB и кеши?

Я наблюдаю последние микроархитектуры Intel (Nehalem/SB/IB и Haswell). Я пытаюсь выяснить, что происходит (на довольно упрощенном уровне), когда делается запрос данных. Пока у меня есть эта общая идея:

  • Механизм выполнения делает запрос данных
  • "Управление памятью" запрашивает DTLB L1
  • Если вышеуказанное пропущено, теперь запрашивается TLB L2

В этот момент могут произойти две вещи: промах или попадание:

  • Если он попадает в CPU, то он пытается кэшировать L1D/L2/L3, таблицу страниц, а затем основную память/жесткий диск в этом порядке?

  • Если его пропустить - процессор запрашивает (встроенный контроллер памяти?) запрашивать проверку таблицы страниц, хранящейся в ОЗУ (я получил там роль IMC?).

Если кто-то может отредактировать/предоставить набор пулевых точек, которые предоставляют базовый "обзор" того, что делает ЦП от запроса данных двигателя выполнения, включая

  • L1 DTLB (данные TLB)
  • L2 TLB (данные + команда TLB)
  • Кэш L1D (кэш данных)
  • Кэш L2 (кеш данных + команда)
  • Кэш L3 (кеш данных + команда)
  • Часть процессора, который контролирует доступ к основной памяти
  • Таблица страниц

это было бы очень полезно. Я нашел полезные изображения:

но они действительно не разделяли взаимодействие между TLB и кэшами.

UPDATE: изменили выше, как я думаю. Теперь я понимаю. TLB просто получает физический адрес от виртуального. Если есть ошибка - у нас проблемы, и вам нужно проверить таблицу страниц. Если есть хит, мы просто продолжаем вниз по иерархии памяти, начиная с кеша L1D.

Ответ 1

Карта pagemap применима только для преобразования виртуального и физического адресов. Однако, поскольку он находится в памяти и только частично кэшируется в TLB, вам может потребоваться доступ к нему там во время процесса перевода.

Основной поток выглядит следующим образом:

  • Выполнение вычисляет адрес (фактически некоторые вычисления, такие как масштабирование и смещения, могут выполняться в блоке памяти).
  • Поиск в DTLB
    2.а Если пропущено, найдите в TLB второго уровня.
    2.a.a. если пропущено - запустите прохождение страницы.
    2.a.b. если ударить TLB 2-го уровня, залейте в DTLB и приступите к новому физическому адресу
    2.b. попадает в DTLB с физическим адресом
  • Посмотрите на L1, если пропустили - найдите L2, если пропустили снова поиск L3, если пропущено - отправьте на контроллер памяти, дождитесь доступа к DRAM.
  • Когда данные возвращаются (с любого уровня), заполняйте кеши по пути (в зависимости от политики заполнения, доступности кэша и временных характеристик инструкций, типа области памяти и, возможно, других факторов).

Если требуется прокрутка страницы, главный запрос запроса и выдача физических нагрузок на страницу pagemap (в соответствии с архитектурным определением). В x86 он может включать в себя CR3, PDPTR, PDP, PDE, PTE и т.д. В зависимости от режима подкачки, размеров страниц и т.д. Обратите внимание, что при виртуализации на каждом уровне прокрутки на виртуальной машине может потребоваться полный доступ к странице на хосте ( так что вы фактически набираете количество шагов).

Обратите внимание, что pagemap - это в основном древовидная структура, где каждый доступ зависит от значения предыдущего (и части виртуального адреса, который вы переводите). Поэтому эти обращения зависят, и только один раз, когда последний выполняется, вы получаете физический адрес и можете вернуться к # 3. Все время линия, которую вы хотите, может сидеть в вашем L1, если вы не в состоянии знать (хотя, если честно, если вы сделали перерыв страницы, у вас вряд ли будет линия в верхних кэшах).

Другие важные примечания - pagemap находится в физическом пространстве и получает доступ к этому пути. Вы не хотите переводить доступ, который вам нужен для перевода, это может быть тупик:)
Что еще более важно, данные pagemap могут кэшироваться, так что, хотя простой доступ к памяти может расширяться до нескольких из-за пропусков TLB, прокрутка по-прежнему может быть довольно дешевой.

Ответ 2

Да, как объяснено в длинном описании здесь:

http://lwn.net/Articles/252125/

переход от CPU к L1-L2-L3 иллюстрируется наглядно.

enter image description here