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, например, небольшой L1 TLB (потенциально полностью ассоциативный), который очень быстр, и более крупный L2 TLB, который немного медленнее. При использовании инструкций TLB (ITLB) и данных TLB (DTLB) ЦП может иметь три (ITLB1, DTLB1, TLB2) или четыре TLB.

Например, микроархитектура Nehalem компании Intel имеет четырехканальный ассоциативный L1 DTLB с 64 записями для страниц по 4 КиБ и 32 записями для страниц по 2/4 МиБ, L1 ITLB со 128 записями для страниц по 4 КиБ, использующий четырехканальную ассоциативность, и 14 полностью ассоциативными записями для страниц по 2/4 МиБ (обе части ITLB статически разделены между двумя потоками) [7] и унифицированный L2 TLB с 512 записями для страниц по 4 КиБ, [8] оба являются четырехканальными ассоциативными. [9]

Некоторые TLB могут иметь отдельные разделы для маленьких страниц и больших страниц. Например, микроархитектура Intel Skylake разделяет записи TLB для страниц размером 1 GiB от записей для страниц размером 4 KiB/2 MiB. [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) Операционная система с одним адресным пространством использует одно и то же виртуально-физическое отображение для всех процессов. (b) Некоторые ЦП имеют регистр идентификатора процесса, и оборудование использует записи TLB только в том случае, если они соответствуют текущему идентификатору процесса.

Например, в Alpha 21264 каждая запись TLB помечена номером адресного пространства (ASN), и только записи TLB с ASN, соответствующим текущей задаче, считаются действительными. Другой пример в Intel Pentium Pro , флаг глобальной активации страницы (PGE) в регистре CR4 и глобальный флаг (G) записи каталога страниц или таблицы страниц могут использоваться для предотвращения автоматической отмены часто используемых страниц в 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]

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

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

Обычно записи в x86 TLB не связаны с определенным адресным пространством; они неявно ссылаются на текущее адресное пространство. Следовательно, каждый раз, когда происходит изменение адресного пространства, например, переключение контекста, весь TLB должен быть очищен. Поддержание тега, который связывает каждую запись TLB с адресным пространством в программном обеспечении, и сравнение этого тега во время поиска TLB и очистки TLB очень дорого, особенно потому, что x86 TLB разработан для работы с очень низкой задержкой и полностью на аппаратном уровне. В 2008 году и Intel ( Nehalem ) [25] , и AMD ( SVM ) [26] представили теги как часть записи TLB и выделенное оборудование, которое проверяет тег во время поиска. Не все операционные системы сразу в полной мере использовали эти теги, но Linux 4.14 начал использовать их для определения недавно использованных адресных пространств, поскольку 12-битные PCID (4095 различных значений) недостаточны для всех задач, выполняемых на данном ЦП. [27]

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

Ссылки

  1. ^ Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), Операционные системы: три простых части [Глава: Более быстрые переводы (TLB)] (PDF) , Книги Arpaci-Dusseau
  2. ^ S. Peter Song; Marvin Denman; Joe Chang (октябрь 1994 г.). «The PowerPC 604 RISC Microprocessor» (PDF) . IEEE Micro . 14 (5): 13–14. doi :10.1109/MM.1994.363071. S2CID  11603864. Архивировано из оригинала (PDF) 1 июня 2016 г.
  3. ^ Silberschatz, Galvin, Gagne, Abraham, Peter B., Greg (2009). Концепции операционных систем . Соединенные Штаты Америки: John Wiley & Sons. INC. ISBN 978-0-470-12872-5.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  4. ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования». ACM SIGARCH Computer Architecture News . 20 (2): 114–123. doi : 10.1145/146628.139708 .
  5. ^ Сталлингс, Уильям (2014). Операционные системы: Внутреннее устройство и принципы проектирования . Соединенные Штаты Америки: Pearson. ISBN 978-0133805918.
  6. ^ Солихин, Ян (2016). Основы параллельной многоядерной архитектуры . Бока-Ратон, Флорида: Taylor & Francis Group. ISBN 978-0-9841630-0-7.
  7. ^ "Внутри Nehalem: будущие процессоры и системы Intel". Технологии реального мира.
  8. ^ "Intel Core i7 (Nehalem): Архитектура AMD?". Tom's Hardware . 14 октября 2008 г. Получено 24 ноября 2010 г.
  9. ^ "Внутри Nehalem: будущий процессор и система Intel". Real World Technologies . Получено 24 ноября 2010 г.
  10. ^ Шринивас, Суреш; Павар, Уттам; Арибуки, Дунни; Манчу, Каталин; Шульхоф, Габриэль; Прасад, Аравинда (1 ноября 2019 г.). «План оптимизации производительности во время выполнения: оптимизация архитектуры Intel® с помощью больших кодовых страниц» . Проверено 22 октября 2022 г.
  11. ^ Дж. Смит и Р. Наир. Виртуальные машины: универсальные платформы для систем и процессов (серия Моргана Кауфмана по архитектуре и проектированию компьютеров). Morgan Kaufmann Publishers Inc., 2005.
  12. ^ Уэлш, Мэтт. "Архитектура MIPS r2000/r3000". Архивировано из оригинала 14 октября 2008 г. Получено 16 ноября 2008 г. Если не найдено ни одной соответствующей записи TLB, возникает исключение пропуска TLB
  13. ^ SPARC International, Inc. Руководство по архитектуре SPARC, версия 9. PTR Prentice Hall .
  14. ^ Sun Microsystems . Архитектура UltraSPARC 2005. Проект D0.9.2, 19 июня 2008 г. Sun Microsystems.
  15. ^ Виртуальная память в ядре IA-64 > Буфер трансляции.
  16. ^ Compaq Computer Corporation . Alpha Architecture Handbook (PDF) . Версия 4. Compaq Computer Corporation. Архивировано из оригинала (PDF) 9 октября 2014 года . Получено 1 декабря 2010 года .
  17. ^ Дэвид А. Паттерсон; Джон Л. Хеннесси (2009). Организация и проектирование компьютеров. Интерфейс оборудования/программного обеспечения. 4-е издание . Берлингтон, Массачусетс 01803, США: Morgan Kaufmann Publishers. стр. 503. ISBN 978-0-12-374493-7.{{cite book}}: CS1 maint: местоположение ( ссылка )
  18. ^ "Translation Lookaside Buffer (TLB) in Paging". GeeksforGeeks . 26 февраля 2019 . Получено 10 февраля 2021 .
  19. Ульрих Дреппер (9 октября 2014 г.). «Память часть 3: Виртуальная память». LWN.net .
  20. Дэвид Кантер (17 марта 2010 г.). «Westmere Arrives». Real World Tech . Получено 6 января 2018 г.
  21. ^ Корпорация Intel (2017). "4.10.1 Идентификаторы контекста процесса (PCID)". Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF) . Том 3A: Руководство по системному программированию, часть 1.
  22. ^ Gil Tene (8 января 2018 г.). "PCID теперь является критически важной функцией производительности/безопасности на x86" . Получено 23 марта 2018 г.
  23. ^ Д. Абрамсон; Дж. Джексон; С. Мутрасаналлур; Г. Нейгер; Г. Ренье; Р. Шанкаран; И. Шойнас; Р. Улиг; Б. Вембу; Дж. Вигерт. «Технология виртуализации Intel для направленного ввода-вывода». Журнал технологий Intel . 10 (3): 179–192.
  24. ^ Advanced Micro Devices. Справочное руководство по архитектуре защищенной виртуальной машины AMD. Advanced Micro Devices, 2008.
  25. ^ G. Neiger; A. Santoni; F. Leung; D. Rodgers; R. Uhlig. «Технология виртуализации Intel: аппаратная поддержка эффективной виртуализации процессоров». Intel Technology Journal . 10 (3).
  26. ^ Advanced Micro Devices. Справочное руководство по архитектуре защищенной виртуальной машины AMD . Advanced Micro Devices, 2008.
  27. ^ "Долгоживущие записи TLB с PCID". Kernelnewbies . 30 декабря 2017 г. Получено 31 июля 2023 г.

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