我在 VMware Enterprise 5.5 中有一个 Linux 场。这些虚拟机(大部分)是 64 位 amd64 Debian Jessie 服务器,带有 SysVinit,而不是 systemd。 VM 有打开虚拟机工具安装。
半虚拟驱动程序是虚拟化平台不必模拟其他设备的驱动程序,例如 Intel E1000 NIC 或 LSI Logic SAS SCSI 适配器。这些半虚拟驱动程序基本上通过放弃模拟层来消除中间人,这通常会导致性能显着提高。
可以lspci | egrep "PVSCSI|VMXNET"
看出,以太网和磁盘现在已实现半虚拟化:
3:00.0 Serial Attached SCSI controller: VMware PVSCSI SCSI Controller (rev 02)
0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
对 is进行 cat 操作/proc/interrupts
很容易表明存在与它们相关的中断以及半虚拟化取决于的功能:
56: 6631557 0 PCI-MSI 1572864-edge vmw_pvscsi
57: 72647654 0 PCI-MSI 5767168-edge eth0-rxtx-0
58: 44570979 0 PCI-MSI 5767169-edge eth0-rxtx-1
59: 0 0 PCI-MSI 5767170-edge eth0-event-2
60: 1 0 PCI-MSI 129024-edge vmw_vmci
61: 0 0 PCI-MSI 129025-edge vmw_vmci
vmw_vmci:虚拟机通信接口。它通过 VMCI 虚拟设备实现虚拟环境中主机和来宾之间的高速通信。
使用起来似乎很明显伊拓它们经常用于监控中等繁忙的启用 SSL 的 Web 前端:
INT NAME RATE MAX
57 [ 0 0 ] 142 Ints/s (max: 264)
58 [ 0 0 ] 155 Ints/s (max: 185)
59 [ 0 0 ] 119 Ints/s (max: 419)
60 [ 0 0 ] 133 Ints/s (max: 479)
我很确定irqbalance
在虚拟机中不需要CPU亲和力,以及在单核虚拟机中。我们手动配置了 CPU 亲和力的两台服务器确实有特殊的需求,在一般情况下,文献说irqbalance
应该做得更好。
所以我的问题是,什么时候中断平衡是否需要通过多 CPU Linux VM 的不同 CPU 分配中断负载?
注意:我已经查阅了一些论文,以及相关的(已注明日期)服务器故障帖子里,他们也不是很清楚。我还发现一篇学术论文对 Xen 表达了类似的担忧。vBalance:使用中断负载平衡提高 SMP 虚拟机的 I/O 性能
答案1
如果以下所有条件成立
- 虚拟机中存在多个 CPU
- 虚拟机(通过主机)固定到具体专用CPU(不与其他 VM 共享),VM CPU 与主机 CPU 进行 1-1 映射
- 虚拟机有投入的(例如通过直通)访问存储/网络硬件
那么虚拟机内 IRQ 重新平衡仍然有意义。
如果虚拟机内没有多个 CPU,虚拟机内 IRQ 重新平衡显然没有任何作用。对于其他点,事情变得很棘手,因为虚拟机所在的“真实”CPU 可能会在其下方移动,并且虚拟机的操作系统不知道哪个虚拟中断将由哪个真实 CPU 处理。此外,如果真实的 CPU 在多个虚拟机之间共享,您实际上并不知道它正在做什么其他工作,也不知道虚拟 CPU 何时会得到服务,因此“虚拟重新平衡”实际上可能会让事情变得更糟。 ..
PS:两年前也不算老了!有些信息是永恒的...