大页存在,但不是免费的也不是保留的。或者,如何释放大页面?

hfi*_*ler 6 huge-pages dpdk

我正在运行一个 SPDK 实验(它使用 DPDK,而 DPDK 又使用大页面)并且它昨天运行正常。我在共享环境中运行它们(我认为还有一两个人使用这台机器来做其他事情)。现在,每当我尝试运行它时,我都会收到“无免费大页面”错误。

/proc/meminfo 的输出是:

HugePages_Total:    1024
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Run Code Online (Sandbox Code Playgroud)

挂载输出:

cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb,release_agent=/run/cgmanager/agents/cgm-release-agent.hugetlb)
Run Code Online (Sandbox Code Playgroud)

在我上一个环境中有效的东西不再有效:

umount -a -t hugetlbfs
mount -t hugetlbfs nodev /mnt/huge
Run Code Online (Sandbox Code Playgroud)

那么 /proc/meminfo 的输出是

HugePages_Total:    1024
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:     1024
Run Code Online (Sandbox Code Playgroud)

但如果我尝试运行它:

EAL: No free hugepages reported in hugepages-1048576kB
EAL: No free hugepages reported in hugepages-2048kB
PANIC in rte_eal_init():
Cannot get hugepage information
Run Code Online (Sandbox Code Playgroud)

为什么这些页面是多余的而不是免费的?有什么办法可以释放他们吗?我想重新启动系统,因为可能有其他作业正在运行或有人在使用它。

编辑:重新启动机器,分配更多的大页面,它们是免费的。执行测试,它崩溃了,现在大页又丢失了。

没有有效答案的相关问题(至少对我来说):

如何从崩溃的应用程序中释放大页面

如何真正释放 Linux 中的大页面以供新进程使用?

ava*_*tli 5

如果您按照以下说明操作,您可以摆脱分配的大页:

1)让我们检查一下重启时空闲的大页面

dpdk@dpdkvm:~$ ls /mnt/huge/
empty

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ cat /proc/meminfo
...
HugePages_Total:     256
HugePages_Free:      256
...
Run Code Online (Sandbox Code Playgroud)

2) 使用错误的参数启动 dpdk 应用程序,产生错误

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ sudo ./build/kni -c 0x03 -n 2 -- -P -p 0x03 --config="(0,0,1),(1,0,1)"
...
EAL: Error - exiting with code: 1
  Cause: No supported Ethernet device found
Run Code Online (Sandbox Code Playgroud)

3)当我检查hugepages时,没有任何空闲的

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ cat /proc/meminfo
...
HugePages_Total:     256
HugePages_Free:        0
...
Run Code Online (Sandbox Code Playgroud)

4)现在,当我检查已安装的hugepage目录时,我可以看到dpdk应用程序未返回给操作系统的文件。

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ ls /mnt/huge/
...
rtemap_0    rtemap_137  rtemap_176  rtemap_214  rtemap_253  rtemap_62
...
Run Code Online (Sandbox Code Playgroud)

5)最后,如果删除以rtemap开头的文件,则可以归还hugepages

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ sudo rm /mnt/huge/*
[sudo] password for dpdk:
dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ cat /proc/meminfo
...
HugePages_Total:     256
HugePages_Free:      256
...
Run Code Online (Sandbox Code Playgroud)