3

我正在使用 DPDK-PROX 应用程序。每当我关闭该应用程序时,该应用程序分配的大页面都不会被释放。每次我都要重新启动系统。有什么解决办法吗?

我查看了以下问题,但我的问题没有解决。
如何从崩溃的应用程序中释放大页面
如何在 Linux 中真正释放大页面以供新进程使用?
发布大页面的正确方法?
这就是我在 /proc/meminfo 中看到的

    AnonHugePages:         0 kB
    ShmemHugePages:        0 kB
    HugePages_Total:    1024
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
4

1 回答 1

3

您看到的行为是 18.05 或 18.05+ 之前的 DPDK 版本的特征,带有--legacy-mem参数。我将假设前者更有可能。

这是因为 DPDK 支持某种形式的多处理,它允许“辅助”进程附加到“主”进程,即使它已经退出。由于 DPDK 依赖于大页面文件(在hugetlbfs文件系统中)在其主进程和辅助进程之间共享内存,因此这些大页面文件在应用程序退出后不会被删除,以允许辅助进程使用它们。

这个问题有多种解决方案。第一个 - 你可能根本不需要做任何事情。如果你担心 DPDK 因为你的大页面用完而无法重新启动,那么这不是问题,因为 DPDK 会在分配新的大页面之前清除所有未使用的大页面。

如果您想在关闭进程后将此内存释放回系统,您可能需要手动执行此操作。为此,您必须知道大页面的存储位置(即您的hugetlbfs安装位置)——在许多发行版上,/dev/hugepages默认情况下它是安装在哪里的。如果你去那里清除所有rte_*文件(假设你使用默认的 DPDK 前缀,你可能会这样做),所有的大页面都将被释放回系统。

最后,如果您不关心多处理,您可以--huge-unlink在运行 DPDK 时使用 EAL 参数[1]。这将使得无论 DPDK 分配什么大页面,它都会在之后立即删除文件。然后,当应用程序关闭时,hugepages 将通过关闭文件句柄自动释放。

在较新版本的 DPDK 中,这不是什么问题,因为 DPDK 可以动态地向上和向下扩展其内存使用量 [2]。我不熟悉 DPDK-PROX,所以我不能说它是否支持更新的 DPDK 版本。

[1] https://software.intel.com/en-us/articles/memory-in-dpdk-part-3-1711-and-earlier-releases

[2] https://software.intel.com/en-us/articles/memory-in-dpdk-part-4-1811-and-beyond

于 2019-08-26T11:41:13.673 回答