本作品采用知识共享署名 3.0 未移植许可协议授权。
http://creativecommons.org/licenses/by/3.0/legalcode
向 Tripleo 添加 OVS-DPDK¶
蓝图 URL - https://blueprints.launchpad.net/tripleo/+spec/tripleo-ovs-dpdk
DPDK 是一组用于快速数据包处理的库和驱动程序,尽可能地接近线路速度,适用于虚拟机。
它是一个用于数据平面应用中快速数据包处理的完整框架。
直接轮询来自网卡的的数据。
不使用中断 - 以防止性能开销。
使用巨页预分配大块内存,允许应用程序直接将数据 DMA 到这些页面。
DPDK 还拥有自己的缓冲区和环管理系统,用于高效处理 sk_buffs。
DPDK 提供数据平面库和网卡驱动程序,用于 -
使用无锁队列进行队列管理。
使用预分配固定大小的缓冲区进行缓冲区管理。
PMD(轮询模式驱动程序)以在没有异步通知的情况下工作。
数据包框架(一组库)以帮助数据平面数据包处理。
内存管理器 - 分配内存池,使用环来存储空闲对象。
问题描述¶
目前,在 openstack 中安装和配置 OVS+DPDK 是在 overcloud 部署后手动完成的。这对于操作员来说可能非常具有挑战性,并且在大量计算节点上执行起来很繁琐。需要在 tripleo 中自动化 OVS+DPDK 的安装。
DPDK 的硬件能力识别目前都是手动完成的,并且应该在自检期间自动化。这种硬件检测还为操作员提供了配置 Heat 模板所需的数据。
目前,无法同时存在启用 DPDK 硬件和未启用 DPDK 硬件的计算节点。
提议的变更¶
Ironic Python Agent 应该发现以下硬件详细信息并将其存储在 swift blob 中 -
CPU 标志,用于支持巨页 - 如果存在 pse,则支持 2MB 巨页。如果存在 pdpe1gb,则支持 1GB 巨页。
CPU 标志,用于 IOMMU - 如果存在 VT-d/svm,则支持 IOMMU,前提是 BIOS 中启用了 IOMMU 支持。
兼容的网卡 - 应该将其与 DPDK 白名单中的网卡列表进行比较。DPDK 支持的网卡可在 http://dpdk.org/doc/nics 处获得
不具备上述任何功能的节点不能用于具有 DPDK 的 COMPUTE 角色。
操作员应该能够配置在计算节点上启用 DPDK
确定为 COMPUTE 功能且具有 DPDK 网卡的 overcloud 镜像应该具有 OVS+DPDK 包,而不是 OVS。它还应该具有 dpdk 和 driverctl 包。
DPDK 功能网卡的设备名称应该从 T-H-T 获取。DPDK 网卡的 PCI 地址需要从设备名称识别。这对于在 PCI 探测期间白名单 DPDK 网卡是必需的。
需要在具有 DPDK 的计算节点中启用巨页。Bug: https://bugs.launchpad.net/tripleo/+bug/1589929 需要实现
需要进行 CPU 隔离,以便为 DPDK 轮询模式驱动程序 (PMD) 保留的 CPU 核心不被常规内核平衡、中断处理和调度算法使用。Bug: https://bugs.launchpad.net/tripleo/+bug/1589930 需要实现。
在每个启用 DPDK 网卡的 COMPUTE 节点上,puppet 应该配置白名单网卡的 DPDK_OPTIONS、CPU 掩码和 DPDK PMD 的内存通道数。DPDK_OPTIONS 需要在 /etc/sysconfig/openvswitch 中设置
Os-net-config 应该 -
通过识别给定接口的 PCI 地址,将给定的接口与 dpdk 驱动程序(默认情况下为 vfio-pci 驱动程序)关联。将使用 driverctl 永久绑定驱动程序
理解 ovs_user_bridge 和 ovs_dpdk_port 类型并相应地配置 ifcfg 脚本。
“TYPE” ovs_user_bridge 应该转换为 OVS 类型 OVSUserBridge,并且基于此,OVS 将数据路径类型配置为“netdev”。
“TYPE” ovs_dpdk_port 应该转换为 OVS 类型 OVSDPDKPort,并且基于此,OVS 将端口添加到数据路径类型为“dpdk”的桥接器
理解 ovs_dpdk_bond 并相应地配置 ifcfg 脚本。
在每个启用 DPDK 网卡的 COMPUTE 节点上,puppet 应该 -
在 /etc/neutron/plugins/ml2/openvswitch_agent.ini [OVS] datapath_type=netdev vhostuser_socket_dir=/var/run/openvswitch 中启用 OVS+DPDK
配置 /var/run/openvswitch 中的 vhostuser 端口,使其由 qemu 拥有。
在每个控制器节点上,puppet 应该 -
将 NUMATopologyFilter 添加到 nova.conf 中的 scheduler_default_filters。
替代方案¶
可以通过 puppet(在 overcloud 部署期间)以及 virt-customize(在镜像构建或下载之后)配置启动参数。启动参数的选择移出了此蓝图的范围,并将通过 https://bugs.launchpad.net/tripleo/+bug/1589930 进行跟踪。
安全影响¶
目前我们没有支持 ovs-dpdk 的防火墙驱动程序。使用 conntrack 的安全组支持是一个可能的选项,这项工作正在进行中。安全组将不受支持。
其他最终用户影响¶
无
性能影响¶
OVS-DPDK 可以增加 3 倍的数据平面性能。参考 http://goo.gl/Du1EX2
其他部署者影响¶
操作员应该确保在计算节点的 BIOS 中启用了 VT-d/IOMMU 虚拟化技术。
部署后,操作员应该修改 VM 味道以使用巨页、CPU 引脚。例如:nova flavor-key m1.small set “hw:mem_page_size=large”
开发人员影响¶
无
实现¶
负责人¶
主要负责人
karthiks
sanjayu
工作项¶
之前讨论的更改将是工作项
依赖项¶
我们依赖于可组合的角色,因为我们只需要在特定的计算节点上,而不是在所有节点上都需要它。
要启用巨页,bug: https://bugs.launchpad.net/tripleo/+bug/1589929 需要实现
要解决启动参数更改以进行 CPU 隔离,bug: https://bugs.launchpad.net/tripleo/+bug/1589930 需要实现
测试¶
由于 DPDK 需要特定的硬件支持,因此无法在 CI 下测试此功能。我们需要第三方 CI 来验证它。
文档影响¶
操作员需要执行的手动步骤应该记录下来。例如:配置 VT-d 的 BIOS,添加巨页和部署后配置的 CPU 隔离启动参数。
参考文献¶
在 RedHat Openstack Platform 8 中设置 DPDK 的手动步骤 https://goo.gl/6ymmJI
CPU 引脚和 NUMA 拓扑的设置过程 http://goo.gl/TXxuhv
DPDK 支持的网卡 http://dpdk.org/doc/nics