巨大なページが使用中ですが、アロケータはありません。

巨大なページが使用中ですが、アロケータはありません。

私は巨大なページが割り当てられたlxcで実行されるプロセスを持っています。ただし、lxcが終了すると、hugepagesはまだ割り当てられますが、それを所有するプロセスはありません。

 $ grep huge /proc/*/numa_maps
/proc/5801/numa_maps:7f7b00000000 prefer:0 file=/mnt/hugepages/rtemap_5 huge dirty=1 N0=1

$ virsh -c lxc:/// destroy <container>

$ grep huge /proc/*/numa_maps

$ cat /proc/meminfo | grep -i huge
HugePages_Total:       6
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:    1048576 kB

このページをリサイクルする方法について提案がありますか?キャッシュをフラッシュしてみましたが、役に立ちませんでした。

$ sync; echo 3 > /proc/sys/vm/drop_caches

ベストアンサー1

この問題に対する一般的な解決策は、マッピング後すぐにアプリケーション内からサポートファイルを削除することです。したがって、ファイルは削除済みとしてマークされますが、アプリケーションが終了すると事実上削除されます。つまり、伝統的な生産方法は次のとおりです。

  1. ファイルを開く巨大なLBFSファイルシステム==>ファイル記述子(fd)のインポート
  2. 呼ぶftruncate(fd...)必要な数の大きなページにファイルを拡張する
  3. mmap(...fd...) を使用してファイルをメモリにマッピングする
  4. ファイルを閉じます。終了(FD)
  5. ファイルの削除:解く(...)
  6. マッピングは最後まで進行する過程で可能です。
  7. いずれにせよ、プロセスが終了すると、システムは手順5で削除されたとマークされたファイルを削除します。

詳細を提供ここ

おすすめ記事