記事
· 2020年10月19日 5m read

LinuxでのKernelパラメータ値の設定

これはInterSystems FAQ サイトの記事です。
 

一部のKernelパラメータはInterSystems製品を稼働するためには、不適切な値となっているため、調整する必要があります。

  1. kernel.shmmax (共有メモリセグメントの最大値)

     通常既定値で問題ありません。

   設定する場合は、共有メモリにあわせたshmmaxの値は以下の a)~ f) の合計値になります。

        a) データベースバッファ globals(Mbytes) x 1.075

            globals

        b) ルーチンバッファ routines(Mbytes) x 1.02

            routines

        c) 一般メモリヒープ gmheap(Kbytes) または core数 x 6(Mbytes)のいずれか大きな値の方

            gmheap

        d) ジャーナル・バッファ jrnbufs(Mbytes)
            jrnbufs

        e) ECP (MaxServers + MaxServerConn)*2(Mbytes)

             MaxServers MaxServerConn

        f) その他 10Mbytes

  2. kernel.shmall (総共有メモリサイズ)

     通常既定値で問題ありません。

     システムで使用する共有メモリの合計サイズになります。

     単位はページ(4Kbytes)です。

     この値は少なくとも使用する共有メモリサイズ以上にする必要があります。
 
  3. kernel.shmmni (共有メモリセグメント数)

     通常既定値で問題ありません。

     使用するセグメント数は1つです。
     (データベースバッファ、ルーチンバッファ、一般メモリヒープは1つの共有メモリセグメントに配置されます)

     ただし、管理ポータル用のApache にてセグメントを1つ使用します。

     このため、管理ポータル用Apache起動が有効な場合、1インスタンス当り使用するセグメント数は2になります。
 
  4. kernel.sem (semmni、semmsl、 semmns セマフォ数)

     通常既定値で問題ありません。

     設定する場合は、プロセステーブルのエントリ数と同数のセマフォを使用します。

        プロセステーブルのエントリ数は必要に応じて自動拡張し、初期値の128から32個単位で自動拡張しますが、
        その際にセマフォも同じ数使用します。

        よって、セマフォのKernelパラメータの設定値の算出のためには、最大プロセス数(デーモンプロセスも含む)
        を見積もる必要があります。

        semmns = 最大プロセス数(32の倍数) + その他InterSystems製品以外で使用するセマフォ数
        semmni × semmsl > semmnsになるようsemmniとsemmslの値を設定します。
        通常semmslは既定値を使用し semmniの値を変更します。

        ※semmni:システム全体のセマフォ集合の最大数。方針依存 。
        (Linuxではこの制限値は kernel.sem の第4フィールドに対応し、読み出しも変更もできる。)

        ※semmsl:semidあたりのセマフォの最大数。 実装依存。 
        (Linuxではこの制限値は kernel.sem の第1フィールドに対応し、読み出しも変更もできる。)

        ※semmns:システム全体のセマフォの最大数。方針依存。
        (Linuxではこの制限値は kernel.sem の第2フィールドに対応し、読み出しも変更もできる。) 
        semmsl × semmniより大きな値は意味を持たない。

  5. vm.nr_hugepages(HugeTLB ページ数または静的なヒュージ・ページ数)

     共有メモリを HugeTLB ページまたは静的なヒュージページで使用する場合に設定する必要があります。
     HugeTLB ページの使用は、パフォーマンスにおいて非常に有益な為、強く推奨します。

     設定値は共有メモリのサイズ(以下の a)~ f) の合計値)をヒュージ・ページのサイズで割った値になります。

        a) データベースバッファ globals(Mbytes) x 1.075

            globals

        b) ルーチンバッファ routines(Mbytes) x 1.02

            routines

        c) 一般メモリヒープ gmheap(Kbytes) または core数 x 6(Mbytes)のいずれか大きな値の方

            gmheap

        d) ジャーナル・バッファ jrnbufs(Mbytes)
            jrnbufs

        e) ECP (MaxServers + MaxServerConn)*2(Mbytes)

             MaxServers MaxServerConn

        f) その他 10Mbytes

     ヒュージ・ページのサイズは、/proc/memoinfo の Hugepagesize値にて確認します。
     Hugepagesize値は、プラットフォームやLinux バージョンにより異なりますのでご注意ください。

     Linux でのヒュージ・ページの構成

  6. 透過的ヒュージ・ページ(THP)の無効化

     Linux 2.6.38 カーネル以降、透過的ヒュージ・ページは既定で有効になっています。
     この設定が有効な場合、プロセスの作成頻度が高いアプリケーションではメモリ割り当ての遅延を引き起こすことがあります。

     これによりパフォーマンスに影響する可能性がある為、透過的ヒュージ・ページを無効にすることをお勧めします。
     無効化の方法はLinuxバージョンにより異なりますのでご注意ください。

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

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