7.4.2. 内存参数
OVS-DPDK 使用下列内存参数:
- OvsDpdkMemoryChannels
映射每个 NUMA 节点的 CPU 中的内存频道。Open vSwitch 使用
OvsDpdkMemoryChannels参数作为other_config:dpdk-extra="-n <value>"值。-
使用
dmidecode -t memory或您的硬件手册来确定可用的内存通道数。 -
使用
ls /sys/devices/system/node/node* -d确定 NUMA 节点的数量。 - 将可用内存通道数除以 NUMA 节点数。
-
使用
- NovaReservedHostMemory
以 MB 为单位保留主机上任务的内存。Compute 节点使用这个值作为
nova.conf中的reserved_host_memory_mb值。- 使用静态推荐值 4096 MB。
- OvsDpdkSocketMemory
指定从每个 NUMA 节点预先分配巨页池的内存量(以 MB 为单位)。这个值被 Open vSwitch 用作
other_config:dpdk-socket-mem值。-
提供 作为用逗号分开的列表。从 NUMA 节点上的每个 NIC 的 MTU 值计算
OvsDpdkSocketMemory值。 - 对于没有 DPDK NIC 的 NUMA 节点,请使用 1024 MB (1GB)的静态建议。
以下驱除
OvsDpdkSocketMemory的值如下:MEMORY_REQD_PER_MTU = (ROUNDUP_PER_MTU + 800) * (4096 * 64) Bytes
- 800 是开销值。
- 4096 * 64 是 mempool 中的数据包数量。
- 为 NUMA 节点上设置的每个 MTU 值添加 MEMORY_REQD_PER_MTU,再添加另一个 512 MB 作为缓冲区。将值设为 1024 的倍数。
-
提供 作为用逗号分开的列表。从 NUMA 节点上的每个 NIC 的 MTU 值计算
如果 MTU 大小不是 1500,您可能会在 /var/log/messages 中创建 内存池 错误消息。如果出现在实例启动时发生,可以忽略此错误消息。要避免此消息,请将 1500 MTU 的额外 OvsDpdkSocketMemory 增加到您的 OvsDpdkSocketMemory 计算。
Calculation 示例 - MTU 2000 和 MTU 9000
DPDK NIC dpdk0 和 dpdk1 位于相同的 NUMA 节点上,分别使用 MTU 9000 和 2000 进行配置。生成内存所需的计算示例如下:
将 MTU 值向下舍入到最接近 1024 字节。
The MTU value of 9000 becomes 9216 bytes. The MTU value of 2000 becomes 2048 bytes.
The MTU value of 9000 becomes 9216 bytes. The MTU value of 2000 becomes 2048 bytes.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据这些循环的字节值计算每个 MTU 值所需的内存。
Memory required for 9000 MTU = (9216 + 800) * (4096*64) = 2625634304 Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112
Memory required for 9000 MTU = (9216 + 800) * (4096*64) = 2625634304 Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112Copy to Clipboard Copied! Toggle word wrap Toggle overflow 计算所需的总内存总量(以字节为单位)。
2625634304 + 746586112 + 536870912 = 3909091328 bytes.
2625634304 + 746586112 + 536870912 = 3909091328 bytes.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此计算代表( MTU 为 9000 所需要的内存)+(MTU 为 2000)+(512 MB 缓冲所需的内存)。
将所需的总内存转换为 MB。
3909091328 / (1024*1024) = 3728 MB.
3909091328 / (1024*1024) = 3728 MB.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将该值向上舍入到最接近的 1024。
3724 MB rounds up to 4096 MB.
3724 MB rounds up to 4096 MB.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个值设置
OvsDpdkSocketMemory。OvsDpdkSocketMemory: “4096,1024”
OvsDpdkSocketMemory: “4096,1024”Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Calculation 示例 - MTU 2000
DPDK NIC dpdk0 和 dpdk1 位于相同的 NUMA 节点上,分别使用 MTU 2000 和 2000 进行配置。生成内存所需的计算示例如下:
将 MTU 值向下舍入到最接近 1024 字节。
The MTU value of 2000 becomes 2048 bytes.
The MTU value of 2000 becomes 2048 bytes.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据这些循环的字节值计算每个 MTU 值所需的内存。
Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112
Memory required for 2000 MTU = (2048 + 800) * (4096*64) = 746586112Copy to Clipboard Copied! Toggle word wrap Toggle overflow 计算所需的总内存总量(以字节为单位)。
746586112 + 536870912 = 1283457024 bytes.
746586112 + 536870912 = 1283457024 bytes.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此计算代表(MTU 为 2000)+(512 MB 缓冲)所需的内存。
将所需的总内存转换为 MB。
1283457024 / (1024*1024) = 1224 MB.
1283457024 / (1024*1024) = 1224 MB.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将该值向上舍入到最接近的 1024。
1224 MB rounds up to 2048 MB.
1224 MB rounds up to 2048 MB.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个值设置
OvsDpdkSocketMemory。OvsDpdkSocketMemory: “2048,1024”
OvsDpdkSocketMemory: “2048,1024”Copy to Clipboard Copied! Toggle word wrap Toggle overflow