目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / ガイド / ワークロードメモリ保護のチューニング
適用項目 SUSE Linux Enterprise Server for SAP Applications 15 SP5

9 ワークロードメモリ保護のチューニング

SAPアプリケーションを物理メモリに保持することは、パフォーマンスのために不可欠です。古い製品バージョンでは、ページキャッシュ制限により、ページキャッシュの増加によるディスクへのスワップアウトが防止されていました(SUSE Linux Enterprise Server for SAP Applications 11 SP1以降およびSUSELinux Enterprise Server for SAP Applications 12)。SUSE Linux Enterprise Server for SAP Applications 15では、ページキャッシュ制限がより高度なワークロードメモリ保護に置き換えられました。

ワークロードメモリ保護は、SAPインスタンスを専用のcgroup (v2)に置き、memory.lowパラメータによって、物理メモリに保持するメモリ容量をカーネルに伝えます。これにより、ページキャッシュの増加を含む、そのcgroupの外側のあらゆる形態のメモリ負荷に対してこのcgroup内のプロセスが保護されます。ワークロードメモリ保護は、このcgroup内のメモリ負荷に対して保護することはできません。これは、1つのホスト上の「すべての」インスタンスのメモリをカバーします。

memory.lowの値は、SAPインスタンスとワークロードの種類によって異なり、手動で設定する必要があります。システムが過度な負荷下にある場合、Linuxカーネルはmemory.low値を無視して、OOMキラーをスワップしたり、呼び出したりしてでも、システム全体を安定化させようとします。

cgroupに関する詳細については、https://documentation.suse.com/sles-15/html/SLES-all/cha-tuning-cgroups.htmlを参照してください。

9.1 アーキテクチャ

ワークロードメモリ保護は次の2つのコンポーネントに依存しています。

cgroup2メモリコントローラ(Linuxカーネル)

cgroup2メモリコントローラパラメータmemory.lowでは、Linuxカーネルが物理メモリに保持するメモリ容量を定義できます。このメモリ容量は、システム全体が重大なメモリ状況にある場合を除いて、再利用プロセスから除外されます。

ワークロードメモリ保護はmemory.lowを使用して、SAPプロセスからのメモリがページングされたり、ディスクにスワップアウトされたりしないようにします。メモリコントローラを除いて、cgroup1コントローラは引き続き利用できますが、マウントされなくなりました。

systemd

systemdでは、cgroup階層を作成および維持するためのインフラストラクチャを提供し、cgroupパラメータの設定を可能にします。Systemdでは、cgroup階層を作成および維持するためのインフラストラクチャが提供され、cgroupパラメータの設定を可能にします。

9.2 ワークロードメモリ保護のサポート

ワークロードメモリ保護は、App Server (SAP NetWeaver、SAP S/4HANA)など1台のホスト上にある1台以上のSAPシステム用AMD64/Intel 64およびPOWER上のSUSE Linux Enterprise Server for SAP Applications 15 SP5でサポートされています。SUSE High Availabilityクラスタソリューションがサポートされています。

ワークロードメモリ保護は、SAP HANA以外のデータベースには適用されません。開始メソッドによって、プロセスが専用のcgroup内部または外部で実行される場合があります。内部で実行される場合、memory.lowを決定する際にメモリ消費量を考慮する必要があります。

重要
重要: ワークロードメモリ保護の制限

ワークロードメモリ保護の使用にはメリットがありますが、特定の制限に注意する必要があります。

  • ワークロードメモリ保護は専用のcgroup内部のメモリ負荷に対して保護できません。

  • ワークロードメモリ保護はSAPシステムまたはそのインスタンスを相互に保護することはできません。すべてのSAPプロセスは同じメモリ制限を共有します。複数のSAPシステム(SAP NetWeaverやSAP S/4HANA)がある場合、ワークロードメモリ保護は1つのSAPアプリケーションを別のSAPアプリケーションから保護できません。

ワークロードメモリ保護を使用する場合、SAPシステムはsystemdを使用する必要があります。systemdの統合に関する詳細については、SAP Notes: 139184 - Linux: systemd integration for sapstartsrvおよびSAP Host Agent and 3189534 - Linux: systemd integration for sapstartsrv and SAP HANAを参照してください。

重要
重要

sles4sap 15 SP5以降、パッケージsapwmpは非推奨です。マイグレーションについては、9.5項 「sapwmpを使用したワークロードメモリ保護からのマイグレーション(SUSE Linux Enterprise Server for SAP Applications 15 SP4以前のSLES)」を参照してください。

9.3 ワークロードメモリ保護の設定

9.3.1 ワークロードメモリ保護の準備

SAPスタートサービスは、SAPインスタンスを専用のSAP.slice cgroupに配置します。ワークロードメモリ保護を使用するには、cgroup2統合階層に切り替えてMemoryLow=を正しく設定します。

  1. すべてのSAPインスタンスとSAP Host Agentを停止します。

    サービスは有効にすることができますが、すべてのSAPプロセスを終了する必要があります。

  2. 次のように/etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTに追加することによって、systemd.unified_cgroup_hierarchy=trueをカーネルコマンドラインに追加します。

    GRUB_CMDLINE_LINUX_DEFAULT="... systemd.unified_cgroup_hierarchy=true swapaccount=1"

    この変更により、cgroup2コントローラのみが/sys/fs/cgroupにマウントされます。ただし、メモリコントローラを除き、Cgroup1コントローラは、まだ利用可能です。cgroup1を使用するツールは、そのままでは機能せず、再設定が必要な場合があります。また、cgroup1に必要なマウント構造を提供する必要があります。

    パラメータswapaccount=1は、ワークロードメモリ保護が機能するために必要ではありませんが、サポートケースでの分析を支援し、cgroupごとのスワップアウトされたメモリ容量を示します。

  3. GRUB2の設定を再書き込みします。

    > sudo grub2-mkconfig -o /boot/grub2/grub.cfg

    再起動後(後で実行される)、cgroup階層はv2 (統合階層)のみに切り替えられます。

  4. SAP.slice用にMemoryLowを設定します。

    > sudo systemctl set-property SAP.slice MemoryLow=...

    このコマンドは、/etc/systemd/system.control/SAP.slice.d/にドロップインを作成し、MemoryLowを設定します。

    SAP.sliceは、SAPプロセスを含むcgroupの名前です。MemoryLowは、最初に述べたcgroupパラメータmemory.lowと等価なsystemdです。MemoryLowの値は、SAPアプリケーションおよびワークロードのタイプによって異なります。

    SAP HANAの場合

    SAP HANAにはグローバル割り当て制限があるため、その値を直接使用できます。

    SAPアプリケーションサーバ(SAP NetWeaver、SAP S/4HANA)

    アプリケーションサーバの場合、ワークロードのサイジングはMemoryLowの値を示す必要があります。

    次の点に注意してください。

    • 1台のホスト上のすべてのSAPインスタンスは、SAP.slice内に存在します。MemoryLowは、そのホスト上の「すべての」インスタンスのメモリ容量をカバーする必要があります。SAPシステムまたはそのインスタンスを相互に保護することはできません。

    • SAP HANA以外のデータベースを使用している場合、一部のデータベースプロセスがSAP.sliceに含まれている可能性があります。MemoryLow値を決定する際には、これらのメモリ消費量を考慮する必要があります。

    • MemoryLowの値は、物理メモリの値に非常に近い値、またはこれらの値より大きな値にしないでください。システムサービスおよび追加のインストール済みソフトウェアにもメモリが必要です。SAPアプリケーションを犠牲にしてスワップを広範囲に使用しなければならない場合、システムが応答しなくなる可能性があります。

    注記
    注記: MemoryLow値を正しく計算する

    MemoryLowは、メモリサイズをバイト単位で取得します。値の末尾にK、M、G、Tが付いている場合、指定されたメモリサイズはそれぞれ、キビバイト、メビバイト、ギビバイト、またはテビバイトとして解析されます(1000ではなく、1024をベースとしている場合は、https://en.wikipedia.org/wiki/Binary_prefixを参照)。または、パーセンテージ値が指定される場合があります。この場合、システムにインストールされている物理メモリを基準として取得されます。

    基礎となるcgroupメモリコントローラは、値をページサイズの倍数に切り上げます。混乱を避けるため、MemoryLowの値をページサイズの倍数に設定してください。

これでシステムが再起動する準備が整いました。

9.3.2 再起動と確認

  1. システムを再起動します。

  2. 再起動後に、cgroups v2が実際に使用されていることを確認します。

    # grep  cgroup /proc/mounts
    cgroup /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0
  3. 低いメモリ値が設定されていることを確認します。

    > systemctl show -p MemoryLow SAP.slice
    MemoryLow=18487889920    <- Should be your chosen value (always in bytes)!
    
    # cat /sys/fs/cgroup/SAP.slice/memory.low
    18487889920    <- Should be your chosen value!

    変数MemoryLowは任意の値に設定できますが、変数の内容は常にページサイズの倍数です。これらの値にわずかに違いがあることに気づく場合には、このことに注意してください。

9.4 MemoryLowの値の変更

MemoryLowの値を変更するには、次のコマンドを実行します。

# systemctl set-property SAP.slice MemoryLow=...

変更はすぐに有効になります。

基礎となるcgroupメモリコントローラは、値をページサイズの倍数に切り上げます。混乱を避けるため、MemoryLowの値をページサイズの倍数に設定してください。

重要
重要: MemoryLowの値

MemoryLowをすでにSAP.sliceに割り当てられているメモリより小さい値に設定しないでください。確認するには、次のコマンドを実行します。

# systemctl show -p MemoryCurrent SAP.slice

9.5 sapwmpを使用したワークロードメモリ保護からのマイグレーション(SUSE Linux Enterprise Server for SAP Applications 15 SP4以前のSLES)

Service Pack SP4以前からアップグレードしていて、まだsystemdが有効なインスタンスに切り替えていない場合は、マイグレーションを実行する必要があります。

手順 9.1: マイグレーションの手順
  1. systemdが有効なSAPシステムに切り替えます。詳細については、139184 - Linux: systemd integration for sapstartsrv and SAP Host Agent and 3189534 - Linux: systemd integration for sapstartsrv and SAP HANAを参照してください。

  2. すべてのインスタンスプロファイルからsapwmp-captureを呼び出す行を削除します(例: Execute_20 = local /usr/lib/sapwmp/sapwmp-capture -a)。すべてのSAPサービスは、変更後に再起動する必要があります。

  3. MemoryLow=を監視および再調整します。systemdが有効なSAPホストエージェントにSAP.sliceの下にcgroup (saphostagent.service)が追加され、保護対象となります。

    注記
    注記

    cgroup2マウントにオプションmemory_recursiveprotが設定されている場合(デフォルトで設定されています)、各SAPサービスまたはSAPホストエージェントサービスにMemoryLow=infinityを設定する必要はありません。これを確認するには、次のコマンドを実行します。

    >  mount | grep cgroup2
          cgroup2 on /sys/fs/cgroup type cgroup2
          (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)