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になります。ここで私が理解していないことは何ですか?
これは、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.