我正在考虑配置 KVM 虚拟机管理程序来拥有一些虚拟机。
KVM 虚拟机管理程序有 8 个物理核心(超线程有 16 个)。我想在其上创建 8 个虚拟机,但我不知道 cpu-pinning 会对其产生什么影响。
当我将每个虚拟机固定到不同的核心与将所有虚拟机固定到所有核心(通过将亲和性设置为 CPU 0-15)时,会有什么区别?
它会带来任何性能上的优势吗?
我想我会有一些缓存的好处,但如果我想将流量传输到所有虚拟机,会有什么区别吗?
答案1
CPU 锁定可确保虚拟机仅从特定 CPU 或一组 CPU 获取 CPU 时间。除非您有非常具体的理由进行锁定,否则通常无需这样做。
答案2
我确信,如果将每个 VM 固定到特定的 CPU 核心,并将虚拟机管理程序限制到一个或两个其他核心,则可以提高性能。
这将使您的 VM 能够从特定于 CPU 的 L1 和 L2 缓存中获得最佳益处,并且不会受到来自 NIC 和存储控制器的中断的困扰。
另一方面,我预计虚拟机管理程序已经努力将同一虚拟 CPU 的 CPU 事件引导到同一物理核心,我怀疑这是否是显著的性能提升如果您手动强制执行更严格的规定。
这样做的缺点也很明显,当你为虚拟客户机分配的核心数多于可用的物理核心数时,手动 CPU 固定不太可能比虚拟机管理程序做得更好。当你使用实时迁移时,情况也会很糟糕。
答案3
我认为这不是你的情况,但它可以帮助其他人。
如果您的系统有多个 NUMA 节点,则 CPU 固定非常有用。通常,它是多插槽系统。
将虚拟机的核心固定在系统的一个 CPU 上可避免使用另一个 CPU 的内存,从而减少延迟和 CPU 串扰。在同样的情况下,如果您进行 pcie 直通,这将非常有用,因为 pcie 通道仅来自一个 CPU。