我有一台配备 Intel Core i5 M 450 @ 2.40GHz 的笔记本电脑,它显然有 VT-x 但没有 VT-d。我有 Ubuntu 12.04 32 位,但希望在其上运行基于虚拟 64 位终端的 Linux。我如何知道 BIOS 是否已激活此 VT-x 功能而无需重新启动?
7 回答
您可以使用msr-tools中的rdmsr来读取寄存器IA32_FEATURE_CONTROL(地址0x3a)。为此,必须加载内核模块msr 。
在大多数 Linux 系统上:
sudo modprobe msr
sudo rdmsr 0x3a
值3
和5
意味着它已被激活。
您可以使用
sudo kvm-ok
来自cpu-checker。在逻辑最复杂的 Intel 上,kvm-ok检查是否设置了(锁定位)的第 0rdmsr 0x3a
位,也必须设置第 2 位(允许 virt 在 SMX 模式之外使用,与可信引导有关) . 如果 的输出rdmsr 0x3a
不是1或3,您将能够使用 kvm。如有必要,kvm 将设置 msr 的第 2 位,我希望 virtualbox 和其余的具有相同的逻辑。
安装 cpu-checker 并运行“kvm-ok”
如果 CPU 已启用,您应该会看到如下内容:
INFO: /dev/kvm exists
KVM acceleration can be used
否则
INFO: /dev/kvm does not exist
HINT: sudo modprobe kvm_intel
INFO: Your CPU supports KVM extensions
INFO: KVM (vmx) is disabled by your BIOS
HINT: Enter your BIOS setup and enable Virtualization Technology (VT),
and then hard poweroff/poweron your system
KVM acceleration can NOT be used
您可以使用:
sudo apt-get update
sudo apt-get install cpu-checker
kvm-ok
在linux中,您可以检查cpuinfo:
cat /proc/cpuinfo| egrep "vmx|svm"
我发现 scai 的答案在我的 AMD Ryzen 系统上不起作用。
然而,这对我来说非常有效,即使在英特尔上也是如此:
if systool -m kvm_amd -v &> /dev/null || systool -m kvm_intel -v &> /dev/null ; then
echo "AMD-V / VT-X is enabled in the BIOS/UEFI."
else
echo "AMD-V / VT-X is not enabled in the BIOS/UEFI"
fi
(在大多数发行版systool
的包中都可以找到。)sysfsutils
对于 Intel 的 VT-D / AMD 的 IOMMU,我想出了这个解决方案:
if compgen -G "/sys/kernel/iommu_groups/*/devices/*" > /dev/null; then
echo "AMD's IOMMU / Intel's VT-D is enabled in the BIOS/UEFI."
else
echo "AMD's IOMMU / Intel's VT-D is not enabled in the BIOS/UEFI"
fi
(如果没有设置 iommu 内核参数,它甚至对我有用。)
确认在 BIOS 中启用 Vt-D 的简单方法是通过 Linux 系统。如果在 BIOS 中启用了 VT-D Iommu=on
,grub.cfg
那么会自动创建以下文件夹结构来保存虚拟设备。
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
而如果未配置/启用选项 VT-D 或 Iommu 之一,则不会创建上述文件夹结构。此行为在 CentOS 7.4 和 Ubuntu 中得到确认。希望这种行为对于其他操作系统也是类似的,但这需要得到确认。