Понимание TLB из результатов CPUID на Intel - PullRequest
3 голосов
/ 27 сентября 2019

Я изучаю лист 0x02 инструкции cpuid и придумал несколько вопросов.В документации есть таблица , которая описывает, что означают результаты cpuid для конфигурации TLB.Вот они:

case 1

56H TLB Data TLB0: 4 MByte pages, 4-way set associative, 16 entries
[...]
B4H TLB Data TLB1: 4 KByte pages, 4-way associative, 256 entries

Означает ли это, что существует только 2 уровня TLB?Как запросить количество уровней кеша TLB в случае, если какой-либо поставщик x86 решит предоставить 3 уровня TLB?

case 2

57H TLB Data TLB0: 4 KByte pages, 4-way associative, 16 entries
[...] 
B4H TLB Data TLB1: 4 KByte pages, 4-way associative, 256 entries

Является ли "4-way ассоциативным" здесь простоопечатка, означающая, что "4-way set ассоциативный"?

case 3

55H TLB Instruction TLB: 2-MByte or 4-MByte pages, fully associative, 7 entries
[...]
6AH Cache uTLB: 4 KByte pages, 8-way set associative, 64 entries
6BH Cache DTLB: 4 KByte pages, 8-way set associative, 256 entries

DTLB означает Data TLB?Что означает uTLB?микрооперации-TLB?Какой уровень кэширования TLB здесь рассматривается?

case 4

C1H STLB Shared 2nd-Level TLB: 4 KByte/2MByte pages, 8-way associative, 1024 entries

Означает ли это, что в этом случае TLB 2-го уровня является общим для всех ядер?Так что, если не указано явно, является ли кеш TLB частным?

1 Ответ

4 голосов
/ 29 сентября 2019

Как запросить количество уровней кэша TLB в случае, если какой-либо поставщик x86 решит предоставить 3 уровня TLB?

Лист 0x2 может возвращать информацию TLB только на процессорах Intel.Это зарезервировано на всех современных процессорах AMD.На всех современных процессорах Intel нет единого числа, которое сообщит вам количество уровней TLB.Единственный способ определить количество уровней - перечислить все листы или подзаголовки, связанные с TLB cpuid.Следующий алгоритм работает на всех текущих процессорах Intel, которые поддерживают инструкцию cpuid (вплоть до Ice Lake, Goldmont Plus и Knights Mill):

  1. Проверьте, существует ли значение 0xFE в любом изчетыре регистра EAX, EBX, ECX и EDX возвращаются, когда cpuid выполняется с EAX, установленным в лист 0x2.
  2. Если 0xFE не существует, перечислить все байты в четырех регистрах.Основываясь на Таблице 3-12 руководства Intel, том 2 (номер 325383-070US), будет один или два дескриптора TLB данных, которые могут кэшировать переводы 4 КБ.В руководстве Intel используются следующие разные имена TLB, которые могут кэшировать трансляции доступа к данным: TLB данных, TLB0 данных, TLB1 данных, DTLB, uTLB и общий TLB 2-го уровня.Если таких дескрипторов два, количество уровней равно двум.Дескриптор с большим количеством номеров TLB является дескриптором для TLB второго уровня.Если существует только один такой дескриптор, число уровней равно единице.
  3. Если существует 0xFE, информацию о TLB необходимо получить из cpuid leaf 0x18.Перечислите все действительные подзаголовки с максимальным допустимым числом подзаголовков.Если существует по меньшей мере один дополнительный лист с наименьшими двумя значащими битами EDX, равными 11, то количество уровней TLB равно двум.В противном случае количество уровней TLB равно единице.

Информация TLB для процессоров Ice Lake и Goldmont Plus представлена ​​в листе 0x18.Этот лист обеспечивает большую гибкость в кодировании информации TLB.Информация TLB для всех других текущих процессоров Intel представлена ​​в листе 0x2.Я не знаю о Knights Mill (если у кого-то есть доступ к Knights Mill, рассмотрите возможность совместного использования дампа cpuid).

Определение количества уровней TLB недостаточно для полного описания того, как уровнисвязаны друг с другом.Современные процессоры Intel реализуют две разные двухуровневые иерархии TLB:

  • TLB второго уровня может кэшировать трансляции для загрузок данных (включая предварительные выборки), хранилищ данных и выборок команд.TLB второго уровня в этом случае называется «Shared TLB 2-го уровня».
  • TLB второго уровня может кэшировать трансляции для загрузки и сохранения данных, но не для выборок команд.TLB второго уровня в этом случае вызывается любым из следующих: TLB данных, TLB1 данных или DTLB.

Я рассмотрю пару примеров, основанных на дампах cpuid из InstLatx64 .На одном из процессоров Haswell с включенной гиперпоточностью лист 0x2 предоставляет следующую информацию в четырех регистрах:

76036301-00F0B5FF-00000000-00C10000

Нет 0xFE, поэтому информация TLB присутствует в этом листесам.В соответствии с таблицей 3-12:

76: Instruction TLB: 2M/4M pages, fully associative, 8 entries
03: Data TLB: 4 KByte pages, 4-way set associative, 64 entries
63: Data TLB: 2 MByte or 4 MByte pages, 4-way set associative, 32 entries and a separate array with 1 GByte pages, 4-way set associative, 4 entries
B5: Instruction TLB: 4KByte pages, 8-way set associative, 64 entries
C1: Shared 2nd-Level TLB: 4 KByte/2MByte pages, 8-way associative, 1024 entries

Другие байты не имеют отношения к TLB.

Существует одно расхождение по сравнению с таблицей 2-17 Руководства по оптимизации Intel (номер 248966-042b).В таблице 2-17 упоминается, что инструкция TLB для записей 4 КБ имеет 128 записей, 4-сторонняя ассоциативная и динамически распределяется между двумя гиперпотоками.Но дамп TLB говорит, что это 8-сторонняя ассоциация и есть только 64 записи.На самом деле кодирования для четырехканальной ITLB с 128 записями не существует, поэтому я считаю, что руководство неверно.В любом случае, C1 показывает, что существует два уровня TLB, а второй уровень кэширует данные и переводы команд.

На одном из процессоров Goldmont лист 0x2 предоставляет следующую информацию в четырех регистрах:

6164A001-0000FFC4-00000000-00000000

Вот интерпретация байтов, относящихся к TLB:

61: Instruction TLB: 4 KByte pages, fully associative, 48 entries
64: Data TLB: 4 KByte pages, 4-way set associative, 512 entries
A0: DTLB: 4k pages, fully associative, 32 entries
C4: DTLB: 2M/4M Byte pages, 4-way associative, 32 entries

Для страниц размером 4 КБ имеются два TLB данных, один из которых содержит 512 записей, а другой - 32 записи.Это означает, что процессор имеет два уровня TLB.Второй уровень называется «TLB данных», и поэтому он может кэшировать только трансляции данных.

В таблице 19-4 руководства по оптимизации упоминается, что ITLB в Goldmont поддерживает большие страницы, но эта информация отсутствует вTLB информация.Данные TLB данных согласуются с таблицей 19-7 руководства, за исключением того, что «Данные TLB» и «DTLB» в руководстве называются «DTLB» и «uTLB» соответственно.

На одномиз процессоров Knights Landing , лист 0x2 предоставляет следующую информацию в четырех регистрах:

6C6B6A01-00FF616D-00000000-00000000
6C: DTLB: 2M/4M pages, 8-way set associative, 128 entries
6B: DTLB: 4 KByte pages, 8-way set associative, 256 entries
6A: uTLB: 4 KByte pages, 8-way set associative, 64 entries
61: Instruction TLB: 4 KByte pages, fully associative, 48 entries
6D: DTLB: 1 GByte pages, fully associative, 16 entries

Таким образом, существует два уровня TLB.Первый состоит из нескольких структур для разных размеров страниц.TLB для страниц размером 4 КБ называется uTLB, а TLB для других размеров страниц - DTLB.TLB второго уровня называется DTLB.Эти номера и имена соответствуют таблице 20-3 из руководства.

Процессоры Silvermont предоставляют следующую информацию TLB:

61B3A001-0000FFC2-00000000-00000000
61: Instruction TLB: 4 KByte pages, fully associative, 48 entries
B3: Data TLB: 4 KByte pages, 4-way set associative, 128 entries
A0: DTLB: 4k pages, fully associative, 32 entries
C2: DTLB: 4 KByte/2 MByte pages, 4-way associative, 16 entries

Эта информация соответствуетручной, кроме С2.Я думаю, что следует сказать «4 МБайт / 2 МБайт» вместо «4 КБайт / 2 МБайт».Это, вероятно, опечатка в руководстве.

Микроархитектура Intel Penryn является примером, в котором информация TLB использует имена TLB0 и TLB1 для ссылки на TLB первого и второго уровня:

05: Data TLB1: 4 MByte pages, 4-way set associative, 32 entries
B0: Instruction TLB: 4 KByte pages, 4-way set associative, 128 entries
B1: Instruction TLB: 2M pages, 4-way, 8 entries or 4M pages, 4-way, 4 entries
56: Data TLB0: 4 MByte pages, 4-way set associative, 16 entries
57: Data TLB0: 4 KByte pages, 4-way associative, 16 entries
B4: Data TLB1: 4 KByte pages, 4-way associative, 256 entries

Старые процессоры Intel имеют одноуровневую иерархию TLB.Например, вот информация TLB для Prescott :

5B: Data TLB: 4 KByte and 4 MByte pages, 64 entries
50: Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 64 entries

Все процессоры Intel 80386 и некоторые процессоры Intel 80486 включают одноуровневую иерархию TLB, но не поддерживают cpuid инструкция.На процессорах более ранних, чем 80386, нет подкачки.Если вы хотите, чтобы приведенный выше алгоритм работал на всех процессорах Intel x86, вам придется рассмотреть и эти случаи.В документе Intel № 241618-025 под названием «Идентификация процессора и инструкция CPUID», который можно найти здесь , обсуждается, как обращаться с этими случаями в главе 7.

Я буду обсуждатьпример, где информация TLB присутствует в листе 0x18, а не в листе 0x2.Как я уже говорил ранее, единственными существующими процессорами Intel, имеющими информацию TLB в формате 0x18, являются процессоры Ice Lake и Goldmont Plus (и, возможно, Knights Mill).Конечный дамп 0x2 для процессора Ice Lake :

00FEFF01-000000F0-00000000-00000000

Имеется байт 0xFE, поэтому информация TLB присутствует в более мощном листе 0x18.Subleaf 0x0 листа 0x18 указывает, что максимальный действительный подзаголовок равен 0x7.Вот дампы для подзаголовков от 0x0 до 0x7:

00000007-00000000-00000000-00000000 [SL 00]
00000000-00080007-00000001-00004122 [SL 01]
00000000-0010000F-00000001-00004125 [SL 02]
00000000-00040001-00000010-00004024 [SL 03]
00000000-00040006-00000008-00004024 [SL 04]
00000000-00080008-00000001-00004124 [SL 05]
00000000-00080007-00000080-00004043 [SL 06]
00000000-00080009-00000080-00004043 [SL 07]

В руководстве Intel описано, как декодировать эти биты.Каждый действительный подзаголовок описывает одну структуру TLB.Подзаголовок действителен (т. Е. Описывает структуру TLB), если младшие пять битов EDX не все нули.Следовательно, подзаголовок 0x0 недействителен.Следующие семь подзаголовков являются действительными, что означает, что в процессоре Ice Lake есть 7 дескрипторов TLB.Наименее значимые пять битов EDX указывают тип TLB, а следующие три бита указывают уровень TLB.Следующая информация получается путем декодирования вспомогательных битов:

  • [SL 01] : Описывает TLB инструкции первого уровня, который представляет собой 8-позиционный полностью ассоциативный кэш, способный к кешированиюпереводы для страниц 4KB, 2MB и 4MB.
  • [SL 02] : наименее значимые пять битов представляют собой число 5, которое является зарезервированным кодированием в соответствии с самой последней версией руководства (том 2).Другие биты задают TLB, который является полностью ассоциативным с 16 путями и способен кэшировать переводы для всех размеров страниц.Intel предоставила информацию о TLB в Ледовом озере в Таблице 2-5 руководства по оптимизации.Наиболее близкое совпадение показывает, что зарезервированное кодирование 5 наиболее вероятно представляет TLB первого уровня для трансляций хранилища данных.
  • [SL 03] : Пять младших разрядов представляют число 4, которое также является зарезервированным кодированием в соответствии с самой последней версией руководства.Наиболее близкое совпадение с таблицей 2-5 предполагает, что он представляет TLB первого уровня для загрузки данных, которая может кэшировать трансляции 4 КБ.Количество способов и наборов соответствует Таблице 2-5.
  • [SL 04] : аналогично субаблифу 0x3.Наиболее близкое совпадение с таблицей 2-5 предполагает, что он представляет TLB первого уровня для нагрузок данных, которые могут кэшировать трансляции 2 МБ и 4 МБ.Количество способов и наборов соответствует Таблице 2-5.
  • [SL 05] : аналогично субаблифу 0x3.Наиболее близкое совпадение с таблицей 2-5 предполагает, что он представляет TLB первого уровня для загрузки данных, которая может кэшировать переводы объемом 1 ГБ.Количество способов и наборов соответствует Таблице 2-5.
  • [SL 06] : Описывает унифицированный TLB второго уровня, состоящий из 8 путей и 128 наборов и способный кэшировать переводы для страниц размером 4 КБ, 2 МБ и 4 МБ.
  • [SL 07] : Описывает унифицированный TLB второго уровня, состоящий из 8 путей и 128 наборов и способный кэшировать переводы для страниц объемом 4 КБ и 1 ГБ.

В таблице 2-5 фактически упоминается, что существует только одна унифицированная структура TLB, но половина способов может кэшировать переводы только для страниц размером 4 КБ, 2 МБ и 4 МБ, а другая половина может кэшировать только переводы для4КБ и 1ГБ страниц.Таким образом, информация TLB для TLB второго уровня согласуется с руководством.Однако информация TLB для инструкции TLB не соответствует Таблице 2-5.Руководство, вероятно, правильно.ITLB для страниц размером 4 КБ, похоже, перепутан с данными для страниц объемом 2 МБ и 4 МБ в информационном дампе TLB.

На процессорах AMD информация TLB для TLB первого и второго уровня представлена ​​в виде листов8000_0005 и 8000_0006 соответственно.Дополнительную информацию можно найти в руководстве AMD, том 3. Процессоры AMD, предшествующие K5, не поддерживают cpuid, и некоторые из этих процессоров включают одноуровневую TLB.Поэтому, если вам небезразличны эти процессоры, вам нужен альтернативный механизм, чтобы определить, существует ли TLB.

Является ли «четырехсторонняя ассоциация» здесь просто опечаткой, означающей «четырехсторонняя ассоциативность»?

Это не опечатка.Эти термины являются синонимами, и оба они обычно используются.

DTLB означает Data TLB?Что означает UTLB?uosp-TLB?Какой уровень кэширования TLB рассматривается здесь?

DTLB и uTLB являются именами для TLB данных.Имя DTLB используется как для TLB первого уровня, так и для второго уровня.Имя uTLB используется только для TLB данных первого уровня и сокращенно для микро-TLB.

Означает ли это, что в этом случае TLB 2-го уровня является общим для всех ядер?Так что, если не указано явно, является ли ядро ​​кэша TLB частным?

Термин «общий» здесь означает «унифицированный», так как в переводах данных и инструкций можно кэшироваться.Intel должна была назвать его UTLB (заглавная U) или Unified TLB, это имя используется в современном листе 0x18.

...