Как изменить набор команд ЦП, который VirtualBox эмулировал для гостевой ОС, например отключить набор инструкций SSE4.2?

Чего я хочу добиться, так это отключить набор инструкций SSE4.2 для ЦП, который VirtualBox эмулировал для моей гостевой ОС Linux для целей отладки, даже если реальный ЦП поддерживает набор инструкций SSE4.2, на котором основан VirtualBox. Я ссылался на справочную страницу VirtualBox, есть несколько команд, которые могут быть связаны с этой проблемой:

VBoxManage setextradata "VM name" VBoxInternal/CPUM/SSE4.2 0

Вышеуказанная команда не работает.

VBoxManage list hostcpuids

Приведенная выше команда может быть использована для dumps the CPUID parameters for the host CPUs. This can be used for a more fine grained analyis of the host's virtualization capabilities. Выход:

Host CPUIDs:

Leaf no.  EAX      EBX      ECX      EDX
00000000  00000016 756e6547 6c65746e 49656e69
00000001  000906e9 02100800 7ffafbff bfebfbff
00000002  76036301 00f0b6ff 00000000 00c30000
00000003  00000000 00000000 00000000 00000000
00000004  1c004121 01c0003f 0000003f 00000000
00000005  00000040 00000040 00000003 00142120
00000006  000027f7 00000002 00000001 00000000
00000007  00000000 029c6fbf 00000000 00000000
00000008  00000000 00000000 00000000 00000000
00000009  00000000 00000000 00000000 00000000
0000000a  07300804 00000000 00000000 00000603
0000000b  00000001 00000001 00000100 00000004
0000000c  00000000 00000000 00000000 00000000
0000000d  0000001f 00000440 00000440 00000000
0000000e  00000000 00000000 00000000 00000000
0000000f  00000000 00000000 00000000 00000000
00000010  00000000 00000000 00000000 00000000
00000011  00000000 00000000 00000000 00000000
00000012  00000000 00000000 00000000 00000000
00000013  00000000 00000000 00000000 00000000
00000014  00000001 0000000f 00000007 00000000
00000015  00000002 0000011c 00000000 00000000
00000016  00000d48 00000ed8 00000064 00000000
00000017  00000d48 00000ed8 00000064 00000000
80000000  80000008 00000000 00000000 00000000
80000001  00000000 00000000 00000121 2c100800
80000002  65746e49 2952286c 726f4320 4d542865
80000003  35692029 3035372d 50432030 20402055
80000004  30342e33 007a4847 00000000 00000000
80000005  00000000 00000000 00000000 00000000
80000006  00000000 00000000 01006040 00000000
80000007  00000000 00000000 00000000 00000100
80000008  00003027 00000000 00000000 00000000
80000009  00000d48 00000ed8 00000064 00000000

Я знаю, что вывод может быть тесно связан с инструкцией CPUID X86, но я все еще не могу понять, что это Leaf no. EAX EBX ECX EDX линии измерения Какова связь между этими линиями и выходом CPUID инструкция? Я думаю, что только зная связь между этими линиями и выходом CPUID В инструкции можно правильно использовать следующую команду:

VBoxManage modifyvm --cpuid <leaf> <eax> <ebx> <ecx> <edx>

Приведенная выше команда - единственный способ, которым я знаю, который может достичь моей цели, так какова связь между выводом VBoxManage list hostcpuids, содержание сопровождается Leaf no. EAX EBX ECX EDXи вывод CPUID инструкция? Как отключить набор инструкций SSE4.2 для ЦП, который VirtualBox эмулировал для моей гостевой ОС Linux, даже если реальный ЦП поддерживает набор инструкций SSE4.2, на котором основан VirtualBox? Будет VBoxManage modifyvm --cpuid <leaf> <eax> <ebx> <ecx> <edx> достичь моей цели? И если у вас есть другой способ добиться этого, пожалуйста, скажите мне.

1 ответ

Я знаю, что прошло почти 4 года с момента публикации вопроса, но я столкнулся с той же проблемой и в конце концов нашел правильное решение:

https://docs.oracle.com/en/virtualization/virtualbox/6.0/admin/sse412passthrough.html

Чтобы обеспечить поддержку SSE 4.1/SSE 4.2 для гостей, центральный процессор должен реализовать эти наборы инструкций. Наборы инструкций доступны гостям по умолчанию, но можно отключить инструкции для определенных гостей, используя следующие команды:

VBoxManage setextradata Имя ВМ VBoxInternal/CPUM/IsaExts/SSE4.1 0

VBoxManage setextradata Имя ВМ VBoxInternal/CPUM/IsaExts/SSE4.2 0

Вторая строка, кажется, является ответом на вашу проблему. Я проверил это в своем госте, и CPU-Z больше не показывает SSE4.2 в гостевой системе после выполнения приведенной выше команды на хосте с SSE4.2. В команде в первом посте отсутствует "IsaExts".

Другие вопросы по тегам