第 5 章 NFV 性能注意事项

要使网络功能虚拟化(NFV)解决方案非常有用,其虚拟化功能必须满足或超过物理实施的性能。红帽的虚拟化技术基于高性能基于内核的虚拟机(KVM)管理程序,在 OpenStack 和云部署中很常见。

5.1. CPU 和 NUMA 节点

在以前的版本中,x86 系统上的所有内存都会被系统中所有 CPU 相等访问。这会导致内存访问时间相同,无论系统中的 CPU 正在执行该操作,并被称为 Uniform Memory Access (UMA)。

在非统一内存访问(NUMA)中,系统内存被分成名为 nodes (分配给特定 CPU 或套接字)的区域。对 CPU 本地访问的内存比连接到该系统上的远程 CPU 的内存要快。通常,NUMA 系统上的每个套接字都有一个本地内存节点,其内容可以比节点本地到另一个 CPU 的内存或所有 CPU 共享的总线上的内存快。

同样,物理 NIC 放置在 Compute 节点硬件上的 PCI 插槽中。这些插槽连接到与特定 NUMA 节点关联的特定 CPU 套接字。为获得最佳性能,请将您的数据路径 NIC 连接到 CPU 配置(SR-IOV 或 OVS-DPDK)中的同一 NUMA 节点。

NUMA 丢失的性能影响显著,通常从 10% 的性能命中或更高性能开始。每个 CPU 套接字可以有多个 CPU 内核,这些内核被视为用于虚拟化目的的独立 CPU。

提示

有关 NUMA 的更多信息,请参阅 NUMA 是什么以及如何在 Linux 上使用?

5.1.1. NUMA 节点示例

下图显示了双节点 NUMA 系统的示例,以及 CPU 内核和内存页面可用的方式:

OpenStack NUMA Topology 39825 0416 ADF
注意

只有在来自 NUMA 节点 0 中的 VM1 中存在一个 NUMA 节点 1 中的 CPU 内核时,才可通过 Interconnect 访问远程内存。在这种情况下,NUMA 节点 1 的内存充当 VM1 第三个 CPU 内核的本地(例如,如果 VM1 在上图中使用 CPU 4 分配),但同时充当同一虚拟机其他 CPU 内核的远程内存。

5.1.2. NUMA 感知实例

您可以将 OpenStack 环境配置为使用 NUMA 架构的系统上的 NUMA 拓扑感知。在虚拟机(VM)中运行客户机操作系统时,涉及两个 NUMA 拓扑:

  • 主机物理硬件的 NUMA 拓扑
  • 向客户端操作系统公开的虚拟硬件的 NUMA 拓扑

您可以通过将虚拟硬件与物理硬件 NUMA 拓扑保持一致来优化客户端操作系统的性能。