A трансляции (TLB ) модуля управления памятью микросхемы - это память кэш, которая используется для сокращения времени, необходимого для доступа к ячейке памяти пользователя. Он является частью блока управления памятью (MMU) микросхемы. TLB хранит последние преобразования виртуальной памяти в физической памяти и может называться кешем преобразования адресов. TLB может находиться между CPU и CPU cache, между кешем CPU и основной памятью или между различными уровнями многоуровневого кеша. Большинство процессоров для настольных ПК, ноутбуков и серверов включают в себя один или несколько TLB в аппаратном обеспечении для управления памятью, и он почти всегда присутствует в любом процессоре, который использует выгружаемый или сегментированный виртуальная память.
TLB иногда реализуется как память с адресацией по содержимому (CAM). Ключ поиска CAM - это виртуальный адрес, а результатом поиска является физический адрес. Если запрошенный адрес присутствует в TLB, поиск CAM быстро дает совпадение, и полученный физический адрес может использоваться для доступа к памяти. Это называется попаданием TLB. Если запрошенный адрес отсутствует в TLB, это промах, и преобразование продолжается путем поиска таблицы страниц в процессе, называемом обходом страниц. Обход страницы занимает много времени по сравнению со скоростью процессора, так как он включает чтение содержимого нескольких ячеек памяти и их использование для вычисления физического адреса. После того, как физический адрес определен обходом страниц, отображение виртуального адреса на физический адрес вводится в TLB. PowerPC 604, например, имеет двусторонний ассоциативный TLB для загрузки и сохранения данных. Некоторые процессоры имеют разные 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 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:
Архитектура Itanium предоставляет возможность использования TLB с программным или аппаратным управлением.
TLB архитектуры Alpha управляется в PALcode, а не в операционной системе. Поскольку код PAL для процессора может зависеть от процессора и операционной системы, это позволяет различным версиям кода PAL реализовывать разные форматы таблиц страниц для разных операционных систем, не требуя, чтобы формат TLB и инструкции для управления TLB, определяется архитектурой.
Это типичные уровни производительности TLB:
Если попадание 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 и обеспечить лучшую производительность виртуальных машин на оборудовании x86.
Обычно, записи в TLB x86 не связаны с конкретным адресным пространством; они неявно ссылаются на текущее адресное пространство. Следовательно, каждый раз, когда происходит изменение адресного пространства, такое как переключение контекста, весь TLB должен быть сброшен. Поддержание тега, который связывает каждую запись TLB с адресным пространством в программном обеспечении, и сравнение этого тега во время поиска TLB и сброса TLB очень дорого, особенно потому, что TLB x86 предназначен для работы с очень низкой задержкой и полностью аппаратно. В 2008 году и Intel (Nehalem ), и AMD (SVM ) ввели теги как часть записи TLB и выделенное оборудование, которое проверяет тег во время поиска. Несмотря на то, что они используются не полностью, предполагается, что в будущем эти теги будут определять адресное пространство, которому принадлежит каждая запись TLB. Таким образом, переключение контекста не приведет к сбросу TLB, а просто изменит тег текущего адресного пространства на тег адресного пространства новой задачи.