我有两个程序,一个基于dpdk。两者都使用大页面。但是dpdk默认会用完所有大页面。我找不到任何有关如何设置dpdk可以使用的大页面大小的文档。有什么方便的方法吗?如果没有,我必须研究dpdk源并进行修改。
答案 0 :(得分:1)
当然,命令行选项很少。最简单的是-m <megabytes>
,但是如果您有几个NUMA节点,则其内部逻辑可能是完全错误的。
我建议改用—socket-mem <mbytes,mbytes,...>
,它允许为每个NUMA节点分配一定数量的兆字节。
有关更多详细信息,请参见:https://doc.dpdk.org/guides/linux_gsg/linux_eal_parameters.html
答案 1 :(得分:1)
需要注意几个问题,直到@andriy声明DPDK 18.11选项puts()
和-m
为止。但是随着DPDK 19.11的发布,内部逻辑有了巨大的改进。
对于高于18.11模式的版本,请使用--socket-mem
模拟较旧的内存模型。但是,如果不是传统模式,请使用--legacy-mem
。
假设平台是x86(分别为2MB和1GB),据我所知,可以动态更改2MB,而不能动态分配1GB。因此,在内核cmd行中传递的任何选项都将导致所有NUMA分配相等。
答案 2 :(得分:0)
要添加,除了上面提到的@andriy以外,还可以使用此添加来隐式设置硬限制
/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
,拥有2MB的巨大页面大小
同样,对于1G来说,我们也可以做到,但这取决于支持。