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=
を正しく設定します。
すべてのSAPインスタンスとSAP Host Agentを停止します。
サービスは有効にすることができますが、すべてのSAPプロセスを終了する必要があります。
次のように
/etc/default/grub
のGRUB_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ごとのスワップアウトされたメモリ容量を示します。GRUB2の設定を再書き込みします。
>
sudo
grub2-mkconfig
-o /boot/grub2/grub.cfg再起動後(後で実行される)、cgroup階層はv2 (統合階層)のみに切り替えられます。
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 再起動と確認 #
システムを再起動します。
再起動後に、cgroups v2が実際に使用されていることを確認します。
#
grep
cgroup /proc/mounts cgroup /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0低いメモリ値が設定されていることを確認します。
>
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
が有効なインスタンスに切り替えていない場合は、マイグレーションを実行する必要があります。
systemd
が有効なSAPシステムに切り替えます。詳細については、139184 - Linux: systemd integration for sapstartsrv and SAP Host Agent and 3189534 - Linux: systemd integration for sapstartsrv and SAP HANAを参照してください。すべてのインスタンスプロファイルから
sapwmp-capture
を呼び出す行を削除します(例:Execute_20 = local /usr/lib/sapwmp/sapwmp-capture -a
)。すべてのSAPサービスは、変更後に再起動する必要があります。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)