Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

RHEL で hugepage の使用量と、何に使用されているかを確認する

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6

Issue

  • システムの hugepage が何に使用されているかを確認するにはどうしたら良いですか?
  • 指定したプロセスで使用される hugepage のサイズを計算するにはどうしたら良いですか?

Resolution

カーネルの観点

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

    [root@server ~]# grep HugePages_ /proc/meminfo
    HugePages_Total:   16299
    HugePages_Free:     7764
    HugePages_Rsvd:     5330
    HugePages_Surp:        0
    
  2. 次に、未使用分のページを引いて使用中のページ量を計算し、それに予約ページを足します。したがって、割り当てられたページの計算式は Total - Free + Rsvd になります。

    16299 - 7764 + 5330 = 13865
    
  3. 割り当てられたページを 2048 で掛けます (2048 は 1 ページのキロバイト数です)。

    13865 x 2048 = 28,395,520 キロバイト
    
  4. キロバイトをバイトに変換したい場合は、さらに 1024 を掛けます (1 キロバイト = 1024 バイト)。

    28395520 x 1024 = 29,077,012,480 バイト
    

メモリーの使用先

  • 共有の hugepage メモリーは簡単に数値化することができます。以下のように行います。
  1. 使用中の共有メモリーを一覧表示します。

    [root@rfreire sys]# ipcs -m
    ------ Shared Memory Segments --------
    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. (ipcs -m|awk '{ print $5}'|awk '{a+=$0}END{print a}' コマンドで) 5 列目の合計を算出し、/proc/meminfo hugepage 情報と比較します (上述の手順を参照)。値が一致したら、共有されているメモリーは hugepage だけとなります。値が大きい場合は、通常の 4 キロバイトのページが使用中のメモリーも共有しています。/proc/meminfo の hugepage 値 (バイト単位) からこの合計を引くと、通常の 4 キロバイトページのうち、どのぐらいを持っているかを確認できます。

  • hugepage ファイルシステムを使用しているかどうかを確認します。/proc/mounts で huge を grep します。

    [root@server ~]# grep -i huge /proc/mounts
    none /hugepages hugetlbfs rw,relatime 0 0
    
  • ただし、ここで、たとえば qemu-kvm で使用されているプライベートの hugetlbfs ページを数値化する方法はありません。

特定のプロセスで使用される hugepage のサイズを計算する方法

  • 以下のコマンドを使用して、指定したプロセスで使用される 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.