私がそうするならcat /proc/meminfo
私は次のようになります
…
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 662864 kB
DirectMap2M: 7643136 kB
DirectMap1G: 1048576 kB
1G byteページが割り当てられていることがわかります。しかし、ksysguardを見てみると、メモリが125M / 213M(rss)以上のプロセスは見つかりませんでした。
どのプロセスがそれを使用しているのかどうかはどうすればわかりますか?
追加情報
#> cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
答え1
このDirectMap
項目はメモリを反映しません。使用、これは物理メモリのページマップまたはページエントリを反映します。DirectMap1G
PUDレベルのページテーブルマッピングを使用して、マッピングされたメモリ量を計算します。
起動中にマッピングが確立されます。arch/x86/mm/init_64.c
そしてphys_pud_init
とを探してくださいphys_p4d_init
。/proc/meminfo
個々の項目に表示される値の合計は、DirectMap
システムの実際のRAMの合計量に似ている必要があり、共有が変更されても合計は決して変更されません(たとえば、PUDレベルマップは次のように分割できます)。 PMDレベルマップはに表示されている値を減らし、DirectMap1G
)に表示される値を増やしますDirectMap2M
。
答え2
私はこれが質問に完全に答えるとは思わないが、部分的に答える。
調査中に誤って再起動しました。再起動後DirectMap1G
5GBでないことがわかりました。私は永久的な構成で何もしなかったことに気づいた後。私は3つのページサイズの合計がおよそ私のRAMの8GBサイズに等しいことを知りました。正しく追加しましたが、8G9(8.9G)です。 [おそらく他のメモリマッピング項目:vRAMおよび他のハードウェア、MMUはRAMのみのためのものではありません]。その後、大きなプロセスを開始して再測定しましたが、合計はまだ約8G9でした(少し動きました)。別のプロセスを開いて測定し、別のプロセスを開くと常に8G9になります。
答え3
DirectMapはカーネル空間に関連する指標です。ユーザースペースで利用できる巨大なページのように思えるようです。
私は引用する:
DirectMapはx86専用で、メモリ使用量ではなくTLBロード(変換参照バッファ)を表示します。これは、4 KBページ、2 MB / 4 MBページ、および1 GBページ(サポートおよび使用されている場合)にマップされたページ数を計算します。