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 →