10.9. 在 SR-IOV 中使用 DPDK


Data Plane Development Kit (DPDK) 提供了一组库和驱动程序,用于快速数据包处理。您可以将集群和虚拟机(VM)配置为使用 SR-IOV 硬件的 DPDK 驱动程序运行低延迟数据包处理工作负载。

10.9.1. 为 DPDK 工作负载配置集群

您可以配置 OpenShift Container Platform 集群来运行 Data Plane Development Kit (DPDK) 工作负载,以提高网络性能。

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问集群。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 SR-IOV Network Operator。
  • 已安装 Node Tuning Operator。

流程

  1. 映射计算节点拓扑,以确定为 DPDK 应用程序隔离哪些非统一内存访问 (NUMA) CPU,以及为操作系统 (OS) 保留哪些非一致性内存访问 (NUMA) CPU。
  2. 如果您的 OpenShift Container Platform 集群使用单独的 control plane 和计算节点来实现高可用性:

    1. 使用自定义角色标记计算节点的子集,例如 worker-dpdk

      $ oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""
    2. 创建一个新的 MachineConfigPool 清单,其中包含 spec.machineConfigSelector 对象中的 worker-dpdk 标签。

      MachineConfigPool 清单示例:

      apiVersion: machineconfiguration.openshift.io/v1
      kind: MachineConfigPool
      metadata:
        name: worker-dpdk
        labels:
          machineconfiguration.openshift.io/role: worker-dpdk
      spec:
        machineConfigSelector:
          matchExpressions:
            - key: machineconfiguration.openshift.io/role
              operator: In
              values:
                - worker
                - worker-dpdk
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/worker-dpdk: ""
  3. 创建一个 PerformanceProfile 清单,它应用到标记的节点以及您在上一步中创建的机器配置池。性能配置集指定为 DPDK 应用程序隔离的 CPU,以及用于保留保留而保留的 CPU。

    PerformanceProfile 清单示例:

    apiVersion: performance.openshift.io/v2
    kind: PerformanceProfile
    metadata:
      name: profile-1
    spec:
      cpu:
        isolated: 4-39,44-79
        reserved: 0-3,40-43
      globallyDisableIrqLoadBalancing: true
      hugepages:
        defaultHugepagesSize: 1G
        pages:
        - count: 8
          node: 0
          size: 1G
      net:
        userLevelNetworking: true
      nodeSelector:
        node-role.kubernetes.io/worker-dpdk: ""
      numa:
        topologyPolicy: single-numa-node
    注意

    应用 MachineConfigPoolPerformanceProfile 清单后,计算节点会自动重启。

  4. PerformanceProfile 对象的 status.runtimeClass 字段检索生成的 RuntimeClass 资源的名称:

    $ oc get performanceprofiles.performance.openshift.io profile-1 -o=jsonpath='{.status.runtimeClass}{"\n"}'
  5. 通过编辑 HyperConverged 自定义资源 (CR) 将之前获取的 RuntimeClass 名称设置为 virt-launcher pod 的默认容器运行时类:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
        --type='json' -p='[{"op": "add", "path": "/spec/defaultRuntimeClass", "value":"<runtimeclass-name>"}]'
    注意

    编辑 HyperConverged CR 会更改影响更改后创建的所有虚拟机的全局设置。

  6. 如果您的启用 DPDK 的计算节点使用 Simultaneous 多线程 (SMT),请通过编辑 HyperConverged CR 来启用 AlignCPUs enabler:

    $ oc patch hyperconverged kubevirt-hyperconverged -n openshift-cnv \
        --type='json' -p='[{"op": "replace", "path": "/spec/featureGates/alignCPUs", "value": true}]'
    注意

    启用 AlignCPU 可让 OpenShift Virtualization 请求两个额外的专用 CPU,在使用仿真程序线程隔离时将 CPU 总数引入到甚至奇偶校验。

  7. 创建一个 SriovNetworkNodePolicy 对象,并将 spec.deviceType 字段设置为 vfio-pci

    SriovNetworkNodePolicy 清单示例:

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetworkNodePolicy
    metadata:
      name: policy-1
      namespace: openshift-sriov-network-operator
    spec:
      resourceName: intel_nics_dpdk
      deviceType: vfio-pci
      mtu: 9000
      numVfs: 4
      priority: 99
      nicSelector:
        vendor: "8086"
        deviceID: "1572"
        pfNames:
          - eno3
        rootDevices:
          - "0000:19:00.2"
      nodeSelector:
        feature.node.kubernetes.io/network-sriov.capable: "true"
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部