9.6. SR-IOV 및 노드 튜닝 연산자를 사용하여 DPDK 라인 속도 달성
노드 튜닝 연산자를 사용하면 격리된 CPU, 거대 페이지 및 토폴로지 스케줄러를 구성할 수 있습니다. 그런 다음 SR-IOV(Single Root I/O Virtualization)와 함께 노드 튜닝 연산자를 사용하여 특정 DPDK(Data Plane Development Kit) 라인 속도를 달성할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - SR-IOV Network Operator가 설치되어 있습니다.
-
클러스터 관리자
권한이 있는 사용자로 로그인했습니다. 독립형 노드 튜닝 운영자를 배포했습니다.
참고이전 버전의 OpenShift Container Platform에서는 Performance Addon Operator를 사용하여 OpenShift 애플리케이션의 저지연 성능을 달성하기 위한 자동 튜닝을 구현했습니다. OpenShift Container Platform 4.11 이상에서는 이 기능이 Node Tuning Operator의 일부입니다.
프로세스
다음 예제를 기반으로
PerformanceProfile
객체를 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 시스템에서 하이퍼스레딩이 활성화된 경우,
격리
되고예약된
CPU 그룹에 관련 심볼릭 링크를 할당합니다. 시스템에 여러 개의 비균일 메모리 액세스 노드(NUMA)가 포함되어 있는 경우 두 NUMA의 CPU를 두 그룹에 할당합니다. 이 작업에는 성과 프로필 생성기를 사용할 수도 있습니다. 자세한 내용은 성과 프로필 만들기를 참조하세요. - 2
- 또한, 예약된 CPU 수에 맞춰 대기열이 설정될 장치 목록을 지정할 수도 있습니다. 자세한 내용은 노드 튜닝 연산자를 사용하여 NIC 대기열 줄이기를 참조하세요.
- 3
- 필요한 거대페이지의 수와 크기를 할당합니다. 거대한 페이지에 대한 NUMA 구성을 지정할 수 있습니다. 기본적으로 시스템은 시스템의 모든 NUMA 노드에 짝수를 할당합니다. 필요한 경우 노드에 대한 실시간 커널 사용을 요청할 수 있습니다. 자세한 내용은 실시간 기능을 갖춘 근로자 프로비저닝을 참조하세요.
-
yaml
파일을mlx-dpdk-perfprofile-policy.yaml
로 저장합니다. 다음 명령을 사용하여 성능 프로필을 적용합니다.
oc create -f mlx-dpdk-perfprofile-policy.yaml
$ oc create -f mlx-dpdk-perfprofile-policy.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6.1. 컨테이너 애플리케이션에서 사용하는 DPDK 라이브러리 링크 복사링크가 클립보드에 복사되었습니다!
선택적 라이브러리인 app-netutil
은 해당 포드에서 실행 중인 컨테이너 내에서 포드에 관한 네트워크 정보를 수집하기 위해 여러 API 메서드를 제공합니다.
이 라이브러리는 DPDK(Data Plane Development Kit) 모드의 SR-IOV VF(가상 기능)를 컨테이너에 통합하는 데 도움이 될 수 있습니다. 라이브러리는 Golang API와 C API를 모두 제공합니다.
현재 세 가지 API 메서드가 구현되어 있습니다.
GetCPUInfo()
- 이 함수는 컨테이너에서 사용할 수 있는 CPU를 결정하고 목록을 반환합니다.
GetHugepages()
-
이 함수는 각 컨테이너에 대해
Pod
사양에서 요청된 대량의 페이지 메모리의 양을 결정하고 값을 반환합니다. GetInterfaces()
- 이 함수는 컨테이너의 인터페이스 집합을 결정하고 목록을 반환합니다. 반환 값에는 각 인터페이스에 대한 인터페이스 유형 및 유형별 데이터가 포함됩니다.
라이브러리 리포지토리에는 컨테이너 이미지 dpdk-app-centos
를 빌드하는 샘플 Dockerfile이 포함되어 있습니다. 컨테이너 이미지는 pod 사양의 환경 변수에 따라 다음 DPDK 샘플 애플리케이션 중 하나를 실행할 수 있습니다. l2fwd
,l3wd
또는 testpmd
. 컨테이너 이미지는 app-netutil
라이브러리를 컨테이너 이미지 자체에 통합하는 예를 제공합니다. 라이브러리는 init 컨테이너에 통합할 수도 있습니다. init 컨테이너는 필요한 데이터를 수집하고 기존 DPDK 워크로드에 데이터를 전달할 수 있습니다.
9.6.2. 가상 함수를 위한 SR-IOV 네트워크 운영자 예시 링크 복사링크가 클립보드에 복사되었습니다!
SR-IOV(단일 루트 I/O 가상화) 네트워크 운영자를 사용하여 노드의 SR-IOV 지원 물리적 기능 NIC에서 가상 기능(VF)을 할당하고 구성할 수 있습니다.
Operator 배포에 대한 자세한 내용은 SR-IOV 네트워크 Operator 설치를 참조하세요. SR-IOV 네트워크 장치 구성에 대한 자세한 내용은 SR-IOV 네트워크 장치 구성을 참조하세요.
Intel VF와 Mellanox VF에서 DPDK(Data Plane Development Kit) 워크로드를 실행하는 데에는 몇 가지 차이점이 있습니다. 이 섹션에서는 두 가지 VF 유형에 대한 개체 구성 예를 제공합니다. 다음은 Intel NIC에서 DPDK 애플리케이션을 실행하는 데 사용되는 sriovNetworkNodePolicy
개체의 예입니다.
다음은 Mellanox NIC에 대한 sriovNetworkNodePolicy
개체의 예입니다.
9.6.3. SR-IOV 네트워크 운영자 예시 링크 복사링크가 클립보드에 복사되었습니다!
다음은 sriovNetwork
객체의 정의 예입니다. 이 경우 Intel과 Mellanox 구성은 동일합니다.
9.6.4. DPDK 기반 워크로드 예시 링크 복사링크가 클립보드에 복사되었습니다!
다음은 DPDK(Data Plane Development Kit) 컨테이너의 예입니다.
SLEEP
으로 Pod를 시작한 다음 Pod에 exec를 실행하여 testpmd 또는 DPDK 워크로드를 시작하지 마세요. exec
프로세스가 어떤 CPU에도 고정되지 않으므로 추가적인 인터럽트가 발생할 수 있습니다.
9.6.5. testpmd 스크립트 예시 링크 복사링크가 클립보드에 복사되었습니다!
다음은 testpmd를
실행하기 위한 스크립트 예입니다.
이 예제에서는 두 개의 서로 다른 sriovNetwork
CR을 사용합니다. 환경 변수에는 포드에 할당된 가상 함수(VF) PCI 주소가 포함되어 있습니다. Pod 정의에서 동일한 네트워크를 사용하는 경우 pciAddress를
분할해야 합니다. 트래픽 생성기의 올바른 MAC 주소를 구성하는 것이 중요합니다. 이 예제에서는 사용자 지정 MAC 주소를 사용합니다.