검색

9.2. ovs-DPDK 매개변수

download PDF

이 섹션에서는 OVS-DPDK가 director network_environment.yaml heat 템플릿 내에서 매개변수를 사용하여 최대 성능을 위해 CPU 및 메모리를 구성하는 방법을 설명합니다. 이 정보를 사용하여 컴퓨팅 노드의 하드웨어 지원과 OVS-DPDK 배포를 최적화하기 위해 하드웨어를 분할하는 방법을 평가합니다.

참고

CPU 코어를 할당할 때 항상 CPU 형제 스레드 또는 논리 CPU를 물리적 코어에 결합합니다.

컴퓨팅 노드에서 CPU 및 NUMA 노드를 결정하는 방법에 대한 자세한 내용은 NUMA 노드 토폴로지 검색을 참조하십시오. 이 정보를 사용하여 CPU 및 기타 매개변수를 매핑하여 호스트, 게스트 인스턴스 및 OVS-DPDK 프로세스 요구 사항을 지원합니다.

9.2.1. CPU 매개변수

OVS-DPDK는 CPU 파티셔닝에 다음 매개변수를 사용합니다.

OvsPmdCoreList

DPDK 폴링 모드 드라이버(PMD)에 사용되는 CPU 코어를 제공합니다. DPDK 인터페이스의 로컬 NUMA 노드와 연결된 CPU 코어를 선택합니다. OVS에서 pmd-cpu-mask 값으로 OvsPmdCoreList 를 사용합니다. OvsPmdCoreList 에 대해 다음 권장 사항을 사용하십시오.

  • 형제 스레드를 페어링합니다.
  • 성능은 PMD Core 목록에 할당된 물리적 코어 수에 따라 다릅니다. DPDK NIC와 연결된 NUMA 노드에서 필요한 코어를 할당합니다.
  • DPDK NIC가 있는 NUMA 노드의 경우 성능 요구 사항에 따라 필요한 물리적 코어 수를 확인하고 각 물리 코어의 모든 형제 스레드 또는 논리 CPU를 포함합니다.
  • DPDK NIC가 없는 NUMA 노드의 경우 NUMA 노드의 첫 번째 물리적 코어를 제외하고 모든 물리적 코어의 형제 스레드 또는 논리 CPU를 할당합니다.
참고

NUMA 노드에 연결된 DPDK NIC가 없는 경우에도 두 NUMA 노드에 DPDK PMD 스레드를 예약해야 합니다.

NovaComputeCpuDedicatedSet

고정 인스턴스 CPU의 프로세스를 예약할 수 있는 쉼표로 구분된 물리적 호스트 CPU 수 목록 또는 범위입니다. 예를 들어 NovaComputeCpuDedicatedSet: [4-12,^8,15] 는 8을 제외하고 4-12 및 15의 코어를 예약합니다.

  • OvsPmdCoreList 에서 모든 코어를 제외합니다.
  • 나머지 코어를 모두 포함합니다.
  • 형제 스레드를 페어링합니다.
NovaComputeCpuSharedSet
인스턴스 에뮬레이터 스레드의 호스트 CPU를 결정하는 데 사용되는 쉼표로 구분된 물리적 호스트 CPU 수 목록 또는 범위입니다.
IsolCpusList

호스트 프로세스와 분리된 CPU 코어 세트. IsolCpusListtuned-profiles-cpu-partitioning 구성 요소의 cpu-partitioning-variable.conf 파일의 isolated_cores 값입니다. IsolCpusList 에 대해 다음 권장 사항을 사용하십시오.

  • OvsPmdCoreListNovaComputeCpuDedicatedSet 의 코어 목록을 일치시킵니다.
  • 형제 스레드를 페어링합니다.
DerivePciWhitelistEnabled

VM의 VF(가상 기능)를 예약하려면 NovaPCIPassthrough 매개변수를 사용하여 Nova에 전달되는 VF 목록을 생성합니다. 목록에서 제외된 VFS는 호스트에서 계속 사용할 수 있습니다.

목록의 각 VF에 대해 address 매개변수를 address 값으로 확인하는 정규식으로 채웁니다.

다음은 수동 목록 생성 프로세스의 예입니다. eno2 라는 장치에서 NIC 파티셔닝이 활성화된 경우 다음 명령을 사용하여 VF의 PCI 주소를 나열합니다.

[tripleo-admin@compute-0 ~]$ ls -lh /sys/class/net/eno2/device/ | grep virtfn
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn0 -> ../0000:18:06.0
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn1 -> ../0000:18:06.1
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn2 -> ../0000:18:06.2
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn3 -> ../0000:18:06.3
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn4 -> ../0000:18:06.4
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn5 -> ../0000:18:06.5
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn6 -> ../0000:18:06.6
lrwxrwxrwx. 1 root root    0 Apr 16 09:58 virtfn7 -> ../0000:18:06.7

이 경우 VF 0, 4, 6은 NIC 파티셔닝에 eno2 에서 사용됩니다. 다음 예와 같이 VFs 1-3, 5 및 7을 포함하도록 NovaPCIPassthrough 를 수동으로 구성하고 결과적으로 VF 0,4 및 6을 제외합니다.

NovaPCIPassthrough:
  - physical_network: "sriovnet2"
  address: {"domain": ".*", "bus": "18", "slot": "06", "function": "[1-3]"}
  - physical_network: "sriovnet2"
  address: {"domain": ".*", "bus": "18", "slot": "06", "function": "[5]"}
  - physical_network: "sriovnet2"
  address: {"domain": ".*", "bus": "18", "slot": "06", "function": "[7]"}

9.2.2. 메모리 매개변수

OVS-DPDK는 다음 메모리 매개변수를 사용합니다.

OvsDpdkMemoryChannels

NUMA 노드당 CPU에 메모리 채널을 매핑합니다. OVS의 OvsDpdkMemoryChannels 는 OVS의 other_config:dpdk-extra="-n <value>" 값입니다. OvsDpdkMemoryChannels 에 대한 다음 권장 사항을 확인하십시오.

  • dmidecode -t 메모리 또는 하드웨어 설명서를 사용하여 사용 가능한 메모리 채널 수를 확인합니다.
  • ls /sys/devices/system/node/node* -d 를 사용하여 NUMA 노드 수를 확인합니다.
  • 사용 가능한 메모리 채널 수를 NUMA 노드 수로 나눕니다.
NovaReservedHostMemory

호스트의 작업에 대해 메모리(MB)를 예약합니다. NovaReservedHostMemorynova.conf 의 컴퓨팅 노드의 reserved_host_memory_mb 값입니다. NovaReservedHostMemory 에 대한 다음 권장 사항을 확인하십시오.

  • 정적 권장 값 4096MB를 사용합니다.
OvsDpdkSocketMemory

NUMA 노드별로 hugepage 풀에서 사전 할당하기 위한 메모리 양(MB)을 지정합니다. OvsDpdkSocketMemory 는 OVS의 other_config:dpdk-socket-mem 값입니다. OvsDpdkSocketMemory 에 대한 다음 권장 사항을 확인하십시오.

  • 쉼표로 구분된 목록으로 제공합니다.
  • DPDK NIC가 없는 NUMA 노드의 경우 1024MB(1GB)의 정적 권장 사항을 사용합니다.
  • NUMA 노드의 각 NIC의 MTU 값에서 OvsDpdkSocketMemory 값을 계산합니다.
  • 다음 공식은 OvsDpdkSocketMemory 의 값과 유사합니다.

    • MEMORY_REQD_PER_MTU = (ROUNDUP_PER_MTU + 800) * (4096 * 64) Bytes

      • 800은 오버헤드 값입니다.
      • 4096 * 64는 mempool의 패킷 수입니다.
  • NUMA 노드에 설정된 각 MTU 값에 대해 MEMORY_REQD_PER_MTU를 추가하고 버퍼로 512MB를 추가합니다. 값을 1024의 배수로 반올림합니다.

샘플 계산 - MTU 2000 및 MTU 9000

DPDK NIC dpdk0 및 dpdk1은 각각 동일한 NUMA 노드 0에 있으며 MTU 9000 및 2000으로 구성됩니다. 필요한 메모리를 파생하기 위한 샘플 계산은 다음과 같습니다.

  1. MTU 값을 1024바이트의 가장 가까운 배수로 반올림합니다.

    The MTU value of 9000 becomes 9216 bytes.
    The MTU value of 2000 becomes 2048 bytes.
  2. 이러한 반올림된 바이트 값을 기반으로 각 MTU 값에 필요한 메모리를 계산합니다.

    Memory required for 9000 MTU = (9216 + 800) * (4096*64) = 2625634304
    Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112
  3. 필요한 총 메모리(바이트)를 계산합니다.

    2625634304 + 746586112 + 536870912 = 3909091328 bytes.

    이 계산은 ( 9000의 MTU에 필요한 메모리) + (2000의 MTU에 메모리 필요) + (512MB 버퍼)를 나타냅니다.

  4. 필요한 총 메모리를 MB로 변환합니다.

    3909091328 / (1024*1024) = 3728 MB.
  5. 이 값을 가장 가까운 1024까지 반올림합니다.

    3724 MB rounds up to 4096 MB.
  6. 이 값을 사용하여 OvsDpdkSocketMemory 를 설정합니다.

        OvsDpdkSocketMemory: "4096,1024"

샘플 계산 - MTU 2000

DPDK NIC dpdk0 및 dpdk1은 동일한 NUMA 노드 0에 있으며 각각 2000의 MTU로 구성됩니다. 필요한 메모리를 파생하기 위한 샘플 계산은 다음과 같습니다.

  1. MTU 값을 1024바이트의 가장 가까운 배수로 반올림합니다.

    The MTU value of 2000 becomes 2048 bytes.
  2. 이러한 반올림된 바이트 값을 기반으로 각 MTU 값에 필요한 메모리를 계산합니다.

    Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112
  3. 필요한 총 메모리(바이트)를 계산합니다.

    746586112 + 536870912 = 1283457024 bytes.

    이 계산은 (2000의 MTU에 필요한 메모리) + (512MB 버퍼)를 나타냅니다.

  4. 필요한 총 메모리를 MB로 변환합니다.

    1283457024 / (1024*1024) = 1224 MB.
  5. 이 값을 1024의 가장 가까운 배수로 반올림합니다.

    1224 MB rounds up to 2048 MB.
  6. 이 값을 사용하여 OvsDpdkSocketMemory 를 설정합니다.

        OvsDpdkSocketMemory: "2048,1024"

9.2.3. 네트워킹 매개변수

OvsDpdkDriverType
DPDK에서 사용하는 드라이버 유형을 설정합니다. vfio-pci 의 기본값을 사용합니다.
NeutronDatapathType
OVS 브리지의 datapath 유형입니다. DPDK는 netdev 의 기본값을 사용합니다.
NeutronVhostuserSocketDir
OVS의 vhost-user 소켓 디렉터리를 설정합니다. vhost 클라이언트 모드에 /var/lib/vhost_sockets 를 사용합니다.

9.2.4. 기타 매개변수

NovaSchedulerEnabledFilters
컴퓨팅 노드에서 요청된 게스트 인스턴스에 대해 일치하는 컴퓨팅 노드를 찾는 데 사용하는 정렬된 필터 목록을 제공합니다.
VhostuserSocketGroup

vhost-user 소켓 디렉터리 그룹을 설정합니다. 기본값은 qemu 입니다. ovs-vswitchdqemu 프로세스가 virtio-net 장치를 구성하는 공유 대규모 페이지 및 unix 소켓에 액세스할 수 있도록 VhostuserSocketGrouphugetlbfs 로 설정합니다. 이 값은 역할별로 고유하며 OVS-DPDK를 활용하는 모든 역할에 적용해야 합니다.

중요

VhostuserSocketGroup 매개변수를 사용하려면 NeutronVhostuserSocketDir 도 설정해야 합니다. 자세한 내용은 9.2.3절. “네트워킹 매개변수”의 내용을 참조하십시오.

KernelArgs

부팅 시 컴퓨팅 노드의 /etc/default/grub 에 여러 커널 인수를 제공합니다. 구성에 따라 다음 값을 추가합니다.

  • hugepagesz: CPU에 대규모 페이지 크기를 설정합니다. 이 값은 CPU 하드웨어에 따라 다를 수 있습니다. OVS-DPDK 배포용 1G(default_hugepagesz=1GB hugepagesz=1G)로 설정합니다. 이 명령을 사용하여 CPU가 1G를 지원하는지 확인하는 pdpe1gb CPU 플래그를 확인합니다.

    lshw -class processor | grep pdpe1gb
  • hugepages count: 사용 가능한 호스트 메모리를 기반으로 사용 가능한 대규모 페이지 수를 설정합니다. NovaReservedHostMemory 를 제외하고 사용 가능한 대부분의 메모리를 사용합니다. 컴퓨팅 노드의 플레이버 내에서 대규모 페이지 수 값을 구성해야 합니다.
  • iommu: For Intel CPUs, add "intel_iommu=on iommu=pt"
  • isolcpus: 튜닝을 위해 CPU 코어를 설정합니다. 이 값은 IsolCpusList 와 일치합니다.

CPU 분리에 대한 자세한 내용은 RHEL 8 및 RHEL 9의 Red Hat Knowledgebase 솔루션 OpenStack CPU 격리 지침을 참조하십시오.

DdpPackage

배포의 장치에 프로필 패키지를 적용하여 장치의 패킷 처리 파이프라인을 변경하도록 DDP(Dynamic Device Personalization)를 구성합니다. DDP 패키지를 포함하도록 network_environment.yaml 템플릿에 다음 행을 추가합니다.

parameter_defaults:
  ComputeOvsDpdkSriovParameters:
    DdpPackage: "ddp-comms"

9.2.5. VM 인스턴스 플레이버 사양

NFV 환경에 VM 인스턴스를 배포하기 전에 CPU 고정, 대규모 페이지 및 에뮬레이터 스레드 고정을 사용하는 플레이버를 생성합니다.

hw:cpu_policy
이 매개변수가 dedicated 로 설정된 경우 게스트는 고정된 CPU를 사용합니다. 이 매개변수 세트를 사용하여 플레이버에서 생성된 인스턴스의 오버 커밋 비율은 1:1입니다. 기본값은 shared 입니다.
hw:mem_page_size

이 매개변수를 표준 접미사가 있는 특정 값의 유효한 문자열(예: 4KB,8MB 또는 1GB)으로 설정합니다. hugepagesz 부팅 매개변수와 일치하도록 1GB를 사용합니다. 부팅 매개변수에서 OvsDpdkSocketMemory 를 제거하여 가상 머신에 사용할 수 있는 대규모 페이지 수를 계산합니다. 다음 값도 유효합니다.

  • small(기본값) - 가장 작은 페이지 크기가 사용됩니다.
  • large - 대용량 페이지 크기만 사용합니다. (2MB 또는 1GB x86 아키텍처의 경우)
  • 모든 - 컴퓨팅 드라이버는 대규모 페이지를 사용하려고 시도할 수 있지만 사용할 수 없는 경우 기본값은 small입니다.
hw:emulator_threads_policy
이 매개변수의 값을 공유하여 에뮬레이터 스레드가 heat 매개변수 NovaComputeCpuSharedSet 에서 식별한 CPU에 고정되도록 설정합니다. 에뮬레이터 스레드가 폴링 모드 드라이버(PMD) 또는 실시간 처리가 있는 vCPU에서 실행 중인 경우 패킷 손실과 같은 부정적인 영향을 미칠 수 있습니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.