Открыть сервис

Translation Lookaside Buffer

Translation Lookaside Buffer (TLB, буфер ассоциативной трансляции, буфер быстрого преобразования адреса) — это специализированная высокоскоростная кэш-память, входящая в состав блока управления памятью (MMU) центрального процессора. TLB служит для ускорения преобразования виртуальных адресов в физические путём хранения недавно использованных отображений страниц виртуальной памяти.

Назначение и принцип работы

Современные операционные системы используют механизм виртуальной памяти, при котором каждый процесс работает с непрерывным виртуальным адресным пространством. Фактически данные располагаются в физической памяти фрагментированными страницами фиксированного размера (обычно 4 КБ). Преобразование виртуального адреса в физический осуществляется через таблицы страниц, хранящиеся в оперативной памяти (ОЗУ). Обращение к ОЗУ для каждого преобразования адреса занимает несколько десятков наносекунд, что при частых обращениях к памяти приводит к значительному замедлению работы процессора.

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

История

Концепция буфера быстрого преобразования адресов возникла в 1960-х годах в связи с развитием систем виртуальной памяти. Первые коммерческие реализации появились в мейнфреймах IBM System/370 (1970 год). В персональных компьютерах TLB начал применяться с появлением процессоров Intel 80386 (1985 год), который поддерживал страничную организацию памяти. С развитием многоядерных процессоров и увеличением объёмов памяти TLB стал важным элементом производительности, что привело к появлению многоуровневых TLB и аппаратной поддержки больших страниц.

Структура и характеристики

Типы записей

Каждая запись в TLB (TLB entry) содержит следующие поля:

  • Виртуальный адрес страницы (или тег) — идентификатор виртуальной страницы.
  • Физический адрес страницы — соответствующий адрес в физической памяти.
  • Бит присутствия — указывает, находится ли страница в физической памяти.
  • Бит доступа — фиксирует факт обращения к странице.
  • Бит изменения (dirty bit) — показывает, были ли записаны данные на страницу.
  • Бит кэширования — определяет, разрешено ли кэширование страницы.
  • Идентификатор адресного пространства (ASID) — различает записи для разных процессов, позволяя избежать полной очистки TLB при переключении контекста.

Размер и ассоциативность

TLB имеет ограниченный размер — от нескольких десятков до нескольких тысяч записей. По организации TLB бывают:

  • Полностью ассоциативные — любая запись может храниться в любом слоте, поиск ведётся параллельно по всем слотам. Обеспечивает минимальное число промахов, но сложен в реализации при большом объёме.
  • Наборно-ассоциативные (set-associative) — записи группируются в наборы, каждый адрес может попасть только в один набор. Компромисс между производительностью и сложностью.
  • Прямого отображения (direct-mapped) — каждый адрес соответствует только одному слоту. Простейшая реализация, но высокая вероятность промахов.

Многоуровневая организация

Современные процессоры используют двухуровневую структуру TLB:

  • L1 TLB — небольшой (обычно 32–128 записей), очень быстрый, часто разделён на отдельные буферы для инструкций (ITLB) и данных (DTLB).
  • L2 TLB — больший (сотни–тысячи записей), несколько медленнее, но снижает вероятность промаха после L1.

Классификация

По типу адресуемых данных

  • ITLB (Instruction TLB) — кэширует отображения для страниц, содержащих исполняемый код.
  • DTLB (Data TLB) — кэширует отображения для страниц с данными.
  • Unified TLB — единый буфер для инструкций и данных (используется реже, обычно в L2).

По способу обслуживания промахов

  • Аппаратный TLB (hardware TLB) — промах обрабатывается блоком управления памятью процессора, который автоматически загружает запись из таблиц страниц. Характерен для архитектур x86, ARM.
  • Программный TLB (software TLB) — при промахе процессор генерирует исключение, и операционная система загружает запись. Используется в архитектурах MIPS, некоторых RISC-системах.

Проблемы и методы оптимизации

Промахи TLB

Основная проблема TLB — промахи, которые могут существенно снизить производительность. Причины промахов:

  • Холодный промах (cold miss) — запись никогда не загружалась в TLB.
  • Промах из-за конфликта (conflict miss) — запись вытеснена другой из-за ограниченной ассоциативности.
  • Промах из-за ёмкости (capacity miss) — TLB слишком мал для рабочего набора данных.

Большие страницы

Использование страниц увеличенного размера (2 МБ, 1 ГБ в x86-64) позволяет одному элементу TLB покрывать больший объём памяти, снижая число промахов. Операционные системы (Linux, Windows) поддерживают прозрачное использование больших страниц (Transparent Huge Pages) для приложений с интенсивным доступом к памяти.

Предзагрузка TLB

Некоторые процессоры реализуют аппаратную предзагрузку записей в TLB на основе предсказания паттернов доступа к памяти, аналогично предвыборке кэша данных.

Контекстная маркировка

Использование ASID (Address Space Identifier) или PCID (Process Context Identifier) позволяет хранить в TLB записи для нескольких процессов одновременно, избегая полной очистки при переключении контекста. В процессорах Intel с архитектурой Nehalem (2008 год) и новее реализована поддержка PCID.

Применение

TLB является неотъемлемой частью всех современных процессоров общего назначения. Он критически важен для производительности:

  • Операционных систем — при частых переключениях контекста и работе с большими объёмами данных.
  • Баз данных и серверов приложений — обработка большого числа параллельных запросов требует эффективного управления памятью.
  • Научных и инженерных вычисленийработа с массивами данных, превышающими размер кэша.
  • Виртуализации — гипервизоры используют вложенные TLB (nested TLB) для ускорения трансляции адресов гостевых операционных систем.

Интересные факты

  • В процессорах Intel Core 12-го поколения (Alder Lake, 2021 год) L1 DTLB имеет 64 записи, L1 ITLB — 64 записи, L2 TLB — 2048 записей.
  • В процессорах AMD Zen 4 (2022 год) L1 DTLB — 64 записи, L1 ITLB — 64 записи, L2 TLB — 3072 записи.
  • Архитектура ARM Cortex-X3 (2022 год) использует L1 DTLB на 48 записей и L2 TLB на 2048 записей.
  • В суперкомпьютерах и серверных процессорах TLB может достигать десятков тысяч записей для поддержки больших объёмов оперативной памяти (терабайты и более).

Источники

  • Hennessy J. L., Patterson D. A. Computer Architecture: A Quantitative Approach. — 6th ed. — Morgan Kaufmann, 2017.
  • Intel 64 and IA-32 Architectures Software Developer’s Manual. — Volume 3A: System Programming Guide. — Intel Corporation, 2023.
  • AMD64 Architecture Programmer’s Manual. — Volume 2: System Programming. — AMD, 2022.
  • ARM Architecture Reference Manual ARMv8-A. — ARM Limited, 2021.
  • Love R. Linux Kernel Development. — 3rd ed. — Addison-Wesley, 2010.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →