Я наблюдаю последние микроархитектуры Intel (Nehalem/SB/IB и Haswell). Я пытаюсь выяснить, что происходит (на довольно упрощенном уровне), когда делается запрос данных. Пока у меня есть эта общая идея:
- Механизм выполнения делает запрос данных
- "Управление памятью" запрашивает DTLB L1
- Если вышеуказанное пропущено, теперь запрашивается TLB L2
В этот момент могут произойти две вещи: промах или попадание:
-
Если он попадает в CPU, то он пытается кэшировать L1D/L2/L3, таблицу страниц, а затем основную память/жесткий диск в этом порядке?
-
Если его пропустить - процессор запрашивает (встроенный контроллер памяти?) запрашивать проверку таблицы страниц, хранящейся в ОЗУ (я получил там роль IMC?).
Если кто-то может отредактировать/предоставить набор пулевых точек, которые предоставляют базовый "обзор" того, что делает ЦП от запроса данных двигателя выполнения, включая
- L1 DTLB (данные TLB)
- L2 TLB (данные + команда TLB)
- Кэш L1D (кэш данных)
- Кэш L2 (кеш данных + команда)
- Кэш L3 (кеш данных + команда)
- Часть процессора, который контролирует доступ к основной памяти
- Таблица страниц
это было бы очень полезно. Я нашел полезные изображения:
- http://www.realworldtech.com/wp-content/uploads/2012/10/haswell-41.png
- http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Intel_Core2_arch.svg/1052px-Intel_Core2_arch.svg.png
но они действительно не разделяли взаимодействие между TLB и кэшами.
UPDATE: изменили выше, как я думаю. Теперь я понимаю. TLB просто получает физический адрес от виртуального. Если есть ошибка - у нас проблемы, и вам нужно проверить таблицу страниц. Если есть хит, мы просто продолжаем вниз по иерархии памяти, начиная с кеша L1D.