第 2 章 NFV 性能注意事项
要使网络功能虚拟化(NFV)解决方案非常有用,其虚拟化功能必须满足或超过物理实施的性能。红帽的虚拟化技术基于高性能基于内核的虚拟机(KVM)管理程序,在 OpenStack 和云部署中很常见。
Red Hat OpenStack Platform director 配置 Compute 节点以强制资源分区和微调,以实现客户机虚拟网络功能(VNF)的线率性能。NFV 用例中的关键性能因素包括吞吐量、延迟和迭代。
您可以使用数据平面开发套件(DPDK)加速虚拟机,启用物理 NIC 和虚拟机之间的高性能数据包切换。OVS 2.10 嵌入了对 DPDK 17 的支持,并包括对 vhost-user 多队列的支持,从而允许扩展性能。OVS-DPDK 为虚拟客户机 VNF 提供线级性能。
单根 I/O 虚拟化(SR-IOV)网络可提高性能,包括提高了特定网络和虚拟机的吞吐量。
性能调优的其他重要功能包括巨页、NUMA 对齐、主机隔离和 CPU 固定。VNF 类别需要大页面和仿真程序线程隔离来提高性能。主机隔离和 CPU 固定提高了 NFV 性能,并防止不必要的数据包丢失。
2.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 上使用?
2.1.1. NUMA 节点示例
下图显示了双节点 NUMA 系统的示例,以及 CPU 内核和内存页面可用的方式:
图 2.1. 示例:双节点 NUMA 系统
只有在来自 NUMA 节点 0 中的 VM1 中存在一个 NUMA 节点 1 中的 CPU 内核时,才可通过 Interconnect 访问远程内存。在这种情况下,NUMA 节点 1 的内存充当 VM1 第三个 CPU 内核的本地(例如,如果 VM1 在上图中使用 CPU 4 分配),但同时充当同一虚拟机其他 CPU 内核的远程内存。
2.1.2. NUMA 感知实例
您可以将 OpenStack 环境配置为使用 NUMA 架构的系统上的 NUMA 拓扑感知。在虚拟机(VM)中运行客户机操作系统时,涉及两个 NUMA 拓扑:
- 主机物理硬件的 NUMA 拓扑
- 向客户端操作系统公开的虚拟硬件的 NUMA 拓扑
您可以通过将虚拟硬件与物理硬件 NUMA 拓扑保持一致来优化客户端操作系统的性能。