配置与 Contrail vRouter 集成的数据平面开发工具包 (DPDK)
Contrail 中的 DPDK 支持
Contrail 网络支持数据平面开发工具包 (DPDK)。DPDK 是一组用于快速数据包处理的开源库和驱动程序。DPDK 允许网络接口卡 (NIC) 将直接内存访问 (DMA) 数据包直接发送到应用程序的地址空间,允许应用程序轮询数据包,从而避免来自 NIC 的中断开销,从而实现快速数据包处理。
通过与 DPDK 集成,Contrail vRouter 每秒处理的数据包数量超过了作为内核模块运行时所能处理的数据包数量。
在 Contrail 网络中,使用 DPDK 之前,应在“基于 ansible 的配置”或“基于 helm 的配置”instances.yaml
中定义 DPDK 配置。AGENT_MODE配置指定是否在 DPDK 操作模式下配置虚拟机管理程序。host.yaml
使用 DPDK 配置 Contrail 计算节点时,相应的 yaml 文件将指定用于转发数据包的 CPU 内核数、要为 DPDK 分配的大页数以及用于 DPDK 的 UIO 驱动程序。
准备用于使用 DPDK 置备群集节点的环境文件
环境文件在调配时用于指定安装 Contrail 群集所需的所有选项,包括是否应将任何节点配置为使用 DPDK。
每个要配置 DPDK vRouter 的节点都必须在预配文件中列出一个字典条目,以及 DPDK 大页面的内存百分比和要使用的 CPU。
以下是服务器配置所需条目的说明。:
HUGE_PAGES
- 指定要为 DPDK 大页面保留的主机内存百分比。vRouter 和快速模拟器 (QEMU) 将使用保留的内存为在该主机上生成的虚拟机 (VM) 分配内存资源。注意:分配给的
HUGE_PAGES
百分比不应太高,因为主机 Linux 内核也需要内存。CPU_CORE_MASK
- 指定运行 vRouter 的 CPU 关联掩码。vRouter 将仅使用为其执行线程指定的 CPU。这些 CPU 内核将不断轮询数据包,并且它们将在 “top” 的输出中显示为 100% 繁忙。支持的格式为十六进制(例如,0xf)。
DPDK_UIO_DRIVER
- 指定要与 DPDK 一起使用的 UIO 驱动程序。支持的值包括:
vfio-pci
- 指定应使用 Linux 内核中的 vfio 模块而不是 uio。当 SR-IOV 虚拟功能用作 vrouter 的物理接口时,vfio 模块使用 IOMMU 保护内存访问。uio_pci_generic
- 指定应使用 Linux 内核中内置的 UIO 驱动程序。此选项不支持使用 SR-IOV VF。如果未指定DPDK_UIO_DRIVER则这是默认选项。mlnx
– 适用于 Mellanox ConnectX-4 和 Mellanox ConnectX-5 NIC。
对于基于 RHEL 和 Intel x710 Fortville 的 NIC,请使用 vfio-pci
而不是默认uio_pci_generic。
使用标准的 Ansible 或基于 helm 的配置过程。完成后,您的群集(其中包含使用 DPDK vRouter 实现的指定节点)即可使用。
instances.yml 中基于 ansible 的配置示例
Bms1: provider: bms ip: ip-address roles: vrouter: AGENT_MODE: dpdk CPU_CORE_MASK: “0xff” DPDK_UIO_DRIVER: uio_pci_generic HUGE_PAGES: 32000
host.yml 中用于基于 helm 的预配的示例配置
... AGENT_MODE: dpdk CPU_CORE_MASK: “0xff” DPDK_UIO_DRIVER: uio_pci_generic HUGE_PAGES: 32000
为 DPDK 创建情形
若要在启用了 DPDK 的 vRouter 虚拟机管理程序中启动 VM,应将 VM 的样式设置为使用大页面。使用大页面是使用 DPDK vRouter 的必要条件。
使用以下命令添加变种,其中 m1.large
是变种的名称。使用这种配置创建虚拟机时,OpenStack 确保虚拟机只会在启用了大页面的计算节点上生成。
# openstack flavor set m1.large --property hw:mem_page_size=large
为使用 DPDK 置备 vRouter 的计算节点启用了大页面。
如果生成的 VM 具有未启用大页面的风格,则不应在使用 DPDK 预配 vRouter 的计算节点上创建 VM。
您可以使用 OpenStack 可用区或主机聚合来排除使用 DPDK 置备 vRouter 的主机。
注意:默认情况下,预置了 2MB 的大页面。如果需要 1GB 大页面,则必须由管理员完成。
配置和验证 DPDK vRouter 的 MTU
本节介绍如何为 DPDK vRouter 配置最大传输单元 (MTU)。要设置 MTU,您需要在 contrail_vrouter_dpdk_bond.yaml 文件中指定所需的mtu
值。
network_config: - type: contrail_vrouter_dpdk name: vhost0 members: - type: interface name: em3 - type: interface name: em1 mtu: 9100 bond_mode: 2 bond_policy: 802.3ad
您可以通过运行以下命令来验证虚拟机管理程序中的配置值:
$ ip link list vhost0 39: vhost0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9100 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000 link/ether 98:03:9b:a7:3b:a0 brd ff:ff:ff:ff:ff:ff
您可以使用 vif -g
或 vif --get
命令查看 DPDK vRouter 中绑定接口的状态。
例如
# vif --get 0 Vrouter Interface Table [...] vif0/0 PCI: 0000:00:00.0 (Speed 20000, Duplex 1) NH: 4 Type:Physical HWaddr:00:1b:21:bb:f9:48 IPaddr:0.0.0.0 Vrf:0 Mcast Vrf:65535 Flags:TcL3L2VpEr QOS:-1 Ref:26 RX device packets:668852 bytes:110173140 errors:0 RX port packets:207344 errors:0 RX queue errors to lcore 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Fabric Interface: eth_bond_bond0 Status: UP Driver: net_bonding Slave Interface(o): 0000:02:00.0 Status: UP Driver: net_ixgbe Slave Interface(1): 0000:02:00.1 Status: UP Driver: net_ixgbe Vlan Id: 101 VLAN fwd Interface: bond RX packets:207344 bytes:45239337 errors:0 TX packets:326159 bytes:237905360 errors:4 Drops:0 TX port packets:326145 errors:10 TX device packets:915402 bytes:511551768 errors:0
有关 vRouter 命令行实用程序的列表,请参阅 vRouter 命令行实用程序 。