Чего я хочу добиться, так это отключить набор инструкций 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>
моей цели? И если у вас есть другой способ добиться этого, пожалуйста, скажите мне.
x86
и/илиsimd
. - person wim   schedule 10.09.2018[sse]
— это базовый/общий тег для x86 SIMD, которому люди склонны следовать, если они не следуютsse*
. - person Peter Cordes   schedule 11.09.2018prefetch
илиpopcnt
. Обратите внимание, чтоpopcnt
имеет свой собственный бит функции, отличный от SSE4.2.) Поэтому вам нужно написать несколько тестовых программ для проверки. - person Peter Cordes   schedule 11.09.2018popcnt
иcrc32
внутри виртуального бокса, если вы не можете заставить его эмулировать вместо использования HW virt. Если вам просто нужныpcmpistri xmm, xmm/mem
и другие векторные инструкции SSE4.2 XMM для сбоя, я думаю, что ваша единственная надежда внутри VBox - полностью отключить поддержку SSE в CPUID, поэтому ОС (вероятно) не включит биты управляющего регистра. - person Peter Cordes   schedule 11.09.2018crc32
ошибку на реальном оборудовании, которое ее поддерживает (голое железо или аппаратная виртуализация). Он не использует регистры XMM, поэтому я не ожидаю, что отсутствие установки этих битов в CR0 и CR4 приведет к ошибке. Если вы хотите протестировать свое программное обеспечение на (виртуальном) x86, который дает сбой наcrc32
, я думаю, вам нужна программная эмуляция или что-то вроде PIN-кода Intel, который может динамически перекомпилировать, чтобы большая часть кода работала изначально, но инструкции, которые вы хотите сбой, заменяются на инструкция-ловушка. (Я думаю, что это может сделать.) - person Peter Cordes   schedule 12.09.2018