검색

8.6. SR-IOV와 함께 DPDK 사용

download PDF

DPDK(Data Plane Development Kit)는 빠른 패킷 처리를 위한 라이브러리 및 드라이버 세트를 제공합니다.

SR-IOV 네트워크에서 DPDK 워크로드를 실행하도록 클러스터 및 VM(가상 머신)을 구성할 수 있습니다.

8.6.1. DPDK 워크로드에 대한 클러스터 구성

네트워크 성능을 개선하기 위해 DPDK(Data Plane Development Kit) 워크로드를 실행하도록 OpenShift Container Platform 클러스터를 구성할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • SR-IOV Network Operator가 설치되어 있습니다.
  • Node Tuning Operator가 설치되어 있습니다.

프로세스

  1. 컴퓨팅 노드 토폴로지를 매핑하여 DPDK 애플리케이션에 대해 분리된 NUMA(Non-Uniform Memory Access) CPU와 운영 체제(OS)용으로 예약된 CPU를 결정합니다.
  2. 사용자 지정 역할을 사용하여 컴퓨팅 노드의 하위 집합에 레이블을 지정합니다(예: worker-dpdk ).

    $ oc label node <node_name> node-role.kubernetes.io/worker-dpdk=""
  3. spec.machineConfigSelector 오브젝트에 worker-dpdk 라벨이 포함된 새 MachineConfigPool 매니페스트를 생성합니다.

    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: ""

  4. 이전 단계에서 생성한 라벨이 지정된 노드 및 머신 구성 풀에 적용되는 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 매니페스트를 적용한 후 컴퓨팅 노드가 자동으로 다시 시작됩니다.

  5. PerformanceProfile 오브젝트의 status.runtimeClass 필드에서 생성된 RuntimeClass 리소스의 이름을 검색합니다.

    $ oc get performanceprofiles.performance.openshift.io profile-1 -o=jsonpath='{.status.runtimeClass}{"\n"}'
  6. 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을 편집하면 변경 사항을 적용한 후 생성되는 모든 VM에 영향을 미치는 글로벌 설정이 변경됩니다.

  7. DPDK 지원 컴퓨팅 노드에서 SMT(Simultaneous multithreading)를 사용하는 경우 HyperConverged CR을 편집하여 AlignCPUs enabler를 활성화합니다.

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

    AlignCPUs 를 활성화하면 OpenShift Virtualization에서 최대 두 개의 추가 전용 CPU를 요청하여 에뮬레이터 스레드 격리를 사용할 때 총 CPU 수를 균등하게 지정할 수 있습니다.

  8. spec.deviceType 필드가 vfio-pci 로 설정된 SriovNetworkNodePolicy 오브젝트를 생성합니다.

    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"

8.6.2. DPDK 워크로드에 대한 프로젝트 구성

SR-IOV 하드웨어에서 DPDK 워크로드를 실행하도록 프로젝트를 구성할 수 있습니다.

사전 요구 사항

  • 클러스터는 DPDK 워크로드를 실행하도록 구성되어 있습니다.

프로세스

  1. DPDK 애플리케이션의 네임스페이스를 생성합니다.

    $ oc create ns dpdk-checkup-ns
  2. SriovNetwork NodePolicy 오브젝트를 참조하는 SriovNetwork 오브젝트를 생성합니다. SriovNetwork 오브젝트를 생성하면 SR-IOV Network Operator가 NetworkAttachmentDefinition 오브젝트를 자동으로 생성합니다.

    SriovNetwork 매니페스트의 예

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: dpdk-sriovnetwork
      namespace: openshift-sriov-network-operator
    spec:
      ipam: |
        {
          "type": "host-local",
          "subnet": "10.56.217.0/24",
          "rangeStart": "10.56.217.171",
          "rangeEnd": "10.56.217.181",
          "routes": [{
            "dst": "0.0.0.0/0"
          }],
          "gateway": "10.56.217.1"
        }
      networkNamespace: dpdk-checkup-ns 1
      resourceName: intel_nics_dpdk 2
      spoofChk: "off"
      trust: "on"
      vlan: 1019

    1
    NetworkAttachmentDefinition 오브젝트가 배포된 네임스페이스입니다.
    2
    DPDK 워크로드에 대한 클러스터를 구성할 때 생성된 SriovNetworkNodePolicy 오브젝트의 spec.resourceName 속성 값입니다.
  3. 선택 사항: 가상 머신 대기 시간 검사를 실행하여 네트워크가 올바르게 구성되었는지 확인합니다.
  4. 선택 사항: DPDK 검사를 실행하여 네임스페이스가 DPDK 워크로드에 대해 준비되었는지 확인합니다.

8.6.3. DPDK 워크로드를 위한 가상 머신 구성

VM(가상 머신)에서 DPDK(Data Packet Development Kit) 워크로드를 실행하여 대기 시간을 줄이고 사용자 공간에서 더 빠른 패킷 처리를 위해 처리량을 높일 수 있습니다. DPDK는 하드웨어 기반 I/O 공유에 SR-IOV 네트워크를 사용합니다.

사전 요구 사항

  • 클러스터는 DPDK 워크로드를 실행하도록 구성되어 있습니다.
  • VM을 실행할 프로젝트를 생성하고 구성했습니다.

프로세스

  1. SR-IOV 네트워크 인터페이스, CPU 토폴로지, CRI-O 주석 및 대규모 페이지에 대한 정보를 포함하도록 VirtualMachine 매니페스트를 편집합니다.

    VirtualMachine 매니페스트의 예

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: rhel-dpdk-vm
    spec:
      running: true
      template:
        metadata:
          annotations:
            cpu-load-balancing.crio.io: disable 1
            cpu-quota.crio.io: disable 2
            irq-load-balancing.crio.io: disable 3
        spec:
          domain:
            cpu:
              sockets: 1 4
              cores: 5 5
              threads: 2
              dedicatedCpuPlacement: true
              isolateEmulatorThread: true
            interfaces:
              - masquerade: {}
                name: default
              - model: virtio
                name: nic-east
                pciAddress: '0000:07:00.0'
                sriov: {}
              networkInterfaceMultiqueue: true
              rng: {}
          memory:
            hugepages:
              pageSize: 1Gi 6
              guest: 8Gi
          networks:
            - name: default
              pod: {}
            - multus:
                networkName: dpdk-net 7
              name: nic-east
    # ...

    1
    이 주석은 컨테이너에서 사용하는 CPU에 대해 로드 밸런싱이 비활성화되도록 지정합니다.
    2
    이 주석은 컨테이너에서 사용하는 CPU에 대해 CPU 할당량이 비활성화됨을 지정합니다.
    3
    이 주석은 컨테이너에서 사용하는 CPU에 대해 Interrupt Request(IRQ) 로드 밸런싱이 비활성화됨을 지정합니다.
    4
    VM 내부의 소켓 수입니다. 동일한 NUMA(Non-Uniform Memory Access) 노드에서 CPU를 예약하려면 이 필드를 1 로 설정해야 합니다.
    5
    VM 내부의 코어 수입니다. 이 값은 1 보다 크거나 같아야 합니다. 이 예에서는 VM이 5개의 하이퍼스레드 또는 10개의 CPU로 예약됩니다.
    6
    대규모 페이지의 크기입니다. x86-64 아키텍처에서 사용 가능한 값은 1Gi 및 2Mi입니다. 이 예에서 요청은 크기가 1Gi인 8개의 대규모 페이지에 대한 것입니다.
    7
    SR-IOV NetworkAttachmentDefinition 오브젝트의 이름입니다.
  2. 편집기를 저장하고 종료합니다.
  3. VirtualMachine 매니페스트를 적용합니다.

    $ oc apply -f <file_name>.yaml
  4. 게스트 운영 체제를 구성합니다. 다음 예제에서는 RHEL 8 OS의 구성 단계를 보여줍니다.

    1. GRUB 부트로더 명령줄 인터페이스를 사용하여 대규모 페이지를 구성합니다. 다음 예제에서는 8개의 1G 대규모 페이지가 지정됩니다.

      $ grubby --update-kernel=ALL --args="default_hugepagesz=1GB hugepagesz=1G hugepages=8"
    2. TuneD 애플리케이션에서 cpu-partitioning 프로필을 사용하여 대기 시간이 짧은 튜닝을 수행하려면 다음 명령을 실행합니다.

      $ dnf install -y tuned-profiles-cpu-partitioning
      $ echo isolated_cores=2-9 > /etc/tuned/cpu-partitioning-variables.conf

      처음 두 CPU(0 및 1)는 하우스 유지 작업을 위해 별도로 설정되고 나머지 CPU는 DPDK 애플리케이션을 위해 격리됩니다.

      $ tuned-adm profile cpu-partitioning
    3. driverctl 장치 드라이버 제어 유틸리티를 사용하여 SR-IOV NIC 드라이버를 재정의합니다.

      $ dnf install -y driverctl
      $ driverctl set-override 0000:07:00.0 vfio-pci
  5. VM을 다시 시작하여 변경 사항을 적용합니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.