展開方法の説明

展開方法の説明

私のシステムが「ページ割り当て失敗」を報告しました。

[some_app]: page allocation failure: order:4, mode:0x2040d0

このパターンが正確に何を表すのかを説明できる人はいますか?私の言葉は正しいですか?これは次のGFPフラグについてです:GFP_NOTRACK | GFP_COMP | GFP_WAIT | GFP_IO | GFP_FS

カーネルバージョンは3.10.0-693.21.1.el7.AV1.x86_64

ベストアンサー1

フラグはファイルで定義されているように見え、<kernel source directory>/include/linux/gfp.h少なくともカーネル4.9.105では、モード0x2040d0が次のようにマップされているようです。

GFP_NOTRACK | GFP_COMP | GFP_FS | GFP_IO | GFP_RECLAIMABLE

ただし、Google でフラグ定義を検索すると、一部のソースで 0x10 の値が GFP_RECLAIMABLE ではなく GFP_WAIT として定義され、ソースと一致するように見えます。

このLWN議論読んで役に立つかもしれませんが、私が見ることができる最も良い説明はファイルのコメントにありますinclude/linux/gfp.h

通常、これらのモードフラグはページアロケータの操作を変更します。

  • GFP_NOTRACK:使用を避けてくださいkmemcheck
  • GFP_COMP:アドレス複合ページメタデータ
  • GFP_FS:アロケータが必要な場合は、ページを回復するために低レベルのファイルシステムを呼び出すことができることを示します。このオプションがクリアされると、割り当てがロックを保持できるファイルシステムコードの一部であることを示します。たとえば、次のようになります。これはスワップファイルを使用する場合に重要です。
  • GFP_IO:割り当て者がこの要求を満たすためにページを回復するために物理I / Oを開始できることを示します。
  • " GFP_RECLAIMABLE: "[This] は、SLAB_RECLAIM_ACCOUNT を指定し、そのページを縮小器によって解放できるスラブ割り当てに使用されます。このフラグは、ファイルシステムのメモリ割り当てに使用されるようです。デフォルトでは、これは、この割り当てを解除または最小化するために必要なときに呼び出すことができるカーネル関数があることを意味しているようです。

おすすめ記事