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

时间:2013-12-04 03:22:33

标签: linux memory-management huge-pages

我有一个使用hugepage的应用程序,由于某些bug,应用程序突然崩溃了。 崩溃后,由于应用程序没有正确释放largepage,因此sys文件系统中的freepagepage号不会增加。

$ sudo cat /sys/kernel/mm/hugepages/hugepages-2048kB/free_hugepages 
0
$ sudo cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages 
1024

有没有办法用武力释放大页?

5 个答案:

答案 0 :(得分:6)

有时需要检查已挂载hugetlbfs的所有目录。 所以,

  1. 按命令mount | grep huge查找已安装的目录。

  2. 检查除/dev/hugepages之外的所有目录。

  3. 删除所有2M大小的文件。 (2M是巨页的大小)

答案 1 :(得分:1)

使用'ipcs -m'列出共享内存段。 使用'ipcrm'删除剩余的共享内存段。

希望有所帮助....

答案 2 :(得分:1)

HugeTLB可以用于共享内存(而Mark J. Bobak的回答可以解决这个问题)或者在hugetlb文件系统中创建的应用程序mmaps文件。如果应用程序在没有删除这些文件的情况下崩溃,它们就会存活并保持相应的内存“已分配”。

检查hugeTLB文件系统,看看该应用程序是否有任何剩余文件。删除它们会释放内存。

答案 3 :(得分:0)

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

1)让我们检查重启时可以免费使用的大页面

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

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ cat /proc/meminfo
...
HugePages_Total:     256
HugePages_Free:      256
...

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

3)当我检查大页面时,没有任何免费的

dpdk@dpdkvm:~/dpdk-1.8.0/examples/kni$ cat /proc/meminfo
...
HugePages_Total:     256
HugePages_Free:        0
...

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
...

5)最后,如果您删除以rtemap开头的文件,您可以重新提供大页面

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
...

答案 4 :(得分:-3)

您的hugetlb可能由共享内存或mmap文件使用。 尝试删除共享内存或卸载hugetlb fs