Резервный буфер перевода - Translation lookaside buffer

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

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

Обзор

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

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

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

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

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

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

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

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

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

Приведенная блок-схема объясняет работу TLB. Если это промах TLB, то ЦП проверяет таблицу страниц на наличие записи в таблице страниц. Если настоящий бит установлен, то страница находится в основной памяти, и процессор может извлечь номер кадра из записи таблицы страниц для формирования физического адреса.[7] Процессор также обновляет 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 статически разделены между двумя потоками)[8] и единый TLB L2 с 512 записями для страниц размером 4 КиБ,[9] оба 4-х сторонние ассоциативные.[10]

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

TLB-промахи

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

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

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

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

Типичный TLB

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

  • размер: 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 пуст, и любой обращение к памяти будет промахом, так что пройдет некоторое время, прежде чем все вернется на полную скорость. Новые процессоры используют более эффективные стратегии, определяющие, для какого процесса предназначена запись. Это означает, что если второй процесс выполняется в течение короткого времени и возвращается к первому процессу, он все еще может иметь действительные записи, что экономит время на их перезагрузку.[18]

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

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

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

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

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

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

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

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

  1. ^ Миттал, Спарш (2017), «Обзор методов построения TLBS», Параллелизм и вычисления: практика и опыт, 29 (10): e4061, Дои:10.1002 / cpe.4061
  2. ^ Arpaci-Dusseau, Remzi H .; Арпачи-Дюссо, Андреа К. (2014), Операционные системы: три простых элемента [Глава: Ускоренный перевод (TLB)] (PDF), Книги Арпачи-Дюссо
  3. ^ С. Питер Сонг; Марвин Денман; Джо Чанг (1994). "Микропроцессор PowerPC 604 RISC" (PDF). IEEE Micro.
  4. ^ Зильбершатц, Гальвин, Ганье, Абрахам, Питер Б., Грег (2009). Концепции операционных систем. Соединенные Штаты Америки: John Wiley & Sons. INC. ISBN  978-0-470-12872-5.CS1 maint: несколько имен: список авторов (связь)
  5. ^ Чен, Дж. Брэдли; Борг, Анита; Джуппи, Норман П. (1992). «Исследование производительности TLB на основе моделирования». Новости компьютерной архитектуры SIGARCH. 20 (2): 114–123. Дои:10.1145/146628.139708.
  6. ^ Столлингс, Уильям (2014). Операционные системы: внутреннее устройство и принципы проектирования. Соединенные Штаты Америки: Пирсон. ISBN  978-0133805918.
  7. ^ Солихин, Ян (2016). Основы параллельной многоядерной архитектуры. Бока-Ратон, Флорида: Taylor & Francis Group. ISBN  978-0-9841630-0-7.
  8. ^ «Внутри Nehalem: процессор и система будущего Intel». Технологии реального мира.
  9. ^ «Intel Core i7 (Nehalem): архитектура от AMD?». Оборудование Тома. 14 октября 2008 г.. Получено 24 ноября 2010.
  10. ^ «Внутри Nehalem: процессор и система будущего Intel». Технологии реального мира. Получено 24 ноября 2010.
  11. ^ Дж. Смит и Р. Наир. Виртуальные машины: универсальные платформы для систем и процессов (серия Morgan Kaufmann по компьютерной архитектуре и дизайну). Издательство 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 (PDF). Версия 4. Compaq Computer Corporation.
  17. ^ Дэвид А. Паттерсон; Джон Л. Хеннесси (2009). Компьютерная организация и дизайн. Аппаратно-программный интерфейс. 4-е издание. Берлингтон, Массачусетс 01803, США: Morgan Kaufmann Publishers. п. 503. ISBN  978-0-12-374493-7.CS1 maint: location (связь)
  18. ^ Ульрих Дреппер (9 октября 2014 г.). «Память, часть 3: виртуальная память». LWN.net.
  19. ^ Дэвид Кантер (17 марта 2010 г.). "Прибытие Уэстмира". Технология реального мира. Получено 6 января 2018.
  20. ^ Корпорация Intel (2017 г.). «4.10.1 Идентификаторы контекста процесса (PCID)». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 (PDF). Том 3A: Руководство по системному программированию, часть 1.
  21. ^ Гил Тене (8 января 2018 г.). «PCID теперь является важной функцией производительности / безопасности на x86». Получено 23 марта 2018.
  22. ^ Д. Абрамсон, Дж. Джексон, С. Мутрасаналлур, Г. Нейгер, Г. Ренье, Р. Шанкаран, И. Шойнас, Р. Улиг, Б. Вембу и Дж. Вигерт. Технология виртуализации Intel для направленного ввода-вывода. Intel Technology Journal, 10(03):179–192.
  23. ^ Продвинутые микроустройства. Справочное руководство по архитектуре защищенной виртуальной машины AMD. Advanced Micro Devices, 2008 г.
  24. ^ Г. Нейгер, А. Сантони, Ф. Люнг, Д. Роджерс и Р. Улиг. Технология виртуализации Intel: аппаратная поддержка для эффективной виртуализации процессоров. Intel Technology Journal, 10 (3).
  25. ^ Продвинутые микроустройства. AMD Безопасная виртуальная машина Справочное руководство по архитектуре. Advanced Micro Devices, 2008 г.

внешняя ссылка