5

私は SPDK の実験 (これは DPDK を使用し、さらにヒュージページを使用します) を実行していますが、昨日は機能していました。私はそれらを共有環境で実行しています (あと 1 人か 2 人がこのマシンを他の目的で使用していると思います)。これを実行しようとすると、no free hugepages エラーが発生します。

/proc/meminfo の出力は次のとおりです。

HugePages_Total:    1024
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

マウントの出力:

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

前回の環境で機能していたものが機能しなくなりました。

umount -a -t hugetlbfs
mount -t hugetlbfs nodev /mnt/huge

次に、 /proc/meminfo の出力は次のとおりです。

HugePages_Total:    1024
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:     1024

しかし、実行しようとすると:

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

これらのページが余剰であり、無料ではないのはなぜですか? それらを解放する方法はありますか?他のジョブが実行されているか、他のユーザーが使用している可能性があるため、システムを再起動したいと考えています。

編集:マシンを再起動し、より多くの hugepage を割り当てたところ、それらは解放されました。テストを実行するとクラッシュし、ヒュージページが再び失われました。

有効な答えのない関連する質問 (少なくとも私にとって):

クラッシュしたアプリケーションからヒュージページを解放する方法

新しいプロセスで使用するために Linux で hugepage を実際に解放するにはどうすればよいですか?

4

1 に答える 1

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

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) hugepages をチェックすると、空きがありません

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

4) マウントされた hugepage ディレクトリを確認すると、dpdk アプリケーションによって OS に戻されていないファイルが表示されます。

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 で始まるファイルを削除すると、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
...
于 2016-11-15T10:44:31.417 に答える