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.根据这些循环的字节值计算每个 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.此计算代表( MTU 为 9000 所需要的内存)+(MTU 为 2000)+(512 MB 缓冲所需的内存)。
将所需的总内存转换为 MB。
3909091328 / (1024*1024) = 3728 MB.将该值向上舍入到最接近的 1024。
3724 MB rounds up to 4096 MB.使用这个值设置
OvsDpdkSocketMemory。OvsDpdkSocketMemory: “4096,1024”
Calculation 示例 - MTU 2000
DPDK NIC dpdk0 和 dpdk1 位于相同的 NUMA 节点上,分别使用 MTU 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.此计算代表(MTU 为 2000)+(512 MB 缓冲)所需的内存。
将所需的总内存转换为 MB。
1283457024 / (1024*1024) = 1224 MB.将该值向上舍入到最接近的 1024。
1224 MB rounds up to 2048 MB.使用这个值设置
OvsDpdkSocketMemory。OvsDpdkSocketMemory: “2048,1024”