运行t-rex流量生成器报大页内存不足错误如何解决?
问题根因确认
- 你遇到的报错确实和首次运行时socket 0仅成功分配536个大页直接相关。t-rex基于DPDK开发,需要连续的大页内存初始化mbuf内存池,普通
free命令统计的是系统常规可分配内存,不包含已经被划分为大页的专属内存区域,所以你看到剩余内存充足但还是报大页不足。 - 不需要完全释放现有大页,但需要调整大页配置保证t-rex需要的大页数量能被成功分配,且优先给对应CPU socket分配足够连续内存。
可行解决方案
- 第一步:停止所有占用大页的进程(包括之前异常退出的t-rex残留进程),释放被占用的大页资源
sudo pkill -9 t-rex-64 # 确认没有DPDK进程占用大页后,临时重置大页数量 sudo sysctl vm.nr_hugepages=0
- 第二步:根据t-rex的需求调整大页总数量,按你给出的2MB大页规格,t-rex默认至少需要2048个2MB大页(合计4GB),如果是多NUMA节点服务器,要对应给每个socket分配足够的大页:
# 临时分配4096个2MB大页(合计8GB,满足绝大多数t-rex场景需求) sudo sysctl vm.nr_hugepages=4096
如果是多NUMA节点,还要单独给每个socket分配,例如给socket 0分配2048个:
echo 2048 | sudo tee /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages # 若存在node1也需要的话执行相同操作 echo 2048 | sudo tee /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
- 第三步:验证大页分配是否成功
grep Huge /proc/meminfo
确认HugePages_Total等于你设置的数量,HugePages_Free接近总数量即可。
- 第四步:配置永久生效(避免重启后失效),编辑
/etc/sysctl.conf文件,添加如下内容:
vm.nr_hugepages = 4096
执行sysctl -p立即生效。如果是多NUMA节点需要永久按socket分配,可将上面的echo分配命令写入/etc/rc.local设置开机自启。
- 第五步:重新启动t-rex即可,启动时如果还有大页相关警告,可以添加
--cfg参数指定t-rex配置文件,在配置文件中调低mbuf pool的大小适配现有大页数量。
内容的提问来源于stack exchange,提问作者Ankush Pandit
相关产品推荐
相关产品推荐

