Как ЦП запрашивает данные через TLB и кеши?

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

  1. Механизм выполнения выполняет запрос данных
  2. «Управление памятью» запрашивает L1 DTLB
  3. Если вышеупомянутое отсутствует, TLB L2 теперь запрашивается.

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

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

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

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

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

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

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

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


person user997112    schedule 22.03.2014    source источник
comment
См. Также вопрос (от того же пользователя) о , загружается ли обход страницы до разрешить промах TLB из кеша или нет. Я откопал кое-что интересное.   -  person Peter Cordes    schedule 29.05.2016


Ответы (2)


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

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

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

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

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

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

person Leeor    schedule 22.03.2014
comment
Отличный ответ! Я проверил руководство по архитектуре Intel 1a, но у него не было схемы этого ?? Не могли бы вы порекомендовать какие-либо ресурсы? Одно - у вас есть STLB для 2.a.b - на мгновение я подумал, что S означает статичность, а затем я посмотрел на свою клавиатуру и ее рядом с буквой D. - person user997112; 23.03.2014
comment
@ user997112, извините, опечатка. На самом деле STLB используется здесь и там (S означает второй уровень), но там он избыточен, и я подумал, что без этого было бы проще. Что касается диаграмм, я не знаю хороших, кроме этих, но для более глубокого обзора вы должны прочитать руководства для разработчиков программного обеспечения - person Leeor; 23.03.2014

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

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

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

введите описание изображения здесь

person Peter Teoh    schedule 23.03.2014