На микропроцессоре с аппаратным управлением TLB (скажем, Intel x86-64), если происходит пропадание TLB, и процессор просматривает таблицу страниц, эти (не связанные с микросхемой) обращения к памяти проходят через иерархию кеша (L1, L2 и т. Д.). )?
12
Ответы:
Да, насколько я могу судить, на процессорах Intel x86-64, когда происходит пропадание TLB и процессор просматривает таблицу страниц, эти обращения к памяти вне кристалла проходят через иерархию кеша.
Я все еще немного размышляю над некоторыми деталями, и я надеюсь, что какой-то другой ответ заполнит их - разве нет руководства Intel или AMD, в котором описываются мучительные детали страницы? Мое понимание таково:
Диаграмма на странице 2 Томаса В. Барра, Алана Л. Кокса, Скотта Рикснера. «Кэширование перевода: пропустить, не ходить (таблица страниц)», которое рисует линию между «записями, хранящимися в кэше MMU» и «записями, хранящимися в кэше данных L2». (Это может быть полезным документом для людей, разрабатывающих новые процессоры , который полностью посвящен теме «Дизайн электроники»).
Стефан Эраниан и Дэвид Мосбергер. «Виртуальная память в ядре IA-64 Linux» и Ульрих Дреппер. «Что каждый программист должен знать о памяти» (Это может быть полезным документом для людей, пишущих операционные системы, работающие с таблицей страниц IA-64, что немного не по теме для ED - возможно, переполнение стека с помощью «операционных системный тег или тег «osdev» или вики OSDev.org были бы лучшим местом для этой темы).
Таблица A-10 на стр. 533 Intel. «Руководство разработчика программного обеспечения Intel® 64 и IA-32 для архитектур» «PAGE_WALKS.CYCLES ... может указывать на то, удовлетворяет ли большинство переходов по страницам кешами или вызывает пропадание кэша L2».
источник
invlpg
для аннулирования любого кэширования TLB для данного виртуального адреса addr. Если HW pagewalk не находит запись для этого виртуального адреса, или разрешения записи не разрешают доступ, вы получаете#PF
исключение. Операционная система справляется с этим путем обновления таблицы страниц (возможно, после подкачки данных с диска или выполнения копирования при записи), а затем возобновления, чтобы сбой загрузки / сохранения перезапустился и HW pagewalk завершился успешно.Я склонен согласиться с тем, что это относится к обмену стеками компьютерной архитектуры, а не к обмену стека электроники, но, поскольку это здесь:
@Davidcary правильно.
Немного истории:
Прогулки по таблицам Intel x86 НЕ кэшировались вплоть до P5, иначе Pentium. Точнее, обращения к памяти таблицы страниц не кэшировались, обошли кеш. Поскольку большинство машин до этого времени проходили сквозную запись, они получали значения, соответствующие кешу. Но они не отследили тайники.
P6, иначе Pentium Pro и AFAIK во всех последующих обходах таблиц процессоров были разрешены доступ к кешу и использование значения, извлеченного из кеша. Таким образом, они работали с кешами обратной записи. (Конечно, вы можете поместить таблицы страниц в не кэшируемую память, определенную, например, MTRR. Но это большая потеря производительности, хотя это может быть полезно для отладки ОС.)
Кстати, этот «доступ к памяти для обхода таблицы страниц может обращаться к кэшам данных» отдельно от «записи таблицы страниц могут храниться (кэшироваться) в TLB Ttranslation Lookaside Buffer)». На некоторых машинах TLB называется «Кэш перевода».
Другая связанная проблема заключается в том, что внутренние узлы таблиц страниц могут кэшироваться в еще большем количестве TLB-подобных структур данных, например, в кэш-памяти PDE.
Одно ключевое отличие: кеш данных связен и отслежен. Но кэши TLB и PDE не отслеживаются, то есть не являются связными. Суть в том, что, поскольку таблицы страниц могут кэшироваться в некогерентных TLB и PDE-кэшах и т. Д., Программное обеспечение должно явно сбрасывать либо отдельные записи, либо групповые группы (например, весь TLB), когда записи таблицы страниц, которые могли быть кэшированные изменены. По крайней мере, когда меняли «опасным» образом, переходя от RW-> R-> I или меняя адреса.
Я думаю, будет справедливо сказать, что каждый раз, когда добавляется новый тип некогерентного TLB-подобного кэширования, некоторые ОС ломаются, потому что у них были неявные предположения, что это не было сделано.
источник