CPUID: что это такое и зачем нужна эта инструкция процессора

CPUID — это машинная инструкция процессоров архитектуры x86 и x86-64, которая позволяет программе напрямую запросить у процессора сведения о нём: производителя, модель, степпинг, количество ядер и перечень поддерживаемых технологий. Именно через неё утилиты вроде CPU-Z или HWiNFO показывают вам название чипа и список инструкций вроде AVX или AES-NI — никаких датчиков и внешних запросов для этого не требуется.

Инструкция появилась ещё в процессорах Intel Pentium и поздних моделях 486, а затем стала стандартом для всех x86-совместимых чипов, включая продукцию AMD. До её появления программам приходилось определять тип процессора косвенными трюками — например, анализируя поведение флагов процессора, что было ненадёжно. CPUID решила эту задачу раз и навсегда.

Как работает инструкция CPUID

Механизм вызова устроен предельно просто: программа помещает номер запроса (его называют листом, или leaf) в регистр EAX, иногда уточняя подзапрос в регистре ECX, и выполняет команду CPUID. Процессор в ответ заполняет регистры EAX, EBX, ECX и EDX битовыми полями с информацией. Никаких привилегий для этого не нужно — инструкция доступна любому приложению, включая обычные пользовательские программы.

Разные номера листов возвращают разные категории данных. Базовые листы отвечают за идентификацию и функции, а так называемые расширенные (с номерами от 0x80000000) — за дополнительные сведения, например полное маркетинговое название процессора в виде текстовой строки.

Пример вызова на языке ассемблера выглядит так:

mov eax, 0

cpuid

; после выполнения EBX, EDX, ECX содержат строку производителя

Какую информацию возвращает CPUID

Объём данных зависит от конкретной модели процессора: современные чипы поддерживают больше листов, чем старые. Тем не менее базовый набор сведений доступен практически на любом x86-процессоре последних десятилетий.

  • 🔧 Строка производителяGenuineIntel для Intel или AuthenticAMD для AMD, возвращается листом 0.
  • 🧬 Family, Model, Stepping — числовые идентификаторы поколения и ревизии чипа, по которым ПО точно определяет модель.
  • Флаги возможностей — поддержка SSE, AVX, AES-NI, VT-x, Hyper-Threading и других технологий.
  • 🧮 Топология — количество физических ядер и логических потоков, что важно для планировщика ОС.
  • 💾 Параметры кэша и TLB — размеры и структура кэш-памяти разных уровней.
  • 🌡️ Серийный номер — существовал только на ранних Pentium III; из соображений приватности от него быстро отказались, и в современных чипах его нет.

Отдельно стоит упомянуть брендовую строку — то самое длинное название вроде «Intel Core i7-12700K», которое вы видите в диспетчере задач. Она собирается из трёх расширенных листов и хранится прямо в процессоре как текст.

Основные листы CPUID и их назначение

Ниже приведены наиболее известные листы. Точный перечень поддерживаемых листов зависит от модели процессора — программа должна сначала запросить максимальный доступный номер листа и только потом обращаться к конкретным данным.

Номер листа (EAX)Возвращаемая информация
0Максимальный базовый лист и строка производителя
1Family/Model/Stepping и базовые флаги функций
4Параметры кэш-памяти (определяется итеративно)
7Расширенные флаги: AVX2, BMI, защитные механизмы
0x80000002–0x80000004Полное маркетинговое название процессора
⚠️ Внимание: интерпретировать сырые биты CPUID «вручную» нужно строго по официальной документации Intel или AMD. Один и тот же бит у разных вендоров и поколений может означать разное, а ошибочная трактовка приведёт к неверным выводам о возможностях чипа.

Где CPUID используется на практике

Чаще всего вы сталкиваетесь с результатами работы CPUID, даже не подозревая об этом. Диспетчер задач Windows, показывающий название процессора, установщики программ, проверяющие совместимость, гипервизоры — все они опираются на эту инструкцию.

Операционная система при загрузке опрашивает процессор через CPUID, чтобы понять, какие функции можно задействовать: поддерживает ли чип аппаратную виртуализацию, сколько логических потоков доступно планировщику, какие защитные механизмы включать. Программы с оптимизациями под конкретные наборы инструкций — видеокодеки, архиваторы, библиотеки шифрования — проверяют флаги CPUID и выбирают подходящую ветку кода: быструю через AVX2 или совместимую со старыми чипами.

Ещё одна важная область — лицензирование и антипиратская защита. Связка данных CPUID вместе с другими идентификаторами железа используется для привязки лицензий к конкретному компьютеру. Правда, сам по себе CPUID для этого ненадёжен: у однотипных процессоров идентификаторы совпадают.

📊 Откуда вы узнали о CPUID?
Изучаю программирование или ассемблер
Увидел в CPU-Z или похожей утилите
Столкнулся с ошибкой совместимости ПО
Настраиваю виртуальную машину

CPUID в виртуальных машинах

Гипервизоры — VMware, Hyper-V, KVM, VirtualBox — перехватывают выполнение CPUID внутри виртуальной машины и могут подменять возвращаемые значения. Это штатный механизм, а не обход защиты: так гипервизор скрывает функции физического процессора, которые нельзя безопасно предоставить гостевой системе, или маскирует различия между хостами в кластере, чтобы виртуальную машину можно было переносить между серверами.

Из-за этого же механизма некоторые программы определяют, что запущены в виртуальной среде: гипервизоры оставляют характерные признаки в ответах CPUID, включая фирменные строки вендора виртуализации. Вредоносное ПО иногда использует эту проверку, чтобы не проявлять активность в песочницах аналитиков.

Почему в виртуалке может не работать вложенная виртуализация

Если гипервизор не пробросил флаги VT-x или AMD-V через CPUID в гостевую систему, вложенный гипервизор внутри виртуальной машины не увидит поддержку аппаратной виртуализации и откажется работать. Включение этой опции зависит от настроек конкретного гипервизора и поддержки со стороны физического процессора.

Как посмотреть данные CPUID без программирования

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

  • 🪟 Откройте диспетчер задач Windows (вкладка «Производительность» → «ЦП») — там видны название, число ядер и потоков, поддержка виртуализации.
  • 📊 Установите CPU-Z или HWiNFO — эти утилиты отображают Family/Model/Stepping, ревизию, полный список поддерживаемых инструкций и параметры кэша.
  • 🐧 В Linux выполните команду lscpu или посмотрите файл /proc/cpuinfo — система собирает эти данные через CPUID при загрузке.
  • 💻 Для разработчиков доступны встроенные функции компиляторов, например __cpuid в MSVC или аналогичные интринсики в GCC.

☑️ Проверка возможностей процессора

Выполнено: 0 / 4

Если какая-то программа отказывается запускаться с ошибкой о неподдерживаемом процессоре, первым делом сверьте её системные требования с флагами из CPU-Z. Возможная причина — отсутствие нужного набора инструкций, например AVX, и программно это не исправить: набор инструкций зашит в кремний.

⚠️ Внимание: скачивайте диагностические утилиты только с официальных сайтов разработчиков. Под видом «программ для проверки процессора» нередко распространяется вредоносное ПО.

Ограничения и подводные камни CPUID

Инструкция сообщает только то, что о себе «знает» процессор, и не всегда эта картина полная. Например, поддержка виртуализации может присутствовать в флагах CPUID, но быть отключена в BIOS/UEFI — тогда флаг есть, а функция недоступна. Обратная ситуация тоже встречается: обновление микрокода может изменять поведение некоторых функций без смены идентификаторов модели.

Ещё один нюанс — одинаковые значения CPUID у разных экземпляров одной модели процессора. Использовать эти данные как уникальный «отпечаток» конкретного компьютера нельзя: серийных номеров у современных x86-чипов нет. Для идентификации системы применяют комбинацию источников — данные материнской платы, TPM и другие идентификаторы.

Наконец, в виртуальных средах данные CPUID могут быть намеренно изменены гипервизором, поэтому диагностика «железа» изнутри виртуальной машины показывает не физический процессор хоста, а его виртуализованный профиль.

Часто задаваемые вопросы

CPUID — это вирус или системный процесс Windows?

Нет, CPUID — это не процесс и не файл, а инструкция процессора. Однако если вы увидели в системе отдельный процесс или файл с похожим названием, стоит проверить его антивирусом: вредоносные программы иногда маскируются под технические термины.

Можно ли изменить данные, которые возвращает CPUID?

На физическом компьютере — нет, значения зашиты в процессор и определяются его моделью и микрокодом. В виртуальных машинах гипервизор может подменять ответы CPUID, и это штатная функция для обеспечения совместимости.

Почему CPU-Z показывает другое название, чем наклейка на корпусе?

Утилита берёт брендовую строку напрямую из процессора через расширенные листы CPUID. Маркетинговое название на упаковке может отличаться по формату записи, но модель и поколение должны совпадать. Расхождение модели — повод проверить, тот ли процессор установлен.

Замедляет ли частый вызов CPUID работу компьютера?

Для обычных программ влияние ничтожно — инструкция выполняется очень быстро. В виртуальных средах вызовы CPUID перехватываются гипервизором, что дороже, но при типичной нагрузке разница незаметна.

Как программа узнаёт количество ядер через CPUID?

Через специальные листы топологии процессор сообщает структуру ядер и потоков. Однако корректный разбор этих данных зависит от поколения чипа и вендора, поэтому надёжнее использовать системные API операционной системы, которые уже учитывают эти различия.