[RHEL] hugepage の使用状況とその使用先を確認する方法
Environment
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 8
- Red Hat Enterprise Linux 9
Issue
- システムの hugepage が、何によって使用されているのかを確認するには、どうすればよいですか?
- 指定されたプロセスによって使用される hugepage のサイズを計算するには、どうすればよいですか?
Resolution
カーネルパースペクティブ
-
最初に、現在の hugepage の使用状況を確認します。
[root@server ~]# grep -i hugepages /proc/meminfo HugePages_Total: 16299 HugePages_Free: 7764 HugePages_Rsvd: 5330 HugePages_Surp: 0 Hugepagesize: 2048 kB
-
まず、空きページを差し引き、使用済みページを確認します。これに予約済みページを足して合計を出します。これにより、割り当てられたページは
Total - Free + Rsvd
になります。16299 - 7764 + 5330=13865
-
割り当てられたページに 2048 (キロバイト単位の hugepage のサイズ) を乗算します。
13865 x 2048=28,395,520 kbytes
-
キロバイトをバイト数で表したい場合は、これに 1024 を乗算します (1 キロバイト = 1024 バイト)。
28395520 x 1024=29,077,012,480 bytes
メモリーの場所
- 共有 hugepage メモリー は、簡単に定量化できます。これを行うには、以下を実行します。
-
使用中の共有メモリーを一覧表示します。
[root@rfreire sys]# ipcs -m key shmid owner perms bytes nattch status 0x00000000 163840 oracle 640 14680064 50 0x00000000 196609 oracle 640 2499805184 50 0x27126a4c 229378 oracle 640 2097152 50 0x00000000 5636099 oracle 640 33554432 58 0x00000000 5668868 oracle 640 4160749568 58 [...]
-
5 番目の列 (quick shell:
ipcs -m|awk '{ print $5}'|awk '{a+=$0}END{print a}'
) を合計し、/proc/meminfo
hugepage 情報と照合します (上記の手順を参照)。値が一致する場合は、hugepage 専用の共有メモリーが存在することを意味します。大きな値を取得した場合は、4kb の通常ページの共有メモリーも使用されていることになります。この合計を/proc/meminfo
hugepage のバイト単位の値から差し引くだけで、通常の 4kb ページがどのくらいあるかがわかります。
-
hugepage ファイルシステムを使用しているか確認してください。grep コマンドを使用して、
/proc/mounts
の huge を確認します。[root@server ~]# grep -i huge /proc/mounts none /hugepages hugetlbfs rw,relatime 0 0
-
残念ながら現時点では、たとえば
qemu-kvm
に使用されるプライベート hugetlbfs ページを定量化する手段はありません。
指定されたプロセスによって使用される hugepage のサイズの計算方法
[手順 1] hugepage を現在使用しているプロセスを見つけます。hugepage を利用する PID を認識している場合は、この手順をスキップして手順 2 に進むことができます。
grep "KernelPageSize: 2048 kB" /proc/[[:digit:]]*/smaps | awk {'print $1'} | cut -d "/" -f3 | sort | uniq
[手順 2] 以下のコマンドを使用して、指定されたプロセスで使用される hugepage のサイズを計算します。hugepage サイズが 2048 kB で、出力単位が MiB であると仮定します。
grep -B 11 'KernelPageSize: 2048 kB' /proc/[PID]/smaps | grep "^Size:" | awk 'BEGIN{sum=0}{sum+=$2}END{print sum/1024}'
- 注記: /proc/[PID]/smaps 内の同じアドレスを二重にカウントしないようにしてください。
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments