記事
· 2020年7月8日 5m read

LinuxのTransparent HugePageとInterSystems IRISへのインパクト

** 2018年2月12日改訂 

この記事はInterSystems IRISに関するものですが、Caché、Ensemble、およびHealthShareのディストリビューションにも適用されます。 

概要

メモリはページ単位で管理されます。 Linuxシステムでは、デフォルトのページサイズは4KBです。 Red Hat Enterprise Linux 6、SUSE Linux Enterprise Server 11、およびOracle Linux 6では、HugePageと呼ばれるシステム構成に応じて、ページサイズを2MBまたは1GBに増やす方法が導入されました。 

第一に、HugePagesは起動時に割り当てる必要があり、適切に管理や計算が行われていない場合はリソースが浪費される可能性があります。 結果的に、さまざまなLinuxディストリビューションでTransparent HugePagesがデフォルトで有効になっているカーネル2.6.38が導入されました。 これは、HugePagesの作成、管理、使用を自動化することを意図したものでした。 旧バージョンのカーネルもこの機能を備えている可能性がありますが、[always] に指定されておらず、 [madvise] に設定されている可能性があります。   

Transparent Huge Pages(THP)はより大きなメモリページを使用することにより、大量のメモリを搭載したマシンでのTranslation Lookaside Buffer(TLB)ルックアップのオーバーヘッドを削減するLinuxのメモリ管理システムです。 ただし、現在のLinuxリリースでTHPがマップできるのは、個々のプロセスヒープとスタック領域のみです。 

課題 

Cache'システムでは、共有メモリセグメント(グローバルプールとルーチンバッファプール)に大部分のメモリ割り当てが行われます。これは、THPがこれらの共有メモリセグメントを処理しないためです。 その結果、THPは共有メモリには使用されず、個々のプロセスごとにのみ使用されます。 この状況は、単純なシェルコマンドを使用して確認できます。   

以下はInterSystemsのテストシステムの例ですが、2MBのTHPがCache'のプロセスに割り当てられていることが分かります。 

# grep -e AnonHugePages  /proc/*/smaps | awk  '{ if($2>4) print $0} ' |  awk -F "/"  '{print $0; system("ps -fp " $3)}'
/proc/2945/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root       2945      1  0  2015 ?        01:35:41 /usr/sbin/rsyslogd -n
/proc/70937/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70937  70897  0 Jan27 pts/0    00:01:58 /bench/EJR/ycsb161b641/bin/cache WD
/proc/70938/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70938  70897  0 Jan27 pts/0    00:00:00 /bench/EJR/ycsb161b641/bin/cache GC
/proc/70939/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70939  70897  0 Jan27 pts/0    00:00:39 /bench/EJR/ycsb161b641/bin/cache JD
/proc/70939/smaps:AnonHugePages:      4096 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70939  70897  0 Jan27 pts/0    00:00:39 /bench/EJR/ycsb161b641/bin/cache JD
/proc/70940/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70940  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 1
/proc/70941/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70941  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 2
/proc/70942/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70942  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 3
/proc/70943/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70943  70897  0 Jan27 pts/0    00:00:33 /bench/EJR/ycsb161b641/bin/cache SWD 7
/proc/70944/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70944  70897  0 Jan27 pts/0    00:00:29 /bench/EJR/ycsb161b641/bin/cache SWD 4
/proc/70945/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70945  70897  0 Jan27 pts/0    00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 5
/proc/70946/smaps:AnonHugePages:      2048 kB
UID         PID   PPID  C STIME TTY          TIME CMD
root      70946  70897  0 Jan27 pts/0    00:00:30 /bench/EJR/ycsb161b641/bin/cache SWD 6
/proc/70947/smaps:AnonHugePages:      4096 kB

さらに、特にジョブまたはプロセスが高い頻度で作成される可能性のあるアプリケーションでは、実行時にメモリ割り当てが遅延するという形でパフォーマンスが低下する可能性があります。 

推奨事項 

目的とするパフォーマンスの向上はIRIS共有メモリセグメントには適用されず、一部のアプリケーションでパフォーマンスに悪影響を及ぼす可能性があるため、InterSystemsはTHPを当分の間は無効にすることをお勧めしています。 

次のコマンドを実行し、LinuxシステムでTransparent HugePagesが有効になっているかどうかを確認してください。 

Red Hat Enterprise Linuxカーネルの場合: 

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 

他のカーネルの場合: 

# cat /sys/kernel/mm/transparent_hugepage/enabled 

上記のコマンドは、[always]、[madvise]、または [never] フラグが有効になっているかどうかを表示します 。 THPがカーネルから削除されている場合、/sys/kernel/mm/redhat_transparent_hugepage or /sys/kernel/mm/redhat/transparent_hugepage ファイルは存在しません。 

起動中にTransparent HugePagesを無効にするには、次の手順を実行します。 

  1. /etc/grub.conf ファイルのカーネル起動行に次のエントリを追加します。 
transparent_hugepage=never 
  1. OSを再起動します。 

THPをその場で無効にする方法もありますが、それは新しいプロセス用のTHPの作成と使用が停止するだけなので、望ましい結果が得られない可能性があります。 作成済みのTHPは、通常のメモリページに分解されません。 ブート時にTHPを無効にするには、システムを完全に再起動することをお勧めします。 

*注意:THPを無効にする方法を確認するには、各Linuxディストリビューターに確認することをお勧めします。 

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください