Резервный буфер трансляции

редактировать
Кэш памяти, который используется для сокращения времени, необходимого для доступа к области пользовательской памяти; Часть блока управления памятью

A трансляции (TLB ) модуля управления памятью микросхемы - это память кэш, которая используется для сокращения времени, необходимого для доступа к ячейке памяти пользователя. Он является частью блока управления памятью (MMU) микросхемы. TLB хранит последние преобразования виртуальной памяти в физической памяти и может называться кешем преобразования адресов. TLB может находиться между CPU и CPU cache, между кешем CPU и основной памятью или между различными уровнями многоуровневого кеша. Большинство процессоров для настольных ПК, ноутбуков и серверов включают в себя один или несколько TLB в аппаратном обеспечении для управления памятью, и он почти всегда присутствует в любом процессоре, который использует выгружаемый или сегментированный виртуальная память.

TLB иногда реализуется как память с адресацией по содержимому (CAM). Ключ поиска CAM - это виртуальный адрес, а результатом поиска является физический адрес. Если запрошенный адрес присутствует в TLB, поиск CAM быстро дает совпадение, и полученный физический адрес может использоваться для доступа к памяти. Это называется попаданием TLB. Если запрошенный адрес отсутствует в TLB, это промах, и преобразование продолжается путем поиска таблицы страниц в процессе, называемом обходом страниц. Обход страницы занимает много времени по сравнению со скоростью процессора, так как он включает чтение содержимого нескольких ячеек памяти и их использование для вычисления физического адреса. После того, как физический адрес определен обходом страниц, отображение виртуального адреса на физический адрес вводится в TLB. PowerPC 604, например, имеет двусторонний ассоциативный TLB для загрузки и сохранения данных. Некоторые процессоры имеют разные TLB адресов команд и данных.

Содержание

  • 1 Обзор
  • 2 Влияние на производительность
  • 3 Несколько TLB
  • 4 Обработка промахов TLB
  • 5 Типичный TLB
  • 6 Переключатель адресного пространства
  • 7 Виртуализация и x86 TLB
  • 8 См. Также
  • 9 Ссылки
  • 10 Внешние ссылки

Обзор

Общая работа TLB

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

Ссылаясь на адреса физической памяти, TLB может находиться между ЦП и кешем ЦП, между кешем ЦП и первичной памятью или между уровнями многоуровневый кеш. Размещение определяет, использует ли кэш физическую или виртуальную адресацию. Если кэш адресуется виртуально, запросы отправляются напрямую от ЦП к кешу, и доступ к TLB осуществляется только при промахе в кэше. Если кэш адресован физически, ЦП выполняет поиск TLB для каждой операции с памятью, и полученный физический адрес отправляется в кэш.

В Гарвардской архитектуре или модифицированной Гарвардской архитектуре может существовать отдельное виртуальное адресное пространство или оборудование для доступа к памяти для инструкций и данных. Это может привести к созданию отдельных TLB для каждого типа доступа, резервного буфера трансляции инструкций (ITLB) и резервного буфера трансляции данных (DTLB). Различные преимущества были продемонстрированы с отдельными TLB данных и инструкций.

TLB может использоваться как аппаратный кэш быстрого поиска. На рисунке показана работа TLB. Каждая запись в TLB состоит из двух частей: тега и значения. Если тег входящего виртуального адреса совпадает с тегом в TLB, возвращается соответствующее значение. Поскольку поиск TLB обычно является частью конвейера инструкций, поиск выполняется быстро и практически не снижает производительности. Однако для возможности поиска в конвейере команд TLB должен быть небольшим.

Обычной оптимизацией для кешей с физической адресацией является выполнение поиска TLB параллельно с доступом к кешу. При каждой ссылке на виртуальную память оборудование проверяет TLB, чтобы узнать, хранится ли в нем номер страницы. Если да, то это попадание TLB, и перевод выполняется. Номер кадра возвращается и используется для доступа к памяти. Если номер страницы отсутствует в TLB, необходимо проверить таблицу страниц. В зависимости от ЦП это может быть сделано автоматически с использованием оборудования или прерывания операционной системы. Когда номер кадра получен, его можно использовать для доступа к памяти. Кроме того, мы добавляем номер страницы и номер кадра в TLB, чтобы их можно было быстро найти при следующей ссылке. Если TLB уже заполнен, необходимо выбрать подходящий блок для замены. Существуют различные методы замены, такие как наименее недавно использованные (LRU), первый пришел - первый ушел (FIFO) и т. Д.; см. раздел преобразование адресов в статье о кэше для получения дополнительных сведений о виртуальной адресации, относящейся к кэшам и TLB.

Влияние на производительность

Блок-схема показывает работу резервного буфера трансляции. Для простоты процедура отказа страницы не упоминается.

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

Представленная блок-схема объясняет работу TLB. Если это промах TLB, то ЦП проверяет таблицу страниц на наличие записи в таблице страниц. Если текущий бит установлен, то страница находится в основной памяти, и процессор может извлечь номер кадра из записи таблицы страниц, чтобы сформировать физический адрес. Процессор также обновляет TLB, чтобы включить новую запись в таблице страниц. Наконец, если текущий бит не установлен, то требуемая страница отсутствует в основной памяти и выдается ошибка страницы . Затем вызывается прерывание отказа страницы, которое выполняет процедуру обработки отказа страницы.

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

Несколько TLB

Подобно кэшам, TLB могут иметь несколько уровней. ЦП могут быть (и в настоящее время обычно создаются) с использованием нескольких TLB, например, небольшого TLB L1 (потенциально полностью ассоциативного), который работает очень быстро, и большего TLB L2, который несколько медленнее. Когда используются TLB инструкций (ITLB) и TLB данных (DTLB), ЦП может иметь три (ITLB1, DTLB1, TLB2) или четыре TLB.

Например, микроархитектура Intel Nehalem имеет четырехсторонний набор ассоциативных L1 DTLB с 64 записями для страниц 4 KiB и 32 записями для 2/4 MiB страниц, ITLB L1 со 128 записями для страниц 4 KiB с использованием четырехсторонней ассоциативности и 14 полностью ассоциативных записей для страниц 2/4 MiB (обе части ITLB статически разделены между двумя потоками) и унифицированный TLB L2 с 512 записями для 4 Страницы KiB, обе 4-сторонние ассоциативные.

Некоторые TLB могут иметь отдельные разделы для маленьких и больших страниц.

Обработка промахов TLB

В современных архитектурах обычно встречаются две схемы обработки промахов TLB:

  • При аппаратном управлении TLB ЦП автоматически просматривает таблицы страниц (используя, например, регистр CR3 на x86 ), чтобы узнать, есть ли допустимая запись в таблице страниц для указанного виртуального адреса. Если запись существует, она помещается в TLB, и доступ к TLB повторяется: на этот раз доступ ударит, и программа сможет продолжить работу в обычном режиме. Если ЦП не находит действительной записи для виртуального адреса в таблицах страниц, он вызывает отказ страницы исключение, которое операционная система должна обработать. Обработка сбоев страниц обычно включает перенос запрошенных данных в физическую память, настройку записи в таблице страниц для сопоставления сбойного виртуального адреса с правильным физическим адресом и возобновление работы программы. В случае TLB с аппаратным управлением формат записей TLB не виден программному обеспечению и может изменяться от ЦП к ЦП без потери совместимости программ.
  • В случае TLB с программным управлением промах TLB создает исключение пропуска TLB, и код операционной системы отвечает за просмотр таблиц страниц и выполнение перевода в программном обеспечении. Затем операционная система загружает перевод в TLB и перезапускает программу с инструкции, которая вызвала промах TLB. Как и в случае с аппаратным управлением TLB, если ОС не находит допустимого преобразования в таблицах страниц, это означает, что произошел сбой страницы, и ОС должна обработать его соответствующим образом. Наборы команд процессоров, которые имеют программно-управляемые TLB, имеют инструкции, позволяющие загружать записи в любой слот в TLB. Формат записи TLB определяется как часть архитектуры набора команд (ISA). Архитектура MIPS определяет программно управляемый TLB; архитектура SPARC V9 позволяет реализации SPARC V9 не иметь MMU, MMU с программно-управляемым TLB или MMU с аппаратно управляемым TLB, а архитектура UltraSPARC 2005 определяет программно управляемый TLB.

Архитектура Itanium предоставляет возможность использования TLB с программным или аппаратным управлением.

TLB архитектуры Alpha управляется в PALcode, а не в операционной системе. Поскольку код PAL для процессора может зависеть от процессора и операционной системы, это позволяет различным версиям кода PAL реализовывать разные форматы таблиц страниц для разных операционных систем, не требуя, чтобы формат TLB и инструкции для управления TLB, определяется архитектурой.

Типичный TLB

Это типичные уровни производительности TLB:

  • размер: 12 бит - 4096 записей
  • время обращения: 0,5 - 1 такт
  • штраф за промах: 10-100 тактов
  • частота промахов: 0,01 - 1% (20-40% для разреженных / графических приложений)

Если попадание TLB занимает 1 тактовый цикл, промах занимает 30 тактовых циклов, а частота промахов составляет 1%, эффективная частота цикла памяти составляет в среднем 1 × 0,99 + (1 + 30) × 0,01 = 1,30 (1,30 тактовых циклов на доступ к памяти).

Переключатель адресного пространства

На переключателе адресного пространства, как это происходит с переключателем процесса , но не с переключателем потока , некоторые записи TLB могут стать недействительными, поскольку отображение виртуального на физическое отличается. Самый простой способ справиться с этим - полностью очистить TLB. Это означает, что после переключения TLB пуст, и любая ссылка на память будет пропущена, поэтому пройдет некоторое время, прежде чем что-то вернется на полную скорость. В новых процессорах используются более эффективные стратегии, указывающие, для какого процесса предназначена запись. Это означает, что если второй процесс выполняется в течение короткого времени и возвращается к первому процессу, он все еще может иметь действительные записи, что экономит время на их перезагрузку.

Например, в Alpha 21264, каждая запись TLB помечена номером адресного пространства (ASN), и только записи TLB с ASN, совпадающим с текущей задачей, считаются действительными. Другой пример в Intel Pentium Pro, флаг глобального включения страницы (PGE) в регистре CR4 и глобальный флаг (G) записи каталога страниц или таблицы страниц могут использоваться для предотвращения автоматического аннулирования часто используемых страниц в TLB при переключении задачи или загрузке регистра CR3. Начиная с 2010 микроархитектуры Westmere процессоры Intel 64 также поддерживают 12-битные идентификаторы контекста процесса (PCID), которые позволяют сохранять записи TLB для нескольких пространств линейных адресов, причем только те, которые соответствуют текущий PCID, используемый для трансляции адресов.

Хотя выборочная очистка TLB - это опция в программно-управляемых TLB, единственная опция в некоторых аппаратных TLB (например, TLB в Intel 80386 ) - это полная очистка TLB коммутатора адресного пространства. Другие аппаратные TLB (например, TLB в процессорах Intel 80486 и более поздних версий x86 и TLB в процессорах ARM ) позволяют сбрасывать отдельные записи из TLB, проиндексированного виртуальным адресом..

Очистка TLB может быть важным механизмом безопасности для изоляции памяти между процессами, чтобы гарантировать, что процесс не может получить доступ к данным, хранящимся на страницах памяти другого процесса. Изоляция памяти особенно важна при переключении между привилегированным процессом ядра операционной системы и пользовательскими процессами, что было подчеркнуто уязвимостью системы безопасности Meltdown. Стратегии смягчения последствий, такие как изоляция таблицы страниц ядра (KPTI), в значительной степени зависят от влияющих на производительность сбросов TLB и значительно выигрывают от аппаратного выборочного управления записями TLB, например PCID.

Виртуализация и x86 TLB

С появлением виртуализации для консолидации серверов было приложено много усилий, чтобы упростить виртуализацию архитектуры x86 и обеспечить лучшую производительность виртуальных машин на оборудовании x86.

Обычно, записи в TLB x86 не связаны с конкретным адресным пространством; они неявно ссылаются на текущее адресное пространство. Следовательно, каждый раз, когда происходит изменение адресного пространства, такое как переключение контекста, весь TLB должен быть сброшен. Поддержание тега, который связывает каждую запись TLB с адресным пространством в программном обеспечении, и сравнение этого тега во время поиска TLB и сброса TLB очень дорого, особенно потому, что TLB x86 предназначен для работы с очень низкой задержкой и полностью аппаратно. В 2008 году и Intel (Nehalem ), и AMD (SVM ) ввели теги как часть записи TLB и выделенное оборудование, которое проверяет тег во время поиска. Несмотря на то, что они используются не полностью, предполагается, что в будущем эти теги будут определять адресное пространство, которому принадлежит каждая запись TLB. Таким образом, переключение контекста не приведет к сбросу TLB, а просто изменит тег текущего адресного пространства на тег адресного пространства новой задачи.

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-11 09:55:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте