![在大多数 Linux 系统上,为什么即使不使用虚拟化也会加载 KVM 内核模块?](https://linux22.com/image/164989/%E5%9C%A8%E5%A4%A7%E5%A4%9A%E6%95%B0%20Linux%20%E7%B3%BB%E7%BB%9F%E4%B8%8A%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%8D%B3%E4%BD%BF%E4%B8%8D%E4%BD%BF%E7%94%A8%E8%99%9A%E6%8B%9F%E5%8C%96%E4%B9%9F%E4%BC%9A%E5%8A%A0%E8%BD%BD%20KVM%20%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%EF%BC%9F.png)
最近,我开始将 KVM/Qemu 作为 VirtualBox 的替代品,并惊讶地发现这 3 个模块似乎会自动加载到我检查的几乎每个 Linux 系统上:
[pgoetz@frog etc]$ lsmod | grep kvm
kvm_intel 311296 0
kvm 778240 1 kvm_intel
irqbypass 16384 1 kvm
之所以令人震惊,是因为这些系统都没有使用 kvm/Qemu 虚拟化(尽管其中有几个系统是为 VirtualBox 设置的)。我检查的系统运行的是 Arch linux、Ubuntu 18.04、Ubuntu 19.10 和 CentOS 7.4。 Ubuntu 19.10 是全新的桌面安装,没有添加任何软件。我发现唯一没有加载 KVM 模块的系统是 Ubuntu 18.04.2(替代)服务器安装。
大量的谷歌搜索尚未揭示加载这些模块的原因。作为实验,我尝试在 Ubuntu 19.10 机器上的 BIOS 中禁用 Intel VT,它仍然加载 kvm 模块(但不是 kvm_intel)!
加载这个模块可能不会有什么坏处,但我很好奇这个机制:它是如何/为什么在启动时加载的?
答案1
要确定自动加载模块的原因,最好查看模块的别名:
$ sudo modinfo kvm-intel|grep alias:
alias: cpu:type:x86,ven*fam*mod*:feature:*0085*
$ sudo modinfo kvm-amd|grep alias:
alias: cpu:type:x86,ven*fam*mod*:feature:*00C2*
这意味着它kvm-intel
被加载到具有支持功能 85h 的 CPU 的系统上(X86_FEATURE_VMX
),并且kvm-amd
在具有支持功能 C2h 的 CPU 的系统上(X86_FEATURE_SVM
)。