在我的一个 KVM 客户机中,当我输入以下命令时,我得到以下信息
/sbin/lsmod | grep vi
virtio_balloon 3692 0
那么这是否意味着我正在使用 virtio?
更新:
当我输入
cat "/boot/config-`uname -r`" | grep -i vir
我可以看到
CONFIG_PARAVIRT_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_PARAVIRT_CLOCK=y
# CONFIG_PARAVIRT_DEBUG is not set
CONFIG_VIRT_TO_BUS=y
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
# CONFIG_FB_VIRTUAL is not set
CONFIG_SND_VIRMIDI=m
CONFIG_SND_VIRTUOSO=m
# CONFIG_DEBUG_VIRTUAL is not set
CONFIG_VIRTUALIZATION=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=m
听起来我已经在使用 virtio 了?
答案1
KVM 为几种硬件提供了半虚拟化驱动程序;这个特定的硬件是内存气球驱动程序。
具体来说,virtio_net
在使用 virtio 网络驱动程序时以及virtio_blk
在使用块设备(磁盘)驱动程序时,您应该会看到。在后一种情况下,您的磁盘将/dev/vda
不是/dev/sda
。
在您的情况下,virtio 磁盘和网络驱动程序被编译到内核中,而不是作为模块,因此您不会看到它们lsmod
。
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
您的系统中还存在其他几个不太重要的 virtio 驱动程序,它们被直接编译到内核中(例如 VIRTIO_PCI,半虚拟化 PCI 总线)。
答案2
如您所见,您有:
CONFIG_VIRTIO_BALLOON=m
这意味着它被编译为一个模块,因此可以通过 lsmod 看到。此外,您还有:
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
这意味着它们是在内核中编译的,因此 lsmod 不会报告它们。
因此,您的客户机拥有以下 virtio 驱动程序:
- blk:块设备,又称磁盘;
- net:网络设备;
- balloon:内存膨胀,即分配给所有客户机的最大内存总量可能大于物理主机内存。当然,只要不是所有客户机都消耗各自的内存,这种方法就可行。KVM 使用一个客户机的未使用内存来满足另一个要求更高的客户机(又称 balloon)的需要。
- pci:我猜是 PCI 直通支持,不过我不太确定。使用 VirtualBox,暴露给客户机的以太网控制器使用此驱动程序,而不是 virtio_net 驱动程序。
- 控制台:您可以在 KVM 中配置串行控制台。这可以通过 virsh concole 域进行访问。这是一项很棒的功能(对于 Linux 客户机而言)。当网络崩溃并阻止 SSH 访问时,即使没有 VNC(因此可用的带宽和 C&P 最少),您也几乎可以完全访问 VM。
- 戒指:不知道这是什么