web-dev-qa-db-ja.com

Linuxの巨大なページ使用会計

Javaで使用するために巨大なページを構成しました。/proc/meminfoのアカウンティングについて質問がありますが、うまく機能しているようです。説明のために

# grep HugePages /proc/meminfo 
AnonHugePages:    274432 kB
HugePages_Total:    1008
HugePages_Free:      596
HugePages_Rsvd:      594
HugePages_Surp:        0

私の質問は「無料」と「Rsvd」の数に関するものです-なぜそれらは合計で1008の「合計」にならないのですか?それらは実際には1190になります。ここで私が理解していないことは何ですか?

4
Fred Clausen

これは、HugePages_rsvdが基本的にHugePages_Freeから読み取られるためです。つまり、無料の596の巨大なページのうち、594はすでにいくつかのアプリケーションによって使用のために予約されています。つまり、カーネルは、これらの594個の巨大なページがアプリケーションで利用可能であることを約束しています。

現在3つの巨大なページのリクエストがある場合、予約できるのは2つだけなので、失敗します。プロセスのVSZを説明するためにメモリ仮想ページを予約するときはmalloc()呼び出しと考えてください。ただし、プロセスが実際にそれらを使用するときは、プロセスのRSZ(実行セット)になります。

巨大なページは常にメインメモリに常駐するため、アプリがそれらを要求すると、カーネルはそれを空きプールからデクリメントし、Rsvdカウンターを増やします。

これはカーネルソースからのものです。 https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt

where:
HugePages_Total is the size of the pool of huge pages.
HugePages_Free  is the number of huge pages in the pool that are not yet
                allocated.
HugePages_Rsvd  is short for "reserved," and is the number of huge pages for
                which a commitment to allocate from the pool has been made,
                but no allocation has yet been made.  Reserved huge pages
                guarantee that an application will be able to allocate a
                huge page from the pool of huge pages at fault time.
HugePages_Surp  is short for "surplus," and is the number of huge pages in
                the pool above the value in /proc/sys/vm/nr_hugepages. The
                maximum number of surplus huge pages is controlled by
                /proc/sys/vm/nr_overcommit_hugepages.
6