Poick

This is a cached version of https://www.freebsd.org/ru/status/report-2025-10-2025-12/bhyve-cpuid/ from 2/28/2026, 3:44:37 PM.

The FreeBSD Project

FreeBSD is an operating system used to power modern servers, desktops, and embedded platforms.

О FreeBSD Возможности При­ло­же­ния Ад­ми­ни­стра­ция Но­во­сти Мероприятия Прес­са Ил­люс­тра­ции По­жертво­ва­ния Юридическая информация Политика кон­фи­ден­ци­аль­нос­ти Полный контроль CPUID для bhyve Контакт: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org> Введение Ядра операционных систем, а также некоторые пользовательские библиотеки и программы часто должны знать, на какой модели CPU они работают и какие архитектурные возможности доступны для использования. На платформах на базе x86 для запроса всей этой информации у CPU можно использовать инструкцию CPUID. В среде виртуальной машины не вся информация, сообщаемая хост-процессором, должна быть доступна гостевой ОС, некоторую другую информацию о CPU, например, о топологии системы, необходимо изменить в соответствии с конфигурацией ВМ, и также существует некоторая дополнительная информация, которую необходимо сообщать, но которую не поддерживает ни один реальный CPU, например, идентификация гипервизора. Таким образом, в рамках своей обычной работы в качестве гипервизора bhyve эмулирует инструкцию x86 CPUID для своих гостевых ВМ. В настоящее время большая часть информации CPUID от хост-процессора передаётся гостевой ВМ с маскированием некоторых функций, а также сообщается синтетическая информация о гипервизоре, его возможностях и его конфигурации. Ничего из этого в настоящее время нельзя явно настроить в bhyve. Мотивация Полный контроль над информацией CPUID, эмулируемой для гостевой ВМ, имеет множество важных вариантов использования: Миграция ВМ Для миграции работающей или приостановленной ВМ между разными хост-системами ВМ обычно требуется, чтобы обе задействованные хост-системы работали на одном и том же или по крайней мере совместимом по функциям семействе, модели и степпинге хост-процессоров. Даже незначительные различия в модели и степпинге CPU могут привести к различиям в доступном наборе функций. Контроль над информацией CPUID для гостевой ВМ позволяет администратору ограничить ВМ использованием общего подмножества функций CPU, разделяемого всеми хост-системами ВМ, на которых ВМ потенциально может работать, что также может быть основано на абстрактном уровне архитектуры x86, а не на реальной модели CPU. В настоящее время это поддерживается QEMU/KVM на Linux, и эквивалентная поддержка в bhyve является ключевым шагом на пути к поддержке полнофункциональной живой миграции ВМ. Фиксированная модель CPU Некоторое программное обеспечение проверяет семейство/модель/степпинг CPU, а также строку бренда CPU по причинам совместимости ПО. Изменение этих параметров из-за миграции ВМ или изменения оборудования в хост-системе ВМ было бы обнаружено и могло бы считаться системным изменением, потенциально отключая лицензию на проприетарное ПО. Возможность использовать предопределённую модель CPU, будь то на основе реального CPU или архитектурного подмножества, полностью решила бы эту проблему. Изменение сигнатуры гипервизора Некоторое программное обеспечение, такое как драйверы Nvidia, проверяет сигнатуру гипервизора на соответствие определённым известным значениям. Bhyve идентифицирует себя как "bhyve bhyve ", в то время как KVM сообщает "KVMKVMKVM\0\0\0". Хотя реализация переключателя в командной строке для изменения сигнатуры гипервизора bhyve для каждой ВМ была бы возможна и без полного контроля CPUID, реализация этой функции с использованием полного контроля CPUID была бы более естественной и привела бы к более чистой архитектуре. Маскирование функций и изменение архитектуры (даунгрейд / апгрейд) Возможность легко понижать или повышать модель CPU или маскировать отдельные биты функций может предоставить преимущества для разработки и тестирования операционных систем и приложений. Текущее состояние контроля CPUID для bhyve Базовая реализация части ядра vmm для контроля CPUID доступна в bhyve на illumos уже несколько лет. Этот код был написан Oxide для использования со своим гипервизором Propolis, который основан на компонентах ядра FreeBSD/bhyve, перенесённых на illumos без использования какого-либо пользовательского кода bhyve. Как и все улучшения bhyve, сделанные на illumos, код ядра vmm для контроля CPUID имеет двойную лицензию CDDL и BSD. Он был перенесён на bhyve во FreeBSD под лицензией BSD. В качестве доказательства концепции в пользовательском пространстве bhyve были реализованы новые параметры конфигурации для контроля CPUID, демонстрирующие потенциал полного контроля CPUID в bhyve. Обзор проекта Текущая работа над этим проектом направлена на интеграцию существующей концептуальной работы во FreeBSD и добавление следующих функций для удобства использования: удобный метод конфигурации для переопределения отдельных битов, частей или даже целых функций CPUID по мере необходимости, сохраняя при этом остальную информацию CPUID хоста или предопределённую конфигурацию CPUID удобный метод конфигурации для сигнатуры гипервизора, сообщаемой bhyve набор предопределённых конфигураций CPUID на основе общих уровней архитектуры x86, возможно, также включающий набор данных CPUID для нескольких реальных моделей CPU, и удобный метод конфигурации для выбора одной из них для ВМ Спонсор: Фонд FreeBSD Дата последнего изменения: 24 февраля 2026 г. выполнил Vladlen Popolitov