Резервный буфер перевода
Резервный буфер трансляции ( TLB памяти ) — это кэш , в котором хранятся последние трансляции виртуальной памяти в физическую память . Он используется для сокращения времени, затрачиваемого на доступ к ячейке пользовательской памяти. [1] Его можно назвать кэшем трансляции адресов. Это часть блока управления памятью (MMU) чипа. TLB может находиться между ЦП и кэшем ЦП , между кэшем ЦП и основной памятью или между различными уровнями многоуровневого кэша. Большинство процессоров настольных компьютеров, ноутбуков и серверов включают один или несколько TLB в аппаратное обеспечение управления памятью, и он почти всегда присутствует в любом процессоре, использующем страничную или сегментированную виртуальную память .
TLB иногда реализуется как память с адресацией по содержимому (CAM). Ключом поиска CAM является виртуальный адрес, а результатом поиска является физический адрес . Если запрошенный адрес присутствует в TLB, поиск CAM быстро дает совпадение, и полученный физический адрес можно использовать для доступа к памяти. Это называется попаданием TLB. Если запрошенный адрес отсутствует в TLB, это считается промахом, и трансляция продолжается путем поиска таблицы страниц в процессе, называемом обходом страницы . Обход страницы требует много времени по сравнению со скоростью процессора, поскольку он включает в себя чтение содержимого нескольких ячеек памяти и использование их для вычисления физического адреса. После того, как физический адрес определен при обходе страницы, сопоставление виртуального адреса с физическим адресом вводится в TLB. Например, PowerPC 604 имеет двусторонний наборно-ассоциативный TLB для загрузки и сохранения данных. [2] Некоторые процессоры имеют разные TLB адресов инструкций и данных.
Обзор
[ редактировать ]TLB имеет фиксированное количество слотов, содержащих записи таблицы страниц и записи таблицы сегментов; Записи таблицы страниц сопоставляют виртуальные адреса с физическими адресами и адресами промежуточной таблицы, а записи таблицы сегментов сопоставляют виртуальные адреса с адресами сегментов, адресами промежуточной таблицы и адресами таблицы страниц. Виртуальная память — это пространство памяти, видимое со стороны процесса; это пространство часто разбивается на страницы фиксированного размера (в страничной памяти) или, реже, на сегменты переменных размеров (в сегментированной памяти). Таблица страниц, обычно хранящаяся в основной памяти , отслеживает, где в физической памяти хранятся виртуальные страницы. Этот метод использует два доступа к памяти (один для записи таблицы страниц, другой для байта) для доступа к байту. Сначала в таблице страниц просматривается номер кадра. Во-вторых, номер кадра со смещением страницы дает фактический адрес. Таким образом, любая простая схема виртуальной памяти приведет к удвоению времени доступа к памяти. Следовательно, TLB используется для сокращения времени, затрачиваемого на доступ к ячейкам памяти в методе таблицы страниц. TLB — это кэш таблицы страниц, представляющий только подмножество содержимого таблицы страниц.
Ссылаясь на адреса физической памяти, TLB может находиться между ЦП и кэшем ЦП , между кэшем ЦП и основной памятью или между уровнями многоуровневого кэша. Размещение определяет, использует ли кэш физическую или виртуальную адресацию. Если к кэшу применяется виртуальная адресация, запросы отправляются непосредственно от ЦП к кэшу, а доступ к TLB осуществляется только при промахе кэша . Если кеш имеет физическую адресацию, ЦП выполняет поиск TLB при каждой операции с памятью, и полученный физический адрес отправляется в кеш.
В Гарвардской архитектуре или модифицированной Гарвардской архитектуре для инструкций и данных может существовать отдельное виртуальное адресное пространство или оборудование доступа к памяти. Это может привести к созданию отдельных TLB для каждого типа доступа, резервного буфера трансляции инструкций (ITLB) и резервного буфера трансляции данных (DTLB). Различные преимущества были продемонстрированы при использовании отдельных TLB данных и инструкций. [4]
TLB можно использовать в качестве аппаратного кэша быстрого поиска. На рисунке показана работа TLB. Каждая запись в TLB состоит из двух частей: тега и значения. Если тег входящего виртуального адреса совпадает с тегом в TLB, возвращается соответствующее значение. Поскольку поиск TLB обычно является частью конвейера команд, поиск выполняется быстро и практически не приводит к снижению производительности. Однако для возможности поиска в конвейере команд TLB должен быть небольшим.
Обычной оптимизацией кэшей с физическим адресом является выполнение поиска TLB параллельно с доступом к кэшу. При каждом обращении к виртуальной памяти аппаратное обеспечение проверяет TLB, чтобы определить, содержится ли в нем номер страницы. Если да, то это попадание в TLB, и перевод выполнен. Номер кадра возвращается и используется для доступа к памяти. Если номер страницы отсутствует в TLB, необходимо проверить таблицу страниц. В зависимости от процессора это может быть сделано автоматически с использованием аппаратного обеспечения или с использованием прерывания операционной системы. Когда номер кадра получен, его можно использовать для доступа к памяти. Кроме того, мы добавляем в TLB номер страницы и номер кадра, чтобы их можно было быстро найти при следующей ссылке. Если TLB уже заполнен, для замены необходимо выбрать подходящий блок. Существуют различные методы замены, такие как «последний использованный» (LRU), «первым пришел — первым ушел» (FIFO) и т. д.; см . в разделе преобразования адресов дополнительные сведения о виртуальной адресации применительно к кэшам и TLB статьи о кэше.
Влияние на производительность
[ редактировать ]ЦП должен получить доступ к основной памяти в случае промаха кэша инструкций, кэша данных или промаха TLB. Третий случай (самый простой) — когда сама нужная информация фактически находится в кеше, но информация для перевода из виртуальной в физическую форму не находится в TLB. Все они медленные из-за необходимости доступа к более медленному уровню иерархии памяти, поэтому важно иметь хорошо функционирующий TLB. Действительно, промах TLB может оказаться дороже, чем промах инструкции или кэша данных, из-за необходимости не просто загрузки из основной памяти, но и обхода страницы, требующего нескольких обращений к памяти.
Предоставленная блок-схема объясняет работу TLB. Если это промах TLB, то ЦП проверяет таблицу страниц на наличие записи в таблице страниц. Если текущий бит установлен, то страница находится в основной памяти, и процессор может получить номер кадра из записи таблицы страниц для формирования физического адреса. [6] Процессор также обновляет 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 и имеет четырехсторонний набор ассоциативных DTLB L1 с 64 записями для страниц по 4 КиБ и 32 записями для страниц 2/4 МиБ, ITLB L1 со 128 записями для страниц по 4 КиБ с использованием четырехсторонней ассоциативности 14 полностью ассоциативных записей для страниц размером 2/4 МБ (обе части ITLB разделены статически между двумя потоками) [7] и унифицированный TLB L2 на 512 записей для страниц размером 4 КиБ, [8] оба 4-сторонние ассоциативные. [9]
Некоторые TLB могут иметь отдельные разделы для маленьких и огромных страниц. Например, микроархитектура Intel Skylake отделяет записи TLB для страниц размером 1 ГиБ от записей для страниц 4 КиБ/2 МиБ. [10]
Обработка промахов TLB
[ редактировать ]В современных архитектурах встречаются три схемы обработки промахов TLB:
- При аппаратном управлении TLB ЦП автоматически просматривает таблицы страниц (например, используя регистр CR3 на x86 ), чтобы увидеть, существует ли действительная запись в таблице страниц для указанного виртуального адреса. Если запись существует, она вносится в TLB, и доступ к TLB повторяется: на этот раз доступ будет получен, и программа сможет продолжить работу в обычном режиме. Если ЦП не находит допустимой записи для виртуального адреса в таблицах страниц, он выдает ошибки страницы исключение , которое должна обработать операционная система . Обработка ошибок страниц обычно включает в себя перенос запрошенных данных в физическую память, настройку записи таблицы страниц для сопоставления сбойного виртуального адреса с правильным физическим адресом и возобновление работы программы. При использовании TLB с аппаратным управлением формат записей TLB не виден программному обеспечению и может меняться от ЦП к ЦП, не вызывая потери совместимости с операционной системой.
- При использовании TLB, управляемых программным обеспечением, промах TLB генерирует исключение промаха TLB , а код операционной системы отвечает за обход таблиц страниц и поиск соответствующей записи в таблице страниц. Затем операционная система загружает информацию из этой записи таблицы страниц в TLB и перезапускает программу с инструкции, вызвавшей промах TLB. Как и в случае с аппаратным управлением TLB, если ОС не находит допустимого перевода в таблицах страниц, это означает, что произошла ошибка страницы, и ОС должна обработать ее соответствующим образом. Наборы инструкций процессоров, имеющих программно-управляемые TLB, содержат инструкции, позволяющие загружать записи в любой слот TLB. Формат записи TLB определяется как часть архитектуры набора команд (ISA). [11]
- В случае TLB, управляемых микропрограммным обеспечением, промах TLB приводит к перехвату микропрограммы системы, которая отвечает за обход таблиц страниц и поиск соответствующей записи в таблице страниц, аналогично тому, что делает обработчик промахов TLB для TLB, управляемых программным обеспечением. При использовании TLB, управляемого микропрограммным обеспечением, формат записей TLB не виден системному программному обеспечению и может меняться от ЦП к ЦП, не вызывая потери совместимости с операционной системой.
Архитектура MIPS определяет TLB, управляемый программным обеспечением. [12]
Архитектура SPARC V9 позволяет реализации SPARC V9 не иметь MMU, MMU с TLB с программным управлением или MMU с TLB с аппаратным управлением. [13] а архитектура UltraSPARC 2005 определяет TLB, управляемый программным обеспечением. [14]
Архитектура Itanium предоставляет возможность использования TLB с программным или аппаратным управлением. [15]
Архитектура Alpha имеет TLB, управляемый микропрограммным обеспечением, при этом код обработки ошибок TLB находится в PALcode , а не в операционной системе. Поскольку PALcode для процессора может зависеть от процессора и операционной системы, это позволяет различным версиям PALcode реализовывать разные форматы таблиц страниц для разных операционных систем, не требуя наличия формата TLB и инструкций для управления TLB. , определяемый архитектурой. [16]
Типичный TLB
[ редактировать ]Это типичные уровни производительности TLB: [17]
- Размер: 12 бит – 4096 записей.
- Время попадания: 0,5 – 1 такт
- Штраф за промах: 10–100 тактов.
- Частота промахов: 0,01–1 % (20–40 % для приложений с разреженными графиками).
Средняя эффективная частота циклов памяти определяется как циклы, где — количество циклов, необходимое для чтения памяти, это процент промахов, и это время попадания в циклах.Если попадание в TLB занимает 1 такт, промах — 30 тактов, чтение памяти — 30 тактов, а частота промахов равна 1 %, эффективная частота циклов памяти составляет среднее значение (31,29 тактов на один доступ к памяти). [18]
Переключатель адресного пространства
[ редактировать ]При переключении адресного пространства, что происходит при переключении контекста между процессами (но не между потоками), некоторые записи TLB могут стать недействительными, поскольку сопоставление виртуального и физического отличается. Самая простая стратегия решения этой проблемы — полностью очистить TLB. Это означает, что после переключения TLB пуст, и любая ссылка на память будет пропущена, поэтому пройдет некоторое время, прежде чем все заработает на полной скорости. Новые процессоры используют более эффективные стратегии, маркирующие, для какого процесса предназначена запись. Это означает, что если второй процесс выполняется лишь короткое время и возвращается к первому процессу, в TLB все еще могут быть действительные записи, что экономит время на их перезагрузку. [19]
Другие стратегии позволяют избежать очистки TLB при переключении контекста:(a) Операционная система с единым адресным пространством использует одно и то же сопоставление виртуального и физического пространства для всех процессов.(б) Некоторые ЦП имеют регистр идентификатора процесса, и оборудование использует записи TLB, только если они соответствуют текущему идентификатору процесса.
Например, в Alpha 21264 каждая запись TLB помечена номером адресного пространства (ASN), и действительными считаются только записи TLB с ASN, соответствующим текущей задаче. Другой пример в Intel Pentium Pro : флаг глобального разрешения страницы (PGE) в регистре CR4 и глобальный флаг (G) записи каталога страниц или таблицы страниц могут использоваться для предотвращения автоматического признания недействительными часто используемых страниц в процессоре Intel Pentium Pro. TLB при переключении задачи или загрузке регистра CR3. 2010 года, Начиная с микроархитектуры Westmere процессоры Intel 64 также поддерживают 12-битные идентификаторы контекста процесса (PCID), которые позволяют сохранять записи TLB для нескольких линейных адресных пространств, при этом для трансляции адресов используются только те, которые соответствуют текущему PCID. [20] [21]
Хотя выборочная очистка TLB является опцией для программно-управляемых TLB, единственной опцией в некоторых аппаратных TLB (например, TLB в Intel 80386 ) является полная очистка TLB на коммутаторе адресного пространства. Другие аппаратные TLB (например, TLB в процессорах Intel 80486 и более поздних версиях x86 и TLB в процессорах ARM ) позволяют сбрасывать отдельные записи из TLB, индексированного по виртуальному адресу.
Очистка TLB может быть важным механизмом безопасности для изоляции памяти между процессами, чтобы гарантировать, что процесс не сможет получить доступ к данным, хранящимся на страницах памяти другого процесса. Изоляция памяти особенно важна во время переключения между привилегированным процессом ядра операционной системы и пользовательскими процессами, о чем свидетельствует уязвимость безопасности Meltdown . Стратегии смягчения последствий, такие как изоляция таблицы страниц ядра (KPTI), в значительной степени зависят от очистки TLB, влияющей на производительность, и значительно выигрывают от аппаратного выборочного управления записями TLB, такого как PCID. [22]
Виртуализация и TLB x86
[ редактировать ]С появлением виртуализации для консолидации серверов было приложено много усилий для упрощения виртуализации архитектуры x86 и обеспечения более высокой производительности виртуальных машин на оборудовании x86. [23] [24]
Обычно записи в TLB x86 не связаны с конкретным адресным пространством; они неявно ссылаются на текущее адресное пространство. Следовательно, каждый раз, когда происходит изменение адресного пространства, например, переключение контекста, весь TLB должен быть очищен. Поддерживать тег, который связывает каждую запись TLB с адресным пространством в программном обеспечении, и сравнивать этот тег во время поиска TLB и очистки TLB очень дорого, особенно потому, что TLB x86 предназначен для работы с очень низкой задержкой и полностью аппаратно. В 2008 году обе компании Intel ( Nehalem ) [25] и AMD ( СВМ ) [26] представили теги как часть записи TLB и специальное оборудование, которое проверяет тег во время поиска. Не все операционные системы сразу полностью использовали эти теги, но Linux 4.14 начал использовать их для идентификации недавно использованных адресных пространств, поскольку 12-битных PCID (4095 различных значений) недостаточно для всех задач, выполняемых на данном процессоре. [27]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Арпачи-Дюссо, Ремзи Х.; Арпачи-Дюссо, Андреа К. (2014), Операционные системы: три простых части [Глава: Быстрые переводы (TLB)] (PDF) , Arpaci-Dusseau Books
- ^ С. Питер Сонг; Марвин Денман; Джо Чанг (октябрь 1994 г.). «Микропроцессор PowerPC 604 RISC» (PDF) . IEEE микро . 14 (5): 13–14. дои : 10.1109/MM.1994.363071 . S2CID 11603864 . Архивировано из оригинала (PDF) 1 июня 2016 года.
- ^ Зильбершац, Гэлвин, Ганье, Абрахам, Питер Б., Грег (2009). Концепции операционных систем . Соединенные Штаты Америки: Джон Уайли и сыновья. ИНК. ISBN 978-0-470-12872-5 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка ) - ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования» . SIGARCH Новости компьютерной архитектуры . 20 (2): 114–123. дои : 10.1145/146628.139708 .
- ^ Столлингс, Уильям (2014). Операционные системы: внутреннее устройство и принципы проектирования . Соединенные Штаты Америки: Пирсон. ISBN 978-0133805918 .
- ^ Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . Бока-Ратон, Флорида: Группа Тейлора и Фрэнсиса. ISBN 978-0-9841630-0-7 .
- ^ «Внутри Nehalem: будущие процессоры и системы Intel» . Реальные мировые технологии.
- ^ «Intel Core i7 (Nehalem): архитектура от AMD?» . Аппаратное обеспечение Тома . 14 октября 2008 года . Проверено 24 ноября 2010 г.
- ^ «Внутри Nehalem: будущие процессоры и системы Intel» . Реальные мировые технологии . Проверено 24 ноября 2010 г.
- ^ Шринивас, Суреш; Павар, Уттам; Арибуки, Дунни; Манчу, Каталин; Шульхоф, Габриэль; Прасад, Аравинда (1 ноября 2019 г.). «План оптимизации производительности во время выполнения: оптимизация архитектуры Intel® с помощью больших кодовых страниц» . Проверено 22 октября 2022 г.
- ^ Дж. Смит и Р. Наир. Виртуальные машины: универсальные платформы для систем и процессов (Серия Моргана Кауфмана по компьютерной архитектуре и дизайну). Морган Кауфманн Паблишерс Инк., 2005.
- ^ Уэлш, Мэтт. «Архитектура MIPS r2000/r3000» . Архивировано из оригинала 14 октября 2008 года . Проверено 16 ноября 2008 г.
Если соответствующая запись TLB не найдена, возникает исключение промаха TLB.
- ^ SPARC International, Inc. Руководство по архитектуре SPARC, версия 9 . ПТР Прентис Холл .
- ^ Сан Микросистемс . УльтраСПАРК Архитектура 2005 . Проект D0.9.2, 19 июня 2008 г. Sun Microsystems.
- ^ Виртуальная память в ядре IA-64> Резервный буфер трансляции .
- ^ Компьютерная корпорация Compaq . Справочник по альфа-архитектуре (PDF) . Версия 4. Компьютерная корпорация Compaq. Архивировано из оригинала (PDF) 9 октября 2014 года . Проверено 1 декабря 2010 г.
- ^ Дэвид А. Паттерсон; Джон Л. Хеннесси (2009). Компьютерная организация и дизайн. Аппаратный/программный интерфейс. 4-е издание . Берлингтон, Массачусетс 01803, США: Издательство Morgan Kaufmann. п. 503. ИСБН 978-0-12-374493-7 .
{{cite book}}
: CS1 maint: местоположение ( ссылка ) - ^ «Буфер резервного копирования перевода (TLB) в пейджинговой системе» . Гики для гиков . 26 февраля 2019 года . Проверено 10 февраля 2021 г.
- ^ Ульрих Дреппер (9 октября 2014 г.). «Память часть 3: Виртуальная память» . LWN.net .
- ^ Дэвид Кантер (17 марта 2010 г.). «Прибытие Вестмира» . Реальные мировые технологии . Проверено 6 января 2018 года .
- ^ Корпорация Intel (2017). «4.10.1 Идентификаторы контекста процесса (PCID)». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . Том. 3A: Руководство по системному программированию, часть 1.
- ^ Гил Тене (8 января 2018 г.). «PCID теперь является критически важной функцией производительности и безопасности на платформе x86» . Проверено 23 марта 2018 г.
- ^ Д. Абрамсон; Дж. Джексон; С. Мутрасаналлур; Г. Нейгер; Г. Ренье; Р. Шанкаран; И. Шойнас; Р. Улиг; Б. Вембу; Дж. Вигерт. «Технология виртуализации Intel для направленного ввода-вывода». Журнал технологий Intel . 10 (3): 179–192.
- ^ Передовые микроустройства. Справочное руководство по архитектуре безопасных виртуальных машин AMD. Передовые микроустройства, 2008.
- ^ Г. Нейгер; А. Сантони; Ф. Люнг; Д. Роджерс; Р. Улиг. «Технология виртуализации Intel: аппаратная поддержка для эффективной виртуализации процессоров». Журнал технологий Intel . 10 (3).
- ^ Передовые микроустройства. AMD безопасных виртуальных машин Справочное руководство по архитектуре . Передовые микроустройства, 2008.
- ^ «Долгоживущие записи TLB с PCID» . Новички в ядре . 30 декабря 2017 года . Проверено 31 июля 2023 г.