7.4.2. 메모리 매개변수
OVS-DPDK에서는 다음 메모리 매개변수를 사용합니다.
- OvsDpdkMemoryChannels
NUMA 노드당 CPU에 메모리 채널을 매핑합니다.
OvsDpdkMemoryChannels매개변수는 Open vSwitch에서other_config:dpdk-extra="-n <value>"값으로 사용합니다.-
dmidecode -t 메모리또는 하드웨어 설명서를 사용하여 사용 가능한 메모리 채널 수를 확인합니다. -
ls /sys/devices/system/node/node* -d를 사용하여 NUMA 노드 수를 결정합니다. - NUMA 노드 수로 사용 가능한 메모리 채널 수를 나눕니다.
-
- NovaReservedHostMemory
호스트의 작업에 대해 메모리를 MB 단위로 예약합니다. 이 값은 Compute 노드에서
nova.conf의reserved_host_memory_mb값으로 사용됩니다.- 권장 정적 값은 4096MB입니다.
- OvsDpdkSocketMemory
NUMA 노드당 hugepage 풀에서 사전 할당할 메모리 양을 MB 단위로 지정합니다. 이 값은 Open vSwitch에서
other_config:dpdk-socket-mem값으로 사용됩니다.-
쉼표로 구분된 목록으로 을 제공합니다. NUMA 노드의 각 NIC의 MTU 값에서
OvsDpdkSocketMemory값을 계산합니다. - DPDK NIC가 없는 NUMA 노드의 경우 1024MB(1GB)의 정적 권장 사항을 사용하십시오.
다음 방정식은
OvsDpdkSocketMemory의 값을 근사합니다.MEMORY_REQD_PER_MTU = (ROUNDUP_PER_MTU + 800) * (4096 * 64) Bytes
- 800은 오버헤드 값입니다.
- 4096 * 64는 mempool의 패킷 수입니다.
- NUMA 노드에 설정된 각 MTU 값에 대해 MEMORY_REQD_PER_MTU를 추가하고 버퍼로 512MB를 추가합니다. 값을 1024의 수로 반올림합니다.
-
쉼표로 구분된 목록으로 을 제공합니다. NUMA 노드의 각 NIC의 MTU 값에서
MTU 크기가 1500이 아닌 경우 /var/log/messages 에 메모리 풀 오류 메시지를 생성하지 못할 수 있습니다. 인스턴스 시작 시 발생하는 경우 이 오류 메시지는 무시해도 됩니다. 이 메시지를 방지하려면 1500 MTU에 대한 추가 OvsDpdkSocketMemory 양을 OvsDpdkSocketMemory 계산에 추가합니다.
샘플 계산 - MTU 2000 및 MTU 9000
DPDK NIC dpdk0 및 dpdk1은 동일한 NUMA 노드 0에 있으며 MTUs 9000 및 2000으로 구성됩니다. 필요한 메모리를 파생하기 위한 샘플 계산은 다음과 같습니다.
MTU 값을 가장 가까운 1024바이트로 반올림합니다.
The MTU value of 9000 becomes 9216 bytes. The MTU value of 2000 becomes 2048 bytes.반올림된 바이트 값에 따라 각 MTU 값에 필요한 메모리를 계산합니다.
Memory required for 9000 MTU = (9216 + 800) * (4096*64) = 2625634304 Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112필요한 결합된 총 메모리(바이트)를 계산합니다.
2625634304 + 746586112 + 536870912 = 3909091328 bytes.이 계산은 ( 9000개의 MTU 필요) + ( 2000의 MTU에 필요한 메모리) + (512MB 버퍼)를 나타냅니다.
필요한 총 메모리를 MB로 변환합니다.
3909091328 / (1024*1024) = 3728 MB.이 값을 가장 가까운 1024로 반올림합니다.
3724 MB rounds up to 4096 MB.이 값을 사용하여
OvsDpdkSocketMemory를 설정합니다.OvsDpdkSocketMemory: “4096,1024”
샘플 계산 - MTU 2000
DPDK NIC dpdk0 및 dpdk1은 동일한 NUMA 노드 0에 있으며 각각 MTUs 2000 및 2000으로 구성됩니다. 필요한 메모리를 파생하기 위한 샘플 계산은 다음과 같습니다.
MTU 값을 가장 가까운 1024바이트로 반올림합니다.
The MTU value of 2000 becomes 2048 bytes.반올림된 바이트 값에 따라 각 MTU 값에 필요한 메모리를 계산합니다.
Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112필요한 결합된 총 메모리(바이트)를 계산합니다.
746586112 + 536870912 = 1283457024 bytes.이 계산은 (2000년 MTU에 필요한 메모리) + (512MB 버퍼)를 나타냅니다.
필요한 총 메모리를 MB로 변환합니다.
1283457024 / (1024*1024) = 1224 MB.이 값을 가장 가까운 1024로 반올림합니다.
1224 MB rounds up to 2048 MB.이 값을 사용하여
OvsDpdkSocketMemory를 설정합니다.OvsDpdkSocketMemory: “2048,1024”