Translated message

A translation of this page exists in English.

[RHEL] hugepage の使用状況とその使用先を確認する方法

Solution Verified - Updated -

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

カーネルパースペクティブ

  1. 最初に、現在の hugepage の使用状況を確認します。

    [root@server ~]# grep -i hugepages /proc/meminfo
    HugePages_Total:   16299
    HugePages_Free:     7764
    HugePages_Rsvd:     5330
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    
  2. まず、空きページを差し引き、使用済みページを確認します。これに予約済みページを足して合計を出します。これにより、割り当てられたページは Total - Free + Rsvd になります。

    16299 - 7764 + 5330=13865
    
  3. 割り当てられたページに 2048 (キロバイト単位の hugepage のサイズ) を乗算します。

    13865 x 2048=28,395,520 kbytes
    
  4. キロバイトをバイト数で表したい場合は、これに 1024 を乗算します (1 キロバイト = 1024 バイト)。

    28395520 x 1024=29,077,012,480 bytes
    

メモリーの場所

  • 共有 hugepage メモリー は、簡単に定量化できます。これを行うには、以下を実行します。
  1. 使用中の共有メモリーを一覧表示します。

    [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                      
    [...]
    
  2. 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