运行 DPDK helloworld 示例时,大页中没有报告空闲大页

Gyp*_*Sud 2 linux huge-pages dpdk

我下载并构建了 dpdk-stable-16.11.4 版本(使用 x86_64-native-linuxapp-gcc 目标)。我正在运行 Ubuntu 16.04.3 LTS。根据http://dpdk.org/doc/quick-starthttp://dpdk.org/doc/guides-16.04/linux_gsg/sys_reqs.html设置大页面后

mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 64 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Run Code Online (Sandbox Code Playgroud)

我可以很好地看到大页面。

cat /proc/meminfo | grep Huge

    HugeAnonHugePages:    284672 kB
    ShmemHugePages:        0 kB
    HugePages_Total:      64
    HugePages_Free:       64
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
Run Code Online (Sandbox Code Playgroud)

但是当我运行 helloWorld 示例时,它抱怨没有免费的大页面,请参见下文。

./build/helloworld -l 0-3 -n 2
EAL: Detected 4 lcore(s)
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
hello from core 1
hello from core 2
hello from core 3
hello from core 0
Run Code Online (Sandbox Code Playgroud)

此外,内存信息显示可用的大页面全部消失了。

cat /proc/meminfo | grep Huge

    AnonHugePages:    380928 kB
    ShmemHugePages:        0 kB
    HugePages_Total:      64
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况吗?

And*_*kyy 6

1. 1GB 大页

该示例抱怨 1048576kB 大页面,即 1GB。这是正确的,您没有配置 1GB 页面,正如我们在 /proc/meminfo 中看到的那样

但是您不需要 1GB 页面来启动 DPDK 应用程序,因此它只是通知并继续。

2.免费大页

-m空闲的大页全部消失了,因为如果我们不使用或选项指定 DPDK 应用程序使用的内存量--socket-mem,它将保留所有可用的大页。

有关更多信息,请参阅此处的 DPDK 入门指南

如果即使应用程序已结束(或崩溃),大页仍然分配,您可以通过删除 /mnt/huge 中的文件来手动释放大页

  • 谢谢。它可以与“-m”或“--socket-mem”选项一起使用。由于我有 2MB 页面,所以我使用了 `-m 2` 或 `--socket-mem=2`。我还注意到运行应用程序后,所使用的页面不会立即返回。那是 `HugePages_Free: 63` 而不是 64。所以我重新运行应用程序,不带任何选项,只使用 `--huge-unlink`,现在我可以看到使用的页面在 `/proc/ 中以 `HugePages_Free: 64` 返回。内存信息`。 (2认同)