Jump to content

идентификатор процессора

В 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 г. Срок действия базовых отпусков составляет до 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

Ниже приведены известные строки идентификатора производителя процессора:

Ниже приведены строки идентификаторов, используемые программными ядрами ЦП с открытым исходным кодом :

  • "GenuineAO486" — процессор ao486 (старый) [13] [14]
  • "MiSTer AO486" — процессор ao486 (новый) [15] [14]
  • "GenuineIntel" — ядро ​​v586 [16] (это идентично строке идентификатора Intel)

Ниже приведены известные строки идентификаторов виртуальных машин:

Например, на процессоре 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
Процессор 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]

CPUID EAX=1: информация о версии процессора в EAX.
ЕАХ
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]

CPUID EAX=1: идентификаторы семейства процессоров.
Семейный идентификатор +
Расширенный семейный идентификатор
Интел АМД Другой
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 )
  1. ^ Процессор i386 не поддерживает CPUID инструкция - однако она возвращает Family ID 3h в значении сброса EDX.
  2. ^ Семейный идентификатор 8h Сообщается, что его намеренно избегали для семейства процессоров Pentium 4 из-за несовместимости с Windows NT 4.0. [38]
CPUID EAX=1: дополнительная информация в EBX
Биты ЕВХ Действительный
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 и последующие процессоры.
  1. ^ На процессорах с более чем 128 логическими процессорами в одном корпусе (например, Intel Xeon Phi 7290 [41] и AMD Threadripper Pro 7995WX [42] ) значение в бите 23:16 устанавливается равным значению, не соответствующему степени двойки.
  2. ^ Локальный идентификатор APIC также можно определить с помощью листа cpuid 0Bh ( CPUID.0Bh.EDX[x2APIC-ID]). На процессорах с более чем 256 логическими процессорами в одном корпусе (например, Xeon Phi 7290) необходимо использовать лист 0Bh, поскольку идентификатор APIC не умещается в 8 бит.

Информация о процессоре и флаги функций зависят от производителя, но обычно значения Intel используются другими производителями в целях совместимости.

CPUID EAX=1: информация о функциях в EDX и ECX.
ЭДКС ЭКХ [а]
Кусочек Короткий Особенность Короткий Особенность Кусочек
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
  1. ^ На некоторых старых процессорах выполнение CPUID с конечным индексом (EAX) больше 0 может оставить EBX и ECX неизмененными, сохранив свои старые значения. По этой причине рекомендуется обнулить EBX и ECX перед выполнением. CPUID с индексом листа 1.

    К процессорам, демонстрирующим такое поведение, относятся Cyrix MII. [44] и IDT WinChip 2. [45]

  2. ^ На процессорах IDT, Transmeta и Rise (идентификаторы производителей CentaurHauls, GenuineTMx86 и RiseRiseRise), CMPXCHG8B Инструкция всегда поддерживается, однако бит функции для инструкции может быть не установлен. Это обходной путь ошибки в Windows NT. [46]
  3. ^ На ранних версиях AMD K5 ( AuthenticAMD Только для процессоров семейства 5, модель 0), вместо этого используется бит 9 EDX для указания поддержки PGE. Начиная с модели K5 Model 1, это было перенесено в бит 13. [47]
  4. ^ Intel AP-485, редакция 006 [48] до 008, в списке CPUID.(EAX=1):EDX[бит 10] указано имя «MTRR» (хотя оно описано как «Зарезервировано»/«Не рассчитывать на их значение») — это имя было удалено в более поздних версиях AP-485, и с тех пор этот бит был указан как зарезервированный без имени.
  5. ^ На Pentium Pro ( GenuineIntel Только процессоры семейства 6, модель 1), бит 11 EDX недействителен — бит установлен, но SYSENTER и SYSEXIT инструкции не поддерживаются Pentium Pro. [49]
  6. ^ FCMOV и FCOMI инструкции доступны только в том случае, если присутствует встроенный FPU x87 (обозначается битом 0 EDX).
  7. ^ Бит 16 ECX указан как «Зарезервирован» в общедоступной документации Intel и AMD и не установлен ни в одном известном процессоре. Однако сообщается, что некоторые версии ядра Windows Vista проверяют этот бит. [50] - если он установлен, Vista распознает его как функцию «каналов процессора».
  8. ^ Об Intel и Transmeta [23] ЦП, поддерживающие PSN (серийный номер процессора), PSN можно отключить, установив бит 21 в MSR. 119h ( BBL_CR_CTL) до 1. При этом лист 3 будет удален, а CPUID.(EAX=1):EDX[бит 18] вернет 0.
  9. ^ На процессорах x86, отличных от Itanium, поддержка бита No-execute указана в CPUID. (EAX=8000_0001):EDX[бит 20] вместо этого.
  10. ^ Бит 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 = полностью ассоциативный)
Легенда для кодировок байтов дескриптора кэша/TLB
Уровень-1
инструкция
или кэш данных
Уровень-2
кэш
Уровень-3
кэш
Инструкция
или TLB данных
Уровень-2
общий
TLB
Другой
информация
(сдержанный)
CPUID EAX=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
  1. ^ В более старой документации Intel нижний байт значения, возвращаемого в EAX, описывается как указывающий, сколько раз CPUID должен быть вызван с EAX=2, чтобы получить все дескрипторы кэша/TLB. Однако все известные процессоры, реализующие этот листовой возврат, 01h в этом байте и более новой документации Intel (SDM rev 053 [59] и позже) определяет этот байт как имеющий значение 01h.
  2. ^ Перейти обратно: а б с д и ж г час я Дескрипторы 10h, 15h, 1Ah, 88h, 89h, 8Ah, 90h, 96h, 9Bh документированы только для режима работы IA-32 Itanium . [60]
  3. ^ Перейти обратно: а б с д Значения дескриптора 26h, 27h, 28h и 81h не перечислены в документации Intel и не используются ни в одном известном процессоре, но, как сообщается, распознаются ядром Windows NT v5.1 ( Windows XP ) и выше. 81h также распознается версией 5.0 ( Windows 2000 ). [67]
  4. ^ Перейти обратно: а б с д и ж г Дескрипторы 39h-3Eh и 73h перечислены в версии 36 Intel AP-485, [61] но были удалены из более поздней документации Intel, хотя некоторые из них использовались в процессорах Intel (например, 39h в Willamette-128 процессорах Celeron на базе [62] ).
  5. ^ Дескриптор 49h указывает на наличие кэша 3-го уровня GenuineIntel ЦП семейства 0Fh Model 6 (Xeon на базе Pentium 4) и кэш-память 2-го уровня на других ЦП.
  6. ^ В документации Intel CPUID не указана ассоциативность ITLB, указанная дескриптором. 4Fh. Процессоры, использующие этот дескриптор (Intel Atom «Bonnell» [63] ) перечислены в других местах как имеющие полностью ассоциативный ITLB с 32 записями. [64]
  7. ^ Перейти обратно: а б На процессорах Cyrix и Geode (идентификаторы поставщиков CyrixInstead и Geode by NSC), дескрипторы 70h и 80h имеют другое значение: [65]
    • Дескриптор 70h указывает на 32-элементный общий TLB с четырьмя ассоциативными наборами команд и данных и размером страницы 4 КБ.
    • Дескриптор 80h указывает на общий кеш инструкций + данных L1 размером 16 КБ с 4-сторонней ассоциативностью набора и размером строки кэша 16 байт.
  8. ^ Дескриптор 76h указан как кэш L2 объемом 1 МБ в версии 37 Intel AP-485, [66] но как инструкция TLB в версии 38 и во всей более поздней документации Intel.
  9. ^ Перейти обратно: а б с Дескрипторы 77h, 7Eh, 8Dh документированы только для режима работы IA-32 Itanium 2 . [68]
  10. ^ В режиме работы IA-32 процессора Itanium 2 размер кэша L3 всегда указывается как 3 МБ независимо от фактического размера кэша. [69]
  11. ^ Для дескриптора B1h, емкость TLB составляет 8 элементов при использовании страниц по 2 МБ, но уменьшается до 4 элементов при использовании страниц по 4 МБ.
  12. ^ Перейти обратно: а б Предварительная выборка, указанная дескрипторами 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) .

CPUID EAX=4 и 8000001Dh: информация о свойствах кэша в EAX, EBX и EDX.
Кусочек ЕАХ ЕВХ ЭДКС Кусочек
0 Тип кэша:
  • 0: (кешей больше нет)
  • 1: Кэш данных
  • 2: Кэш инструкций
  • 3: Единый кэш
  • 4-31: (зарезервировано)
системы Размер строки согласованности в байтах, минус 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
  1. ^ Перейти обратно: а б Для листа 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 год 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.

CPUID EAX=5: информация о функциях MONITOR/MWAIT в EAX, EBX, 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
  1. ^ Состояния от C0 до C7 — это C-состояния, специфичные для процессора, которые не обязательно соответствуют 1:1 C-состояниям ACPI .
CPUID EAX=5: перечисление расширений MONITOR/MWAIT в ECX.
Кусочек ЭКХ
Короткий Особенность
0 ЕМХ Перечисление поддерживаемых расширений MONITOR/MWAIT в ECX и EDX
1 ГОРЬКИЙ Поддерживает обработку прерываний как событий прерывания для MWAIT даже когда прерывания отключены
2 (сдержанный)
3 Безмониторный_MWAIT Позволять MWAIT использоваться для управления питанием без настройки мониторинга памяти с помощью MONITOR[80]

31:4
 
(сдержанный)

EAX=6: Управление температурой и питанием.

[ редактировать ]

Это возвращает функциональные биты в регистре EAX и дополнительную информацию в регистрах EBX, ECX и EDX.

CPUID EAX=6: биты функции управления температурой/питанием в EAX.
Кусочек ЕАХ
Короткий Особенность
0 ДТС Возможности цифрового термодатчика
1 Intel Turbo Boost Возможности технологии
2 пахота [а] Всегда работающий APIC таймер
3 (сдержанный)
4 злотых Возможность уведомления об ограничении мощности
5 ECMD Расширенные возможности тактовой модуляции
6 ПТМ Возможность управления температурным режимом корпуса
7 ЗВП Аппаратно-контролируемые состояния производительности . MSR добавили:
  • IA32_PM_ENABLE( 770h)
  • IA32_HWP_CAPABILITIES( 771h)
  • IA32_HWP_REQUEST( 774h)
  • IA32_HWP_STATUS( 777h
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 добавили:
  • IA32_PKG_HDC_CTL ( DB0h)
  • IA32_PM_CTL1 ( DB1h)
  • IA32_THREAD_STALL ( DB2h)
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:
  • IA32_HW_FEEDBACK_PTR( 17D0h)
  • IA32_HW_FEEDBACK_CONFIG( 17D1h) (бит 0 включает HFI, бит 1 включает Intel Thread Director)
20 IA32_HWP_REQUEST простоя логического процессора игнорируется, когда только один из двух логических процессоров, совместно использующих физический процессор активен .
21 (сдержанный)
22 ЗВП Контроль MSR IA32_HWP_CTL( 776h) MSR поддерживается [82]
23 Поддерживается Intel Thread Director. Добавлены MSR:
  • IA32_THREAD_FEEDBACK_CHAR( 17D2h)
  • IA32_HW_FEEDBACK_THREAD_CONFIG( 17D4h)
24 IA32_THERM_INTERRUPT Поддерживается бит 25 MSR

31:25
 
(сдержанный)
  1. ^ Только на процессорах семейства Intel Pentium 4 бит 2 EAX используется для обозначения OPP (защита рабочей точки). [81] вместо АРАТ.
  2. ^ Чтобы включить режим быстрого (несериализующего) доступа для IA32_HWP_REQUEST MSR на процессорах, которые его поддерживают, необходимо установить бит 0 FAST_UNCORE_MSRS_CTL( 657h) МСР.
CPUID EAX=6: поля функций управления температурой/питанием в EBX, ECX и EDX.
Кусочек ЕВХ ЭКХ ЭДКС Кусочек
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
 
  1. ^ Бит «ACNT2 Capability» указан в Intel AP-485, версия 038. [83] и 039, но не указаны ни в одной версии Intel SDM. Известно, что эта функция существует только в нескольких процессорах Intel, например, в Xeon «Harpertown» со степпингом E0. [84]

EAX=7, ECX=0: расширенные функции

[ редактировать ]

Это возвращает флаги расширенных функций в EBX, ECX и EDX. Возвращает максимальное значение ECX для EAX=7 в EAX.

CPUID EAX=7,ECX=0: биты расширенных функций в EBX, ECX и EDX.
Кусочек ЕВХ ЭКХ ЭДКС Кусочек
Короткий Особенность Короткий Особенность Короткий Особенность
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
  1. ^ Перейти обратно: а б с По состоянию на апрель 2024 года биты FZM, MPRR и SGX_TEM указаны только в Intel TDX. документации [86] и не установлены ни в одном известном процессоре.

EAX=7, ECX=1: расширенные функции

[ редактировать ]

Это возвращает флаги расширенных функций во всех четырех регистрах.

CPUID EAX=7,ECX=1: биты расширенных функций в EAX, EBX, ECX и EDX.
Кусочек ЕАХ ЕВХ ЭКХ ЭДКС Кусочек
Короткий Особенность Короткий Особенность Короткий Особенность Короткий Особенность
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
  1. ^ По состоянию на апрель 2024 г. бит DEDUP указан только в Intel TDX . документации [86] и не установлен ни в одном известном процессоре.
  2. ^ Поддержка 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 зарезервированы.

CPUID EAX=7,ECX=2: биты расширенных функций в EDX.
Кусочек ЭДКС
Короткий Особенность
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 зарезервирован):

CPUID EAX=0Dh, ECX≥2: информация о компоненте состояния XSAVE.
Кусочек ЕАХ ЕВХ ЭКХ Кусочек
0 Размер компонента состояния в байтах Смещение компонента состояния от начала XSAVE/ XRSTOR область сохранения

(Это смещение равно 0 для компонентов состояния супервизора, поскольку они могут быть сохранены только с помощью XSAVES/ XRSTORS инструкции, использующие уплотнение.)

Компонент состояния пользователя/супервизора:
  • 0=состояние пользователя (включено через XCR0)
  • 1=состояние супервизора (включается через IA32_XSS)
0
1 Выравнивание по 64 байтам включается, когда используется сжатие сохранения состояния.

Если этот бит установлен для компонента состояния, то при сохранении состояния с уплотнением между предыдущим компонентом состояния и этим компонентом состояния будет вставлено заполнение по мере необходимости для обеспечения 64-байтового выравнивания. Если этот бит не установлен, компонент состояния будет сохранен сразу после предыдущего.

1

31:2
 
(сдержанный)
31:2

Попытка запросить неподдерживаемый компонент состояния таким образом приводит к тому, что EAX,EBX,ECX и EDX устанавливаются в 0.

Подлисты 0 и 1 из CPUID лист 0Dh используются для предоставления информации о функциях:

CPUID EAX=0Dh,ECX=0: функции XSAVE
ЕВХ ЭКХ EDX:EAX
Максимальный размер (в байтах) области сохранения XSAVE для набора компонентов состояния, установленных в данный момент в XCR0. Максимальный размер (в байтах) области сохранения XSAVE, если все компоненты состояния поддерживаются XCR0 на этом ЦП были включены одновременно. 64-битное растровое изображение компонентов состояния, поддерживаемое XCR0 на этом процессоре.
CPUID EAX=0Dh,ECX=1: расширенные функции XSAVE.
ЕАХ ЕВХ EDX: ЭКХ
Флаги функций XSAVE (см. таблицу ниже) Размер (в байтах) области XSAVE, содержащей все компоненты состояния, установленные в данный момент в XCR0 и IA32_XSS комбинированный. 64-битное растровое изображение компонентов состояния, поддерживаемое IA32_XSS на этом процессоре.
EAX=0Dh,ECX=1: флаги функций XSAVE в EAX.
Кусочек ЕАХ
Короткий Особенность
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:

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 (сдержанный) [б]
  1. ^ Бит 0 из XCR0 имеет жесткое значение 1, поэтому инструкции XSAVE всегда поддерживают сохранение/восстановление состояния x87.
  2. ^ Для XCR0 и IA32_XSS регистрах бит 63 зарезервирован специально для расширения битового вектора — это исключает существование компонента состояния 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) происходит асинхронный выход из анклава).

CPUID EAX=12h,ECX=0: конечные функции SGX , MISCSELECT и максимальные размеры.
Кусочек ЕАХ ЕВХ ЭДКС Кусочек
Короткий Особенность Короткий Особенность Короткий Особенность
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 (сдержанный) (сдержанный) MaxEnclave­Size_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 следующим образом:

CPUID EAX=12h,ECX=1: SGX устанавливаемые биты в SECS.ATTRIBUTES
Кусочек ЕАХ ЕВХ Кусочек
Короткий Особенность Короткий Особенность
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
 
  1. ^ Для копии SECS, существующей внутри эксклава, бит 0 (INIT) SECS.ATTRIBUTES используется для указания того, что анклав был инициализирован с помощью ENCLS[EINIT]. Этот бит должен быть равен 0 в копии SECS, которая передается в качестве входных данных для ENCLS[CREATE].

Подлисты 2 и выше используются для предоставления информации о том, какие области физической памяти доступны для использования в качестве разделов EPC (кэш страниц анклава) в SGX.

CPUID EAX=12h,ECX≥2: SGX. информация раздела кэша страниц анклава
Биты ЕАХ ЕВХ ЭКХ ЭДКС Биты
3:0 Тип подлиста:
  • 0000: Недействительно
  • 0001: Раздел EPC
  • другое: зарезервировано
Биты 51:32 физического базового адреса секции EPC. Свойства раздела EPC:
  • 0000: Недействительно
  • 0001: Имеет конфиденциальность, целостность и защиту от повторного воспроизведения.
  • 0010: Имеет только защиту конфиденциальности
  • 0011: Имеет защиту конфиденциальности и целостности.
  • другое: зарезервировано
Биты 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 зарезервирован.

CPUID EAX=14h,ECX=0: биты функции трассировки процессора в EBX и ECX.
Кусочек ЕВХ ЭКХ Кусочек
Короткий Особенность Короткий Особенность
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:
  • 0=RIP (IP-адрес эффективного адреса)
  • 1=LIP (IP-адрес с линейным адресом, с добавленным базовым адресом CS)
31

EAX=15h и EAX=16h: частоты процессора, TSC, шины и ядра Crystal Clock.

[ редактировать ]

Эти два листа предоставляют информацию о различных частотах ЦП в EAX, EBX и ECX (EDX зарезервирован в обоих листах).

CPUID EAX=15h: TSC и Core Crystal. информация о частоте
ЕАХ ЕВХ ЭКХ
Отношение частоты TSC к частоте Core Crystal Clock, знаменатель Отношение частоты TSC к частоте Core Crystal Clock, числитель [а] Частота Core Crystal Clock, в Гц [а]
CPUID EAX=16h: частоты процессора и шины. [б]
Биты ЕАХ ЕВХ ЭКХ Биты
15:0 Базовая частота процессора (в МГц) [а] Максимальная частота процессора (в МГц) [а] Шина/опорная частота (в МГц) [а] 15:0
31:16 (сдержанный) (сдержанный) (сдержанный) 31:16
  1. ^ Перейти обратно: а б с д и Поле не нумеруется, если оно равно нулю.
  2. ^ Значения частоты, указанные в листе 16h, являются техническими частотами процессора — они постоянны для данного процессора и не обязательно отражают фактическую тактовую частоту ЦП на момент вызова CPUID.

Если возвращаемые значения в 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:

CPUID EAX=17h,ECX=0: идентификационная информация SoC.
Кусочек ЕВХ ЭКХ ЭДКС Кусочек
15:0 Идентификатор поставщика SoC Идентификатор проекта SoC Идентификатор шага SoC в проекте SoC 15:0
16 Схема идентификации поставщика SoC
  • 0: Идентификаторы поставщиков, присвоенные Intel. [а]
  • 1: Стандартная схема нумерации отрасли. [б]
16
31:17 (сдержанный) 31:17
  1. ^ По состоянию на май 2024 г. известно, что Intel присвоила следующие идентификаторы поставщиков:
    ИДЕНТИФИКАТОР Продавец
    1 Распространение [101]
  2. ^ По состоянию на май 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 зарезервирован.

CPUID EAX=19h: биты функции Key Locker в EAX, EBX и ECX.
Кусочек ЕАХ ЕВХ ЭКХ Кусочек
Короткий Особенность Короткий Особенность Короткий Особенность
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
 
  1. ^ По состоянию на апрель 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 зарезервированы.)

CPUID EAX=24h, ECX=0: биты функции AVX10 в EBX.
Кусочек ЕВХ
Короткий Особенность
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 включать:

CPUID EAX=40000x00h: 12-значная строка идентификатора гипервизора в EBX,ECX,EDX.
Гипервизор Идентификатор строки (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 ( архив )

(КГТ также возвращает подпись в CPUID лист 3: ECX= 0x4D4D5645 "EVMM" и EDX= 0x43544E49 "INTC")

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]

CPUID EAX=80000001h: функциональные биты в EDX и ECX.
Кусочек ЭДКС ЭКХ Кусочек
Короткий Особенность Короткий Особенность
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
  1. ^ Бит 16 первоначально обозначал поддержку 128-битных векторов, но версия 3.0 спецификации AVX10.1 устранила такую ​​возможность.
  2. ^ Использование бита 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 ).

  3. ^ На процессорах Intel бит CPUID для SYSCALL/ SYSRET устанавливается только в том случае, если CPUID инструкция выполняется в 64-битном режиме. [129]
  4. ^ Перейти обратно: а б На некоторых процессорах — Cyrix MediaGXm , [131] несколько жеод (NatSemi Geode GXm, GXLV, GX1; AMD Geode GX1 [132] ) и Трансмета Крузо [133] - Биты 16 и 24 EDX имеют разное значение:
    • Бит 16: Условное перемещение с плавающей запятой ( FCMOV) поддерживается
    • Бит 24: MMX 6x86MX. поддерживаются расширенные инструкции
  5. ^ Бит 19 EDX используется для идентификации марки процессора на AuthenticAMD Только процессоры семейства 6 — этот бит в сочетании с сигнатурой процессора и скоростью FSB используется для идентификации процессоров как многопроцессорных или имеющих Sempron . торговую марку [134]
  6. ^ Бит 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.
CPUID EAX=80000002h: информация о кэше L1/TLB в EAX,EBX,ECX,EDX.
Биты ЕАХ ЕВХ ЭКХ ЭДКС Биты
7:0 Количество записей инструкций в TLB [с] Размер строки кэша в байтах 7:0
15:8 инструкция ассоциативности TLB [д] Количество строк кэша на тег 15:8
23:16 Количество записей TLB данных [с] Ассоциативность кэша [д] 23:16
31:24 Ассоциативность TLB данных [д] Размер кэша в килобайтах 31:24
  1. ^ На некоторых старых процессорах Cyrix и Geode (в частности, CyrixInstead/ Geode by NSC Только процессоры семейства 5 Model 4), лист 80000005h существует, но имеет совершенно другой формат, аналогичный листу 2. [146]
  2. ^ На процессорах, которые могут обрабатывать только небольшие страницы в своих TLB, этот лист вернет 0 в EAX. (На таких процессорах, к которым относятся, например, AMD K6 и Transmeta Crusoe, записи огромных страниц в таблицах страниц разбиваются на страницы размером 4 КБ по мере необходимости при входе в TLB.)
    На некоторых процессорах, например VIA Cyrix III «Samuel», [147] этот лист возвращается 0x80000005 в ЕАХ. Это имеет то же значение, что и EAX=0, т.е. нет огромных TLB-страниц.
  3. ^ Перейти обратно: а б На процессорах Transmeta значение FFh используется для обозначения TLB на 256 записей.
  4. ^ Перейти обратно: а б с Для полей ассоциативности листа 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 ( надежность, доступность и удобство обслуживания ) ЦП.

CPUID EAX=80000007h: функции RAS в EBX и функции управления питанием в EDX.
Кусочек ЕВХ ЭДКС Кусочек
Короткий Особенность Короткий Особенность
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 (сдержанный) ProcFeedback­Interface Поддерживается интерфейс обратной связи процессора 11
12 (сдержанный) ProcPower­Reporting Поддерживается интерфейс отчета о мощности процессора 12
13 (сдержанный) Connected­Standby Подключенный режим ожидания [149] 13
14 (сдержанный) РАПЛ Предел средней рабочей мощности [149] 14
15 (сдержанный) ФастCPPC Поддерживается Fast CPPC (совместный контроль производительности процессоров) [149] 15

31:16
 
(сдержанный) (сдержанный)
31:16
 
CPUID EAX=80000007h: информация обратной связи процессора в EAX и информация интерфейса мониторинга питания в ECX.
Биты ЕАХ ЭКХ Биты
Короткий Особенность Короткий Особенность
7:0 Количество мониторов Количество доступных пар MSR обратной связи процессора, начиная с MSR C001_0080 вперед [150] CpuPwrSample­TimeRatio Отношение периода выборки аккумулятора мощности вычислительного блока к периоду счетчика TSC. 7:0
15:8 Версия Версия возможностей обратной связи процессора 15:8
31:16 МаксВраптиме Максимальное время между чтениями (в миллисекундах), которое программное обеспечение должно использовать, чтобы избежать двух переносов. 31:16

EAX=80000008h: Размеры виртуального и физического адреса.

[ редактировать ]
CPUID EAX=80000008h: биты функций в EBX.
Кусочек ЕВХ
Короткий Особенность
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 ппин Инвентарный номер защищенного процессора —

PPIN_CTL ( C001_02F0) и PPIN ( C001_02F1) MSR присутствуют [149]

24 SSDD Отключить спекулятивный обход магазина
25 ssbd_legacy Отключить спекулятивный обход магазина
26 ssbd_no Отключение спекулятивного обхода магазина не требуется
27 цена за клик Совместный контроль производительности процессора
28 psfd Отключить предиктивную пересылку магазина
29 btc_no Путаница типа ветки: процессор не затронут
30 IBPB_RET IBPB (см. бит 12) также очищает предиктор обратного адреса.
31 ветка_выборка Поддержка выборки в филиалах [152]
CPUID EAX=80000008h: поля размера и диапазона в EAX, ECX, EDX.
Биты ЕАХ ЭКХ ЭДКС Биты
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
  1. ^ Функция LMSLE (включение ограничения сегмента в длинном режиме) не имеет собственного флага CPUID и обнаруживается путем проверки семейства и модели ЦП. Оно было введено в AuthenticAMD Семья 0Fh Модель 14h [151] (90-нм Athlon64/Opteron) и присутствует во всех более поздних процессорах AMD, за исключением тех, у которых установлен флаг no_efer_lmsle.
  2. ^ Значение 0 указывает, что «Размер физического адреса гостя» такой же, как «Количество битов физического адреса», указанное в EAX[7:0].

EAX=8000000Ah: функции безопасной виртуальной машины.

[ редактировать ]

Этот лист возвращает информацию о функциях AMD SVM ( безопасной виртуальной машины ) в EAX, EBX и EDX.

CPUID EAX=8000000Ah: информация SVM в EAX, EBX и ECX.
Биты ЕАХ ЕВХ ЭКХ Биты
7:0 Номер версии SVM Количество доступных ASID
(идентификаторы адресного пространства)
(сдержанный) 7:0
8 (гипервизор) [а] 8
31:9 (сдержанный) 31:9
CPUID EAX=8000000Ah: флаги функций SVM в EDX.
Кусочек ЭДКС
Короткий Особенность
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 PauseFilter­Threshold 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 ExtLvtOffset­FaultChg Поведение ошибок чтения/записи для расширенных смещений LVT (адреса APIC 0x500-0x530) изменено на «Разрешено чтение», «Запись #VMEXIT». [159]
28 VmcbAddr­ChkChg Изменение проверки адреса VMCB [159]
29 BusLock­Threshold Порог блокировки автобуса
30 IdleHlt­Intercept Холостой HLT ( HLT инструкция выполняется, пока не ожидается виртуального прерывания) перехват
31 (сдержанный)
  1. ^ В ранних версиях документации AMD «Pacifica» бит 8 EAX указан как всегда нулевой бит, зарезервированный для использования гипервизором. [153]

    Более поздняя документация AMD, например #25481 «Спецификация CPUID», версия 2.18. [154] и позже, только бит указывается как зарезервированный.

    В версии 2.30 [155] и позже другой бит указан как зарезервированный для использования гипервизором: CPUID.(EAX=1):ECX[бит 31].

  2. ^ Бит 9 EDX кратко указан в некоторых старых версиях документа AMD № 25481 «Спецификация CPUID» и установлен только в некоторых AMD Bobcat . процессорах [156]

    В версии 2.28 № 25481 этот бит указан как «Ssse3Sse5Dis». [157] - в версии 2.34 он указан как удаленный из спецификации версии 2.32 под именем «SseIsa10Compat». [158]

EAX=8000001Fh: возможности зашифрованной памяти

[ редактировать ]
CPUID EAX=8000001Fh: биты функции зашифрованной памяти в EAX.
Кусочек ЕАХ
Короткий Особенность
0 Мы Безопасное шифрование памяти
1 СЭВ Безопасная зашифрованная виртуализация
2 ПейджФлешМСР Очистка страницы MSR ( C001_011Eh) поддерживается
3 САМ Зашифрованное состояние SEV
4 SEV-SNP Безопасный вложенный пейджинг SEV
5 ВМПЛ Уровни привилегий виртуальной машины
6 РМПЗАПРОС RMPQUERY инструкция поддерживается
7 ВмплССС VMPL Supervisor теневой стек Поддерживается
8 SecureTSC безопасный TSC Поддерживается
9 TscAux­Virtualization Виртуализация TSC_AUX МСР ( C000_0103) поддерживается
10 HwEnfCacheCoh Обеспечение согласованности аппаратного кэша в доменах шифрования.
11 64-битный хост Гостевое выполнение SEV разрешено только с 64-битного хоста.
12 Restricted­Injection Гости SEV-ES могут отказаться от всех инъекций событий, кроме #HV (исключение внедрения гипервизора).
13 Alternate­Injection Гости SEV-ES могут использовать зашифрованное поле VMCB для внедрения событий.
14 Дебагвирт Полная виртуализация состояния отладки поддерживается для гостей SEV-ES и SEV-SNP.
15 PreventHostIBS Запретить IBS хоста для гостя SEV-ES
16 ВТЭ Виртуальное прозрачное шифрование для SEV
17 Vmgexit­Parameter 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 AllowedSEV­features Поле ALLOWED_SEV_FEATURES_MASK в VMCB (смещение 138h) поддерживается
28 SVSMComm­PageMSR SVSM (сервисный модуль безопасной виртуальной машины) [160] ) страница связи MSR ( C001_F000h) поддерживается
29 NestedVirt­SnpMsr VIRT_RMPUPDATE ( C001_F001h) и VIRT_PSMASH ( C001_F002h) Поддерживаются MSR
30 HvInUse­WrAllowed Запись на страницу, принадлежащую гипервизору, разрешена, если она помечена как используемая.
31 Ибпбонэнтри Поддерживается IBPB при входе в виртуальную машину
CPUID EAX=8000001Fh: информация о функции зашифрованной памяти в EBX, ECX и EDX.
Биты ЕВХ ЭКХ ЭДКС Биты
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

[ редактировать ]
CPUID EAX=80000021h: биты расширенных функций в EAX.
Кусочек ЕАХ
Короткий Особенность
0 Нонестеддатабп Процессор игнорирует вложенные точки останова данных
1 FsGsKernelGsBase­NonSerializing WRMSR к FS_BASE, GS_BASE и KernelGSBase MSR не сериализуются [161]
2 LFenceAlways­Serializing LFENCE всегда выполняется сериализация отправки
3 SmmPgCfgLock Поддерживается блокировка конфигурации пейджинга SMM.
4 (сдержанный)
5 (сдержанный)
6 NullSelect­ClearsBase Загрузка селектора нулевого сегмента также очищает базу регистров целевого сегмента и ограничивает
7 UpperAddress­Ignore Поддерживается игнорирование верхнего адреса.
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]
CPUID EAX=80000021h: информация о расширенных функциях в EBX.
Кусочек ЕВХ
Короткий Особенность
11:0 МикрокодPatchSize Размер патча микрокода кратен 16 байтам. Если 0, размер патча не превышает 5568 (15C0h) байт.
31:12 (сдержанный)

EAX=8FFFFFFFh: пасхальное яйцо AMD

[ редактировать ]

Некоторые модели процессоров AMD будут для CPUID с EAX=8FFFFFFFh, возвращает строку пасхального яйца в EAX, EBX, ECX и EDX. [163] [164] Известные струны для пасхальных яиц включают:

Процессор Нить
АМД К6 NexGen‍erationAMD
АМД К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 зарезервированы.)

CPUID EAX=C0000001h: биты функций Centaur в EDX.
Кусочек ЭДКС
Короткий Особенность
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 абзац СТК присутствует
  1. ^ Перейти обратно: а б с д На процессорах VIA Nehemiah и Antaur ( CentaurHauls Только семейство 6, модель 9), [169] биты 0,1,4,5 используются по-разному:

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

См. также

[ редактировать ]
  1. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32» (PDF) . Intel.com . Проверено 11 апреля 2013 г.
  2. ^ «Обнаружение процессоров Intel — определение поколения системного процессора» . Rcollins.org . Проверено 11 апреля 2013 г.
  3. ^ «LXR linux-old/arch/i386/kernel/head.S» . Lxr.linux.no. Архивировано из оригинала 13 июля 2012 г. Проверено 11 апреля 2013 г.
  4. ^ Перейти обратно: а б с Дебби Уайлс, Идентификация ЦП , архивировано 4 июня 2006 г.
  5. ^ B-CoolWare, TMi0SDGL библиотека обнаружения ЦП/ФПУ x86 с исходным кодом, версия 2.15, июнь 2000 г. - см. /SOURCE/REALCODE.ASM для получения большой коллекции процедур обнаружения ЦП x86 до CPUID. Архивировано 14 марта 2023 г.
  6. ^ «CPUID, EAX=4 — Странные результаты (решено)» . Software.intel.com . Проверено 10 июля 2014 г.
  7. ^ @InstLatX64 (28 февраля 2019 г.). «Первая встреча с «GenuineIotel» (o после I вместо n)» ( твит ) – через Twitter .
  8. ^ «Дамп GenuineIotel CPUID для Intel Xeon E3-1231» . instlatx64 .
  9. ^ instlatx64, дамп CPUID для RDC IAD 100 . Проверено 22 декабря 2022 г.
  10. ^ Перейти обратно: а б с д smxi, Inxi Issue 197: Данные о поддержке процессоров «Эльбрус» и реализация . Проверено 23 октября 2023 года. Архивировано 23 октября 2023 года.
  11. ^ Гжегож Мазур, Идентификация процессоров x86 с поддержкой CPUID , 5 мая 1997 г. Архивировано из оригинала 24 мая 1997 г.
  12. ^ Инго Бёттчер, CPUDET.PAS v1.61 , 23 октября 1996 г. — программа идентификации ЦП, проверяющая строку «AMD ISBETTER». Архивировано 26 апреля 2024 г.
  13. ^ соргелиг (3 августа 2017 г.). «Инструкция ao486 CPUID (в коммите 43a2004)» . Гитхаб . Архивировано из оригинала 04 декабря 2023 г. Проверено 4 декабря 2023 г.
  14. ^ Перейти обратно: а б соргелиг (30 августа 2020 г.). «Обновить идентификатор процессора. · MiSTer-devel/ao486_MiSTer@82f5014» . Гитхаб . Архивировано из оригинала 04 декабря 2023 г. Проверено 4 декабря 2023 г.
  15. ^ соргелиг (30 августа 2020 г.). «Инструкция ao486 CPUID» . Гитхаб . Архивировано из оригинала 23 октября 2023 года . Проверено 4 декабря 2023 г.
  16. ^ «v586: 586-совместимое программное ядро ​​для FPGA» . Гитхаб . 6 декабря 2021 г.
  17. ^ «Опрос оборудования и программного обеспечения Steam» . store.steampowered.com . Проверено 26 июля 2022 г.
  18. ^ «Развлечение с таймерами и процессором — Джим Коуни — развлечение с процессором» . 3 марта 2021 г.
  19. ^ iXBT Labs, VIA Nano CPUID Tricks , 26 августа 2010 г. Архивировано 29 августа 2010 г.
  20. ^ IDT, Техническое описание WinChip 2A , версия 1.0, январь 1999 г., страница A-3.
  21. ^ VIA, Таблица данных C3 Nehemiah , версия 1.13, 29 сентября 2004 г., страница A-3.
  22. ^ Агнер Фог, CpuIDFake, v1.00 , 22 января 2010 г., см. «Instructions.txt». Архивировано 9 июля 2010 г.
  23. ^ Перейти обратно: а б Transmeta, Руководство программиста Crusoe BIOS , 23 января 2004 г., страницы 63–65.
  24. ^ Transmeta, Руководство программиста Efficeon BIOS, 19 августа 2003 г., раздел 8.3, стр. 148.
  25. ^ AMD, Книга данных Geode LX , pub.id. 33234H, февраль 2009 г., стр. 107. Архивировано 3 декабря 2023 г.
  26. ^ DM&P, Vortex86EX2_A9133_Master_Data_Sheet_V11_BF , 8 мая 2019 г., стр. 72.
  27. ^ «Справочник по набору команд главы 3, AL» (PDF) . Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 . Корпорация Интел. 20 декабря 2018 г. Проверено 20 декабря 2018 г.
  28. ^ Intel, Руководство разработчика семейства процессоров Pentium , 1997 г., номер заказа. 241428-005, разделы 3.4.1.2 (стр. 91), 17.5.1 (стр. 489) и приложение А (стр. 522) содержат более подробную информацию о том, как работают поле «тип процессора» и обозначение «двухпроцессорный».
  29. ^ InstLatx64, x86, x64 Задержка инструкций, задержка памяти и дампы CPUID , 30 сентября 2023 г.
  30. ^ AMD, Улучшенное семейство микропроцессоров Am486DX , pub.no. 20736 ред. B, март 1997 г., раздел 9.2.2, стр. 55. Архивировано 18 октября 2023 г.
  31. ^ AMD, Руководство пользователя микроконтроллеров ÉlanSC400 и ÉlanSC410 , pub.no. 21030, 1997, раздел 3.6.2, стр. 73. Архивировано 18 октября 2023 года.
  32. ^ Cyrix, Руководство для разработчиков BIOS 5x86 , версия 1.12, номер заказа. 92426-00, 1995 г., стр. 7.
  33. ^ Перейти обратно: а б Cyrix, Руководство по обнаружению ЦП , версия 1.01, 2 октября 1997 г., стр. 6.
  34. ^ Исходный код MiSTer ao486, rtl/ao486/defines.v , строка 70. Архивировано 23 октября 2023 г.
  35. ^ CPU-World, CPUID для Vortex86DX2 933 МГц . Архивировано 17 октября 2023 г.
  36. ^ CPU-World, CPUID для Vortex86EX2 . Архивировано 18 октября 2023 г.
  37. ^ InstLatx64, дамп CPUID Centaur CNS . Архивировано 30 мая 2023 года.
  38. ^ Джефф Этвуд, Nasty Software Hacks и CPUID Intel . Кодирующий ужас , 16 августа 2005 г.
  39. ^ Перейти обратно: а б Intel, Справочное руководство по архитектуре набора инструкций сопроцессора Intel Xeon Phi , сентябрь 2012 г., номер для заказа. 327364-001, приложение Б.8, стр. 673-674. Архивировано 4 августа 2021 года.
  40. ^ CPU-World, CPUID для Intel Itanium 2 1,50 ГГц . Архивировано 17 октября 2023 г.
  41. ^ InstLatX64, дамп CPUID 72-ядерного процессора Intel Xeon Phi 7290
  42. ^ InstLatx64, дамп CPUID 96-ядерного процессора AMD Ryzen Threadripper Pro 7995WX
  43. ^ Идентификация процессора Intel® и инструкция CPUID (PDF) , Intel, май 2002 г., заархивировано из оригинала (PDF) 17 апреля 2021 г.
  44. ^ Исходные коды ядра Linux 6.3, /arch/x86/include/asm/cpuid.h , строка 69.
  45. ^ Список рассылки gcc-patches, Исправление CPUID для IDT Winchip , 21 мая 2019 г.
  46. ^ Джефф Чаппелл, Поддержка CMPXCHG8B в 32-битном ядре Windows , 23 января 2008 г. Архивировано 30 января 2023 г.
  47. ^ AMD, Примечание по применению распознавания процессоров AMD , публикация № 20734, ред. D, январь 1997 г., стр. 13.
  48. ^ Intel, Примечание по применению AP-485 — Идентификация процессора Intel и инструкция CPUID , номер заказа. 241618-006, март 1997 г., таблица 5 на стр. 10, см. бит 10.
  49. ^ Михал Некасек, SYSENTER, Где ты? , Музей OS/2 , 20 июля 2017 г.
  50. Джефф Чаппелл, ECX из CPUID Leaf 1 , 26 января 2020 г. Архивировано 9 мая 2020 г.
  51. ^ Хуггахалли, Рам; Айер, Рави; Тетрик, Скотт (2005). «Прямой доступ к кэшу для высокоскоростного сетевого ввода-вывода». Новости компьютерной архитектуры ACM SIGARCH . 33 (2): 50–59. CiteSeerX   10.1.1.85.3862 . дои : 10.1145/1080695.1069976 . CiteSeerX : 10.1.1.91.957 .
  52. ^ Дреппер, Ульрих (2007), Что каждый программист должен знать о памяти , CiteSeerX : 10.1.1.91.957
  53. ^ Перейти обратно: а б Intel, Руководство разработчика программного обеспечения для архитектуры Itanium, версия 2.3, том 4: Набор инструкций IA-32 , май 2010 г., номер документа: 323208, таблица 2-5, страница 4:81, см. биты 20 и 30. Архивировано 15 февраля 2012 г. .
  54. ^ Intel, AP-485, Идентификация процессора и флаг инструкции CPUID , ред. 30, январь 2006 г., стр. 26
  55. ^ Михал Некасек, HTT означает гиперпоточность, верно? , Музей OS/2 , 11 декабря 2017 г.
  56. ^ «Механизмы определения того, работает ли программное обеспечение на виртуальной машине VMware» . База знаний VMware . ВМВаре . 01.05.2015. Процессоры Intel и AMD зарезервировали бит 31 ECX листа CPUID 0x1 в качестве бита присутствия гипервизора. Этот бит позволяет гипервизорам сообщать о своем присутствии гостевой операционной системе. Гипервизоры устанавливают этот бит, а физические процессоры (все существующие и будущие процессоры) устанавливают этот бит в ноль. Гостевые операционные системы могут проверять бит 31, чтобы определить, работают ли они внутри виртуальной машины.
  57. ^ Катария, Алок; Хехт, Дэн (1 октября 2008 г.). «Предложение по интерфейсу CPUID гипервизора» . LKML Архив на lore.kernel.org. Архивировано из оригинала 15 марта 2019 г. Бит 31 ECX листа CPUID 0x1. Этот бит зарезервирован Intel и AMD для использования гипервизорами и указывает на наличие гипервизора. Виртуальные процессоры (гипервизоры) устанавливают этот бит в 1, а физические процессоры (все существующие и будущие процессоры) устанавливают этот бит в ноль. Этот бит может быть проверен гостевым программным обеспечением, чтобы определить, работают ли они внутри виртуальной машины.
  58. ^ «Руководство программиста по архитектуре 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, а физические процессоры устанавливают этот бит в ноль. Этот бит может быть проверен гостевым программным обеспечением, чтобы определить, работают ли они внутри виртуальной машины.
  59. ^ Intel SDM vol 2A , номер заказа. 253666-053, январь 2015 г., с. 244
  60. ^ Intel, Справочное руководство по процессорам Itanium для разработки программного обеспечения , версия 2.0, номер заказа. 245320-003, декабрь 2001 г., стр. 110. Архивировано из оригинала 18 февраля 2004 г.
  61. ^ Intel, Идентификация процессора и инструкция по применению CPUID 485 , номер заказа. 241618-036, август 2009 г., стр. 26. Архивировано 6 октября 2023 г.
  62. ^ InstLatX64, дамп Willamette-128 CPUID . Архивировано 7 декабря 2019 года.
  63. ^ InstlatX64, дамп CPUID Intel Atom 230 . Архивировано 7 декабря 2019 года.
  64. ^ WikiChip, Боннелл . Архивировано 16 июля 2017 года.
  65. ^ Cyrix, Руководство по обнаружению ЦП Cyrix , версия 1.01, 2 октября 1997 г., стр. 13.
  66. ^ Intel, Идентификация процессора и инструкция по применению CPUID 485 , номер заказа. 241618-037, январь 2011 г., стр. 32. Архивировано 17 октября 2023 г.
  67. ^ Джефф Чаппелл, CPUID Leaf 2 , 26 января 2020 г. Архивировано 4 сентября 2023 г.
  68. ^ Intel, Справочное руководство по процессорам Itanium 2 , номер заказа. 251110-003, май 2004 г., стр. 192. Архивировано из оригинала 7 декабря 2006 г.
  69. ^ Intel, Обновление спецификации процессора Itanium 2 , номер заказа. 251141-028, ноябрь 2004 г., ошибка 6 на странице 26. Архивировано из оригинала 25 ноября 2004 г.
  70. ^ Intel, Обновление спецификаций семейства процессоров Atom C3000 , номер заказа. 336345-020, стр. 16, март 2023 г. Архивировано 7 октября 2023 г.
  71. ^ Intel, Техническое описание процессора Xeon серии 7500 , номер заказа. 323341-001, март 2010 г., стр. 150. Архивировано 8 октября 2023 г.
  72. ^ Intel, Справочное руководство по оптимизации, том 1 , номер заказа. 248966-049, январь 2024 г., глава 9.6.3.3, с. 361. Архивировано 19 апреля 2024 года.
  73. ^ Перейти обратно: а б Ши Куо (27 января 2012 г.). «Перечисление топологии процессора архитектуры Intel 64» .
  74. ^ «Перечисление процессоров и ядер с использованием CPUID | AMD» . Разработчик.amd.com. Архивировано из оригинала 14 июля 2014 г. Проверено 10 июля 2014 г.
  75. ^ «Процессоры Sandybridge сообщают неправильный номер ядра?» . Программное обеспечение.intel.com. 29 декабря 2012 г. Проверено 10 июля 2014 г.
  76. ^ «процессор, __cpuidex» . Msdn.microsoft.com. 20 июня 2014 г. Проверено 10 июля 2014 г.
  77. ^ «Архитектура x86 — CPUID» . сайт sandpile.org . Проверено 10 июля 2014 г.
  78. ^ «topology.cpp в ps/trunk/source/lib/sysdep/arch/x86_x64 – Wildfire Games» . Trac.wildfiregames.com. 27 декабря 2011 г. Архивировано из оригинала 09 марта 2021 г. Проверено 10 июля 2014 г.
  79. ^ Технология Hyper-Threading и обнаружение многоядерных процессоров
  80. ^ Intel, Справочник по программированию расширений набора команд архитектуры , номер заказа. 319433-052, март 2024 г., глава 17. Архивировано 7 апреля 2024 г.
  81. ^ Intel, Идентификация процессора Intel и инструкция CPUID (AP-485, версия 30) , номер заказа. 241618-030, январь 2006 г., стр. 19.
  82. ^ Intel, Руководство разработчика программного обеспечения для архитектуры Intel 64 и IA-32 , номер заказа. 352462-079, том 3Б, раздел 15.4.4.4, стр. 3503
  83. ^ Intel, Идентификация процессора и инструкция CPUID , номер заказа. 241618-038, апр 2012, стр.38
  84. ^ Intel, Уведомление об изменении продукта 108701 , 1 августа 2008 г. Архивировано 11 мая 2023 г.
  85. ^ Перейти обратно: а б «Влияние проблемы упорядочения памяти расширения Intel Transactional Synchronization Extension на мониторинг производительности» (PDF) . Интел . Июнь 2023. с. 8 . Проверено 8 мая 2024 г.
  86. ^ Перейти обратно: а б с Intel, Спецификация архитектуры: Модуль Intel Trust Domain Extensions (Intel TDX) , номер для заказа. 344425-001, сентябрь 2020 г., страницы 120–122. Архивировано из оригинала 29 июля 2021 г.
  87. ^ Intel, Прекращение поддержки инструкции PCOMMIT , 12 сентября 2016 г. Архивировано 23 апреля 2023 г.
  88. ^ Intel, Спецификация архитектуры AVX512-FP16 (PDF), номер документа 347407-001, июнь 2021 г. Архивировано 26 октября 2022 г.
  89. ^ Перейти обратно: а б с д «Средства по снижению побочных каналов спекулятивного исполнения» (PDF) . Версия 2.0. Интел . Май 2018 г. [январь 2018 г.]. Номер документа: 336996-002 . Проверено 26 мая 2018 г.
  90. ^ «Серия патчей IBRS [LWN.net]» .
  91. ^ Перейти обратно: а б с Intel, Спецификация гибкого возврата и доставки событий (FRED) , версия 6.1, декабрь 2023 г., номер заказа. 346446-007, стр. 14. Архивировано 22 декабря 2023 г.
  92. ^ 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.
  93. ^ LKML, Re: (PATCH v3 00/21) Включить виртуализацию CET , 16 июня 2023 г. — содержит дополнительное обсуждение того, как проблема преждевременной занятости стека CET-SSS взаимодействует с виртуализацией.
  94. ^ Перейти обратно: а б Intel, Advanced Vector Extensions 10 , версия 1.0, июль 2023 г., номер заказа. 355989-001. Архивировано 24 июля 2023 г.
  95. ^ Перейти обратно: а б Intel, Advanced Performance Extensions — Спецификация архитектуры , версия 2.0, август 2023 г., номер заказа. 355828-002, стр. 37. Архивировано 10 сентября 2023 г.
  96. ^ Перейти обратно: а б с Intel, Внедрение истории ветвей и внедрение целевой ветки внутри режима / CVE-2022-0001, CVE-2022-0002 / INTEL-SA-00598 , 4 августа 2022 г. Архивировано 5 мая 2023 г.
  97. ^ Intel, Недополнение буфера стека возврата / CVE-2022-29901, CVE-2022-28693 / INTEL-SA-00702 , 12 июля 2022 г. Архивировано 13 июля 2022 г.
  98. ^ Intel, Уведомление о выходе из асинхронного анклава и функция пользовательского листа EDECCSSA , 30 июня 2022 г. Архивировано 21 ноября 2022 г.
  99. ^ Ядро Linux git commit 604dc91, x86/tsc: используйте CPUID.0x16 для расчета недостающей частоты кристалла , 9 мая 2019 г. — содержит примечания по вычислению частоты Core Crystal Clock на процессорах, которые ее не указывают, и соответствующий код C.
  100. ^ Intel, SDM Volume 3A , номер заказа 253668-083, март 2024 г., глава 11.5.4, стр. 408.
  101. ^ instlatx64, дамп Spreadtrum SC9853I-IA CPUID
  102. ^ Intel, Спецификация архитектуры: Модуль Intel Trust Domain Extensions (Intel TDX) , номер заказа. 344425-005, стр. 93, февраль 2023 г. Архивировано 20 июля 2023 г.
  103. ^ Перейти обратно: а б Microsoft, Обнаружение функций и интерфейсов Hyper-V , 8 июля 2022 г. Архивировано 18 ноября 2023 г.
  104. ^ Джефф Чаппелл, HV_HYPERVISOR_INTERFACE , 10 декабря 2022 г. Архивировано 1 февраля 2023 г.
  105. ^ Документация QEMU, Улучшения Hyper-V . Архивировано 17 апреля 2024 г.
  106. ^ Исходный код ядра Linux 6.8.7, /source/arch/x86/kvm/cpuid.c , строки 1482-1488.
  107. ^ Документация по ядру Linux, биты KVM CPUID . Архивировано 22 августа 2022 года.
  108. ^ Исходный код ядра Linux 6.8.7, /arch/x86/kvm/hyperv.c, строка 2793.
  109. ^ Документация по ядру Linux, поддержка виртуализации: 4.118 KVM_GET_SUPPORTED_HV_CPUID . Архивировано 26 марта 2024 г.
  110. ^ FreeBSD коммит 560d5ed , 28 июня 2013 г., см. файл /sys/amd64/vmm/x86.c, строка 48. Архивировано 22 апреля 2024 г.
  111. ^ Исходный код HyperKit, /src/lib/vmm/x86.c, строка 42 , 8 мая 2021 г.
  112. ^ Xen, Интерфейс CPUID для Xen . Архивировано 22 апреля 2024 г.
  113. ^ Исходный код QEMU, fb/target/i386/cpu.c, строка 6475 , 18 марта 2024 г.
  114. ^ VMWare, Механизмы определения того, работает ли программное обеспечение на виртуальной машине VMware , 1 мая 2015 г. Архивировано 18 июня 2023 г.
  115. Project ACRN, Виртуализация CPUID , 20 октября 2022 г. Архивировано 25 марта 2023 г.
  116. ^ Документация VirtualBox, 9.30 Паравиртуализированная отладка . Архивировано 22 апреля 2024 г.
  117. ^ QNX, Гипервизор — проверка гостевой среды , 25 марта 2022 г. Архивировано 22 апреля 2024 г.
  118. ^ Исходный код NetBSD, /sys/dev/nvmm/x86/nvmm_x86_vmx.c, строка 1430 , 6 ноября 2023 г.
  119. ^ Исходный код OpenBSD, /sys/arch/amd64/include/vmmvar.h, строка 24 , 9 апреля 2024 г.
  120. ^ Документация по гипервизору Siemens Jailhouse, Hypervisor-interfaces.txt, строка 39 , 27 января 2020 г. Архивировано 5 июля 2024 г.
  121. ^ Исходный код Intel HAXM, /core/cpuid.c, строка 979 , 20 января 2023 г. Архивировано 22 апреля 2024 г.
  122. ^ Исходный код Intel KGT (надежная ветвь), /vmm/vmexit/vmexit_cpuid.c, строки 17–75 , 15 мая 2019 г.
  123. ^ Исходный код ядра Linux v5.18.19, /source/drivers/visorbus/visorchipset.c, строка 28.
  124. ^ Н. Мур, virt: Поддержка обнаружения гостей LMHS SRE # 25594 , 1 декабря 2022 г. — предоставленный Lockheed Martin запрос на включение для systemd с добавлением строки идентификатора гипервизора CPUID для гипервизора LMHS SRE. Архивировано 23 апреля 2024 г.
  125. ^ Спецификация CPUID, публикация № 25481, версия 2.34 (PDF) , AMD , сентябрь 2010 г., заархивировано из оригинала (PDF) 18 августа 2022 г.
  126. ^ Исходный код ядра Linux
  127. ^ AMD, Техническое описание процессора AMD-K6 , номер заказа. 20695H/0, март 1998 г., раздел 24.2, стр. 283
  128. ^ AMD, Руководство по версии процессора AMD-K6 , номер для заказа. 21846H/0, июнь 1999 г., раздел 3.2.1, стр. 17
  129. ^ Intel, Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 , номер заказа. 325462-079, март 2023 г., таблица 3-8 на стр. 3-238.
  130. ^ Спецификация облегченного профилирования (PDF) , AMD , август 2010 г., заархивировано из оригинала (PDF) 27 ноября 2012 г. , получено 3 апреля 2013 г.
  131. ^ Cyrix, Руководство по обнаружению ЦП Cyrix , версия 1.01, 2 октября 1997 г., стр. 12
  132. ^ AMD, Справочник процессоров Geode GX1 , версия 5.0, декабрь 2003 г., страницы 202 и 226. Архивировано 20 апреля 2020 г.
  133. ^ Transmeta, Распознавание процессора , 7 мая 2002 г., стр. 5
  134. ^ Перейти обратно: а б 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 г.
  135. ^ AMD, Family 10h BKDG , документ №. 31116, ред. 3.62, 11 янв. 2013 г., с. 388 — перечисляет бит NodeId. Архивировано 16 января 2019 года.
  136. ^ AMD, Руководство программиста по архитектуре AMD64, том 3 , паб. нет. 24594, ред. 3.20, май 2013 г., стр. 579 — указан бит StreamPerfMon.
  137. ^ «Идентификация процессора Intel и инструкция CPUID» (PDF) . Скачать.intel.com. 06 марта 2012 г. Проверено 11 апреля 2013 г.
  138. ^ InstLatx64, дамп CPUID Vortex86DX3 , 27 сентября 2021 г. Архивировано 21 октября 2021 г.
  139. ^ InstLatx64, дамп CPUID AMD Ryzen 7 6800HS , 21 февраля 2022 г. Архивировано 24 марта 2023 г.
  140. ^ Чипсы и сыр, Почему нельзя доверять CPUID , 27 октября 2022 г. Архивировано 3 ноября 2022 г.
  141. ^ AMD, Сборник данных Geode LX , pub.id. 33234H, февраль 2009 г., стр. 207.
  142. ^ InstLatx64, 2x 24-ядерный дамп Montage Jintide C2460 CPUID
  143. ^ InstLatx64, 24-ядерного процессора Intel Xeon Platinum 8160 2 дампа CPUID
  144. ^ InstLatx64, Zhaoxin KaiXian ZX-C+ C4580 дамп CPUID
  145. ^ InstLatx64, дамп VIA Eden X4 C4250 CPUID
  146. ^ Cyrix, Примечание по применению 112: Руководство по обнаружению ЦП Cyrix , стр. 17, 21 июля 1998 г.
  147. ^ Instlatx64, дамп CPUID VIA Cyrix III "Samuel"
  148. ^ AMD, BKDG для процессоров семейства AMD 10h , pub.no. 31116, ред. 3.62, 11 января 2013 г., страница 392. Архивировано 16 января 2019 г.
  149. ^ Перейти обратно: а б с д AMD, PPR Для процессоров AMD Family 19h Model 61h rev B1 , паб.номер. 56713, ред. 3.05, 8 марта 2023 г., страницы 99–100. Архивировано 25 апреля 2023 г.
  150. ^ AMD, BKDG для процессоров семейства AMD 16h, модели 00-0Fh , pub.no. 48571, ред. 3.03, 19 февраля 2015 г., страница 482. Архивировано 16 января 2019 г.
  151. ^ 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 г.).
  152. ^ AMD, PPR для процессоров семейства AMD 19h, модель 01h, редакция B1, том 1 из 2 , номер документа. 55898, ред. 0.50, 27 мая 2021 г., стр. 98 — указан бит выборки ветвей. Архивировано 24 июля 2022 г.
  153. ^ AMD, Технология виртуализации AMD64 под кодовым названием «Pacifica» , публикация №. 33047, ред. 3.01, май 2005 г., приложение B, стр. 81. Архивировано 13 июня 2011 г.
  154. ^ AMD, спецификация CPUID , публикация № 25481, версия 2.18, январь 2006 г., стр. 18.
  155. ^ AMD, спецификация CPUID , публикация № 25481, версия 2.34, сентябрь 2010 г., страницы 5 и 11.
  156. ^ Instlatx64, дамп CPUID AMD E-350 - установлен CPUID.(EAX=8000000A):EDX[9].
  157. ^ AMD, спецификация CPUID , публикация № 25481, версия 2.28, апрель 2008 г., стр. 21.
  158. ^ AMD, спецификация CPUID , публикация № 25481, версия 2.34, сентябрь 2010 г., стр. 5 - указано, что «SseIsa10Compat» был исключен в ноябре 2009 г.
  159. ^ Перейти обратно: а б AMD, PPR для процессоров семейства AMD 19h, модель 61h, ревизия B1 , номер документа. 56713, ред. 3.05, 8 марта 2023 г., страница 102. Архивировано 25 апреля 2023 г.
  160. ^ AMD, Сервисный модуль безопасной виртуальной машины для гостей SEV-SNP , pub.no #58019, версия 1.00, июль 2023 г., стр. 13. Архивировано 5 августа 2023 г.
  161. ^ Перейти обратно: а б AMD, PPR для процессоров семейства AMD 19h, модель 61h, ревизия B1 , номер документа. 56713, ред. 3.05, 8 марта 2023 г., страница 116. Архивировано 25 апреля 2023 г.
  162. ^ Перейти обратно: а б с д и AMD, Техническое обновление относительно спекулятивного переполнения стека возвратов , версия 2.0, февраль 2024 г. Архивировано 12 апреля 2024 г.
  163. ^ Ферри, Питер. «Атаки на эмуляторы виртуальных машин» (PDF) . Симантек . Расширенное исследование угроз Symantec. Архивировано из оригинала (PDF) 7 февраля 2007 г. Проверено 15 марта 2017 г.
  164. ^ Sandpile, CPUID архитектуры x86 . Проверено 22 декабря 2022 г.
  165. ^ instlatx64, дамп CPUID AMD A4-5000 , содержит строку «HELLO KITTY» для листа CPUID. 8FFFFFFFh. Проверено 22 декабря 2022 г.
  166. ^ IDT, Техническое описание процессора WinChip 2B , версия 0.9, апрель 1999 г., глава 3.3.3, стр. 31.
  167. ^ VIA, Руководство по программированию PadLock, ред. 1.66, 4 августа 2005 г., страница 5. Архивировано из оригинала 26 мая 2010 г.
  168. ^ Исходники ядра OpenEuler 1.0 LTS, /arch/x86/include/asm/cpufeatures.h, строки 147–178. Архивировано 30 июля 2023 г.
  169. ^ VIA, Техническое описание процессора C3 Nehemiah , версия 1.13, 29 сентября 2004 г., стр. 21
  170. ^ «GCC-зеркало/GCC» . Гитхаб . 13 марта 2022 г.
  171. ^ «Информационный центр АРМ» . Infocenter.arm.com . Проверено 11 апреля 2013 г.
  172. ^ «Коды версий процессора и константы SRM» . Архивировано из оригинала 8 сентября 2014 г. Проверено 8 сентября 2014 г.
  173. ^ Перейти обратно: а б «Техническое руководство по IBM System z10 Enterprise Class» (PDF) .
  174. ^ «Архитектура MIPS32 для программистов, том III: Архитектура привилегированных ресурсов MIPS32» (PDF) . MIPS Technologies, Inc. 12 марта 2001 г.
  175. ^ «Архитектура операционной среды PowerPC, книга III» (PDF) .
  176. ^ С. Дарвиш, Ахмед. «[ОБЪЯВЛЕНИЕ] x86-cpuid.org: машиночитаемый репозиторий CPUID» . Архив списка рассылки ядра Linux . Проверено 20 июля 2024 г.

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fbbb1c5449019dfde0f42e1328f9d410__1722586440
URL1:https://arc.ask3.ru/arc/aa/fb/10/fbbb1c5449019dfde0f42e1328f9d410.html
Заголовок, (Title) документа по адресу, URL1:
CPUID - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)