第 5 章 NFV 性能注意事项
要使网络功能虚拟化(SVVP)解决方案非常有用,其虚拟化功能必须满足或超过物理实施的性能。红帽的虚拟化技术基于高性能内核的虚拟机(KVM)管理程序,在 OpenStack 和云部署中通用的。
5.1. CPU 和 NUMA 节点
在以前的版本中,系统中所有 CPU 都可以访问 x86 系统上的所有内存。这会导致内存访问时间相同,无论系统中的哪个 CPU 执行操作,并被称为 Uniform Memory Access (UMA)。
在非统一内存访问(NUMA)中,系统内存被分成称为 node 的区域,这些区域被分配给特定的 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 内核和内存页可用方式:
只有在来自 NUMA 节点 0 中的 VM1 中存在一个 NUMA 节点 1 中的 CPU 内核时,才可通过 Interconnect 访问远程内存。在这种情况下,NUMA 节点 1 的内存充当 VM1 第三个 CPU 内核的本地(例如,如果在上图中使用 CPU 4 分配了 VM1),但它充当同一虚拟机其他 CPU 内核的远程内存。
5.1.2. NUMA 感知实例
您可以将 OpenStack 环境配置为在具有 NUMA 架构的系统上使用 NUMA 拓扑感知。在虚拟机中运行客户机操作系统时,涉及两个 NUMA 拓扑:
- 主机物理硬件的 NUMA 拓扑
- 公开给客户端操作系统的虚拟硬件的 NUMA 拓扑
您可以通过将虚拟硬件与物理硬件 NUMA 拓扑保持一致来优化客户端操作系统的性能。