素でVBのVMを作ると新しめのCPU拡張命令セットは入っていない。
user1@my-VirtualBox:~$ cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc
rep_good nopl xtopology nonstop_tsc cpuid pni pclmulqdq ssse3 cx16 pcid
sse4_1 sse4_2 movbe popcnt aes rdrand hypervisor lahf_lm abm 3dnowprefetch
invpcid_single pti fsgsbase bmi1 bmi2 invpcid rdseed clflushopt
md_clear flush_l1d arch_capabilities
VMを落とした状態で、ホストOS側のコマンドラインで以下のコマンドを実施。
> VBoxManage setextradata "Ubuntu-BC" VBoxInternal/CPUM/IsaExts/AVX2 1
> VBoxManage setextradata "Ubuntu-BC" VBoxInternal/CPUM/IsaExts/AVX 1
> VBoxManage getextradata "Ubuntu-BC"
Key: GUI/LastCloseAction, Value: PowerOff
Key: GUI/LastGuestSizeHint, Value: 1920,1018
Key: GUI/LastNormalWindowPosition, Value: 0,23,1920,1057,max
Key: VBoxInternal/CPUM/IsaExts/AVX, Value: 1
Key: VBoxInternal/CPUM/IsaExts/AVX2, Value: 1
Windowsの場合、グループデバイスポリシーエディタ(gpedit.msc)で
「コンピュータの構成>管理用テンプレート>Device Guard>仮想化ベースのセキュリティを有効にする」を無効にする。
さらにHyper-V仮想化を無効(bcdedit /set hypervisorlaunchtype off
)にし、VBの準仮想化IFにHyper-V以外(KVMなど)を選択。
そうすると、ゲストOSのUbuntu側で
user1@my-VirtualBox:~/Desktop$ cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc
cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid
sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch
invpcid_single pti fsgsbase bmi1 avx2 bmi2 invpcid rdseed clflushopt
md_clear flush_l1d arch_capabilities
という風に拡張命令セットが有効になった状態になる。