идентификатор процессора
В x86 архитектуре инструкция CPUID (идентифицированная CPUID
код операции ) — это дополнительная инструкция процессора (ее название происходит от идентификации процессора ), позволяющая программному обеспечению обнаруживать подробную информацию о процессоре. Он был представлен Intel в 1993 году с выпуском процессоров Pentium и 486 с усовершенствованной версией SL . [1]
Программа может использовать CPUID
ли такие функции, как MMX / SSE чтобы определить тип процессора и реализованы .
История
[ редактировать ]До общего появления CPUID
инструкции, программисты писали эзотерический машинный код , который использовал незначительные различия в поведении процессора, чтобы определить марку и модель процессора. [2] [3] [4] [5] С появлением процессора 80386 EDX при сбросе указывал версию, но ее можно было прочитать только после сброса, и у приложений не было стандартного способа считывания значения.
За пределами семейства x86 разработчикам в большинстве случаев по-прежнему приходится использовать эзотерические процессы (включающие синхронизацию инструкций или триггеры сбоев ЦП) для определения имеющихся изменений в конструкции ЦП.
Например, в семействе Motorola 680x0, у которого никогда не было CPUID
инструкции любого типа — некоторые конкретные инструкции требуют повышенных привилегий. Их можно использовать для различения различных членов семейства процессоров. В Motorola 68010 команда MOVE из SR стала привилегированной. Это заметное изменение инструкций (и конечного автомата) позволило 68010 соответствовать требованиям виртуализации Попека и Голдберга . Поскольку 68000 предлагал непривилегированный MOVE от SR, два разных ЦП можно было отличить друг от друга по срабатыванию состояния ошибки ЦП.
В то время как CPUID
Инструкция специфична для архитектуры x86, другие архитектуры (например, ARM) часто предоставляют встроенные регистры, которые можно читать заданными способами для получения той же информации, что и x86. CPUID
инструкция.
Вызов CPUID
[ редактировать ]The CPUID
код операции 0F A2
.
На ассемблера языке CPUID
инструкция не принимает никаких параметров, так как CPUID
неявно использует регистр EAX для определения основной категории возвращаемой информации. В современной терминологии Intel это называется листом CPUID. CPUID
следует вызывать с помощью EAX = 0
во-первых, поскольку при этом в регистре EAX будет сохранен самый высокий параметр вызова EAX (лист), который реализует ЦП.
Для получения информации о расширенных функциях CPUID
следует вызывать с установленным старшим битом EAX. Чтобы определить наивысший параметр вызова расширенной функции, вызовите CPUID
с EAX = 80000000h
.
CPUID оставляет больше 3, но меньше 80000000 и доступен только тогда, когда регистры конкретной модели имеют IA32_MISC_ENABLE.BOOT_NT4 [бит 22] = 0 (что так по умолчанию). Как следует из названия, Windows NT 4.0 до SP6 не загружалась должным образом, если этот бит не был установлен. [6] но более поздние версии Windows в этом не нуждаются, поэтому можно считать, что базовые листья больше 4 видимы в текущих системах Windows. По состоянию на апрель 2024 г. [update]Срок действия базовых отпусков составляет до 23 часов, но информация, возвращаемая некоторыми листами, не раскрывается в общедоступной документации, т.е. они «зарезервированы».
Некоторые из недавно добавленных листьев также имеют подлисты, которые выбираются через регистр ECX перед вызовом. CPUID
.
EAX =0: наивысший функциональный параметр и идентификатор производителя.
[ редактировать ]Возвращает строку идентификатора производителя ЦП — двенадцатизначную строку ASCII, хранящуюся в EBX, EDX, ECX (именно в этом порядке). Самый высокий базовый параметр вызова (наибольшее значение, которое может быть установлено EAX перед вызовом). CPUID
) возвращается в EAX.
Вот список процессоров и реализованных функций.
Процессоры | Базовый | Расширенный |
---|---|---|
Ранее Intel 486 | CPUID не реализован | |
Позже Intel 486 и Pentium | 0x01 | Не реализовано |
Pentium Pro , Pentium II и Celeron | 0x02 | Не реализовано |
Пентиум III | 0x03 | Не реализовано |
Пентиум 4 | 0x02 | 0x8000 0004 |
Ксеон | 0x02 | 0x8000 0004 |
Пентиум М | 0x02 | 0x8000 0004 |
Pentium 4 с Hyper-Threading | 0x05 | 0x8000 0008 |
Пентиум Д (8хх) | 0x05 | 0x8000 0008 |
Пентиум Д (9хх) | 0x06 | 0x8000 0008 |
Основной дуэт | 0x0A | 0x8000 0008 |
Ядро 2 Дуо | 0x0A | 0x8000 0008 |
Xeon 3000 , 5100, 5200, 5300, 5400 ( серия 5000 ) | 0x0A | 0x8000 0008 |
Серия Core 2 Duo 8000 | 0x0D | 0x8000 0008 |
Ксеон 5200, 5400 серии | 0x0A | 0x8000 0008 |
Атом | 0x0A | 0x8000 0008 |
Nehalem Процессоры на базе | 0x0B | 0x8000 0008 |
Ivy Bridge Процессоры на базе | 0x0D | 0x8000 0008 |
Процессоры на базе Skylake (базовая процессорная частота и максимальная частота; опорная частота шины) | 0x16 | 0x8000 0008 |
системы на кристалле Основной лист перечисления атрибутов поставщика | 0x17 | 0x8000 0008 |
Meteor Lake Процессоры на базе | 0x23 | 0x8000 0008 |
Ниже приведены известные строки идентификатора производителя процессора:
"AuthenticAMD"
– АМД"CentaurHauls"
– IDT WinChip/ Centaur (включая некоторые процессоры VIA и Zhaoxin)"CyrixInstead"
– Cyrix / ранние компании STMicroelectronics и IBM"GenuineIntel"
– Интел"GenuineIotel"
— Интел (редко) [7] [8]"TransmetaCPU"
– Трансмитинг"GenuineTMx86"
– Трансмитинг"Geode by NSC"
– Национальный полупроводник"NexGenDriven"
– НексГен"RiseRiseRise"
- Рост"SiS SiS SiS "
- СиС"UMC UMC UMC "
– УМС"Vortex86 SoC"
— ДМ&П Вортекс86" Shanghai "
- Чжаосинь"HygonGenuine"
- Хайгон"Genuine RDC"
– Компания RDC Semiconductor Co. Ltd. [9]"E2K MACHINE"
— МЦСТ Эльбрус [10]"VIA VIA VIA "
- С ПОМОЩЬЮ [ нужна ссылка ]"AMD ISBETTER"
— ранние инженерные образцы AMD K5 процессора [11] [12] [ нужен лучший источник ]
Ниже приведены строки идентификаторов, используемые программными ядрами ЦП с открытым исходным кодом :
"GenuineAO486"
— процессор ao486 (старый) [13] [14]"MiSTer AO486"
— процессор ao486 (новый) [15] [14]"GenuineIntel"
— ядро v586 [16] (это идентично строке идентификатора Intel)
Ниже приведены известные строки идентификаторов виртуальных машин:
"MicrosoftXTA"
– Microsoft x86-на-ARM [17]"GenuineIntel"
– Яблоко Розетта 2 [18]"VirtualApple"
– Новые версии Apple Rosetta 2
Например, на процессоре GenuineIntel значения, возвращаемые в EBX, — это 0x756e6547, EDX — 0x49656e69, а ECX — 0x6c65746e. В следующем примере кода отображается строка идентификатора поставщика, а также наивысший вызывающий параметр, реализуемый ЦП.
.intel_syntax noprefix
.text
.m0: .string "CPUID: %x\n"
.m1: .string "Largest basic function number implemented: %i\n"
.m2: .string "Vendor ID: %s\n"
.globl main
main:
push r12
mov eax, 1
sub rsp, 16
cpuid
lea rdi, .m0[rip]
mov esi, eax
call printf
mov eax, 0
cpuid
lea rdi, .m1[rip]
mov esi, eax
mov r12d, edx
mov ebp, ecx
call printf
mov 3[rsp], ebx
lea rsi, 3[rsp]
lea rdi, .m2[rip]
mov 7[rsp], r12d
mov 11[rsp], ebp
call printf
add rsp, 16
pop r12
ret
.section .note.GNU-stack,"",@progbits
На некоторых процессорах можно изменить строку идентификатора производителя, сообщаемую CPUID.(EAX=0), записав новую строку идентификатора в определенные MSR ( регистры, зависящие от модели ), используя WRMSR
инструкция. Это использовалось на процессорах сторонних производителей для включения функций и оптимизаций, которые были отключены в программном обеспечении для процессоров, которые не возвращают GenuineIntel
Строка идентификатора. [19] Известно, что процессоры, обладающие такими MSR, включают:
Процессор | MSR |
---|---|
IDT WinChip | 108h-109h [20]
|
ВИА С3 , С7 | 1108h-1109h [21]
|
ВИА Нано | 1206h-1207h [22]
|
Трансмета Крузо , Эфисеон | 80860001h-80860003h [23] [24]
|
AMD Geode GX, LX | 3000h-3001h [25]
|
ДМ&П Вортекс86 EX2 | 52444300h-52444301h [26]
|
EAX=1: информация о процессоре и биты функций.
[ редактировать ]ЦП Это возвращает информацию о шагах , модели и семействе в регистре EAX (также называемом сигнатурой ЦП), флаги функций в регистрах EDX и ECX, а также дополнительную информацию о функциях в регистре EBX. [27]
ЕАХ | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Сдержанный | Расширенный семейный идентификатор | Расширенный идентификатор модели | Сдержанный | Тип процессора | Семейный идентификатор | Модель | Идентификатор шага |
- Идентификатор шага — это номер версии продукта, присвоенный из-за исправленных ошибок или других изменений.
- Фактическая модель процессора определяется на основе полей «Модель», «Расширенный идентификатор модели» и «Идентификатор семейства». Если поле «Идентификатор семейства» равно 6 или 15, модель равна сумме поля «Расширенный идентификатор модели», сдвинутого влево на 4 бита, и поля «Модель». В противном случае модель равна значению поля Модель.
- Фактическое семейство процессоров определяется на основе полей «Идентификатор семейства» и «Расширенный идентификатор семейства». Если поле «Идентификатор семьи» равно 15, семья равна сумме полей «Расширенный идентификатор семьи» и «Идентификатор семьи». В противном случае семейство соответствует значению поля «Идентификатор семейства».
- Значение поля «Тип процессора» приведено в таблице ниже.
Тип | Кодирование в двоичном формате |
---|---|
Производитель оригинального оборудования ( OEM ) Процессор | 00 |
Процессор Intel Overdrive | 01 |
Двойной процессор (применимо Intel P5 Pentium ) только к процессорам [28] | 10 |
Зарезервированное значение | 11 |
По состоянию на октябрь 2023 г. известны следующие идентификаторы семейства процессоров x86: [29]
Семейный идентификатор + Расширенный семейный идентификатор |
Интел | АМД | Другой |
---|---|---|---|
0h
|
— | — | — |
1h
|
— | — | — |
2h
|
— | — | — |
3h
|
[а] | — | — |
4h
|
486 | 486 , [30] 5х86 , Лось SC4xx/5xx [31] |
Сайрикс 5x86 , [32] Сайрикс МедиаГХ , [33] UMC Зеленый процессор , [4] МЦСТ Эльбрус (большинство моделей), [10] MiSTer ao486 [34] |
5h
|
Пентиум , Пентиум ММХ , Кварк X1000 |
К5 , К6 |
Сайрикс 6x86 , Сайрикс МедиаГХм , [33] Жеода (кроме NX), НексГен Nx586, [4] ИДТ ВинЧип , ИДТ ВинЧип 2, ИДТ WinChip 3, Передача Крузо , Подъем МП6 , СИС 550, DM&P Vortex86 (ранний), [35] РДЦ ИАД 100, МЦСТ Эльбрус-8С2 [10] |
6h
|
Пентиум Про Пентиум II Пентиум III Пентиум М , Intel Core (все варианты), Intel Atom (все варианты), Xeon NetBurst (кроме вариантов ), Ксеон Фи (кроме KNC) |
К7: Атлон , Атлон XP |
Сайрикс 6x86 MX/MII ВИА С3 , ВИА С7 , ВИА Нано , ДМ&П Вортекс86 (DX3,EX2 [36] ), Чжаоксин ZX-A/B/C/C+, ( Кентавр ЦНС [37] ), МЦСТ Эльбрус-12С/16С/2С3 [10] |
7h
|
Итаний (в режиме IA-32) |
— | Чжаосинь Кайсянь, Чжаосинь КайсХэн |
8h
|
[б] | — | — |
9h
|
— | — | — |
0Ah
|
— | — | — |
0Bh
|
Ксеон Пхи (Рыцарский уголок) [39] | — | — |
0Ch
|
— | — | — |
0Dh
|
— | — | — |
0Eh
|
— | — | — |
0Fh
|
NetBurst (Пентиум 4) | К8/Молот ( Атлон 64 ) |
Эффективность передачи |
10h
|
— | К10 : Феномен | — |
11h
|
Итаниум 2 [40] (в режиме IA-32) |
Турион X2 | — |
12h
|
— | Ллано | — |
13h
|
— | — | — |
14h
|
— | Бобкэт | — |
15h
|
— | Бульдозер , Пиледрайвер , Паровой каток , Экскаватор |
— |
16h
|
— | Ягуар , Пума |
— |
17h
|
— | было 1 , Это было 2 |
— |
18h
|
— | Хигон Дхьяна | |
19h
|
— | Было 3 , Это было 4 |
— |
1Ah
|
— | ( Дзен 5 ) | — |
Биты | ЕВХ | Действительный |
---|---|---|
7:0 | Индекс бренда | |
15:8 | CLFLUSH размер строки (Значение * 8 = размер строки кэша в байтах)
|
если CLFLUSH установлен флаг функции.
CPUID.01.EDX.CLFSH [бит 19] = 1 |
23:16 | Максимальное количество адресных идентификаторов логических процессоров в этом физическом пакете;
Ближайшее целое число степени 2, не меньшее этого значения, представляет собой количество уникальных начальных идентификаторов APIC, зарезервированных для адресации различных логических процессоров в физическом пакете. [а] Прежнее использование: количество логических процессоров на физический процессор; два для процессора Pentium 4 с технологией Hyper-Threading. [43] |
если Hyper-threading установлен флаг функции .
CPUID.01.EDX.HTT [бит 28] = 1 |
31:24 | Локальный идентификатор APIC: начальный идентификатор APIC используется для идентификации выполняющегося логического процессора. [б] | Pentium 4 и последующие процессоры. |
- ^ На процессорах с более чем 128 логическими процессорами в одном корпусе (например, Intel Xeon Phi 7290 [41] и AMD Threadripper Pro 7995WX [42] ) значение в бите 23:16 устанавливается равным значению, не соответствующему степени двойки.
- ^ Локальный идентификатор APIC также можно определить с помощью листа cpuid 0Bh ( CPUID.0Bh.EDX[x2APIC-ID]). На процессорах с более чем 256 логическими процессорами в одном корпусе (например, Xeon Phi 7290) необходимо использовать лист 0Bh, поскольку идентификатор APIC не умещается в 8 бит.
Информация о процессоре и флаги функций зависят от производителя, но обычно значения Intel используются другими производителями в целях совместимости.
ЭДКС | ЭКХ [а] | ||||
---|---|---|---|---|---|
Кусочек | Короткий | Особенность | Короткий | Особенность | Кусочек |
0 | ФПУ | Встроенный x87 процессор | sse3 | SSE3 ( Новые инструкции Prescott — PNI) | 0 |
1 | время | Расширения виртуального режима 8086 (например, VIF, VIP, PVI) | pclmulqdq | PCLMULQDQ (умножение без переноса) инструкция
|
1 |
2 | из | Расширения отладки ( CR4 , бит 3) | dtes64 | 64-битное хранилище отладки (бит 21 edx) | 2 |
3 | почему | Расширение размера страницы (страницы 4 МБ) | монитор | MONITOR и MWAIT инструкции ( ПНИ )
|
3 |
4 | tsc | Счетчик отметок времени и RDTSC инструкция
|
ds-cpl | Магазин отладки, сертифицированный CPL | 4 |
5 | мср | Регистры, специфичные для модели , и RDMSR / WRMSR инструкции
|
vmx | Расширения виртуальных машин | 5 |
6 | сайт | Расширение физического адреса | smx | Расширения безопасного режима ( LaGrande ) ( GETSEC инструкция)
|
6 |
7 | мсе | Исключение проверки машины | Восток | Улучшенный SpeedStep | 7 |
8 | cx8 [б] | CMPXCHG8B ( сравнить и поменять местами ) инструкция
|
тм2 | Тепловой монитор 2 | 8 |
9 | апик [с] | Встроенный усовершенствованный программируемый контроллер прерываний | ssse3 | Дополнительные инструкции SSE3 | 9 |
10 | (мтрр) [д] | (сдержанный) | cnxt-id | Идентификатор контекста L1 | 10 |
11 | сентябрь [и] | SYSENTER и SYSEXIT инструкции быстрого системного вызова
|
sdbg | Интерфейс отладки кремния | 11 |
12 | мтрр | Регистры диапазона типов памяти | ФМА | Слитое умножение-сложение (FMA3) | 12 |
13 | страница | страницы Бит глобального разрешения в CR4 | cx16 | CMPXCHG16B инструкция
|
13 |
14 | МКА | Архитектура машинной проверки | xtpr | Можно отключить отправку сообщений о приоритете задачи. | 14 |
15 | смов | Условный ход: CMOV , FCMOV и FCOMI инструкции [ф]
|
ПДКМ | Монитор производительности и возможность отладки | 15 |
16 | одинаковый | Таблица атрибутов страницы | (сдержанный) [г] | 16 | |
17 | почему-36 | 36-битное расширение размера страницы | pcid | Идентификаторы контекста процесса ( CR4 , бит 17) | 17 |
18 | псн | Серийный номер процессора поддерживается и включен [час] | dca | Прямой доступ к кэшу для записи DMA [51] [52] | 18 |
19 | Клфш | CLFLUSH инструкция очистки строки кэша ( SSE2 )
|
sse4.1 | SSE4.1 Инструкции | 19 |
20 | (нх) | Бит запрета выполнения (NX) ( только для Itanium ) [53] [я] | sse4.2 | SSE4.2 Инструкции | 20 |
21 | дс | Хранилище отладки: сохранение трассировки выполненных прыжков. | x2apic | x2APIC (расширенный APIC) | 21 |
22 | акпи | Встроенные MSR терморегулирования для ACPI | мовбе | MOVBE инструкция ( с прямым порядком байтов )
|
22 |
23 | ммх | Инструкции MMX (64-битный SIMD) | попкнт | POPCNT инструкция
|
23 |
24 | FXSR | FXSAVE , FXRSTOR инструкции, CR4 бит 9
|
tsc-крайний срок | APIC реализует однократную операцию с использованием значения крайнего срока TSC. | 24 |
25 | ССЭ | Потоковая передача инструкций SIMD Extensions (SSE) (также известные как « Новые инструкции Katmai »; 128-битный SIMD) |
айс-девять | Набор инструкций AES | 25 |
26 | sse2 | SSE2 Инструкции | xсохранить | Расширяемое сохранение/восстановление состояния процессора: XSAVE , XRSTOR , XSETBV , XGETBV инструкции
|
26 |
27 | SS | Кэш ЦП реализует самоотслеживание | osxsave | XSAVE включено ОС
|
27 |
28 | хтт | Зарезервированное поле Max APIC ID действительно. [Дж] | avx | Расширенные векторные расширения (256-битный SIMD) | 28 |
29 | тм | Термомонитор автоматически ограничивает температуру | f16c | Инструкции преобразования чисел с плавающей запятой в/из FP16 формата | 29 |
30 | каждый 64 | Процессор IA64, эмулирующий x86 [53] | рдрнд | RDRAND (встроенный генератор случайных чисел)
|
30 |
31 | пбе | Возможность пробуждения в режиме ожидания перерыва (контакт PBE#) | гипервизор | Гипервизор присутствует (всегда ноль на физических процессорах) [56] [57] [58] | 31 |
- ^ На некоторых старых процессорах выполнение
CPUID
с конечным индексом (EAX) больше 0 может оставить EBX и ECX неизмененными, сохранив свои старые значения. По этой причине рекомендуется обнулить EBX и ECX перед выполнением.CPUID
с индексом листа 1.К процессорам, демонстрирующим такое поведение, относятся Cyrix MII. [44] и IDT WinChip 2. [45]
- ^ На процессорах IDT, Transmeta и Rise (идентификаторы производителей
CentaurHauls
,GenuineTMx86
иRiseRiseRise
),CMPXCHG8B
Инструкция всегда поддерживается, однако бит функции для инструкции может быть не установлен. Это обходной путь ошибки в Windows NT. [46] - ^ На ранних версиях AMD K5 (
AuthenticAMD
Только для процессоров семейства 5, модель 0), вместо этого используется бит 9 EDX для указания поддержки PGE. Начиная с модели K5 Model 1, это было перенесено в бит 13. [47] - ^ Intel AP-485, редакция 006 [48] до 008, в списке CPUID.(EAX=1):EDX[бит 10] указано имя «MTRR» (хотя оно описано как «Зарезервировано»/«Не рассчитывать на их значение») — это имя было удалено в более поздних версиях AP-485, и с тех пор этот бит был указан как зарезервированный без имени.
- ^ На Pentium Pro (
GenuineIntel
Только процессоры семейства 6, модель 1), бит 11 EDX недействителен — бит установлен, ноSYSENTER
иSYSEXIT
инструкции не поддерживаются Pentium Pro. [49] - ^
FCMOV
иFCOMI
инструкции доступны только в том случае, если присутствует встроенный FPU x87 (обозначается битом 0 EDX). - ^ Бит 16 ECX указан как «Зарезервирован» в общедоступной документации Intel и AMD и не установлен ни в одном известном процессоре. Однако сообщается, что некоторые версии ядра Windows Vista проверяют этот бит. [50] - если он установлен, Vista распознает его как функцию «каналов процессора».
- ^ Об Intel и Transmeta [23] ЦП, поддерживающие PSN (серийный номер процессора), PSN можно отключить, установив бит 21 в MSR.
119h
(BBL_CR_CTL
) до 1. При этом лист 3 будет удален, а CPUID.(EAX=1):EDX[бит 18] вернет 0. - ^ На процессорах x86, отличных от Itanium, поддержка бита No-execute указана в CPUID. (EAX=8000_0001):EDX[бит 20] вместо этого.
- ^ Бит 28 EDX, если он установлен, указывает, что биты 23:16 CPUID.(EAX=1):EBX действительны. Если этот бит не установлен, то пакет ЦП содержит только 1 логический процессор.
В старой документации этот бит часто упоминается как « Технология Hyper-threading ». [54] флаг - однако, хотя этот флаг является обязательным условием для поддержки Hyper-Threading, он сам по себе не указывает на поддержку Hyper-Threading и был установлен на многих процессорах, которые не поддерживают какую-либо форму многопоточности. [55]
Зарезервированные поля следует замаскировать перед их использованием в целях идентификации процессора.
EAX=2: информация о дескрипторе кэша и TLB.
[ редактировать ]Это возвращает список дескрипторов, указывающих возможности кэша и TLB в регистрах EAX, EBX, ECX и EDX.
На процессорах, поддерживающих этот лист, вызов CPUID
с EAX=2 приведет к тому, что нижний байт EAX будет установлен на 01h
[а] а оставшиеся 15 байт EAX/EBX/ECX/EDX заполняются 15 дескрипторами по одному байту каждый. Эти дескрипторы предоставляют информацию о кэшах процессора, TLB и предварительной выборке. Обычно это один кэш или TLB для каждого дескриптора, но некоторые значения дескриптора также предоставляют другую информацию, в частности: 00h
используется для пустого дескриптора, FFh
указывает, что лист не содержит допустимой информации о кэше и что вместо него следует использовать лист 4h, и FEh
указывает, что лист не содержит допустимой информации TLB и что вместо него следует использовать лист 18h. Дескрипторы могут появляться в любом порядке.
Для каждого из четырех регистров (EAX,EBX,ECX,EDX), если установлен бит 31, не следует считать, что регистр содержит действительные дескрипторы (например, на Itanium в режиме IA-32 CPUID(EAX=2) возвращает 80000000h
в EDX — это следует интерпретировать как означающее, что EDX не содержит достоверной информации, а не то, что он содержит кэш L2 объемом 512 КБ.)
В таблице ниже для известных значений дескриптора представлено сокращенное описание кэша или TLB, указанного этим значением дескриптора (или другой информации, если это применимо). В таблице используются суффиксы:
- K,M,G : двоичный килобайт, мегабайт, гигабайт (емкость для кэшей, размер страницы для TLB)
- E : записи (для TLB; например, 64E = 64 записи)
- p : размер страницы (например, 4Kp для TLB, где каждая запись описывает одну страницу размером 4 КБ , 4K/2Mp для TLB, где каждая запись может описывать либо одну страницу размером 4 КБ, либо одну огромную страницу размером 2 МБ).
- L : размер строки кэша (например, 32L = размер строки кэша 32 байта)
- S: размер сектора кэша (например, 2S означает, что кэш использует сектора по 2 строки кэша каждый)
- A: ассоциативность (например, 6A = 6-позиционный набор-ассоциативный , FA = полностью ассоциативный)
Уровень-1 инструкция или кэш данных |
Уровень-2 кэш |
Уровень-3 кэш |
Инструкция или TLB данных |
Уровень-2 общий TLB |
Другой информация |
(сдержанный) |
х0 | х1 | х2 | х3 | х4 | х5 | х6 | х7 | х8 | х9 | шах | хБ | хС | хД | машина | xF | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x | нулевой дескриптор |
ИТЛБ: 32Е, 4КП, 4А |
ИТЛБ:2Е, 4Мп, Ф |
DTLB: 64E, 4КП, 4А |
ДТЛБ: 8Е, 4Мп, 4А |
ДТЛБ: 32E, 4Мп, 4А |
Л1И: 8К, 4А, 32Л |
0x | Л1И: 16К, 4А, 32Л |
Л1И: 32К, 4A, 64L |
Л1Д: 8К, 2А, 32Л |
ИТЛБ: 4Е, 4Мп, Ф |
Л1Д: 16К, 4А, 32Л |
Л1Д: 16К, 4A, 64L |
Л1Д: 24К, 6A, 64L |
0x | ||
1x | (Л1Д: 16К, 4А, 32Л) [б] |
(Л1И: 16К, 4А, 32Л) [б] |
1x | (L2C: 96К, 6A, 64L) [б] |
Л2С: 128К, 2А, 64Л |
1x | ||||||||||||
2x | Л2С: 256К, 8A, 64L |
Л3С: 512К, 4A, 64L, 2S |
Л3С: 1М, 8А, 64Л, 2С |
Л2С: 1М, 16A, 64L |
Л3С: 2М, 8А, 64Л, 2С |
(128-байтовый предварительная выборка) [с] |
(128-байтовый предварительная выборка) [с] |
2x | (128-байтовый предварительная выборка) [с] |
L3C: 4M, 8А, 64Л, 2С |
Л1Д: 32К, 8A, 64L |
2x | ||||||
3x | Л1И: 32К, 8A, 64L |
3x | Л2С: 128К, 4A, 64L, 2S [д] |
Л2С: 192К, 6А, 64Л, 2С [д] |
Л2С: 128К, 2А, 64Л, 2С [д] |
Л2С: 256К, 4A, 64L, 2S [д] |
Л2С: 384К, 6А, 64Л, 2С [д] |
Л2С: 512К, 4A, 64L, 2S [д] |
3x | |||||||||
4x | нет кэша L3 подарок |
Л2С: 128К, 4А, 32Л |
Л2С: 256К, 4А, 32Л |
Л2С: 512К, 4А, 32Л |
Л2С: 1М, 4А, 32Л |
Л2С: 2М, 4А, 32Л |
L3C: 4M, 4A, 64L |
Л3С: 8М, 8A, 64L |
4x | Л2С: 3М, 12А, 64Л |
L2C/L3C: [и] 4M, 16A, 64L |
Л3С: 6М, 12А, 64Л |
Л3С: 8М, 16A, 64L |
Л3С: 12М, 12А, 64Л |
Л3С: 16М, 16A, 64L |
Л2С: 6М, 24А, 64Л |
ИТЛБ: 32Е, 4кп [ф] |
4x |
5x | ITLB: 64E,FA, 4K/2M/4Mp |
ITLB: 128E,FA, 4K/2M/4Mp |
ITLB: 256E,ФА, 4K/2M/4Mp |
ИТЛБ: 7Е, 2М/4Мп, ФА |
ДТЛБ: 16Е, 4Мп, 4А |
ДТЛБ: 16Е, 4КП, 4А |
5x | ДТЛБ: 16Е, 4КП, ФА |
ДТЛБ: 32E, 2М/4Мп, 4А |
DTLB: 64E 4K/4Mp, FA |
ДТЛБ: 128E, 4K/4Mp, FA |
ДТЛБ: 256E, 4K/4Mp, FA |
5x | |||||
6x | Л1Д: 16К, 8A, 64L |
ИТЛБ: 48E, 4КП, ФА |
Два DTLB: 32Е, 2М/4Мп, 4А + 4Е, 1Гп, ФА |
ДТЛБ: 512E, 4КП, 4А |
Л1Д: 8К, 4A, 64L |
Л1Д: 16К, 4A, 64L |
6x | Л1Д: 32К, 4A, 64L |
DTLB: 64E, 4КП, 8А |
ДТЛБ: 256E, 4КП, 8А |
ДТЛБ: 128E, 2М/4Мп, 8А |
ДТЛБ: 16Е, 1Гп, ФА |
6x | |||||
7x | Отследить кэш , 12К-моп, 8А [г] |
Кэш трассировки, 16К-моп, 8А |
Кэш трассировки, 32К-моп, 8А |
Кэш трассировки, 64К-моп, 8А [д] |
ИТЛБ: 8Е, 2М/4Мп, ФА [час] |
(Л1И: 16К, 4A, 64L) [я] |
7x | Л2С: 1М, 4A, 64L |
Л2С: 128К, 8А, 64Л, 2С |
Л2С: 256К, 8А, 64Л, 2С |
Л2С: 512К, 8А, 64Л, 2С |
Л2С: 1М, 8А, 64Л, 2С |
Л2С: 2М, 8A, 64L |
(L2C: 256К, 8А, 128Л) [я] |
Л2С: 512К, 2А, 64Л |
7x | ||
8x | Л2С: 512К, 8A, 64L [г] |
(L2C: 128К, 8А, 32Л) [с] |
Л2С: 256К, 8А, 32Л |
Л2С: 512К, 8А, 32Л |
Л2С: 1М, 8А, 32Л |
Л2С: 2М, 8А, 32Л |
Л2С: 512К, 4A, 64L |
Л2С: 1М, 8A, 64L |
8x | (L3C: 2М, 4A, 64L) [б] |
(L3C: 4M, 4A, 64L) [б] |
(L3C: 8М, 4A, 64L) [б] |
(L3C: 3М, 12А, 128Л) [я] [Дж] |
8x | ||||
9x | (ITLB: 64E, FA, 4К-256Мп) [б] |
(DTLB: 32E,FA, 4К-256Мп) [б] |
9x | (DTLB: 96E, FA, 4К-256Мп) [б] |
9x | |||||||||||||
Топор | ДТЛБ: 32E, 4КП, ФА |
Топор | Топор | |||||||||||||||
Бх | ИТЛБ: 128E, 4КП, 4А |
ИТЛБ: 8Е, 2М/4Мп, 4А [к] |
ИТЛБ: 64Е, 4КП, 4А |
ДТЛБ: 128E, 4КП, 4А |
ДТЛБ: 256E, 4КП, 4А |
ИТЛБ: 64Е, 4КП, 8А |
ИТЛБ: 128E, 4КП, 8А |
Бх | DTLB: 64E, 4КП, 4А |
Бх | ||||||||
Сх | ДТЛБ: 8Е, 4К/4Мп, 4А |
L2TLB: 1024E, 4K/2Mp, 8A |
ДТЛБ: 16Е, 2М/4Мп, 4А [70] |
Два STLB L2: 1536E, 4K/2Mp, 6A + 16Е, 1Гп, 4А |
ДТЛБ: 32E, 2М/4Мп, 4А |
Сх | L2TLB: 512E, 4КП, 4А |
Сх | ||||||||||
Дх | Л3С: 512К, 4A, 64L |
Л3С: 1М, 4A, 64L |
Л3С: 2М, 4A, 64L |
Л3С: 1М, 8A, 64L |
Л3С: 2М, 8A, 64L |
Дх | L3C: 4M, 8A, 64L |
Л3С: 1,5М, 12А, 64Л |
Л3С: 3М, 12А, 64Л |
Л3С: 6М, 12А, 64Л |
Дх | |||||||
Бывший | Л3С: 2М, 16A, 64L |
L3C: 4M, 16A, 64L |
Л3С: 8М, 16A, 64L |
Бывший | Л3С: 12М, 24А, 64Л |
Л3С: 18М, 24А, 64Л [71] |
Л3С: 24М, 24А, 64Л |
Бывший | ||||||||||
Форекс | 64-байтовый предварительная выборка [л] |
128 байт предварительная выборка [л] |
Форекс | Лист 2 имеет нет информации TLB, использовать лист 18ч |
Лист 2 имеет не кэшировать информацию, используйте лист 4 |
Форекс | ||||||||||||
х0 | х1 | х2 | х3 | х4 | х5 | х6 | х7 | х8 | х9 | шах | хБ | хС | хД | машина | xF |
- ^ В более старой документации Intel нижний байт значения, возвращаемого в EAX, описывается как указывающий, сколько раз
CPUID
должен быть вызван с EAX=2, чтобы получить все дескрипторы кэша/TLB. Однако все известные процессоры, реализующие этот листовой возврат,01h
в этом байте и более новой документации Intel (SDM rev 053 [59] и позже) определяет этот байт как имеющий значение01h
. - ^ Перейти обратно: а б с д и ж г час я Дескрипторы
10h
,15h
,1Ah
,88h
,89h
,8Ah
,90h
,96h
,9Bh
документированы только для режима работы IA-32 Itanium . [60] - ^ Перейти обратно: а б с д Значения дескриптора
26h
,27h
,28h
и81h
не перечислены в документации Intel и не используются ни в одном известном процессоре, но, как сообщается, распознаются ядром Windows NT v5.1 ( Windows XP ) и выше.81h
также распознается версией 5.0 ( Windows 2000 ). [67] - ^ Перейти обратно: а б с д и ж г Дескрипторы
39h-3Eh
и73h
перечислены в версии 36 Intel AP-485, [61] но были удалены из более поздней документации Intel, хотя некоторые из них использовались в процессорах Intel (например,39h
в Willamette-128 процессорах Celeron на базе [62] ). - ^ Дескриптор
49h
указывает на наличие кэша 3-го уровняGenuineIntel
ЦП семейства 0Fh Model 6 (Xeon на базе Pentium 4) и кэш-память 2-го уровня на других ЦП. - ^ В документации Intel CPUID не указана ассоциативность ITLB, указанная дескриптором.
4Fh
. Процессоры, использующие этот дескриптор (Intel Atom «Bonnell» [63] ) перечислены в других местах как имеющие полностью ассоциативный ITLB с 32 записями. [64] - ^ Перейти обратно: а б На процессорах Cyrix и Geode (идентификаторы поставщиков
CyrixInstead
иGeode by NSC
), дескрипторы70h
и80h
имеют другое значение: [65]- Дескриптор
70h
указывает на 32-элементный общий TLB с четырьмя ассоциативными наборами команд и данных и размером страницы 4 КБ. - Дескриптор
80h
указывает на общий кеш инструкций + данных L1 размером 16 КБ с 4-сторонней ассоциативностью набора и размером строки кэша 16 байт.
- Дескриптор
- ^ Дескриптор
76h
указан как кэш L2 объемом 1 МБ в версии 37 Intel AP-485, [66] но как инструкция TLB в версии 38 и во всей более поздней документации Intel. - ^ Перейти обратно: а б с Дескрипторы
77h
,7Eh
,8Dh
документированы только для режима работы IA-32 Itanium 2 . [68] - ^ В режиме работы IA-32 процессора Itanium 2 размер кэша L3 всегда указывается как 3 МБ независимо от фактического размера кэша. [69]
- ^ Для дескриптора
B1h
, емкость TLB составляет 8 элементов при использовании страниц по 2 МБ, но уменьшается до 4 элементов при использовании страниц по 4 МБ. - ^ Перейти обратно: а б Предварительная выборка, указанная дескрипторами
F0h
иF1h
— рекомендуемый шаг для предварительной выборки памяти с помощьюPREFETCHNTA
инструкция. [72]
EAX=3: Серийный номер процессора
[ редактировать ]Это вернет серийный номер процессора. Серийный номер процессора был введен в Intel Pentium III , но из соображений конфиденциальности эта функция больше не реализована в более поздних моделях (бит функции PSN всегда сброшен). Процессоры Transmeta Efficeon и Crusoe также обеспечивают эту функцию. Однако процессоры AMD не реализуют эту функцию ни в одной модели процессоров.
Для процессоров Intel Pentium III серийный номер возвращается в регистрах EDX:ECX. Для процессоров Transmeta Efficeon он возвращается в регистрах EBX:EAX. А для процессоров Transmeta Crusoe оно возвращается только в регистре EBX.
функция серийного номера процессора должна быть включена в настройках BIOS Обратите внимание, что для работы .
EAX=4 и EAX=8000001Dh: иерархия и топология кэша.
[ редактировать ]Эти два листа используются для предоставления информации об уровнях иерархии кэша , доступных ядру процессора, на котором находится CPUID
инструкция выполняется. Лист 4
используется на процессорах Intel и листовых 8000001Dh
используется на процессорах AMD — они оба возвращают данные в форматах EAX, EBX, ECX и EDX, используя один и тот же формат данных, за исключением этого листа. 4
возвращает несколько дополнительных полей, которые считаются «зарезервированными» для листа 8000001Dh
. Они оба предоставляют информацию о кэше ЦП в серии подлистов, выбранных ECX. Чтобы получить информацию обо всех уровнях кэша, необходимо вызвать CPUID
неоднократно, с EAX= 4
или 8000001Dh
и ECX устанавливается на возрастающие значения, начиная с 0 (0,1,2,...) до тех пор, пока не будет найден подлист, не описывающий какие-либо кэши (EAX[4:0]=0). Подлисты, которые возвращают информацию о кэше, могут появляться в любом порядке, но все они появятся перед первым подлистом, не описывающим какие-либо кэши.
В таблице ниже поля, определенные для листа 4
но не для листьев 8000001Dh
выделены желтым цветом ячеек и элементом (#4) .
Кусочек | ЕАХ | ЕВХ | ЭДКС | Кусочек | ||
---|---|---|---|---|---|---|
0 | Тип кэша:
|
системы Размер строки согласованности в байтах, минус 1 | WBINVD Область выполнения аннулирования кэша. Значение 0 указывает на то, что INVD / WBINVD инструкции сделают недействительными все кеши нижних уровней этого кеша, включая кеши, принадлежащие родственным процессорам, совместно использующим этот кеш. Значение 1 указывает, что кэши нижнего уровня одноуровневых процессоров, которые совместно используют этот кэш, не обязательно будут очищены.
|
0 | ||
1 | Инклюзивность кэша. Если 1, то кеш включает в себя кеши нижнего уровня. | 1 | ||||
2 | Сложная индексация кэша. Если 1, то кеш использует сложную функцию для индексации кеша, иначе кеш отображается напрямую. (#4) | 2 | ||||
3 | (сдержанный) | 3 | ||||
4 | (сдержанный) | 4 | ||||
7:5 | Уровень кэша (начиная с 1) | (сдержанный) | 7:5 | |||
8 | Уровень самоинициализируемого кэша (1 = не требует инициализации программного обеспечения после сброса) | (сдержанный) | 8 | |||
9 | Полностью ассоциативный кэш | (сдержанный) | 9 | |||
10 | ( WBINVD область выполнения аннулирования кэша) [а] (#4)
|
(сдержанный) | 10 | |||
11 | (Инклюзивность кэша) [а] (#4) | (сдержанный) | 11 | |||
13:12 | (сдержанный) | Разделы физических строк (количество строк кэша, которые имеют общий тег адреса кэша), минус 1 | (сдержанный) | 13:12 | ||
21:14 | Максимальное количество адресных идентификаторов для логических процессоров, совместно использующих этот кэш, минус 1. | (сдержанный) | 21:14 | |||
25:22 | Способы ассоциативности кэша , минус 1 | (сдержанный) | 25:22 | |||
31:26 | Максимальное количество адресных идентификаторов ядер процессора в физическом корпусе минус 1 (#4) | (сдержанный) | 31:26 |
- ^ Перейти обратно: а б Для листа 4 CPUID биты 11:10 EAX документированы для Xeon Phi «Уголок рыцарей» (
GenuineIntel
Семья0Bh
) только процессор. [39] Для других процессоров вместо этого следует использовать биты 1:0 EDX.
Для любых действительных и не полностью ассоциативных кэшей значение, возвращаемое в ECX, равно количеству наборов в кэше минус 1. (Для полностью ассоциативных кэшей ECX следует рассматривать так, как если бы он возвращал значение 0.)
Для любого данного кэша, описанного подлистом CPUID
лист 4
или 8000001Dh
, общий размер кэша в байтах можно рассчитать как:
CacheSize = (EBX[11:0]+1) * (EBX[21:12]+1) * (EBX[31:22]+1) * (ECX+1)
EAX=4 и EAX=Bh: топология потоков/ядра Intel и кэша.
[ редактировать ]Эти два листа используются для топологии процессора (поток, ядро, пакет) и перечисления иерархии кэша в многоядерных (и гиперпоточных) процессорах Intel. [73] По состоянию на 2013 год [update] AMD не использует эти листья, но имеет альтернативные способы выполнения нумерации ядер. [74]
В отличие от большинства других листьев CPUID, лист Bh будет возвращать разные значения в EDX в зависимости от того, на каком логическом процессоре выполняется инструкция CPUID; значение, возвращаемое в EDX, на самом деле является идентификатором x2APIC логического процессора. Однако пространство идентификаторов x2APIC не отображается постоянно на логические процессоры; в сопоставлении могут быть пробелы, а это означает, что некоторые промежуточные идентификаторы x2APIC не обязательно соответствуют какому-либо логическому процессору. Дополнительная информация для сопоставления идентификаторов x2APIC с ядрами предоставляется в других регистрах. Хотя лист Bh имеет подлисты (выбираемые ECX, как описано ниже), на значение, возвращаемое в EDX, влияет только логический процессор, на котором выполняется инструкция, но не подлист.
Топология процессора(ов), представленная листом Bh, является иерархической, но со странной оговоркой, что порядок (логических) уровней в этой иерархии не обязательно соответствует порядку в физической иерархии ( SMT /core/package). . Однако каждый логический уровень может быть запрошен как подлист ECX (листа Bh) на предмет его соответствия «типу уровня», который может быть SMT, основным или «недействительным». Пространство идентификатора уровня начинается с 0 и является непрерывным. Это означает, что если идентификатор уровня недействителен, все идентификаторы более высоких уровней также будут недействительны. Тип уровня возвращается в битах 15:08 ECX, а количество логических процессоров на запрошенном уровне возвращается в EBX. Наконец, связь между этими уровнями и идентификаторами x2APIC возвращается в EAX[4:0] как количество битов, на которое идентификатор x2APIC должен быть сдвинут, чтобы получить уникальный идентификатор на следующем уровне.
Например, двухъядерный процессор Westmere , поддерживающий гиперпоточность (то есть имеющий в общей сложности два ядра и четыре потока), может иметь идентификаторы x2APIC 0, 1, 4 и 5 для своих четырех логических процессоров. Лист Bh (=EAX), подлист 0 (=ECX) CPUID может, например, возвращать 100h в ECX, что означает, что уровень 0 описывает уровень SMT (гиперпоточность) и возвращать 2 в EBX, поскольку имеется два логических процессора (модуля SMT). на каждое физическое ядро. Значение, возвращаемое в EAX для этого 0-подлиста, в этом случае должно быть равно 1, поскольку сдвиг вышеупомянутых идентификаторов x2APIC вправо на один бит дает уникальный номер ядра (на следующем уровне иерархии идентификаторов уровней) и стирает идентификатор SMT. бит внутри каждого ядра. Более простой способ интерпретации этой информации заключается в том, что последний бит (бит номер 0) идентификатора x2APIC идентифицирует блок SMT/гиперпоточности внутри каждого ядра в нашем примере. Переход к подлисту 1 (путем повторного вызова CPUID с EAX=Bh и ECX=1) может, например, вернуть 201h в ECX, что означает, что это уровень типа ядра, и 4 в EBX, поскольку в подлисте 4 логических процессора. упаковка; Возвращенный EAX может иметь любое значение больше 3, поскольку так получилось, что бит номер 2 используется для идентификации ядра в идентификаторе x2APIC. Обратите внимание, что бит номер 1 идентификатора x2APIC в этом примере не используется. Однако значение EAX, возвращаемое на этом уровне, вполне может быть равно 4 (и это так на Clarkdale Core i3 5x0), поскольку это также дает уникальный идентификатор на уровне пакета (очевидно, = 0) при сдвиге идентификатора x2APIC на 4 бита. Наконец, вы можете задаться вопросом, что может сказать нам лист EAX=4, чего мы еще не выяснили. В EAX[31:26] он возвращает биты маски APIC. зарезервировано для пакета; в нашем примере это будет 111b, поскольку биты от 0 до 2 используются для идентификации логических процессоров внутри этого пакета, но бит 1 также зарезервирован, хотя и не используется как часть схемы идентификации логического процессора. Другими словами, идентификаторы APIC от 0 до 7 зарезервированы для пакета, даже если половина этих значений не сопоставлена логическому процессору.
Иерархия кэша процессора исследуется путем рассмотрения подлистов листа 4. Идентификаторы APIC также используются в этой иерархии для передачи информации о том, как различные уровни кэша совместно используются модулями и ядрами SMT. Продолжая наш пример, кэш L2, который используется модулями SMT одного и того же ядра, но не между физическими ядрами на Westmere, обозначается EAX[26:14], установленным в 1, а информация о том, что кэш L3 является общим для всего пакета указывается установкой этих битов в (по крайней мере) 111b. Детали кэша, включая тип, размер и ассоциативность кэша, передаются через другие регистры на листе 4.
Помните, что более старые версии примечания 485 к приложению Intel содержат некоторую вводящую в заблуждение информацию, особенно в отношении идентификации и подсчета ядер в многоядерном процессоре; [75] ошибки, возникающие из-за неправильной интерпретации этой информации, даже были включены в пример кода Microsoft для использования CPUID, даже для версии Visual Studio 2013 года, [76] а также на странице sandpile.org для CPUID, [77] но пример кода Intel для определения топологии процессора [73] имеет правильную интерпретацию, а в текущем «Руководстве разработчика программного обеспечения Intel» используется более понятный язык. Кроссплатформенный производственный код (с открытым исходным кодом) [78] от Wildfire Games также реализует правильную интерпретацию документации Intel.
Примеры обнаружения топологии с использованием старых процессоров Intel (до 2010 года), в которых отсутствует x2APIC (поэтому не реализуется лист EAX=Bh), приведены в презентации Intel за 2010 год. [79] Помните, что использование этого старого метода обнаружения на процессорах Intel 2010 года и более новых может привести к завышению количества ядер и логических процессоров, поскольку старый метод обнаружения предполагает отсутствие пробелов в пространстве идентификаторов APIC, и это предположение нарушается некоторыми новыми процессорами (начиная с серия Core i3 5x0), но эти новые процессоры также оснащены x2APIC, поэтому их топологию можно правильно определить с помощью листового метода EAX=Bh.
EAX=5: Функции МОНИТОРА/MWAIT
[ редактировать ]Это возвращает информацию о функции, связанную с MONITOR
и MWAIT
инструкции в регистрах EAX, EBX, ECX и EDX.
Кусочек | ЕАХ | ЕВХ | ЭДКС | Кусочек | ||
---|---|---|---|---|---|---|
3:0 | Наименьший размер строки монитора в байтах | Наибольший размер строки монитора в байтах | Количество С0 [а] суб-состояния, поддерживаемые для MWAIT
|
3:0 | ||
7:4 | Количество подсостояний C1, поддерживаемых для MWAIT
|
7:4 | ||||
11:8 | Количество подсостояний C2, поддерживаемых для MWAIT
|
11:8 | ||||
15:12 | Количество подсостояний C3, поддерживаемых для MWAIT
|
15:12 | ||||
19:16 | (сдержанный) | (сдержанный) | Количество подсостояний C4, поддерживаемых для MWAIT
|
19:16 | ||
23:20 | Количество подсостояний C5, поддерживаемых для MWAIT
|
23:20 | ||||
27:24 | Количество подсостояний C6, поддерживаемых для MWAIT
|
27:24 | ||||
31:28 | Количество подсостояний C7, поддерживаемых для MWAIT
|
31:28 |
- ^ Состояния от C0 до C7 — это C-состояния, специфичные для процессора, которые не обязательно соответствуют 1:1 C-состояниям ACPI .
Кусочек | ЭКХ | |
---|---|---|
Короткий | Особенность | |
0 | ЕМХ | Перечисление поддерживаемых расширений MONITOR/MWAIT в ECX и EDX |
1 | ГОРЬКИЙ | Поддерживает обработку прерываний как событий прерывания для MWAIT даже когда прерывания отключены
|
2 | (сдержанный) | |
3 | Безмониторный_MWAIT | Позволять MWAIT использоваться для управления питанием без настройки мониторинга памяти с помощью MONITOR [80]
|
31:4 |
(сдержанный) |
EAX=6: Управление температурой и питанием.
[ редактировать ]Это возвращает функциональные биты в регистре EAX и дополнительную информацию в регистрах EBX, ECX и EDX.
Кусочек | ЕАХ | |
---|---|---|
Короткий | Особенность | |
0 | ДТС | Возможности цифрового термодатчика |
1 | Intel Turbo Boost Возможности технологии | |
2 | пахота [а] | Всегда работающий APIC таймер |
3 | (сдержанный) | |
4 | злотых | Возможность уведомления об ограничении мощности |
5 | ECMD | Расширенные возможности тактовой модуляции |
6 | ПТМ | Возможность управления температурным режимом корпуса |
7 | ЗВП | Аппаратно-контролируемые состояния производительности . MSR добавили:
|
8 | HWP_Уведомление | Уведомление HWP о динамическом гарантированном изменении производительности — IA32_HWP_INTERRUPT ( 773h ) МСР
|
9 | HWP_Activity_Window | Управление окном активности HWP — биты 41:32 IA32_HWP_REQUEST МСР
|
10 | HWP_Energy_Performance_Preference | HWP Управление предпочтениями энергопотребления/производительности — биты 31:24 IA32_HWP_REQUEST МСР
|
11 | HWP_Package_Level_Request | Управление на уровне пакета HWP — IA32_HWP_REQUEST_PKG ( 772h ) МСР
|
12 | (сдержанный) | |
13 | HDC | Поддерживается аппаратный рабочий цикл . MSR добавили:
|
14 | Доступна технология Intel Turbo Boost Max 3.0 | |
15 | Прерывается при изменении IA32_HWP_CAPABILITIES Поддерживается .Highest_Performance (биты 7:0)
| |
16 | Поддерживается переопределение HWP PECI — биты 63:60 IA32_HWP_PECI_REQUEST_INFO ( 775h ) МСР
| |
17 | Гибкий HWP — биты 63:59 IA32_HWP_REQUEST МСР
| |
18 | Режим быстрого доступа | Режим быстрого доступа для IA32_HWP_REQUEST MSR поддерживается [б]
|
19 | HW_FEEDBACK | Интерфейс обратной связи с оборудованием. Добавлены MSR:
|
20 | IA32_HWP_REQUEST простоя логического процессора игнорируется, когда только один из двух логических процессоров, совместно использующих физический процессор активен .
| |
21 | (сдержанный) | |
22 | ЗВП Контроль MSR | IA32_HWP_CTL ( 776h ) MSR поддерживается [82]
|
23 | Поддерживается Intel Thread Director. Добавлены MSR:
| |
24 | IA32_THERM_INTERRUPT Поддерживается бит 25 MSR
| |
31:25 |
(сдержанный) |
- ^ Только на процессорах семейства Intel Pentium 4 бит 2 EAX используется для обозначения OPP (защита рабочей точки). [81] вместо АРАТ.
- ^ Чтобы включить режим быстрого (несериализующего) доступа для
IA32_HWP_REQUEST
MSR на процессорах, которые его поддерживают, необходимо установить бит 0FAST_UNCORE_MSRS_CTL
(657h
) МСР.
Кусочек | ЕВХ | ЭКХ | ЭДКС | Кусочек | ||
---|---|---|---|---|---|---|
0 | Количество порогов прерывания в цифровом термодатчике | Поддерживается эффективный частотный интерфейс - IA32_MPERF ( 0E7h ) и IA32_APERF ( 0E8h ) MSR
|
Отчеты об отзывах на оборудование: поддерживаются отчеты о возможностях производительности. | 0 | ||
1 | (возможность ACNT2) [а] | Отчеты об отзывах оборудования: поддерживаются отчеты о возможностях эффективности. | 1 | |||
2 | (сдержанный) | (сдержанный) | 2 | |||
3 | Возможность смещения производительности и энергии - IA32_ENERGY_PERF_BIAS ( 1B0h ) МСР
|
3 | ||||
7:4 | (сдержанный) | (сдержанный) | 7:4 | |||
11:8 | Количество классов Intel Thread Director, поддерживаемых оборудованием | Размер структуры интерфейса Hardware Feedback (в единицах по 4 КБ) минус 1 | 11:8 | |||
15:12 | (сдержанный) | 15:12 | ||||
31:16 |
(сдержанный) | Индекс строки этого логического процессора в структуре интерфейса аппаратной обратной связи. | 31:16 |
EAX=7, ECX=0: расширенные функции
[ редактировать ]Это возвращает флаги расширенных функций в EBX, ECX и EDX. Возвращает максимальное значение ECX для EAX=7 в EAX.
Кусочек | ЕВХ | ЭКХ | ЭДКС | Кусочек | |||||
---|---|---|---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | Короткий | Особенность | ||||
0 | фсгсбаза | Доступ к базе %fs и %gs | предварительная выборкаwt1 | PREFETCHWT1 инструкция
|
(sgx-tem) [а] | ? | 0 | ||
1 | IA32_TSC_ADJUST MSR | avx512-vbmi | AVX-512 Инструкции по работе с векторными битами | SGX-ключи | Услуги аттестации для Intel SGX | 1 | |||
2 | сгх | Расширения защиты программного обеспечения | без имп. | Предотвращение инструкций в пользовательском режиме | avx512-4vnniw | AVX-512 Инструкции 4-регистровой нейронной сети | 2 | ||
3 | ИМТ1 | Набор инструкций битового манипулирования 1 | пку | Ключи защиты памяти для страниц пользовательского режима | avx512-4fmaps | AVX-512 4-регистровое умножение-накопление одинарной точности | 3 | ||
4 | пожалуйста | TSX Устранение аппаратной блокировки | оспке | PKU включен ОС | фсрм | Быстрый короткий REP MOVSB
|
4 | ||
5 | avx2 | Расширенные векторные расширения 2 | ожиданиеpkg | Временная пауза и инструкции мониторинга/ожидания на уровне пользователя ( TPAUSE , UMONITOR , UMWAIT )
|
уинтр | Пользовательские межпроцессорные прерывания | 5 | ||
6 | только для fdp-excptn | Регистр указателя данных x87 FPU обновляется только в исключениях | avx512-vbmi2 | Инструкции по работе с векторными битами AVX-512 2 | (сдержанный) | 6 | |||
7 | смэп | Предотвращение выполнения в режиме супервизора | cet_ss/shstk | Обеспечение потока управления (CET): теневой стек (альтернативное имя SHSTK) | (сдержанный) | 7 | |||
8 | ИМ2 | Набор инструкций битового манипулирования 2 | девушка | Полевые инструкции Галуа | avx512-vp2intersect | Инструкции пересечения векторов AVX-512 для 32/64-битных целых чисел | 8 | ||
9 | пустошь | Улучшенный REP MOVSB/STOSB
|
vaes | векторных Набор инструкций AES (VEX-256/EVEX) | srbds-ctrl | Специальные меры по снижению выборки данных из буфера регистра | 9 | ||
10 | invpcid | INVPCID инструкция
|
vpclmulqdq | Набор инструкций CLMUL (VEX-256/EVEX) | MD-Clear | VERW инструкция очищает буферы ЦП
|
10 | ||
11 | ртм | TSX Ограниченная транзакционная память | avx512-vnni | AVX-512 Инструкции векторной нейронной сети | rtm-всегда-прервать [85] | Все транзакции TSX прерваны | 11 | ||
12 | rdt-m/pqm | Мониторинг Intel Resource Director (RDT) или мониторинг качества обслуживания платформы AMD | avx512 биталг | AVX-512 БИТАЛГ инструкция | (сдержанный) | 12 | |||
13 | x87 FPU CS и DS устарели | tme_en | Доступны MSR с полным шифрованием памяти | rtm-принудительное прерывание [85] | TSX_FORCE_ABORT (MSR 0x10f ) доступен
|
13 | |||
14 | мегапикселей | Intel MPX (расширения защиты памяти) | avx512-vpopcntdq | AVX-512 Подсчет векторной популяции в двойном и четверном слове | сериализовать | SERIALIZE инструкция
|
14 | ||
15 | rdt-a/pqe | Распределение Intel Resource Director (RDT) или обеспечение качества обслуживания платформы AMD | (фзм) [а] | ? | гибридный | Смешение типов ЦП в топологии процессора (например, Alder Lake ) | 15 | ||
16 | avx512-f | AVX-512 Фонд | ла57 | 5-уровневый пейджинг (57 бит адреса) | tsxldtrk | Инструкции по приостановке/возобновлению отслеживания адреса загрузки TSX ( TSUSLDTRK и TRESLDTRK )
|
16 | ||
17 | avx512-dq | AVX-512 Инструкции по двойному и четверному слову | мне | Значение настройки ширины адреса MPX пользовательского пространства, используемое BNDLDX и BNDSTX Инструкции Intel MPX в 64-битном режиме
|
(сдержанный) | 17 | |||
18 | РДСИД | RDSEED инструкция
|
pconfig | Конфигурация платформы (Инструкции по технологиям шифрования памяти) | 18 | ||||
19 | ADX | Intel ADX (расширения инструкций добавления-переноса с высокой точностью) | фунт стерлингов | Архитектурные записи последней ветки | 19 | ||||
20 | шлепать | Предотвращение доступа в режиме супервизора | cet-ibt | Обеспечение контроля потока управления (CET): косвенное отслеживание ветвей | 20 | ||||
21 | avx512-ifma | AVX-512 Инструкции умножения и сложения целых чисел | (сдержанный) | 21 | |||||
22 | (совершить) | ( PCOMMIT инструкция, устарела) [87]
|
рдпид | RDPID Инструкция (считывание идентификатора процессора) и IA32_TSC_AUX MSR
|
amx-bf16 | AMX Вычисление тайлов bfloat16 на числах | 22 | ||
23 | clflushopt | CLFLUSHOPT инструкция
|
в | Шкафчик для ключей AES | avx512-fp16 | AVX-512 половинной точности арифметические инструкции с плавающей запятой [88] | 23 | ||
24 | клуб | CLWB Инструкция (обратная запись строки кэша)
|
обнаружение блокировки шины | Исключения отладки блокировки шины | amx-плитка | AMX Инструкции по загрузке/сохранению тайла | 24 | ||
25 | пт | Трассировка процессора Intel | cldemote | CLDEMOTE Инструкция (понижение строки кэша)
|
amx-int8 | Вычисление тайла AMX для 8-битных целых чисел | 25 | ||
26 | avx512-pf | AVX-512 Инструкции по предварительной выборке | (мпрр) [а] | ? | ibrs/spec_ctrl | Контроль спекуляций, часть Косвенного контроля филиалов (IBC): Косвенные спекуляции с ограничением филиалов (IBRS) и Косвенный барьер прогнозирования ветвей (IBPB) [89] [90] |
26 | ||
27 | avx512 | AVX-512 Экспоненциальные и обратные инструкции | Мовдири | MOVDIRI инструкция
|
стибп | Однопоточный косвенный предсказатель ветвления, часть IBC [89] | 27 | ||
28 | avx512-cd | AVX-512 Инструкции по обнаружению конфликтов | movdir64b | MOVDIR64B (64-байтовая инструкция прямого сохранения)
|
L1D_FLUSH | IA32_FLUSH_CMD MSR | 28 | ||
29 | напиток | Расширения SHA-1 и SHA-256 | enqcmd | Магазины в очереди и EMQCMD / EMQCMDS инструкции
|
IA32_ARCH_CAPABILITIES MSR (перечисляет спекулятивные меры по снижению риска по побочным каналам). [89] ) | 29 | |||
30 | avx512-bw | AVX-512 Байтовые и словесные инструкции | SGX-LC | SGX Конфигурация запуска | IA32_CORE_CAPABILITIES MSR (перечисляет основные возможности конкретной модели) | 30 | |||
31 | avx512-vl | AVX-512 Расширения векторной длины | пкс | Ключи защиты для страниц режима супервизора | SSDD | Отключение спекулятивного обхода магазина, [89] в качестве средства устранения спекулятивного обхода хранилища (IA32_SPEC_CTRL) | 31 |
- ^ Перейти обратно: а б с По состоянию на апрель 2024 года биты FZM, MPRR и SGX_TEM указаны только в Intel TDX. документации [86] и не установлены ни в одном известном процессоре.
EAX=7, ECX=1: расширенные функции
[ редактировать ]Это возвращает флаги расширенных функций во всех четырех регистрах.
Кусочек | ЕАХ | ЕВХ | ЭКХ | ЭДКС | Кусочек | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | Короткий | Особенность | Короткий | Особенность | |||||
0 | ша512 | Расширения SHA-512 | Intel PPIN (инвентарный номер защищенного процессора): IA32_PPIN_CTL ( 04Eh ) и IA32_PPIN ( 04Fh ) МСР.
|
(сдержанный) | (сдержанный) | 0 | ||||||
1 | см3 | Расширения хеша SM3 | пбндкб | Полное шифрование хранилища: PBNDKB инструкция и TSE_CAPABILITY ( 9F1h ) МСР.
|
(сдержанный) | (сдержанный) | 1 | |||||
2 | см4 | Расширения шифрования SM4 | (сдержанный) | Legacy_reduced_isa | X86S | (сдержанный) | 2 | |||||
3 | РАО-INT | Удаленные атомарные операции с целыми числами: AADD , AAND , AOR , AXOR инструкции
|
(сдержанный) | (сдержанный) | (сдержанный) | 3 | ||||||
4 | avx-vnni | AVX Инструкции векторной нейронной сети (VNNI) (в кодировке VEX) | (сдержанный) | сипи64 | 64-битный СИПИ | avx-vnni-int8 | Инструкции AVX VNNI INT8 | 4 | ||||
5 | avx512-bf16 | AVX-512 Инструкции bfloat16 для номеров | (сдержанный) | (сдержанный) | avx-ne-convert | Инструкции преобразования FP без исключений AVX ( bfloat16 ↔FP32 и FP16 →FP32) | 5 | |||||
6 | девушка | Линейное разделение адресного пространства (CR4, бит 27) | (сдержанный) | (сдержанный) | (сдержанный) | 6 | ||||||
7 | cmpccxadd | CMPccXADD инструкции
|
(сдержанный) | (сдержанный) | (сдержанный) | 7 | ||||||
8 | Архперфмонекст | Расширенный лист мониторинга производительности архитектуры (EAX=23h) | (сдержанный) | (сдержанный) | амкс-комплекс | Поддержка AMX для «сложных» тайлов ( TCMMIMFP16PS и TCMMRLFP16PS )
|
8 | |||||
9 | (дедупликация) [а] | ? | (сдержанный) | (сдержанный) | (сдержанный) | 9 | ||||||
10 | фзрм | Быстрый нулевой длины REP MOVSB
|
(сдержанный) | (сдержанный) | avx-vnni-int16 | Инструкция AVX VNNI INT16 | 10 | |||||
11 | фсрс | Быстрый короткий REP STOSB
|
(сдержанный) | (сдержанный) | (сдержанный) | 11 | ||||||
12 | rsrcs | Быстрый короткий REP CMPSB и REP SCASB
|
(сдержанный) | (сдержанный) | (сдержанный) | 12 | ||||||
13 | (сдержанный) | (сдержанный) | (сдержанный) | утмр | События пользовательского таймера: IA32_UINTR_TIMER ( 1B00h ) МСР
|
13 | ||||||
14 | (сдержанный) | (сдержанный) | (сдержанный) | префекты | Инструкции предварительной выборки из кэша инструкций ( PREFETCHIT0 и PREFETCHIT1 )
|
14 | ||||||
15 | (сдержанный) | (сдержанный) | (сдержанный) | user_msr | Инструкции доступа к MSR в пользовательском режиме ( URDMSR и UWRMSR )
|
15 | ||||||
16 | (сдержанный) | (сдержанный) | (сдержанный) | (сдержанный) | 16 | |||||||
17 | Фред | Гибкий возврат и доставка событий [91] | (сдержанный) | (сдержанный) | uiret-uif-from-rflags | Если 1, UIRET Инструкция (возврат пользовательского прерывания) установит UIF (флаг пользовательского прерывания) в значение бита 1 изображения RFLAGS, извлеченного из стека.
|
17 | |||||
18 | кгс | LKGS Инструкция [91]
|
(сдержанный) | (сдержанный) | центральное время | Если 1, то теневые стеки супервизора (SSS) принудительного управления потоком управления (CET) гарантированно не станут преждевременно занятыми, пока переключение теневого стека не вызывает ошибок страниц в переключаемом стеке. [92] [93] | 18 | |||||
19 | wrmsrns | WRMSRNS инструкция (несериализующая запись в MSR )
|
(сдержанный) | (сдержанный) | изx10 | AVX10 Converged Vector ISA (см. также лист 24h) [94] | 19 | |||||
20 | nmi_src | НМИ Отчетность источника [91] | (сдержанный) | (сдержанный) | (сдержанный) | 20 | ||||||
21 | amx-fp16 | Инструкции AMX для FP16 номеров | (сдержанный) | (сдержанный) | APX_F | Advanced Performance Extensions , Foundation (добавляет кодировки префикса REX2 и расширенные EVEX для поддержки 32 георадаров, а также некоторые новые инструкции) [95] | 21 | |||||
22 | Хресет | HRESET инструкция, IA32_HRESET_ENABLE ( 17DAh ) MSR и лист сброса истории процессора (EAX=20h)
|
(сдержанный) | (сдержанный) | (сдержанный) | 22 | ||||||
23 | avx-ifma | Инструкции AVX IFMA | (сдержанный) | (сдержанный) | подожди | Инструкция MWAIT [б] | 23 | |||||
24 | (сдержанный) | (сдержанный) | (сдержанный) | (сдержанный) | 24 | |||||||
25 | (сдержанный) | (сдержанный) | (сдержанный) | (сдержанный) | 25 | |||||||
26 | ламать | Маскирование линейного адреса | (сдержанный) | (сдержанный) | (сдержанный) | 26 | ||||||
27 | мсрлист | RDMSRLIST и WRMSRLIST инструкции и IA32_BARRIER ( 02Fh ) МСР
|
(сдержанный) | (сдержанный) | (сдержанный) | 27 | ||||||
28 | (сдержанный) | (сдержанный) | (сдержанный) | (сдержанный) | 28 | |||||||
29 | (сдержанный) | (сдержанный) | (сдержанный) | (сдержанный) | 29 | |||||||
30 | invd_disable_post_bios_done | Если 1, поддерживает INVD предотвращение выполнения инструкций после BIOS Done.
|
(сдержанный) | (сдержанный) | (сдержанный) | 30 | ||||||
31 | (сдержанный) | (сдержанный) | (сдержанный) | (сдержанный) | 31 |
- ^ По состоянию на апрель 2024 г. бит DEDUP указан только в Intel TDX . документации [86] и не установлен ни в одном известном процессоре.
- ^ Поддержка
MWAIT
Инструкция может обозначаться либо CPUID.(EAX=1).ECX[3] , либо CPUID.(EAX=7,ECX=1).EDX[23]. (Можно установить один или оба варианта.) Первый указывает на поддержкуMONITOR
инструкция, причем последняя так или иначе не указывает, является лиMONITOR
инструкция присутствует.MWAIT
безMONITOR
может присутствовать в системах, поддерживающих функцию «безмониторного MWAIT» (которая сама обозначается CPUID.(EAX=5).ECX[3] .)
EAX=7, ECX=2: расширенные функции
[ редактировать ]Это возвращает флаги расширенных функций в EDX.
EAX, EBX и ECX зарезервированы.
Кусочек | ЭДКС | |
---|---|---|
Короткий | Особенность | |
0 | psfd | Поддерживается отключение Fast Store Forwarding Predictor. ( SPEC_CTRL (МСР 48h ) бит 7)
|
1 | ipred_ctrl | Элементы управления IPRED_DIS [96] поддерживается. ( SPEC_CTRL биты 3 и 4)
IPRED_DIS предотвращает спекулятивное выполнение инструкций в косвенной цели ветвления до тех пор, пока целевой адрес ветвления не будет разрешен. |
2 | rrsba_ctrl | Поведение РРСБА [97] [96] отключить поддержку. ( SPEC_CTRL биты 5 и 6)
|
3 | ddpd_u | Поддерживается отключение Data Dependent Prefetcher. ( SPEC_CTRL бит 8)
|
4 | bhi_ctrl | Поведение BHI_DIS_S [96] включить поддерживается. ( SPEC_CTRL бит 10)
BHI_DIS_S предотвращает выбор прогнозируемых целей косвенных ветвей, выполненных в кольце 0/1/2, на основе истории ветвей из ветвей, выполненных в кольце 3. |
5 | mcdt_no | Если установлено, процессор не использует синхронизацию, зависящую от конфигурации MXCSR . |
6 | Поддерживается функция отключения UC-lock. | |
7 | Monitor_mid_no | Если установлено, это означает, что MONITOR / UMONITOR На инструкции не влияют проблемы с производительностью/питанием, вызванные тем, что инструкции превышают емкость таблицы отслеживания внутреннего монитора.
|
31:8 |
(сдержанный) |
EAX=0Dh: функции XSAVE и компоненты состояния.
[ редактировать ]Этот лист используется для перечисления функций XSAVE и компонентов состояния.
Расширение набора команд XSAVE предназначено для сохранения/восстановления расширенного состояния ЦП (обычно с целью переключения контекста ) таким образом, чтобы его можно было расширить для охвата новых расширений набора команд без необходимости понимания кодом переключения контекста ОС особенностей новые расширения. Это делается путем определения серии компонентов состояния , каждый из которых имеет размер и смещение в пределах заданной области сохранения, и каждый соответствует подмножеству состояния, необходимого для того или иного расширения ЦП. EAX=0Dh
Лист CPUID используется для предоставления информации о том, какие компоненты состояния поддерживает ЦП и каковы их размеры/смещения, чтобы ОС могла зарезервировать необходимый объем пространства и установить соответствующие биты включения.
Компоненты состояния можно разделить на две группы: состояние пользователя (элементы состояния, видимые приложению, например векторные регистры AVX-512 ) и состояние супервизора (элементы состояния, которые влияют на приложение, но не являются непосредственно пользователем). видимый, например, конфигурация прерываний пользовательского режима). Элементы пользовательского состояния активируются путем установки связанных с ними битов в XCR0
регистр управления, в то время как элементы состояния супервизора включаются путем установки связанных с ними битов в регистре управления. IA32_XSS
( 0DA0h
) MSR — указанные элементы состояния затем становятся компонентами состояния, которые можно сохранить и восстановить с помощью XSAVE
/ XRSTOR
семейство инструкций.
Таким образом механизм XSAVE может обрабатывать до 63 компонентов состояния. Компоненты состояния 0 и 1 ( x87 и SSE соответственно) имеют фиксированные смещения и размеры — для компонентов состояния от 2 до 62 их размеры, смещения и несколько дополнительных флагов можно запросить, выполнив CPUID
с EAX=0Dh
и ECX
установлен в индекс компонента состояния. Это вернет следующие элементы в EAX, EBX и ECX (при этом EDX зарезервирован):
Кусочек | ЕАХ | ЕВХ | ЭКХ | Кусочек |
---|---|---|---|---|
0 | Размер компонента состояния в байтах | Смещение компонента состояния от начала XSAVE / XRSTOR область сохранения
(Это смещение равно 0 для компонентов состояния супервизора, поскольку они могут быть сохранены только с помощью |
Компонент состояния пользователя/супервизора:
|
0 |
1 | Выравнивание по 64 байтам включается, когда используется сжатие сохранения состояния.
Если этот бит установлен для компонента состояния, то при сохранении состояния с уплотнением между предыдущим компонентом состояния и этим компонентом состояния будет вставлено заполнение по мере необходимости для обеспечения 64-байтового выравнивания. Если этот бит не установлен, компонент состояния будет сохранен сразу после предыдущего. |
1 | ||
31:2 |
(сдержанный) | 31:2 |
Попытка запросить неподдерживаемый компонент состояния таким образом приводит к тому, что EAX,EBX,ECX и EDX устанавливаются в 0.
Подлисты 0 и 1 из CPUID
лист 0Dh
используются для предоставления информации о функциях:
ЕВХ | ЭКХ | EDX:EAX |
---|---|---|
Максимальный размер (в байтах) области сохранения XSAVE для набора компонентов состояния, установленных в данный момент в XCR0 .
|
Максимальный размер (в байтах) области сохранения XSAVE, если все компоненты состояния поддерживаются XCR0 на этом ЦП были включены одновременно.
|
64-битное растровое изображение компонентов состояния, поддерживаемое XCR0 на этом процессоре.
|
ЕАХ | ЕВХ | EDX: ЭКХ |
---|---|---|
Флаги функций XSAVE (см. таблицу ниже) | Размер (в байтах) области XSAVE, содержащей все компоненты состояния, установленные в данный момент в XCR0 и IA32_XSS комбинированный.
|
64-битное растровое изображение компонентов состояния, поддерживаемое IA32_XSS на этом процессоре.
|
Кусочек | ЕАХ | |
---|---|---|
Короткий | Особенность | |
0 | xsaveopt | XSAVEOPT инструкция: сохранить компоненты состояния, которые были изменены с момента последнего XRSTOR
|
1 | xsavec | XSAVEC инструкция: сохранить/восстановить состояние с уплотнением
|
2 | xgetbv_ecx1 | XGETBV с ECX=1 поддерживать
|
3 | хсс | XSAVES и XRSTORS инструкции и IA32_XSS MSR: сохранение/восстановление состояния со сжатием, включая состояние супервизора.
|
4 | xfd | Поддерживается XFD (отключение расширенных функций) |
31:5 |
(сдержанный) |
По состоянию на июль 2023 года архитектурно определены следующие компоненты состояния XSAVE:
Индекс | Описание | Включено с |
---|---|---|
0 | x87 состояние | XCR0 [а] |
1 | ССЕ : Состояние XMM0 - XMM15 и MXCSR |
XCR0 |
2 | Состояние AVX : верхние половины YMM0 к YMM15
| |
3 | Состояние MPX : BND0 - BND3 регистры границ
| |
4 | Состояние MPX: BNDCFGU и BNDSTATUS регистры
| |
5 | Состояние AVX-512 : регистры опмаски k0 - k7
| |
6 | Состояние AVX-512 "ZMM_Hi256": верхние половины ZMM0 к ZMM15
| |
7 | Состояние AVX-512 «Hi16_ZMM»: ZMM16 - ZMM31
| |
8 | Состояние трассировки процессора | IA32_XSS |
9 | Реестр ПКРУ (Ключи защиты пользователей) | XCR0 |
10 | Состояние PASID (идентификатор адресного пространства процесса) | IA32_XSS |
11 | Состояние CET_U (технология принудительного управления потоком управления: функциональные возможности пользовательского режима MSR) | |
12 | Состояние CET_S (CET: указатели теневого стека для колец 0,1,2) | |
13 | Состояние HDC (аппаратный рабочий цикл) | |
14 | Состояние UINTR (прерывания пользовательского режима) | |
15 | Состояние LBR (последняя запись ветки) | |
16 | Состояние HWP (аппаратное управление P-состоянием) | |
17 | Состояние конфигурации плитки AMX : TILECFG |
XCR0 |
18 | Регистры данных тайла AMX: tmm0 - tmm7
| |
19 | APX : Расширенные регистры общего назначения r16 - r31 [95]
| |
от 20 до 61 |
(сдержанный) | |
62 | Упрощенное профилирование (LWP) (только AMD) | XCR0 |
63 | (сдержанный) [б] |
EAX=12h: возможности SGX
[ редактировать ]На этом листе представлена информация о поддерживаемых возможностях функции Intel Software Guard Extensions (SGX). Лист предоставляет несколько подлистов, выбранных с помощью ECX.
Подлист 0 предоставляет информацию о поддерживаемых конечных функциях SGX в EAX и максимальных поддерживаемых размерах анклава SGX в EDX; ECX зарезервирован. EBX предоставляет битовую карту, которая может быть установлена в поле MISCSELECT в SECS (структура управления анклавом SGX) — это поле используется для управления информацией, записываемой в область MISC SSA (область состояния сохранения SGX), когда AEX (SGX Save State Area) происходит асинхронный выход из анклава).
Кусочек | ЕАХ | ЕВХ | ЭДКС | Кусочек | |||||
---|---|---|---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | Короткий | Особенность | ||||
0 | sgx1 | Листовые функции SGX1 | ЭКСИНФО | MISCSELECT: сообщить информацию о сбое страницы и общем исключении защиты, произошедшем внутри анклава. | MaxEnclaveSize_Not64 | Log2 максимального размера анклава, поддерживаемого в не64-разрядном режиме. | 0 | ||
1 | sgx2 | Листовые функции SGX2 | КПИНФО | MISCSELECT: сообщить информацию об исключении защиты управления, произошедшем внутри анклава. | 1 | ||||
2 | (сдержанный) | (сдержанный) | 2 | ||||||
3 | (сдержанный) | (сдержанный) | 3 | ||||||
4 | (сдержанный) | (сдержанный) | 4 | ||||||
5 | нас | ENCLV листья: EINCVIRTCHILD , EDECVIRTCHILD , и ESETCONTEXT
|
(сдержанный) | 5 | |||||
6 | ENCLS листья: ETRACKC , ERDINFO , ELDBC , ELDUC
|
(сдержанный) | 6 | ||||||
7 | ENCLU лист: EVERIFYREPORT2
|
(сдержанный) | 7 | ||||||
8 | (сдержанный) | (сдержанный) | MaxEnclaveSize_64 | Log2 максимального размера анклава, поддерживаемого в 64-битном режиме. | 8 | ||||
9 | (сдержанный) | (сдержанный) | 9 | ||||||
10 | ENCLS лист: EUPDATESVN
|
(сдержанный) | 10 | ||||||
11 | ENCLU лист: EDECSSA
|
(сдержанный) | 11 | ||||||
12 | (сдержанный) | (сдержанный) | 12 | ||||||
13 | (сдержанный) | (сдержанный) | 13 | ||||||
14 | (сдержанный) | (сдержанный) | 14 | ||||||
15 | (сдержанный) | (сдержанный) | 15 | ||||||
31:16 |
(сдержанный) | (сдержанный) | (сдержанный) | 31:16 |
Подлист 1 предоставляет битовую карту, биты которой могут быть установлены в 128-битном поле ATTRIBUTES SECS в EDX:ECX:EBX:EAX (это относится к копии SECS, используемой в качестве входных данных для ENCLS[ECREATE]
листовая функция). Старшие 64 бита (заданные в EDX:ECX) представляют собой битовую карту, биты которой могут быть установлены в XFRM (маска запроса X-функции) — эта маска представляет собой битовую маску того, какие компоненты состояния процессора (см. лист 0Dh) будут сохранены. в SSA в случае AEX; это имеет ту же компоновку, что и XCR0
регистр управления. Остальные биты задаются в EAX и EBX следующим образом:
Кусочек | ЕАХ | ЕВХ | Кусочек | |||
---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | |||
0 | (НАГРЕВАТЬ) | (должно быть 0) [а] | (сдержанный) | 0 | ||
1 | ОТЛАЖИВАТЬ | Разрешить отладчику читать и записывать данные анклава, используя EDBGRD и EDBGWR
|
1 | |||
2 | РЕЖИМ64БИТ | 64-битный анклав | 2 | |||
3 | (сдержанный) | 3 | ||||
4 | ПРЕДОСТАВЛЕНИЕ | Ключ обеспечения доступен на сайте EGETKEY
|
4 | |||
5 | EINITTOKEN_KEY | EINIT ключ токена доступен на EGETKEY
|
5 | |||
6 | ЭТОТ | Атрибуты CET (Control-Flow Enforcement Technology) позволяют | 6 | |||
7 | КСС | Разделение и обмен ключами | 7 | |||
8 | (сдержанный) | 8 | ||||
9 | (сдержанный) | 9 | ||||
10 | ЭКСНОТИФИКАЦИЯ | Потоки внутри анклава могут получать уведомления AEX. [98] | 10 | |||
31:11 |
(сдержанный) | 31:11 |
- ^ Для копии SECS, существующей внутри эксклава, бит 0 (INIT) SECS.ATTRIBUTES используется для указания того, что анклав был инициализирован с помощью
ENCLS[EINIT]
. Этот бит должен быть равен 0 в копии SECS, которая передается в качестве входных данных дляENCLS[CREATE]
.
Подлисты 2 и выше используются для предоставления информации о том, какие области физической памяти доступны для использования в качестве разделов EPC (кэш страниц анклава) в SGX.
Биты | ЕАХ | ЕВХ | ЭКХ | ЭДКС | Биты | |||
---|---|---|---|---|---|---|---|---|
3:0 | Тип подлиста:
|
Биты 51:32 физического базового адреса секции EPC. | Свойства раздела EPC:
|
Биты 51:32 размера раздела EPC | 3:0 | |||
11:4 |
(сдержанный) | (сдержанный) | 11:4 | |||||
19:12 |
Биты 31:12 физического базового адреса секции EPC. | Биты 31:12 размера раздела EPC | 19:12 | |||||
31:20 |
(сдержанный) | (сдержанный) | 31:20 |
EAX=14h, ECX=0: трассировка процессора
[ редактировать ]На этом подлисте представлена информация о функциях трассировки процессоров Intel (также известной как трассировка инструкций в реальном времени).
Значение, возвращаемое в EAX, представляет собой индекс самого высокого подлиста, поддерживаемого для CPUID с EAX=14h. EBX и ECX предоставляют флаги функций, EDX зарезервирован.
Кусочек | ЕВХ | ЭКХ | Кусочек | |||
---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | |||
0 | CR3 Поддерживается фильтрация | выпадение | Механизм вывода ToPA (таблица физических адресов) для поддерживаемых пакетов трассировки | 0 | ||
1 | Поддерживается настраиваемая скорость передачи пакетов PSB (граница потока пакетов) и режим с точностью до цикла (пакеты CYC). | ментировать | Таблицы ToPA могут содержать несколько выходных записей. | 1 | ||
2 | Поддерживается IP-фильтрация, фильтрация TraceStop и сохранение PT MSR при «горячем» сбросе. | snglrngout | Поддерживается схема однодиапазонного выхода | 2 | ||
3 | Поддерживаются пакеты синхронизации MTC (мини-счетчик времени) и подавляются пакеты COFI (инструкции по изменению потока). | Поддерживается вывод в подсистему Trace Transport | 3 | |||
4 | птрайт | PTWRITE инструкция поддерживается
|
(сдержанный) | 4 | ||
5 | Поддерживается трассировка событий питания | (сдержанный) | 5 | |||
6 | Поддерживается сохранение PSB и PMI (прерывание мониторинга производительности). | (сдержанный) | 6 | |||
7 | Поддерживается создание пакетов трассировки событий. | (сдержанный) | 7 | |||
8 | Поддерживается отключение генерации пакетов TNT (Branch Taken-Not-Taken). | (сдержанный) | 8 | |||
9 | Поддерживается PTTT (отслеживание триггеров процессора) | (сдержанный) | 9 | |||
30:10 |
(сдержанный) | (сдержанный) | 30:10 | |||
31 | (сдержанный) | Формат IP (указатель инструкций) для пакетов трассировки, содержащих полезные данные IP:
|
31 |
EAX=15h и EAX=16h: частоты процессора, TSC, шины и ядра Crystal Clock.
[ редактировать ]Эти два листа предоставляют информацию о различных частотах ЦП в EAX, EBX и ECX (EDX зарезервирован в обоих листах).
ЕАХ | ЕВХ | ЭКХ |
---|---|---|
Отношение частоты TSC к частоте Core Crystal Clock, знаменатель | Отношение частоты TSC к частоте Core Crystal Clock, числитель [а] | Частота Core Crystal Clock, в Гц [а] |
Биты | ЕАХ | ЕВХ | ЭКХ | Биты |
---|---|---|---|---|
15:0 | Базовая частота процессора (в МГц) [а] | Максимальная частота процессора (в МГц) [а] | Шина/опорная частота (в МГц) [а] | 15:0 |
31:16 | (сдержанный) | (сдержанный) | (сдержанный) | 31:16 |
Если возвращаемые значения в EBX и ECX листа 15h оба ненулевые, то частота TSC ( счетчик меток времени ) в Гц определяется выражением TSCFreq = ECX*(EBX/EAX)
.
На некоторых процессорах (например, Intel Skylake ) CPUID_15h_ECX равен нулю, но CPUID_16h_EAX присутствует, а не равен нулю. На всех известных процессорах, где это так, [99] частота TSC равна базовой частоте процессора, а тактовая частота основного кристалла в Гц может быть рассчитана как CoreCrystalFreq = (CPUID_16h_EAX * 10000000) * (CPUID_15h_EAX/CPUID_15h_EBX)
.
На процессорах, которые перечисляют соотношение TSC/Core Crystal Clock в листе CPUID 15h, частота таймера APIC будет равна частоте Core Crystal Clock, разделенной на делитель, указанный в регистре конфигурации разделения APIC. [100]
EAX=17h: перечисление атрибутов поставщика SoC
[ редактировать ]Этот лист присутствует в системах, где IP-ядро процессора x86 реализовано в SoC ( системе на кристалле ) от другого поставщика, тогда как другие листья CPUID
предоставить информацию о ядре процессора x86, на этом листе представлена информация о SoC. Этот лист принимает индекс подлиста в ECX.
Подлист 0 возвращает максимальный индекс подлиста в EAX (не менее 3) и идентификационную информацию SoC в EBX/ECX/EDX:
Кусочек | ЕВХ | ЭКХ | ЭДКС | Кусочек | ||
---|---|---|---|---|---|---|
15:0 | Идентификатор поставщика SoC | Идентификатор проекта SoC | Идентификатор шага SoC в проекте SoC | 15:0 | ||
16 | Схема идентификации поставщика SoC | 16 | ||||
31:17 | (сдержанный) | 31:17 |
- ^ По состоянию на май 2024 г. известно, что Intel присвоила следующие идентификаторы поставщиков:
ИДЕНТИФИКАТОР Продавец 1 Распространение [101] - ^ По состоянию на май 2024 года в документации Intel не указано, какую схему нумерации «отраслевого стандарта» использовать для идентификатора поставщика в EBX[15:0], если установлен EBX[16].
Подлисты с 1 по 3 возвращают 48-байтовую строку бренда поставщика SoC в формате UTF-8 . Подлист 1 возвращает первые 16 байтов в EAX,EBX,ECX,EDX (именно в этом порядке); подлист 2 возвращает следующие 16 байт, а подлист 3 возвращает последние 16 байт. Строка может иметь нулевое завершение, но не обязательно .
EAX=19h: функции Intel Key Locker
[ редактировать ]В этом листе представлена информация о функциях Intel Key Locker в EAX, EBX и ECX. EDX зарезервирован.
Кусочек | ЕАХ | ЕВХ | ЭКХ | Кусочек | |||||
---|---|---|---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | Короткий | Особенность | ||||
0 | Поддерживается ограничение Key Locker только для CPL0. | aes_kle | Инструкции AES «Key Locker» включены | Безрезервный параметр для LOADIWKEY поддерживается
|
0 | ||||
1 | Поддержка ограничения Key Locker без шифрования | (сдержанный) | Поддерживается кодировка KeySource 1 (рандомизация внутреннего ключа упаковки). | 1 | |||||
2 | Поддержка ограничения Key Locker на отсутствие расшифровки | aes_wide_kl | Инструкция AES «Широкий ключевой шкафчик» | (сдержанный) | 2 | ||||
3 | (Ограничение процесса) [а] | (сдержанный) | (сдержанный) | 3 | |||||
4 | (сдержанный) | kl_msrs | MSR "Ключевой шкафчик" | (сдержанный) | 4 | ||||
31:5 |
(сдержанный) | (сдержанный) | (сдержанный) | 31:5 |
- ^ По состоянию на апрель 2024 г. бит «Ограничение процесса» указан только в Intel TDX . документации [86] и не установлен ни в одном известном процессоре.
EAX=21h: зарезервировано для перечисления TDX.
[ редактировать ]Когда Intel TDX ( расширения доверительного домена ) активен, пытается выполнить CPUID
Инструкция гостя TD (доверительный домен) будет перехвачена модулем TDX. Этот модуль будет, когда CPUID
вызывается с помощью EAX=21h
и ECX=0
(лист 21h
, подлист 0), возвращает индекс самого высокого поддерживаемого подлиста для листа 21h
в EAX
и строку идентификатора поставщика модуля TDX в виде 12-байтовой строки ASCII в форматах EBX, EDX, ECX (в указанном порядке). Собственная реализация модуля Intel возвращает строку идентификатора поставщика. "IntelTDX "
(с четырьмя пробелами в конце) [102] - для этого модуля дополнительная информация о функциях недоступна через CPUID
и вместо этого должен быть получен через специальный TDX TDCALL
инструкция.
Этот лист зарезервирован аппаратно и будет (на процессорах, у которых самый высокий базовый лист 21h
или выше) возвращают 0 в EAX/EBX/ECX/EDX при запуске непосредственно на ЦП.
EAX=24h, ECX=0: «Конвергентный векторный лист ISA AVX10»
[ редактировать ]Это возвращает максимально поддерживаемый подлист в EAX и информацию о функциях AVX10 в EBX. [94] (ECX и EDX зарезервированы.)
Кусочек | ЕВХ | |
---|---|---|
Короткий | Особенность | |
7:0 | Версия AVX10 Converged Vector ISA (≥1) | |
15:8 | (сдержанный) | |
16 | (сдержанный) [а] | |
17 | ofx10-256 | Имеется поддержка 256-битных векторов. |
18 | avx10-512 | Имеется поддержка 512-битного вектора. |
31:19 | (сдержанный) |
EAX=24h, ECX=1: дискретные функции AVX10
[ редактировать ]Подлист 1 зарезервирован для функций AVX10, не привязанных к версии. Ни один из них в настоящее время не определен.
EAX=40000000h-4FFFFFFFFh: зарезервировано для гипервизором . использования
[ редактировать ]Когда CPUID
инструкция выполняется в рамках виртуализации Intel VT-x или AMD-v , она будет перехвачена гипервизором, позволяя гипервизору вернуться CPUID
флаги функций, которые отличаются от флагов базового оборудования. CPUID
листья 40000000h
к 4FFFFFFFh
не реализованы на аппаратном уровне и зарезервированы для использования гипервизорами для предоставления информации об идентификации и функциях, специфичной для гипервизора, посредством этого механизма перехвата.
Для листа 40000000h
, ожидается, что гипервизор вернет индекс самого высокого поддерживаемого листа CPUID гипервизора в EAX и 12-значную строку идентификатора гипервизора в EBX,ECX,EDX (именно в этом порядке). Для листа 40000001h
, гипервизор может вернуть подпись идентификации интерфейса в EAX - например, гипервизоры, которые хотят объявить о своей совместимости с Hyper-V, могут вернуть 0x31237648
— “Hv#1”
в ЕАХ. [103] [104] Форматы листьев 40000001h
и до самого высокого поддерживаемого листа, в противном случае зависят от гипервизора. Гипервизоры, реализующие эти листья, обычно также устанавливают бит 31 ECX для листа 1 CPUID, чтобы указать на их присутствие.
Гипервизоры, предоставляющие более одного интерфейса гипервизора, могут предоставлять дополнительные наборы идентификаторов CPUID для дополнительных интерфейсов с интервалом 100h
листьев на интерфейс. Например, когда QEMU настроен для предоставления интерфейсов Hyper-V и KVM , он будет предоставлять информацию Hyper-V, начиная с листа CPUID. 40000000h
и информация KVM, начиная с листа 40000100h
. [105] [106]
Некоторые гипервизоры, которые, как известно, возвращают строку идентификатора гипервизора в листе 40000000h
включать:
Гипервизор | Идентификатор строки (ASCII) | Примечания |
---|---|---|
Microsoft Hyper-V , Виртуальный ПК с Windows |
"Microsoft Hv" [103]
|
|
Linux КВМ | "KVMKVMKVM\0\0\0" [107]
|
\0 обозначает символ ASCII NUL. |
"Linux KVM Hv" [108]
|
Эмуляция Hyper-V [109] | |
бхайв | "BHyVE BHyVE " , "bhyve bhyve "
|
В 2013 году строка идентификатора была изменена со смешанного регистра на строчные. [110]
Строка в нижнем регистре также используется в гипервизорах на основе bhyve, таких как xhyve и HyperKit. [111] |
Зен | "XenVMMXenVMM" [112]
|
Только при использовании режима HVM (аппаратная виртуальная машина). |
КЕМУ | "TCGTCGTCGTCG" [113]
|
Только когда включен TCG (Tiny Code Generator). |
Параллели | " lrpepyh vr"
|
(возможно, это должно быть «prl Hyperv», но оно закодировано как «lrpepyh vr» из-за несоответствия порядка байтов ) [ нужна ссылка ] |
VMware | "VMwareVMware" [114]
|
|
Проект ACRN | "ACRNACRNACRN" [115]
|
|
ВиртуалБокс | "VBoxVBoxVBox" [116]
|
Только если настроено использование поставщика паравиртуализации «hyperv». |
QNX Гипервизор | "QXNQSBMV"
|
Метод обнаружения гипервизора QNX, представленный в официальной документации QNX. [117] проверяет только первые 8 символов строки, как это предусмотрено в EBX и ECX (включая замену порядка байтов) — EDX игнорируется и может принимать любое значение. |
NetBSD НВММ | "___ NVMM ___" [118]
| |
OpenBSD ВММ | "OpenBSDVMM58" [119]
|
|
Тюрьма | "Jailhouse\0\0\0" [120]
|
\0 обозначает символ ASCII NUL. |
Intel HAXM | "HAXMHAXMHAXM" [121]
|
Проект прекращен. |
Интел КГТ (Надежный) | "EVMMEVMMEVMM" [122]
|
Только на «доверенной» ветке KGT, которая используется для дистрибутива Trusty OS с архитектурой Intel x86 ( архив )
(КГТ также возвращает подпись в |
Unisys с-Пар | "UnisysSpar64" [123]
|
|
Локхид Мартин ЛМХС | "SRESRESRESRE" [124]
|
EAX=80000000h: получить максимальную реализованную расширенную функцию
[ редактировать ]В EAX возвращается самый высокий вызывающий параметр.
EBX/ECX/EDX возвращают строку идентификатора производителя (такую же, как EAX=0) на процессорах AMD, но не на процессорах Intel.
EAX=80000001h: расширенная информация о процессоре и биты функций.
[ редактировать ]Это возвращает флаги расширенных функций в EDX и ECX.
Многие из битов в EDX
(биты с 0 по 9, с 12 по 17, 23 и 24) являются дубликатами EDX
из EAX=1
лист — эти биты выделены светло-желтым цветом. (Эти дублированные биты присутствуют в процессорах AMD, но не в процессорах Intel.)
Флаги функций AMD следующие: [125] [126]
Кусочек | ЭДКС | ЭКХ | Кусочек | |||
---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | |||
0 | ФПУ | Встроенный x87 процессор | lahf_lm | LAHF / SAHF в длинном режиме
|
0 | |
1 | время | Расширения виртуального режима (VIF) | cmp_legacy | Гиперпоточность недействительна | 1 | |
2 | из | Расширения отладки ( CR4 , бит 3) | свм | Безопасная виртуальная машина | 2 | |
3 | почему | Расширение размера страницы | экстапический | Расширенное APIC пространство | 3 | |
4 | tsc | Счетчик отметок времени | cr8_legacy | CR8 в 32-битном режиме | 4 | |
5 | мср | Регистры для конкретной модели | АБМ/lzcnt | Расширенные манипуляции с битами (LZCNT и POPCNT )
|
5 | |
6 | сайт | Расширение физического адреса | sse4a | SSE4a | 6 | |
7 | мсе | Исключение проверки машины | смещение | Неверный SSE режим | 7 | |
8 | cx8 | CMPXCHG8B ( сравнить и поменять местами ) инструкция
|
3dnowprefetch | PREFETCH и PREFETCHW инструкции
|
8 | |
9 | апик | Встроенный усовершенствованный программируемый контроллер прерываний | и т. д. | Видимый обходной путь ОС | 9 | |
10 | (системный вызов) [б] | ( SYSCALL / SYSRET , только К6)
|
СРК | Выборка на основе инструкций | 10 | |
11 | системный вызов [с] | SYSCALL и SYSRET инструкции
|
прыгать | Набор инструкций XOP | 11 | |
12 | мтрр | Регистры диапазона типов памяти | шкурить | SKINIT / STGI инструкции
|
12 | |
13 | страница | Бит глобального разрешения страницы в CR4 | ВДТ | Сторожевой таймер | 13 | |
14 | МКА | Архитектура машинной проверки | (сдержанный) | 14 | ||
15 | смов | Условный ход и FCMOV инструкции
|
лвп | Легкое профилирование [130] | 15 | |
16 | одинаковый [д] | Таблица атрибутов страницы | fma4 | Инструкции умножения-сложения с 4 операндами | 16 | |
17 | pse36 | 36-битное расширение размера страницы | еще раз | Расширение кэша переводов | 17 | |
18 | (сдержанный) | (сдержанный) | 18 | |||
19 | и т. д. | « Athlon MP » / « Sempron » Марка процессора [и] | nodeid_msr | Идентификатор узла MSR ( C001_100C ) [135]
|
19 | |
20 | нх | NX-биты | (сдержанный) | 20 | ||
21 | (сдержанный) | ТБМ | Манипулирование трейлинг-битами | 21 | ||
22 | mmxext | Расширенный MMX | топоэкст | Расширения топологии | 22 | |
23 | ммх | MMX Инструкции | perfctr_core | Расширения основного счетчика производительности | 23 | |
24 | FXSR [д] | FXSAVE , FXRSTOR инструкции, CR4 бит 9
|
perfctr_nb | северного моста Расширения счетчика производительности | 24 | |
25 | fxsr_opt | FXSAVE / FXRSTOR оптимизация
|
(Стримперфмон) | (Архитектура монитора производительности потоковой передачи) [ф] | 25 | |
26 | pdpe1gb | Гигабайтные страницы | dbx | Расширения точек останова данных | 26 | |
27 | рдтскп | RDTSCP инструкция
|
перфтск | Счетчик меток производительности (PTSC) | 27 | |
28 | (сдержанный) | pcx_l2i | Расширения счетчика производительности L2I | 28 | ||
29 | лм | Длинный режим | мониторх | MONITORX и MWAITX инструкции
|
29 | |
30 | 3dnowext | Расширенный 3DNow! | addr_mask_ext | Расширение маски адреса до 32 бит для точек останова инструкций. | 30 | |
31 | 3dnow | 3DСейчас! | (сдержанный) | 31 |
- ^ Бит 16 первоначально обозначал поддержку 128-битных векторов, но версия 3.0 спецификации AVX10.1 устранила такую возможность.
- ^ Использование бита 10 EDX для указания поддержки
SYSCALL
/SYSRET
действует только наAuthenticAMD
Процессоры семейства 5 Model 7 ( AMD K6 , 250 нм «Little Foot») — для всех остальных процессоров вместо этого следует использовать бит 11 EDX.Эти инструкции были впервые представлены в модели 7. [127] - бит CPUID, указывающий, что их поддержка была перемещена [128] до бита 11 EDX, начиная с модели 8 ( AMD K6-2 ).
- ^ На процессорах Intel бит CPUID для
SYSCALL
/SYSRET
устанавливается только в том случае, еслиCPUID
инструкция выполняется в 64-битном режиме. [129] - ^ Перейти обратно: а б На некоторых процессорах — Cyrix MediaGXm , [131] несколько жеод (NatSemi Geode GXm, GXLV, GX1; AMD Geode GX1 [132] ) и Трансмета Крузо [133] - Биты 16 и 24 EDX имеют разное значение:
- Бит 16: Условное перемещение с плавающей запятой (
FCMOV
) поддерживается - Бит 24: MMX 6x86MX. поддерживаются расширенные инструкции
- Бит 16: Условное перемещение с плавающей запятой (
- ^ Бит 19 EDX используется для идентификации марки процессора на
AuthenticAMD
Только процессоры семейства 6 — этот бит в сочетании с сигнатурой процессора и скоростью FSB используется для идентификации процессоров как многопроцессорных или имеющих Sempron . торговую марку [134] - ^ Бит 25 ECX указан как StreamPerfMon в версии 3.20 AMD APM. [136] only — в более поздних версиях он указан как зарезервированный. Бит установлен только на процессорах Excavator и Steamroller.
EAX=80000002h,80000003h,80000004h: строка бренда процессора.
[ редактировать ]Они возвращают строку бренда процессора в EAX, EBX, ECX и EDX. CPUID
должен вводиться с каждым параметром последовательно, чтобы получить всю 48-байтовую строку торговой марки процессора ASCII. [137] Необходимо проверить, присутствует ли эта функция в ЦП, выдав команду CPUID
с EAX = 80000000h
сначала и проверяем, не меньше ли возвращаемое значение 80000004h
.
В документации Intel/AMD строка указана как завершающаяся нулем , однако это не всегда так (например, DM&P Vortex86DX3 и AMD Ryzen 7 6800HS , как известно, возвращают строки бренда, не заканчивающиеся нулем, в листах). 80000002h
- 80000004h
[138] [139] ), и программное обеспечение не должно полагаться на него.
#include <stdio.h>
#include <string.h>
#include <cpuid.h>
int main()
{
unsigned int regs[12];
char str[sizeof(regs)+1];
__cpuid(0x80000000, regs[0], regs[1], regs[2], regs[3]);
if (regs[0] < 0x80000004)
return 1;
__cpuid(0x80000002, regs[0], regs[1], regs[2], regs[3]);
__cpuid(0x80000003, regs[4], regs[5], regs[6], regs[7]);
__cpuid(0x80000004, regs[8], regs[9], regs[10], regs[11]);
memcpy(str, regs, sizeof(regs));
str[sizeof(regs)] = '\0';
printf("%s\n", str);
return 0;
}
На процессорах AMD, начиная с 180-нм Athlon ( AuthenticAMD
Семейство 6, модель 2 и более поздние версии), можно изменить строку марки процессора, возвращаемую CPUID. 80000002h
- 80000004h
с помощью WRMSR
инструкция для записи 48-байтовой строки замены в MSR C0010030h
- C0010035h
. [134] [140] Это также можно сделать на AMD Geode GX/LX, хотя и с использованием MSR. 300Ah
- 300Fh
. [141]
В некоторых случаях для определения поставщика ЦП требуется изучить не только идентификатор поставщика в листе CPUID 0 и сигнатуру ЦП в листе 1, но также строку бренда процессора в листьях. 80000002h
- 80000004h
. Известные случаи включают:
- Процессоры Montage Jintide можно отличить от моделей процессоров Intel Xeon, на которых они основаны, по наличию подстроки
Montage
в строке бренда процессоров Montage (например, Montage Jintide C2460 [142] и Intel Xeon Platinum 8160 [143] - оба идентифицируют себя какGenuineIntel
Семейство 6 Модель 55h Ступень 4 – можно отличить таким образом.) CentaurHauls
ЦП семейства 6 могут быть ЦП VIA или Zhaoxin — их можно отличить по наличию подстрокиZHAOXIN
в строке бренда процессоров Zhaoxin (например, Zhaoxin KaiXian ZX-C+ C4580 [144] и ВИА Эдем X4 C4250 [145] - оба идентифицируют себя какCentaurHauls
Семейство 6 Модель 0Fh Степпинг 0Eh – можно отличить таким образом.)
EAX=80000005h: идентификаторы кэша L1 и TLB.
[ редактировать ]Это предоставляет информацию о кэше процессора уровня 1 и характеристиках TLB в EAX, EBX, ECX и EDX следующим образом: [а]
- EAX: информация о огромных страницах TLB L1 (TLB, которые содержат записи, соответствующие страницам 2M/4M). [б]
- EBX: информация о малостраничных TLB L1 (TLB, которые содержат записи, соответствующие страницам 4 КБ).
- ECX: информация о кэше данных L1.
- EDX: информация о кэше инструкций L1.
Биты | ЕАХ | ЕВХ | ЭКХ | ЭДКС | Биты | |
---|---|---|---|---|---|---|
7:0 | Количество записей инструкций в TLB [с] | Размер строки кэша в байтах | 7:0 | |||
15:8 | инструкция ассоциативности TLB [д] | Количество строк кэша на тег | 15:8 | |||
23:16 | Количество записей TLB данных [с] | Ассоциативность кэша [д] | 23:16 | |||
31:24 | Ассоциативность TLB данных [д] | Размер кэша в килобайтах | 31:24 |
- ^ На некоторых старых процессорах Cyrix и Geode (в частности,
CyrixInstead
/Geode by NSC
Только процессоры семейства 5 Model 4), лист80000005h
существует, но имеет совершенно другой формат, аналогичный листу 2. [146] - ^ На процессорах, которые могут обрабатывать только небольшие страницы в своих TLB, этот лист вернет 0 в EAX. (На таких процессорах, к которым относятся, например, AMD K6 и Transmeta Crusoe, записи огромных страниц в таблицах страниц разбиваются на страницы размером 4 КБ по мере необходимости при входе в TLB.)
На некоторых процессорах, например VIA Cyrix III «Samuel», [147] этот лист возвращается0x80000005
в ЕАХ. Это имеет то же значение, что и EAX=0, т.е. нет огромных TLB-страниц. - ^ Перейти обратно: а б На процессорах Transmeta значение
FFh
используется для обозначения TLB на 256 записей. - ^ Перейти обратно: а б с Для полей ассоциативности листа
80000005h
, используются следующие значения:Ценить Значение 0 (сдержанный) 1 Прямое отображение от 2 до FEh
N-сторонний набор-ассоциативный (поле кодирует N) FFh
Полностью ассоциативный
EAX=80000006h: Расширенные функции кэша L2.
[ редактировать ]Возвращает сведения о кэше L2 в ECX, включая размер строки в байтах (биты 07–00), тип ассоциативности (кодируется 4-битным полем; биты 15–12) и размер кэша в КБ (биты 31–16). .
#include <stdio.h>
#include <cpuid.h>
int main()
{
unsigned int eax, ebx, ecx, edx;
unsigned int lsize, assoc, cache;
__cpuid(0x80000006, eax, ebx, ecx, edx);
lsize = ecx & 0xff;
assoc = (ecx >> 12) & 0x07;
cache = (ecx >> 16) & 0xffff;
printf("Line size: %d B, Assoc. type: %d, Cache size: %d KB.\n", lsize, assoc, cache);
return 0;
}
EAX=80000007h: информация об управлении питанием процессора и возможностях RAS.
[ редактировать ]Эта функция предоставляет информацию об управлении питанием, отчетах о питании и возможностях RAS ( надежность, доступность и удобство обслуживания ) ЦП.
Кусочек | ЕВХ | ЭДКС | Кусочек | |||
---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | |||
0 | МКАОверфлоуреков | Поддержка восстановления после переполнения MCA (Machine Check Architecture) | ТС | Датчик температуры | 0 | |
1 | ПОМОЩЬ | Возможность локализации и восстановления неисправимых ошибок программного обеспечения. | ДОВЕРЯТЬ | Контроль идентификатора частоты | 1 | |
2 | ХВА | Поддержка аппаратного подтверждения (MSR C001_10C0 к C001_10DF
|
В | Контроль идентификации напряжения | 2 | |
3 | МасштабируемыйMca | Поддержка масштабируемого MCA | ТТП | ТЕРМТРИП | 3 | |
4 | (сдержанный) | ТМ | Поддерживается аппаратный термоконтроль (HTC) | 4 | ||
5 | (сдержанный) | СТЦ | Поддерживается программный термоконтроль (STC) [148] | 5 | ||
6 | (сдержанный) | 100 МГцШаги | Управление множителем 100 МГц | 6 | ||
7 | (сдержанный) | HwPstate | Аппаратное управление P-состоянием (MSR) C001_0061 к C001_0063 )
|
7 | ||
8 | (сдержанный) | TscИнвариант | Инвариантная скорость TSC – TSC ( счетчик меток времени ) гарантированно будет инвариантной для всех P-состояний, C-состояний и переходов грантов sop. | 8 | ||
9 | (сдержанный) | КПБ | Основное повышение производительности | 9 | ||
10 | (сдержанный) | ЭффFreqRO | Интерфейс эффективной частоты только для чтения (MSR C000_00E7 и C000_00E8 )
|
10 | ||
11 | (сдержанный) | ProcFeedbackInterface | Поддерживается интерфейс обратной связи процессора | 11 | ||
12 | (сдержанный) | ProcPowerReporting | Поддерживается интерфейс отчета о мощности процессора | 12 | ||
13 | (сдержанный) | ConnectedStandby | Подключенный режим ожидания [149] | 13 | ||
14 | (сдержанный) | РАПЛ | Предел средней рабочей мощности [149] | 14 | ||
15 | (сдержанный) | ФастCPPC | Поддерживается Fast CPPC (совместный контроль производительности процессоров) [149] | 15 | ||
31:16 |
(сдержанный) | (сдержанный) | 31:16 |
Биты | ЕАХ | ЭКХ | Биты | |||
---|---|---|---|---|---|---|
Короткий | Особенность | Короткий | Особенность | |||
7:0 | Количество мониторов | Количество доступных пар MSR обратной связи процессора, начиная с MSR C001_0080 вперед [150]
|
CpuPwrSampleTimeRatio | Отношение периода выборки аккумулятора мощности вычислительного блока к периоду счетчика TSC. | 7:0 | |
15:8 | Версия | Версия возможностей обратной связи процессора | 15:8 | |||
31:16 | МаксВраптиме | Максимальное время между чтениями (в миллисекундах), которое программное обеспечение должно использовать, чтобы избежать двух переносов. | 31:16 |
EAX=80000008h: Размеры виртуального и физического адреса.
[ редактировать ]Кусочек | ЕВХ | |
---|---|---|
Короткий | Особенность | |
0 | clzero | CLZERO инструкция
|
1 | отставной_инстр | Количество устаревших инструкций MSR ( C000_00E9h ) поддерживается
|
2 | xrstor_fp_err | XRSTOR восстанавливает ошибки ФП
|
3 | инвлпгб | INVLPGB и TLBSYNC инструкции
|
4 | РДПР | RDPRU инструкция
|
5 | (сдержанный) | |
6 | мбе | Обеспечение пропускной способности памяти |
7 | (сдержанный) | |
8 | мкоммит | MCOMMIT инструкция
|
9 | вбноинвд | WBNOINVD инструкция
|
10 | (сдержанный) | |
11 | (сдержанный) | |
12 | ИБПБ | Барьер косвенного предсказания ветвления (выполняется записью 1 в бит 0 PRED_CMD (МСР 049h ))
|
13 | wbinvd_int | WBINVD и WBNOINVD прерываемы
|
14 | ИБРС | Ограничение спекуляций с косвенным ответвлением |
15 | СТИБП | Режим прогнозирования непрямого перехода для одного потока |
16 | IbrsAlwaysOn | Режим IBRS имеет повышенную производительность, поэтому его следует всегда оставлять включенным. |
17 | StibpAlwaysOn | Режим STIBP имеет повышенную производительность, и его следует всегда оставлять включенным. |
18 | ibrs_preferred | IBRS предпочтительнее программного обеспечения |
19 | ibrs_same_mode_protection | IBRS обеспечивает защиту в том же режиме |
20 | no_efer_lmsle | EFER.LMSLE не поддерживается [а]
|
21 | invlpgb_nested | INVLPGB поддержка вложенных страниц
|
22 | (сдержанный) | |
23 | ппин | Инвентарный номер защищенного процессора —
|
24 | SSDD | Отключить спекулятивный обход магазина |
25 | ssbd_legacy | Отключить спекулятивный обход магазина |
26 | ssbd_no | Отключение спекулятивного обхода магазина не требуется |
27 | цена за клик | Совместный контроль производительности процессора |
28 | psfd | Отключить предиктивную пересылку магазина |
29 | btc_no | Путаница типа ветки: процессор не затронут |
30 | IBPB_RET | IBPB (см. бит 12) также очищает предиктор обратного адреса. |
31 | ветка_выборка | Поддержка выборки в филиалах [152] |
Биты | ЕАХ | ЭКХ | ЭДКС | Биты | ||
---|---|---|---|---|---|---|
7:0 | Количество бит физического адреса | Количество физических потоков в процессоре (минус 1) | Максимальное количество страниц для INVLPGB инструкция
|
7:0 | ||
11:8 | Количество битов линейного адреса | (сдержанный) | 11:8 | |||
15:12 | Размер идентификатора APIC | 15:12 | ||||
17:16 | Размер физического адреса гостя [б] | Размер счетчика меток производительности | Максимальное значение ECX, признанное RDPRU инструкция
|
17:16 | ||
23:18 | (сдержанный) | 23:18 | ||||
31:24 | (сдержанный) | 31:24 |
- ^ Функция LMSLE (включение ограничения сегмента в длинном режиме) не имеет собственного флага CPUID и обнаруживается путем проверки семейства и модели ЦП. Оно было введено в
AuthenticAMD
Семья 0Fh Модель 14h [151] (90-нм Athlon64/Opteron) и присутствует во всех более поздних процессорах AMD, за исключением тех, у которых установлен флаг no_efer_lmsle. - ^ Значение 0 указывает, что «Размер физического адреса гостя» такой же, как «Количество битов физического адреса», указанное в EAX[7:0].
EAX=8000000Ah: функции безопасной виртуальной машины.
[ редактировать ]Этот лист возвращает информацию о функциях AMD SVM ( безопасной виртуальной машины ) в EAX, EBX и EDX.
Биты | ЕАХ | ЕВХ | ЭКХ | Биты | ||
---|---|---|---|---|---|---|
7:0 | Номер версии SVM | Количество доступных ASID (идентификаторы адресного пространства) |
(сдержанный) | 7:0 | ||
8 | (гипервизор) [а] | 8 | ||||
31:9 | (сдержанный) | 31:9 |
Кусочек | ЭДКС | |
---|---|---|
Короткий | Особенность | |
0 | НАПРИМЕР | Быстрое индексирование виртуализации ( вложенный пейджинг ) |
1 | ЛбрВирт | Виртуализация LBR (записей последней ветки) |
2 | СВМЛ | SVM-Lock |
3 | НРИПС | nRIP (указатель следующей последовательной инструкции) поддерживается при сохранении #VMEXIT |
4 | TscRateMsr | на основе MSR (MSR TSC Управление скоростью C000_0104h )
|
5 | ВмкбКлин | Поддерживаются чистые биты VMCB (блок управления виртуальной машиной) |
6 | ПромывкаByAcid | TLB События очистки (например, запись CR3 , переключение CR4.PGE ) очищают только записи TLB текущего ASID (идентификатора адресного пространства). |
7 | ДекодированиеПомощник | Поддержка декодирования |
8 | ПмкВирт | Виртуализация PMC (счетчиков мониторинга производительности) |
9 | (SseIsa10Compat) [б] | (сдержанный) |
10 | ПаузаФильтр | PAUSE поддерживается фильтр перехвата
|
11 | (сдержанный) | |
12 | PauseFilterThreshold | PAUSE поддерживается порог счетчика циклов фильтра
|
13 | АВИК | Поддержка усовершенствованного виртуализированного контроллера прерываний AMD |
14 | (сдержанный) | |
15 | ВМСАВивирт | VMSAVE и VMLOAD виртуализация
|
16 | ВГИФ | Виртуализация глобального флага прерывания (GIF) |
17 | ГМЕТ | Ловушка выполнения в гостевом режиме |
18 | x2AVIC | Режим x2APIC поддерживается для AVIC |
19 | SSSCheck | SVM Supervisor теневого стека Ограничения |
20 | SpecCtrl | SPEC_CTRL (МСР 2E0h ) виртуализация
|
21 | РОГПТ | Поддерживается таблица гостевых страниц только для чтения |
22 | (сдержанный) | |
23 | HOST_MCE_OVERRIDE | Гостевой режим Исключения машинной проверки, когда хост CR4.MCE=1 и гость CR4.MCE=0 вызывать перехваты вместо отключений
|
24 | ТлбиКтл | INVLPGB / TLBSYNC включить гипервизор в VMCB и TLBSYNC поддержка перехвата
|
25 | ВНМИ | NMI ( немаскируемое прерывание Виртуализация ) |
26 | ИбсВирт | Виртуализация IBS (выборка на основе инструкций) |
27 | ExtLvtOffsetFaultChg | Поведение ошибок чтения/записи для расширенных смещений LVT (адреса APIC 0x500-0x530 ) изменено на «Разрешено чтение», «Запись #VMEXIT». [159]
|
28 | VmcbAddrChkChg | Изменение проверки адреса VMCB [159] |
29 | BusLockThreshold | Порог блокировки автобуса |
30 | IdleHltIntercept | Холостой HLT ( HLT инструкция выполняется, пока не ожидается виртуального прерывания) перехват
|
31 | (сдержанный) |
- ^ В ранних версиях документации AMD «Pacifica» бит 8 EAX указан как всегда нулевой бит, зарезервированный для использования гипервизором. [153]
Более поздняя документация AMD, например #25481 «Спецификация CPUID», версия 2.18. [154] и позже, только бит указывается как зарезервированный.
В версии 2.30 [155] и позже другой бит указан как зарезервированный для использования гипервизором: CPUID.(EAX=1):ECX[бит 31].
- ^ Бит 9 EDX кратко указан в некоторых старых версиях документа AMD № 25481 «Спецификация CPUID» и установлен только в некоторых AMD Bobcat . процессорах [156]
В версии 2.28 № 25481 этот бит указан как «Ssse3Sse5Dis». [157] - в версии 2.34 он указан как удаленный из спецификации версии 2.32 под именем «SseIsa10Compat». [158]
EAX=8000001Fh: возможности зашифрованной памяти
[ редактировать ]Кусочек | ЕАХ | |
---|---|---|
Короткий | Особенность | |
0 | Мы | Безопасное шифрование памяти |
1 | СЭВ | Безопасная зашифрованная виртуализация |
2 | ПейджФлешМСР | Очистка страницы MSR ( C001_011Eh ) поддерживается
|
3 | САМ | Зашифрованное состояние SEV |
4 | SEV-SNP | Безопасный вложенный пейджинг SEV |
5 | ВМПЛ | Уровни привилегий виртуальной машины |
6 | РМПЗАПРОС | RMPQUERY инструкция поддерживается
|
7 | ВмплССС | VMPL Supervisor теневой стек Поддерживается |
8 | SecureTSC | безопасный TSC Поддерживается |
9 | TscAuxVirtualization | Виртуализация TSC_AUX МСР ( C000_0103 ) поддерживается
|
10 | HwEnfCacheCoh | Обеспечение согласованности аппаратного кэша в доменах шифрования. |
11 | 64-битный хост | Гостевое выполнение SEV разрешено только с 64-битного хоста. |
12 | RestrictedInjection | Гости SEV-ES могут отказаться от всех инъекций событий, кроме #HV (исключение внедрения гипервизора). |
13 | AlternateInjection | Гости SEV-ES могут использовать зашифрованное поле VMCB для внедрения событий. |
14 | Дебагвирт | Полная виртуализация состояния отладки поддерживается для гостей SEV-ES и SEV-SNP. |
15 | PreventHostIBS | Запретить IBS хоста для гостя SEV-ES |
16 | ВТЭ | Виртуальное прозрачное шифрование для SEV |
17 | VmgexitParameter | VMGEXIT поддерживается параметр (с использованием регистра RAX)
|
18 | ВиртуалТомМср | Виртуальный TOM (верхняя часть памяти) MSR ( C001_0135 ) поддерживается
|
19 | IbsVirtGuestCtl | Виртуализация IBS поддерживается для гостей SEV-ES и SEV-SNP. |
20 | PmcVirtGuestCtl | Виртуализация PMC поддерживается для гостей SEV-ES и SEV-SNP. |
21 | РМПРЕД | RMPREAD инструкция поддерживается
|
22 | (сдержанный) | |
23 | (сдержанный) | |
24 | ВмсаРегПрот | Поддерживается защита реестра VMSA (VM Save Area). |
25 | СмтЗащита | SMT- Поддержка защиты |
26 | SecureAvic | Поддержка безопасного AVIC |
27 | AllowedSEVfeatures | Поле ALLOWED_SEV_FEATURES_MASK в VMCB (смещение 138h ) поддерживается
|
28 | SVSMCommPageMSR | SVSM (сервисный модуль безопасной виртуальной машины) [160] ) страница связи MSR ( C001_F000h ) поддерживается
|
29 | NestedVirtSnpMsr | VIRT_RMPUPDATE ( C001_F001h ) и VIRT_PSMASH ( C001_F002h ) Поддерживаются MSR
|
30 | HvInUseWrAllowed | Запись на страницу, принадлежащую гипервизору, разрешена, если она помечена как используемая. |
31 | Ибпбонэнтри | Поддерживается IBPB при входе в виртуальную машину |
Биты | ЕВХ | ЭКХ | ЭДКС | Биты |
---|---|---|---|---|
5:0 | Расположение C-бита (бита включения шифрования) в записи таблицы страниц. | Максимальное значение ASID, которое можно использовать для гостя с поддержкой SEV (максимальное количество зашифрованных гостей, которые могут поддерживаться одновременно) | Минимальное значение ASID для гостя, у которого включен SEV, но не включен SEV-ES. | 5:0 |
11:6 | Уменьшение ширины физического адреса при включенном шифровании памяти | 11:6 | ||
15:12 | Количество поддерживаемых VMPL (уровней привилегий виртуальной машины) | 15:12 | ||
31:16 | (сдержанный) | 31:16 |
EAX=80000021h: Идентификация расширенной функции 2
[ редактировать ]Кусочек | ЕАХ | |
---|---|---|
Короткий | Особенность | |
0 | Нонестеддатабп | Процессор игнорирует вложенные точки останова данных |
1 | FsGsKernelGsBaseNonSerializing | WRMSR к FS_BASE , GS_BASE и KernelGSBase MSR не сериализуются [161]
|
2 | LFenceAlwaysSerializing | LFENCE всегда выполняется сериализация отправки
|
3 | SmmPgCfgLock | Поддерживается блокировка конфигурации пейджинга SMM. |
4 | (сдержанный) | |
5 | (сдержанный) | |
6 | NullSelectClearsBase | Загрузка селектора нулевого сегмента также очищает базу регистров целевого сегмента и ограничивает |
7 | UpperAddressIgnore | Поддерживается игнорирование верхнего адреса. |
8 | АвтоматическийIBRS | Автоматический ИБРС |
9 | НоСммКтлМСР | SMM_CTL МСР ( C0010116h ) не поддерживается
|
10 | ФСРС | Быстрый короткий REP STOSB поддерживается
|
11 | ФСРК | Быстрый короткий REPE CMPSB поддерживается
|
12 | (сдержанный) | |
13 | Предварительная выборкаCtlMsr | PrefetchControl MSR ( C0000108h ) поддерживается
|
14 | (сдержанный) | |
15 | (сдержанный) | |
16 | (сдержанный) | |
17 | CPUidUserDis | CPUID отключить для непривилегированного ПО
|
18 | ЕПСФ | Поддерживается улучшенная предиктивная переадресация в магазин. [161] |
19 | (сдержанный) | |
20 | (сдержанный) | |
21 | (сдержанный) | |
22 | (сдержанный) | |
23 | (сдержанный) | |
24 | (сдержанный) | |
25 | (сдержанный) | |
26 | (сдержанный) | |
27 | СБПБ | Поддерживается барьер предсказателя выборочного ветвления [162] |
28 | IBPB_BRTYPE | IBPB сбрасывает все прогнозы типов ветвей. [162] |
29 | СРСО_НО | ЦП не подвержен уязвимости SRSO (спекулятивное переполнение стека возвратов). [162] |
30 | SRSO_USER_KERNEL_NO | ЦП не подвержен уязвимости SRSO на границе пользователя/ядра. [162] |
31 | SRSO_MSR_FIX | SRSO можно уменьшить, установив бит 4 в BP_CFG ( MSR C001_102E ) [162]
|
Кусочек | ЕВХ | |
---|---|---|
Короткий | Особенность | |
11:0 | МикрокодPatchSize | Размер патча микрокода кратен 16 байтам. Если 0, размер патча не превышает 5568 (15C0h) байт. |
31:12 | (сдержанный) |
EAX=8FFFFFFFh: пасхальное яйцо AMD
[ редактировать ]Некоторые модели процессоров AMD будут для CPUID с EAX=8FFFFFFFh
, возвращает строку пасхального яйца в EAX, EBX, ECX и EDX. [163] [164] Известные струны для пасхальных яиц включают:
Процессор | Нить |
---|---|
АМД К6 | NexGenerationAMD
|
АМД К8 | IT'S HAMMER TIME
|
AMD Ягуар [165] | HELLO KITTY! ^-^
|
EAX=C0000000h: получить максимальную Centaur расширенную функцию
[ редактировать ]Возвращает индекс самого высокого листа Centaur в EAX. Если возвращаемое значение в EAX меньше C0000001h
, то расширенные листья Centaur не поддерживаются.
Присутствует в процессорах VIA и Zhaoxin .
На процессорах IDT WinChip ( CentaurHauls
Семейство 5), листья расширенные. C0000001h-C0000005h
не кодируют какие-либо функции, специфичные для Centaur, а вместо этого являются псевдонимами листьев 80000001h-80000005h
. [166]
EAX=C0000001h: Информация о функциях Centaur
[ редактировать ]Этот лист возвращает информацию о функциях Centaur (в основном через PadLock ) в EDX. [167] [168] (EAX, EBX и ECX зарезервированы.)
Кусочек | ЭДКС | |
---|---|---|
Короткий | Особенность | |
0 | см2 [а] | SM2 присутствует |
1 | sm2_en [а] | SM2 включен |
2 | звонок | PadLock RNG присутствует: XSTORE и REP XSTORE инструкции
|
3 | rng_en | ГСЧ включен |
4 | CCS [а] | В инструкции PadLock SM3 / SM4 присутствуют: CCS_HASH и CCS_ENCRYPT
|
5 | ccs_en [а] | Инструкции SM3/SM4 включены |
6 | xcrypt | Усовершенствованный криптографический механизм PadLock (ACE, использующий шифр AES ): REP XCRYPT(ECB,CBC,CFB,OFB) инструкции
|
7 | xcrypt_en | ACE включен |
8 | туз2 | ACE v2 присутствует: REP XCRYPTCTR инструкции, а также поддержку режима дайджеста и невыровненных данных для ACE. REP XCRYPT* инструкции.
|
9 | ace2_en | ACE v2 включен |
10 | фе | Хэш-движок PadLock (PHE): REP XSHA1 и REP XSHA256 инструкции
|
11 | phe_en | ПТО включен |
12 | пмм | PadLock Множитель Монтгомери (PMM): REP MONTMUL инструкция
|
13 | pmm_en | ПММ включен |
14 | (сдержанный) | |
15 | zx_fma | FMA поддерживается |
16 | параллакс | Адаптивное управление P-состоянием присутствует |
17 | parallax_en | Адаптивное управление P-состоянием включено |
18 | перенапряжение | Присутствует функция перенапряжения для автоматического разгона |
19 | overstress_en | Функция Overstress для автоматического разгона включена |
20 | тм3 | Тепловой монитор 3 присутствует |
21 | tm3_en | Тепловой монитор 3 включен |
22 | rng2 | RNG v2: присутствует RNG второго поколения. |
23 | rng2_en | ГСЧ v2 включен |
24 | который | Присутствует функция малого и среднего бизнеса |
25 | phe2 | PHE v2: присутствуют SHA384 и SHA512. |
26 | phe2_en | PHE v2 включен |
27 | xmodx | В инструкциях RSA присутствуют: XMODEXP и MONTMUL2
|
28 | xmodx_en | Инструкции RSA включены |
29 | досаждать | Инструкции VEX присутствуют |
30 | vex_en | Инструкции VEX включены |
31 | абзац | СТК присутствует |
- ^ Перейти обратно: а б с д На процессорах VIA Nehemiah и Antaur (
CentaurHauls
Только семейство 6, модель 9), [169] биты 0,1,4,5 используются по-разному:- Бит 0: альтернативный набор команд (AIS). присутствует
- Бит 1: AIS включен
- Бит 4: LongHaul MSR (MSR
0x110A
) подарок - Бит 5:
FEMMS
инструкция (код операции0F 0E
) подарок
Использование CPUID из языков высокого уровня
[ редактировать ]Линейная сборка
[ редактировать ]Эту информацию легко получить и на других языках. Например, приведенный ниже код C для gcc печатает первые пять значений, возвращаемых cpuid:
#include <stdio.h>
#include <cpuid.h>
int main()
{
unsigned int i, eax, ebx, ecx, edx;
for (i = 0; i < 5; i++) {
__cpuid(i, eax, ebx, ecx, edx);
printf ("InfoType %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", i, eax, ebx, ecx, edx);
}
return 0;
}
В встроенной сборке MSVC и Borland/Embarcadero C (bcc32) информация о затирании неявно содержится в инструкциях:
#include <stdio.h>
int main()
{
unsigned int a, b, c, d, i = 0;
__asm {
/* Do the call. */
mov EAX, i;
cpuid;
/* Save results. */
mov a, EAX;
mov b, EBX;
mov c, ECX;
mov d, EDX;
}
printf ("InfoType %x\nEAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", i, a, b, c, d);
return 0;
}
Если какая-либо версия была написана на простом языке ассемблера, программист должен вручную сохранить результаты EAX, EBX, ECX и EDX в другом месте, если он хочет продолжать использовать значения.
Функции-обертки
[ редактировать ]GCC также предоставляет заголовок под названием <cpuid.h>
в системах с CPUID. __cpuid
— это макрос, расширяемый до встроенной сборки. Типичное использование будет:
#include <stdio.h>
#include <cpuid.h>
int main()
{
unsigned int eax, ebx, ecx, edx;
__cpuid(0 /* vendor string */, eax, ebx, ecx, edx);
printf("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", eax, ebx, ecx, edx);
return 0;
}
Но если кто-то запросит расширенную функцию, отсутствующую в этом процессоре, он этого не заметит и может получить случайные, неожиданные результаты. Более безопасная версия также представлена в <cpuid.h>
. Он проверяет наличие расширенных функций и выполняет еще несколько проверок безопасности. Выходные значения передаются не с использованием параметров макроса, подобных ссылкам, а с использованием более традиционных указателей.
#include <stdio.h>
#include <cpuid.h>
int main()
{
unsigned int eax, ebx, ecx, edx;
/* 0x81234567 is nonexistent, but assume it exists */
if (!__get_cpuid (0x81234567, &eax, &ebx, &ecx, &edx)) {
printf("Warning: CPUID request 0x81234567 not valid!\n");
return 1;
}
printf("EAX: %x\nEBX: %x\nECX: %x\nEDX: %x\n", eax, ebx, ecx, edx);
return 0;
}
Обратите внимание на амперсанды в &a, &b, &c, &d
и условное утверждение. Если __get_cpuid
вызов получает правильный запрос, он вернет ненулевое значение, в случае неудачи — ноль. [170]
Компилятор Microsoft Visual C имеет встроенную функцию __cpuid()
поэтому инструкция cpuid может быть встроена без использования встроенной ассемблера, что удобно, поскольку версия MSVC x86-64 вообще не поддерживает встроенную ассемблерную сборку. Та же программа для MSVC будет:
#include <stdio.h>
#ifdef __MSVC__
#include <intrin.h>
#endif
int main()
{
unsigned int regs[4];
int i;
for (i = 0; i < 4; i++) {
__cpuid(regs, i);
printf("The code %d gives %d, %d, %d, %d", regs[0], regs[1], regs[2], regs[3]);
}
return 0;
}
Многие интерпретируемые или скомпилированные языки сценариев способны использовать CPUID через библиотеку FFI . Одна из таких реализаций демонстрирует использование модуля Ruby FFI для выполнения языка ассемблера, который включает код операции CPUID.
.NET 5 и более поздние версии предоставляют System.Runtime.Intrinsics.X86.X86base.CpuId
метод. Например, приведенный ниже код C# выводит марку процессора, если он поддерживает инструкцию CPUID:
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics.X86;
using System.Text;
namespace X86CPUID {
class CPUBrandString {
public static void Main(string[] args) {
if (!X86Base.IsSupported) {
Console.WriteLine("Your CPU does not support CPUID instruction.");
} else {
Span<int> raw = stackalloc int[12];
(raw[0], raw[1], raw[2], raw[3]) = X86Base.CpuId(unchecked((int)0x80000002), 0);
(raw[4], raw[5], raw[6], raw[7]) = X86Base.CpuId(unchecked((int)0x80000003), 0);
(raw[8], raw[9], raw[10], raw[11]) = X86Base.CpuId(unchecked((int)0x80000004), 0);
Span<byte> bytes = MemoryMarshal.AsBytes(raw);
string brand = Encoding.UTF8.GetString(bytes).Trim();
Console.WriteLine(brand);
}
}
}
}
Информация, специфичная для процессора, за пределами x86
[ редактировать ]Некоторые архитектуры ЦП, отличные от x86, также предоставляют определенные формы структурированной информации о возможностях процессора, обычно в виде набора специальных регистров:
- Архитектуры ARM имеют
CPUID
регистр сопроцессора, для доступа к которому требуется уровень исключения EL1 или выше. [171] - Процессоры мейнфреймов IBM System z имеют идентификатор ЦП Store (
STIDP
) инструкция начиная с IBM 4381 1983 года. [172] для запроса идентификатора процессора. [173] - Процессоры мэйнфреймов IBM System z также имеют расширенный список магазинов (
STFLE
) инструкция, в которой перечислены установленные аппаратные функции. [173] - Архитектура MIPS32/64 определяет обязательную идентификацию процессора (
PrId
) и ряд последовательно подключенных регистров конфигурации . [174] - Процессор PowerPC имеет 32-битный регистр версии процессора, доступный только для чтения (
PVR
), идентифицирующий используемую модель процессора. Инструкция требует уровня доступа супервизора. [175]
Семейства DSP и транспьютерных микросхем не восприняли эту инструкцию каким-либо заметным образом, несмотря на (в относительном выражении) столько же вариаций конструкции. Могут существовать альтернативные способы идентификации кремния; например, DSP от Texas Instruments содержат набор регистров в памяти для каждого функционального блока, который начинается с идентификаторов, определяющих тип и модель блока, версию его конструкции ASIC и функции, выбранные на этапе проектирования, и продолжается контролем и данными для конкретного блока. регистры. Доступ к этим областям осуществляется простым использованием существующих инструкций загрузки и сохранения; таким образом, для таких устройств нет необходимости расширять набор регистров для целей идентификации устройства. [ нужна ссылка ]
См. также
[ редактировать ]- x86-cpuid.org — полная база данных CPUID архитектуры x86 плюс соответствующие инструменты генерации кода, которые будут использоваться как ядром Linux , так и гипервизором Xen . [176]
- CPU-Z — утилита Windows, использующая
CPUID
для определения различных настроек системы - CPU-X , альтернатива CPU-Z для Linux и FreeBSD.
- Призрак (уязвимость безопасности)
- Спекулятивный обход магазинов (SSB)
- /proc/cpuinfo — текстовый файл, созданный некоторыми системами и содержащий некоторую информацию о CPUID.
Ссылки
[ редактировать ]- ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32» (PDF) . Intel.com . Проверено 11 апреля 2013 г.
- ^ «Обнаружение процессоров Intel — определение поколения системного процессора» . Rcollins.org . Проверено 11 апреля 2013 г.
- ^ «LXR linux-old/arch/i386/kernel/head.S» . Lxr.linux.no. Архивировано из оригинала 13 июля 2012 г. Проверено 11 апреля 2013 г.
- ^ Перейти обратно: а б с Дебби Уайлс, Идентификация ЦП , архивировано 4 июня 2006 г.
- ^ B-CoolWare, TMi0SDGL библиотека обнаружения ЦП/ФПУ x86 с исходным кодом, версия 2.15, июнь 2000 г. - см. /SOURCE/REALCODE.ASM для получения большой коллекции процедур обнаружения ЦП x86 до CPUID. Архивировано 14 марта 2023 г.
- ^ «CPUID, EAX=4 — Странные результаты (решено)» . Software.intel.com . Проверено 10 июля 2014 г.
- ^ @InstLatX64 (28 февраля 2019 г.). «Первая встреча с «GenuineIotel» (o после I вместо n)» ( твит ) – через Twitter .
- ^ «Дамп GenuineIotel CPUID для Intel Xeon E3-1231» . instlatx64 .
- ^ instlatx64, дамп CPUID для RDC IAD 100 . Проверено 22 декабря 2022 г.
- ^ Перейти обратно: а б с д smxi, Inxi Issue 197: Данные о поддержке процессоров «Эльбрус» и реализация . Проверено 23 октября 2023 года. Архивировано 23 октября 2023 года.
- ^ Гжегож Мазур, Идентификация процессоров x86 с поддержкой CPUID , 5 мая 1997 г. Архивировано из оригинала 24 мая 1997 г.
- ^ Инго Бёттчер, CPUDET.PAS v1.61 , 23 октября 1996 г. — программа идентификации ЦП, проверяющая строку «AMD ISBETTER». Архивировано 26 апреля 2024 г.
- ^ соргелиг (3 августа 2017 г.). «Инструкция ao486 CPUID (в коммите 43a2004)» . Гитхаб . Архивировано из оригинала 04 декабря 2023 г. Проверено 4 декабря 2023 г.
- ^ Перейти обратно: а б соргелиг (30 августа 2020 г.). «Обновить идентификатор процессора. · MiSTer-devel/ao486_MiSTer@82f5014» . Гитхаб . Архивировано из оригинала 04 декабря 2023 г. Проверено 4 декабря 2023 г.
- ^ соргелиг (30 августа 2020 г.). «Инструкция ao486 CPUID» . Гитхаб . Архивировано из оригинала 23 октября 2023 года . Проверено 4 декабря 2023 г.
- ^ «v586: 586-совместимое программное ядро для FPGA» . Гитхаб . 6 декабря 2021 г.
- ^ «Опрос оборудования и программного обеспечения Steam» . store.steampowered.com . Проверено 26 июля 2022 г.
- ^ «Развлечение с таймерами и процессором — Джим Коуни — развлечение с процессором» . 3 марта 2021 г.
- ^ iXBT Labs, VIA Nano CPUID Tricks , 26 августа 2010 г. Архивировано 29 августа 2010 г.
- ^ IDT, Техническое описание WinChip 2A , версия 1.0, январь 1999 г., страница A-3.
- ^ VIA, Таблица данных C3 Nehemiah , версия 1.13, 29 сентября 2004 г., страница A-3.
- ^ Агнер Фог, CpuIDFake, v1.00 , 22 января 2010 г., см. «Instructions.txt». Архивировано 9 июля 2010 г.
- ^ Перейти обратно: а б Transmeta, Руководство программиста Crusoe BIOS , 23 января 2004 г., страницы 63–65.
- ^ Transmeta, Руководство программиста Efficeon BIOS, 19 августа 2003 г., раздел 8.3, стр. 148.
- ^ AMD, Книга данных Geode LX , pub.id. 33234H, февраль 2009 г., стр. 107. Архивировано 3 декабря 2023 г.
- ^ DM&P, Vortex86EX2_A9133_Master_Data_Sheet_V11_BF , 8 мая 2019 г., стр. 72.
- ^ «Справочник по набору команд главы 3, AL» (PDF) . Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 . Корпорация Интел. 20 декабря 2018 г. Проверено 20 декабря 2018 г.
- ^ Intel, Руководство разработчика семейства процессоров Pentium , 1997 г., номер заказа. 241428-005, разделы 3.4.1.2 (стр. 91), 17.5.1 (стр. 489) и приложение А (стр. 522) содержат более подробную информацию о том, как работают поле «тип процессора» и обозначение «двухпроцессорный».
- ^ InstLatx64, x86, x64 Задержка инструкций, задержка памяти и дампы CPUID , 30 сентября 2023 г.
- ^ AMD, Улучшенное семейство микропроцессоров Am486DX , pub.no. 20736 ред. B, март 1997 г., раздел 9.2.2, стр. 55. Архивировано 18 октября 2023 г.
- ^ AMD, Руководство пользователя микроконтроллеров ÉlanSC400 и ÉlanSC410 , pub.no. 21030, 1997, раздел 3.6.2, стр. 73. Архивировано 18 октября 2023 года.
- ^ Cyrix, Руководство для разработчиков BIOS 5x86 , версия 1.12, номер заказа. 92426-00, 1995 г., стр. 7.
- ^ Перейти обратно: а б Cyrix, Руководство по обнаружению ЦП , версия 1.01, 2 октября 1997 г., стр. 6.
- ^ Исходный код MiSTer ao486, rtl/ao486/defines.v , строка 70. Архивировано 23 октября 2023 г.
- ^ CPU-World, CPUID для Vortex86DX2 933 МГц . Архивировано 17 октября 2023 г.
- ^ CPU-World, CPUID для Vortex86EX2 . Архивировано 18 октября 2023 г.
- ^ InstLatx64, дамп CPUID Centaur CNS . Архивировано 30 мая 2023 года.
- ^ Джефф Этвуд, Nasty Software Hacks и CPUID Intel . Кодирующий ужас , 16 августа 2005 г.
- ^ Перейти обратно: а б Intel, Справочное руководство по архитектуре набора инструкций сопроцессора Intel Xeon Phi , сентябрь 2012 г., номер для заказа. 327364-001, приложение Б.8, стр. 673-674. Архивировано 4 августа 2021 года.
- ^ CPU-World, CPUID для Intel Itanium 2 1,50 ГГц . Архивировано 17 октября 2023 г.
- ^ InstLatX64, дамп CPUID 72-ядерного процессора Intel Xeon Phi 7290
- ^ InstLatx64, дамп CPUID 96-ядерного процессора AMD Ryzen Threadripper Pro 7995WX
- ^ Идентификация процессора Intel® и инструкция CPUID (PDF) , Intel, май 2002 г., заархивировано из оригинала (PDF) 17 апреля 2021 г.
- ^ Исходные коды ядра Linux 6.3, /arch/x86/include/asm/cpuid.h , строка 69.
- ^ Список рассылки gcc-patches, Исправление CPUID для IDT Winchip , 21 мая 2019 г.
- ^ Джефф Чаппелл, Поддержка CMPXCHG8B в 32-битном ядре Windows , 23 января 2008 г. Архивировано 30 января 2023 г.
- ^ AMD, Примечание по применению распознавания процессоров AMD , публикация № 20734, ред. D, январь 1997 г., стр. 13.
- ^ Intel, Примечание по применению AP-485 — Идентификация процессора Intel и инструкция CPUID , номер заказа. 241618-006, март 1997 г., таблица 5 на стр. 10, см. бит 10.
- ^ Михал Некасек, SYSENTER, Где ты? , Музей OS/2 , 20 июля 2017 г.
- ↑ Джефф Чаппелл, ECX из CPUID Leaf 1 , 26 января 2020 г. Архивировано 9 мая 2020 г.
- ^ Хуггахалли, Рам; Айер, Рави; Тетрик, Скотт (2005). «Прямой доступ к кэшу для высокоскоростного сетевого ввода-вывода». Новости компьютерной архитектуры ACM SIGARCH . 33 (2): 50–59. CiteSeerX 10.1.1.85.3862 . дои : 10.1145/1080695.1069976 . CiteSeerX : 10.1.1.91.957 .
- ^ Дреппер, Ульрих (2007), Что каждый программист должен знать о памяти , CiteSeerX : 10.1.1.91.957
- ^ Перейти обратно: а б Intel, Руководство разработчика программного обеспечения для архитектуры Itanium, версия 2.3, том 4: Набор инструкций IA-32 , май 2010 г., номер документа: 323208, таблица 2-5, страница 4:81, см. биты 20 и 30. Архивировано 15 февраля 2012 г. .
- ^ Intel, AP-485, Идентификация процессора и флаг инструкции CPUID , ред. 30, январь 2006 г., стр. 26
- ^ Михал Некасек, HTT означает гиперпоточность, верно? , Музей OS/2 , 11 декабря 2017 г.
- ^ «Механизмы определения того, работает ли программное обеспечение на виртуальной машине VMware» . База знаний VMware . ВМВаре . 01.05.2015.
Процессоры Intel и AMD зарезервировали бит 31 ECX листа CPUID 0x1 в качестве бита присутствия гипервизора. Этот бит позволяет гипервизорам сообщать о своем присутствии гостевой операционной системе. Гипервизоры устанавливают этот бит, а физические процессоры (все существующие и будущие процессоры) устанавливают этот бит в ноль. Гостевые операционные системы могут проверять бит 31, чтобы определить, работают ли они внутри виртуальной машины.
- ^ Катария, Алок; Хехт, Дэн (1 октября 2008 г.). «Предложение по интерфейсу CPUID гипервизора» . LKML Архив на lore.kernel.org. Архивировано из оригинала 15 марта 2019 г.
Бит 31 ECX листа CPUID 0x1. Этот бит зарезервирован Intel и AMD для использования гипервизорами и указывает на наличие гипервизора. Виртуальные процессоры (гипервизоры) устанавливают этот бит в 1, а физические процессоры (все существующие и будущие процессоры) устанавливают этот бит в ноль. Этот бит может быть проверен гостевым программным обеспечением, чтобы определить, работают ли они внутри виртуальной машины.
- ^ «Руководство программиста по архитектуре AMD64 AMD64, том 2: Системное программирование» (PDF) (изд. 3.41). Advanced Micro Devices, Inc. с. 498. 24593. Архивировано из оригинала (PDF) 30 сентября 2023 года . Проверено 9 сентября 2023 г.
15.2.2 Гостевой режим Вход в этот новый режим процессора осуществляется с помощью инструкции VMRUN. В гостевом режиме поведение некоторых инструкций x86 меняется для облегчения виртуализации. Номера функций CPUID 4000_0000h-4000_00FFh зарезервированы для использования программным обеспечением. Гипервизоры могут использовать эти номера функций для предоставления интерфейса для передачи информации от гипервизора гостю. Это похоже на извлечение информации о физическом процессоре с помощью CPUID. Гипервизоры используют бит CPUID Fn 400000[FF:00] для обозначения виртуальной платформы. Бит функции CPUID Fn0000_0001_ECX[31] зарезервирован для использования гипервизорами для обозначения присутствия гипервизора. Гипервизоры устанавливают этот бит в 1, а физические процессоры устанавливают этот бит в ноль. Этот бит может быть проверен гостевым программным обеспечением, чтобы определить, работают ли они внутри виртуальной машины.
- ^ Intel SDM vol 2A , номер заказа. 253666-053, январь 2015 г., с. 244
- ^ Intel, Справочное руководство по процессорам Itanium для разработки программного обеспечения , версия 2.0, номер заказа. 245320-003, декабрь 2001 г., стр. 110. Архивировано из оригинала 18 февраля 2004 г.
- ^ Intel, Идентификация процессора и инструкция по применению CPUID 485 , номер заказа. 241618-036, август 2009 г., стр. 26. Архивировано 6 октября 2023 г.
- ^ InstLatX64, дамп Willamette-128 CPUID . Архивировано 7 декабря 2019 года.
- ^ InstlatX64, дамп CPUID Intel Atom 230 . Архивировано 7 декабря 2019 года.
- ^ WikiChip, Боннелл . Архивировано 16 июля 2017 года.
- ^ Cyrix, Руководство по обнаружению ЦП Cyrix , версия 1.01, 2 октября 1997 г., стр. 13.
- ^ Intel, Идентификация процессора и инструкция по применению CPUID 485 , номер заказа. 241618-037, январь 2011 г., стр. 32. Архивировано 17 октября 2023 г.
- ^ Джефф Чаппелл, CPUID Leaf 2 , 26 января 2020 г. Архивировано 4 сентября 2023 г.
- ^ Intel, Справочное руководство по процессорам Itanium 2 , номер заказа. 251110-003, май 2004 г., стр. 192. Архивировано из оригинала 7 декабря 2006 г.
- ^ Intel, Обновление спецификации процессора Itanium 2 , номер заказа. 251141-028, ноябрь 2004 г., ошибка 6 на странице 26. Архивировано из оригинала 25 ноября 2004 г.
- ^ Intel, Обновление спецификаций семейства процессоров Atom C3000 , номер заказа. 336345-020, стр. 16, март 2023 г. Архивировано 7 октября 2023 г.
- ^ Intel, Техническое описание процессора Xeon серии 7500 , номер заказа. 323341-001, март 2010 г., стр. 150. Архивировано 8 октября 2023 г.
- ^ Intel, Справочное руководство по оптимизации, том 1 , номер заказа. 248966-049, январь 2024 г., глава 9.6.3.3, с. 361. Архивировано 19 апреля 2024 года.
- ^ Перейти обратно: а б Ши Куо (27 января 2012 г.). «Перечисление топологии процессора архитектуры Intel 64» .
- ^ «Перечисление процессоров и ядер с использованием CPUID | AMD» . Разработчик.amd.com. Архивировано из оригинала 14 июля 2014 г. Проверено 10 июля 2014 г.
- ^ «Процессоры Sandybridge сообщают неправильный номер ядра?» . Программное обеспечение.intel.com. 29 декабря 2012 г. Проверено 10 июля 2014 г.
- ^ «процессор, __cpuidex» . Msdn.microsoft.com. 20 июня 2014 г. Проверено 10 июля 2014 г.
- ^ «Архитектура x86 — CPUID» . сайт sandpile.org . Проверено 10 июля 2014 г.
- ^ «topology.cpp в ps/trunk/source/lib/sysdep/arch/x86_x64 – Wildfire Games» . Trac.wildfiregames.com. 27 декабря 2011 г. Архивировано из оригинала 09 марта 2021 г. Проверено 10 июля 2014 г.
- ^ Технология Hyper-Threading и обнаружение многоядерных процессоров
- ^ Intel, Справочник по программированию расширений набора команд архитектуры , номер заказа. 319433-052, март 2024 г., глава 17. Архивировано 7 апреля 2024 г.
- ^ Intel, Идентификация процессора Intel и инструкция CPUID (AP-485, версия 30) , номер заказа. 241618-030, январь 2006 г., стр. 19.
- ^ Intel, Руководство разработчика программного обеспечения для архитектуры Intel 64 и IA-32 , номер заказа. 352462-079, том 3Б, раздел 15.4.4.4, стр. 3503
- ^ Intel, Идентификация процессора и инструкция CPUID , номер заказа. 241618-038, апр 2012, стр.38
- ^ Intel, Уведомление об изменении продукта 108701 , 1 августа 2008 г. Архивировано 11 мая 2023 г.
- ^ Перейти обратно: а б «Влияние проблемы упорядочения памяти расширения Intel Transactional Synchronization Extension на мониторинг производительности» (PDF) . Интел . Июнь 2023. с. 8 . Проверено 8 мая 2024 г.
- ^ Перейти обратно: а б с Intel, Спецификация архитектуры: Модуль Intel Trust Domain Extensions (Intel TDX) , номер для заказа. 344425-001, сентябрь 2020 г., страницы 120–122. Архивировано из оригинала 29 июля 2021 г.
- ^ Intel, Прекращение поддержки инструкции PCOMMIT , 12 сентября 2016 г. Архивировано 23 апреля 2023 г.
- ^ Intel, Спецификация архитектуры AVX512-FP16 (PDF), номер документа 347407-001, июнь 2021 г. Архивировано 26 октября 2022 г.
- ^ Перейти обратно: а б с д «Средства по снижению побочных каналов спекулятивного исполнения» (PDF) . Версия 2.0. Интел . Май 2018 г. [январь 2018 г.]. Номер документа: 336996-002 . Проверено 26 мая 2018 г.
- ^ «Серия патчей IBRS [LWN.net]» .
- ^ Перейти обратно: а б с Intel, Спецификация гибкого возврата и доставки событий (FRED) , версия 6.1, декабрь 2023 г., номер заказа. 346446-007, стр. 14. Архивировано 22 декабря 2023 г.
- ^ Intel, Руководство разработчика программного обеспечения , номер заказа. 325462-080, июнь 2023 г. — информация о преждевременно занятых теневых стеках представлена в томе 1, раздел 17.2.3 на стр. 410; Том 2А, таблица 3.8 (CPUID EAX=7,ECX=2) на стр. 820; Том 3C, таблица 25–14 на стр. 3958 и раздел 26.4.3 на стр. 3984.
- ^ LKML, Re: (PATCH v3 00/21) Включить виртуализацию CET , 16 июня 2023 г. — содержит дополнительное обсуждение того, как проблема преждевременной занятости стека CET-SSS взаимодействует с виртуализацией.
- ^ Перейти обратно: а б Intel, Advanced Vector Extensions 10 , версия 1.0, июль 2023 г., номер заказа. 355989-001. Архивировано 24 июля 2023 г.
- ^ Перейти обратно: а б Intel, Advanced Performance Extensions — Спецификация архитектуры , версия 2.0, август 2023 г., номер заказа. 355828-002, стр. 37. Архивировано 10 сентября 2023 г.
- ^ Перейти обратно: а б с Intel, Внедрение истории ветвей и внедрение целевой ветки внутри режима / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598 , 4 августа 2022 г. Архивировано 5 мая 2023 г.
- ^ Intel, Недополнение буфера стека возврата / CVE-2022-29901, CVE-2022-28693 / INTEL-SA-00702 , 12 июля 2022 г. Архивировано 13 июля 2022 г.
- ^ Intel, Уведомление о выходе из асинхронного анклава и функция пользовательского листа EDECCSSA , 30 июня 2022 г. Архивировано 21 ноября 2022 г.
- ^ Ядро Linux git commit 604dc91, x86/tsc: используйте CPUID.0x16 для расчета недостающей частоты кристалла , 9 мая 2019 г. — содержит примечания по вычислению частоты Core Crystal Clock на процессорах, которые ее не указывают, и соответствующий код C.
- ^ Intel, SDM Volume 3A , номер заказа 253668-083, март 2024 г., глава 11.5.4, стр. 408.
- ^ instlatx64, дамп Spreadtrum SC9853I-IA CPUID
- ^ Intel, Спецификация архитектуры: Модуль Intel Trust Domain Extensions (Intel TDX) , номер заказа. 344425-005, стр. 93, февраль 2023 г. Архивировано 20 июля 2023 г.
- ^ Перейти обратно: а б Microsoft, Обнаружение функций и интерфейсов Hyper-V , 8 июля 2022 г. Архивировано 18 ноября 2023 г.
- ^ Джефф Чаппелл, HV_HYPERVISOR_INTERFACE , 10 декабря 2022 г. Архивировано 1 февраля 2023 г.
- ^ Документация QEMU, Улучшения Hyper-V . Архивировано 17 апреля 2024 г.
- ^ Исходный код ядра Linux 6.8.7, /source/arch/x86/kvm/cpuid.c , строки 1482-1488.
- ^ Документация по ядру Linux, биты KVM CPUID . Архивировано 22 августа 2022 года.
- ^ Исходный код ядра Linux 6.8.7, /arch/x86/kvm/hyperv.c, строка 2793.
- ^ Документация по ядру Linux, поддержка виртуализации: 4.118 KVM_GET_SUPPORTED_HV_CPUID . Архивировано 26 марта 2024 г.
- ^ FreeBSD коммит 560d5ed , 28 июня 2013 г., см. файл /sys/amd64/vmm/x86.c, строка 48. Архивировано 22 апреля 2024 г.
- ^ Исходный код HyperKit, /src/lib/vmm/x86.c, строка 42 , 8 мая 2021 г.
- ^ Xen, Интерфейс CPUID для Xen . Архивировано 22 апреля 2024 г.
- ^ Исходный код QEMU, fb/target/i386/cpu.c, строка 6475 , 18 марта 2024 г.
- ^ VMWare, Механизмы определения того, работает ли программное обеспечение на виртуальной машине VMware , 1 мая 2015 г. Архивировано 18 июня 2023 г.
- ↑ Project ACRN, Виртуализация CPUID , 20 октября 2022 г. Архивировано 25 марта 2023 г.
- ^ Документация VirtualBox, 9.30 Паравиртуализированная отладка . Архивировано 22 апреля 2024 г.
- ^ QNX, Гипервизор — проверка гостевой среды , 25 марта 2022 г. Архивировано 22 апреля 2024 г.
- ^ Исходный код NetBSD, /sys/dev/nvmm/x86/nvmm_x86_vmx.c, строка 1430 , 6 ноября 2023 г.
- ^ Исходный код OpenBSD, /sys/arch/amd64/include/vmmvar.h, строка 24 , 9 апреля 2024 г.
- ^ Документация по гипервизору Siemens Jailhouse, Hypervisor-interfaces.txt, строка 39 , 27 января 2020 г. Архивировано 5 июля 2024 г.
- ^ Исходный код Intel HAXM, /core/cpuid.c, строка 979 , 20 января 2023 г. Архивировано 22 апреля 2024 г.
- ^ Исходный код Intel KGT (надежная ветвь), /vmm/vmexit/vmexit_cpuid.c, строки 17–75 , 15 мая 2019 г.
- ^ Исходный код ядра Linux v5.18.19, /source/drivers/visorbus/visorchipset.c, строка 28.
- ^ Н. Мур, virt: Поддержка обнаружения гостей LMHS SRE # 25594 , 1 декабря 2022 г. — предоставленный Lockheed Martin запрос на включение для systemd с добавлением строки идентификатора гипервизора CPUID для гипервизора LMHS SRE. Архивировано 23 апреля 2024 г.
- ^ Спецификация CPUID, публикация № 25481, версия 2.34 (PDF) , AMD , сентябрь 2010 г., заархивировано из оригинала (PDF) 18 августа 2022 г.
- ^ Исходный код ядра Linux
- ^ AMD, Техническое описание процессора AMD-K6 , номер заказа. 20695H/0, март 1998 г., раздел 24.2, стр. 283
- ^ AMD, Руководство по версии процессора AMD-K6 , номер для заказа. 21846H/0, июнь 1999 г., раздел 3.2.1, стр. 17
- ^ Intel, Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 , номер заказа. 325462-079, март 2023 г., таблица 3-8 на стр. 3-238.
- ^ Спецификация облегченного профилирования (PDF) , AMD , август 2010 г., заархивировано из оригинала (PDF) 27 ноября 2012 г. , получено 3 апреля 2013 г.
- ^ Cyrix, Руководство по обнаружению ЦП Cyrix , версия 1.01, 2 октября 1997 г., стр. 12
- ^ AMD, Справочник процессоров Geode GX1 , версия 5.0, декабрь 2003 г., страницы 202 и 226. Архивировано 20 апреля 2020 г.
- ^ Transmeta, Распознавание процессора , 7 мая 2002 г., стр. 5
- ^ Перейти обратно: а б AMD, Примечание по применению распознавания процессоров , pub.no. 20734, ред. 3.13, декабрь 2005 г. Раздел 2.2.2 (стр. 20) и Раздел 3 (стр. 33–40) содержат подробную информацию о том, как следует использовать CPUID.(EAX=8000_0001):EDX[бит 19] для идентификации процессоров. В разделе 3 также представлена информация о MSR торговой марки AMD. Архивировано из оригинала 26 июня 2006 г.
- ^ AMD, Family 10h BKDG , документ №. 31116, ред. 3.62, 11 янв. 2013 г., с. 388 — перечисляет бит NodeId. Архивировано 16 января 2019 года.
- ^ AMD, Руководство программиста по архитектуре AMD64, том 3 , паб. нет. 24594, ред. 3.20, май 2013 г., стр. 579 — указан бит StreamPerfMon.
- ^ «Идентификация процессора Intel и инструкция CPUID» (PDF) . Скачать.intel.com. 06 марта 2012 г. Проверено 11 апреля 2013 г.
- ^ InstLatx64, дамп CPUID Vortex86DX3 , 27 сентября 2021 г. Архивировано 21 октября 2021 г.
- ^ InstLatx64, дамп CPUID AMD Ryzen 7 6800HS , 21 февраля 2022 г. Архивировано 24 марта 2023 г.
- ^ Чипсы и сыр, Почему нельзя доверять CPUID , 27 октября 2022 г. Архивировано 3 ноября 2022 г.
- ^ AMD, Сборник данных Geode LX , pub.id. 33234H, февраль 2009 г., стр. 207.
- ^ InstLatx64, 2x 24-ядерный дамп Montage Jintide C2460 CPUID
- ^ InstLatx64, 24-ядерного процессора Intel Xeon Platinum 8160 2 дампа CPUID
- ^ InstLatx64, Zhaoxin KaiXian ZX-C+ C4580 дамп CPUID
- ^ InstLatx64, дамп VIA Eden X4 C4250 CPUID
- ^ Cyrix, Примечание по применению 112: Руководство по обнаружению ЦП Cyrix , стр. 17, 21 июля 1998 г.
- ^ Instlatx64, дамп CPUID VIA Cyrix III "Samuel"
- ^ AMD, BKDG для процессоров семейства AMD 10h , pub.no. 31116, ред. 3.62, 11 января 2013 г., страница 392. Архивировано 16 января 2019 г.
- ^ Перейти обратно: а б с д AMD, PPR Для процессоров AMD Family 19h Model 61h rev B1 , паб.номер. 56713, ред. 3.05, 8 марта 2023 г., страницы 99–100. Архивировано 25 апреля 2023 г.
- ^ AMD, BKDG для процессоров семейства AMD 16h, модели 00-0Fh , pub.no. 48571, ред. 3.03, 19 февраля 2015 г., страница 482. Архивировано 16 января 2019 г.
- ^ AMD, Руководство разработчика BIOS и ядра для процессоров AMD Athlon 64 и AMD Opteron , публикация № 26094, версия 3.30, февраль 2006 г., страницы 29–30 (перечислены различия версий Athlon 64, включая LMSLE) ( архивировано 16 января 2019 г.) и Руководство по версиям процессоров AMD Athlon 64 и AMD Opteron , публикация № 25759, версия 3.79, июль 2009 г., страницы 7–8 (перечислены идентификаторы версий Athlon 64) ( архивировано 18 января 2019 г.).
- ^ AMD, PPR для процессоров семейства AMD 19h, модель 01h, редакция B1, том 1 из 2 , номер документа. 55898, ред. 0.50, 27 мая 2021 г., стр. 98 — указан бит выборки ветвей. Архивировано 24 июля 2022 г.
- ^ AMD, Технология виртуализации AMD64 под кодовым названием «Pacifica» , публикация №. 33047, ред. 3.01, май 2005 г., приложение B, стр. 81. Архивировано 13 июня 2011 г.
- ^ AMD, спецификация CPUID , публикация № 25481, версия 2.18, январь 2006 г., стр. 18.
- ^ AMD, спецификация CPUID , публикация № 25481, версия 2.34, сентябрь 2010 г., страницы 5 и 11.
- ^ Instlatx64, дамп CPUID AMD E-350 - установлен CPUID.(EAX=8000000A):EDX[9].
- ^ AMD, спецификация CPUID , публикация № 25481, версия 2.28, апрель 2008 г., стр. 21.
- ^ AMD, спецификация CPUID , публикация № 25481, версия 2.34, сентябрь 2010 г., стр. 5 - указано, что «SseIsa10Compat» был исключен в ноябре 2009 г.
- ^ Перейти обратно: а б AMD, PPR для процессоров семейства AMD 19h, модель 61h, ревизия B1 , номер документа. 56713, ред. 3.05, 8 марта 2023 г., страница 102. Архивировано 25 апреля 2023 г.
- ^ AMD, Сервисный модуль безопасной виртуальной машины для гостей SEV-SNP , pub.no #58019, версия 1.00, июль 2023 г., стр. 13. Архивировано 5 августа 2023 г.
- ^ Перейти обратно: а б AMD, PPR для процессоров семейства AMD 19h, модель 61h, ревизия B1 , номер документа. 56713, ред. 3.05, 8 марта 2023 г., страница 116. Архивировано 25 апреля 2023 г.
- ^ Перейти обратно: а б с д и AMD, Техническое обновление относительно спекулятивного переполнения стека возвратов , версия 2.0, февраль 2024 г. Архивировано 12 апреля 2024 г.
- ^ Ферри, Питер. «Атаки на эмуляторы виртуальных машин» (PDF) . Симантек . Расширенное исследование угроз Symantec. Архивировано из оригинала (PDF) 7 февраля 2007 г. Проверено 15 марта 2017 г.
- ^ Sandpile, CPUID архитектуры x86 . Проверено 22 декабря 2022 г.
- ^ instlatx64, дамп CPUID AMD A4-5000 , содержит строку «HELLO KITTY» для листа CPUID.
8FFFFFFFh
. Проверено 22 декабря 2022 г. - ^ IDT, Техническое описание процессора WinChip 2B , версия 0.9, апрель 1999 г., глава 3.3.3, стр. 31.
- ^ VIA, Руководство по программированию PadLock, ред. 1.66, 4 августа 2005 г., страница 5. Архивировано из оригинала 26 мая 2010 г.
- ^ Исходники ядра OpenEuler 1.0 LTS, /arch/x86/include/asm/cpufeatures.h, строки 147–178. Архивировано 30 июля 2023 г.
- ^ VIA, Техническое описание процессора C3 Nehemiah , версия 1.13, 29 сентября 2004 г., стр. 21
- ^ «GCC-зеркало/GCC» . Гитхаб . 13 марта 2022 г.
- ^ «Информационный центр АРМ» . Infocenter.arm.com . Проверено 11 апреля 2013 г.
- ^ «Коды версий процессора и константы SRM» . Архивировано из оригинала 8 сентября 2014 г. Проверено 8 сентября 2014 г.
- ^ Перейти обратно: а б «Техническое руководство по IBM System z10 Enterprise Class» (PDF) .
- ^ «Архитектура MIPS32 для программистов, том III: Архитектура привилегированных ресурсов MIPS32» (PDF) . MIPS Technologies, Inc. 12 марта 2001 г.
- ^ «Архитектура операционной среды PowerPC, книга III» (PDF) .
- ^ С. Дарвиш, Ахмед. «[ОБЪЯВЛЕНИЕ] x86-cpuid.org: машиночитаемый репозиторий CPUID» . Архив списка рассылки ядра Linux . Проверено 20 июля 2024 г.
Дальнейшее чтение
[ редактировать ]- «Расширение косвенного управления ветвями технологии AMD64» (PDF) (информационный документ). Редакция 4.10.18. Advanced Micro Devices, Inc. (AMD). 2018. Архивировано (PDF) из оригинала 9 мая 2018 г. Проверено 9 мая 2018 г.
Внешние ссылки
[ редактировать ]- Идентификация процессора Intel и инструкция CPUID (примечание по применению 485), последняя опубликованная версия. Предполагается, что оно будет включено в Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 в 2013 году , но по состоянию на июль 2014 года. [update] руководство по-прежнему рекомендует читателю обратиться к примечанию 485.
- Однако содержит некоторую информацию, которая может быть и была легко неверно истолкована, особенно в отношении идентификации топологии процессора .
- Большие руководства Intel, как правило, отстают от документа Intel ISA, доступного в верхней части этой страницы , который обновляется даже для процессоров, еще не общедоступных, и поэтому обычно содержит больше битов CPUID. Например, на момент написания книги ISA (версия 19, датированная маем 2014 г.) бит CLFLUSHOPT документирован на листе 7, но в больших руководствах, хотя и очевидно более современных (версия 51, датированная июнем 2014 г.), нет не упоминай об этом.
- Руководство программиста по архитектуре AMD64, том 3: Общие и системные инструкции
- cpuid для Linux программа командной строки
- cpuprint.com, cpuprint.exe, cpuprint.raw программы командной строки для Windows
- instlatx64 — коллекция дампов задержки инструкций x86/x64, задержки памяти и CPUID.