stringtranslate.com

Резервный буфер перевода

Резервный буфер трансляции ( TLB ) — это кэш памяти , в котором хранятся последние трансляции виртуальной памяти в физическую память . Он используется для сокращения времени, затрачиваемого на доступ к ячейке пользовательской памяти. [1] Его можно назвать кэшем трансляции адресов. Это часть блока управления памятью (MMU) чипа. TLB может находиться между ЦП и кэшем ЦП , между кэшем ЦП и основной памятью или между различными уровнями многоуровневого кэша. Большинство процессоров настольных компьютеров, ноутбуков и серверов включают один или несколько TLB в аппаратное обеспечение управления памятью, и он почти всегда присутствует в любом процессоре, использующем страничную или сегментированную виртуальную память .

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

Обзор

Общая работа TLB [3]

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 см. в разделе преобразования адресов статьи о кэше.

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

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

ЦП должен получить доступ к основной памяти в случае промаха кэша инструкций, промаха кэша данных или промаха 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:

Архитектура 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]

Средняя эффективная частота циклов памяти определяется как циклы, где — количество циклов, необходимых для чтения памяти, — частота промахов и — время попадания в циклах. Если попадание 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. Начиная с микроархитектуры Westmere 2010 года, процессоры 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 ( SVM ) [26] представили теги как часть записи TLB и специальное оборудование, которое проверяет тег во время поиска. Не все операционные системы сразу полностью использовали эти теги, но Linux 4.14 начал использовать их для идентификации недавно использованных адресных пространств, поскольку 12-битных PCID (4095 различных значений) недостаточно для всех задач, выполняемых на данном процессоре. [27]

Смотрите также

Рекомендации

  1. ^ Арпачи-Дюссо, Ремзи Х.; Арпачи-Дюссо, Андреа К. (2014), Операционные системы: три простых части [Глава: Быстрые переводы (TLB)] (PDF) , Arpaci-Dusseau Books
  2. ^ С. Питер Сонг; Марвин Денман; Джо Чанг (октябрь 1994 г.). «Микропроцессор PowerPC 604 RISC» (PDF) . IEEE микро . 14 (5): 13–14. дои : 10.1109/MM.1994.363071. S2CID  11603864. Архивировано из оригинала (PDF) 1 июня 2016 года.
  3. ^ Зильбершац, Гэлвин, Ганье, Абрахам, Питер Б., Грег (2009). Концепции операционных систем . Соединенные Штаты Америки: Джон Уайли и сыновья. ИНК. ISBN 978-0-470-12872-5.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  4. ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования». SIGARCH Новости компьютерной архитектуры . 20 (2): 114–123. дои : 10.1145/146628.139708 .
  5. ^ Столлингс, Уильям (2014). Операционные системы: внутреннее устройство и принципы проектирования . Соединенные Штаты Америки: Пирсон. ISBN 978-0133805918.
  6. ^ Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . Бока-Ратон, Флорида: Группа Тейлора и Фрэнсиса. ISBN 978-0-9841630-0-7.
  7. ^ «Внутри Nehalem: будущий процессор и система Intel». Реальные мировые технологии.
  8. ^ «Intel Core i7 (Nehalem): архитектура AMD?». Аппаратное обеспечение Тома . 14 октября 2008 года . Проверено 24 ноября 2010 г.
  9. ^ «Внутри Nehalem: будущий процессор и система Intel». Реальные мировые технологии . Проверено 24 ноября 2010 г.
  10. ^ Шринивас, Суреш; Павар, Уттам; Арибуки, Дунни; Манчу, Каталин; Шульхоф, Габриэль; Прасад, Аравинда (1 ноября 2019 г.). «План оптимизации производительности во время выполнения: оптимизация архитектуры Intel® с помощью больших кодовых страниц» . Проверено 22 октября 2022 г.
  11. ^ Дж. Смит и Р. Наир. Виртуальные машины: универсальные платформы для систем и процессов (Серия Моргана Кауфмана по компьютерной архитектуре и дизайну). Морган Кауфманн Паблишерс Инк., 2005.
  12. ^ Валлийский, Мэтт. «Архитектура MIPS r2000/r3000». Архивировано из оригинала 14 октября 2008 года . Проверено 16 ноября 2008 г. Если соответствующая запись TLB не найдена, возникает исключение промаха TLB.
  13. ^ SPARC International, Inc. Руководство по архитектуре SPARC, версия 9. PTR Prentice Hall .
  14. ^ Сан Микросистемс . UltraSPARC Architecture 2005. Проект D0.9.2, 19 июня 2008 г. Sun Microsystems.
  15. ^ Виртуальная память в ядре IA-64> Резервный буфер трансляции.
  16. ^ Компьютерная корпорация Compaq . Справочник по альфа-архитектуре (PDF) . Версия 4. Компьютерная корпорация Compaq. Архивировано из оригинала (PDF) 9 октября 2014 года . Проверено 1 декабря 2010 г.
  17. ^ Дэвид А. Паттерсон; Джон Л. Хеннесси (2009). Компьютерная организация и дизайн. Аппаратный/программный интерфейс. 4-е издание . Берлингтон, Массачусетс 01803, США: Издательство Morgan Kaufmann. п. 503. ИСБН 978-0-12-374493-7.{{cite book}}: CS1 maint: местоположение ( ссылка )
  18. ^ «Буфер резервного перевода (TLB) в пейджинге» . Гики для Гиков . 26 февраля 2019 года . Проверено 10 февраля 2021 г.
  19. Ульрих Дреппер (9 октября 2014 г.). «Память часть 3: Виртуальная память». LWN.net .
  20. Дэвид Кантер (17 марта 2010 г.). «Уэстмир прибывает». Реальные мировые технологии . Проверено 6 января 2018 г.
  21. ^ Корпорация Intel (2017). «4.10.1 Идентификаторы контекста процесса (PCID)». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . Том. 3A: Руководство по системному программированию, часть 1.
  22. Гил Тене (8 января 2018 г.). «PCID теперь является критически важной функцией производительности и безопасности на платформе x86» . Проверено 23 марта 2018 г.
  23. ^ Д. Абрамсон; Дж. Джексон; С. Мутрасаналлур; Г. Нейгер; Г. Ренье; Р. Шанкаран; И. Шойнас; Р. Улиг; Б. Вембу; Дж. Вигерт. «Технология виртуализации Intel для направленного ввода-вывода». Журнал технологий Intel . 10 (3): 179–192.
  24. ^ Передовые микроустройства. Справочное руководство по архитектуре безопасных виртуальных машин AMD. Передовые микроустройства, 2008.
  25. ^ Г. Нейгер; А. Сантони; Ф. Люнг; Д. Роджерс; Р. Улиг. «Технология виртуализации Intel: аппаратная поддержка для эффективной виртуализации процессоров». Журнал технологий Intel . 10 (3).
  26. ^ Передовые микроустройства. Справочное руководство по архитектуре безопасных виртуальных машин AMD . Передовые микроустройства, 2008.
  27. ^ «Долгоживущие записи TLB с PCID» . Новички в ядре . 30 декабря 2017 года . Проверено 31 июля 2023 г.

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