9 ワークロードメモリ保護のチューニング #
SAPアプリケーションを物理メモリに保持することは、パフォーマンスのために不可欠です。以前の製品バージョンでは、ページキャッシュ制限によって、ページキャッシュが増加してもディスクにスワップアウトできませんでした(SUSE Linux Enterprise Server for SAP applications 11 SP1以降およびSUSE Linux 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コントローラは引き続き利用できますが、マウントされなくなりました。
systemdsystemdは、cgroupの階層を作成および維持するためのインフラストラクチャを提供し、cgroupパラメータの設定を可能にします。
9.2 ワークロードメモリ保護のサポート #
ワークロードメモリ保護は、Appサーバ(SAP NetWeaver、SAP S/4HANA)など、1つのホスト上の1つまたは複数のSAPシステムに対してAMD64/Intel 64およびPOWER上のSUSE Linux Enterprise Server for SAP applications 15 SP7でサポートされています。SUSE High Availabilityクラスタソリューションがサポートされています。
ワークロードメモリ保護は、SAP HANA以外のデータベースには適用されません。開始メソッドによって、プロセスが専用のcgroup内部または外部で実行される場合があります。内部で実行される場合、memory.lowを決定する際にメモリ消費量を考慮する必要があります。
ワークロードメモリ保護の使用にはメリットがありますが、特定の制限に注意する必要があります。
ワークロードメモリ保護は専用のcgroup内部のメモリ負荷に対して保護できません。
ワークロードメモリ保護はSAPシステムまたはそのインスタンスを相互に保護することはできません。すべてのSAPプロセスは同じメモリ制限を共有します。複数のSAPシステム(SAP NetWeaverやSAP S/4HANAなど)がある場合、ワークロードメモリ保護は、一方のSAPアプリケーションから他方のSAPアプリケーションを保護できません。
ワークロードメモリ保護を使用する場合、SAPシステムはsystemdを使用する必要があります。systemd統合の詳細については、SAP Notes:
「3139184 - Linux: systemd integration for sapstartsrv and SAP Host Agent」および
「3189534 - Linux: systemd integration for sapstartsrv and SAP HANA」を参照してください。
SUSE Linux Enterprise Server for SAP applications 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ホストエージェントを停止します。
サービスは有効にすることができますが、すべての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の設定を再書き込みします。
>sudogrub2-mkconfig-o /boot/grub2/grub.cfg再起動後(後で実行される)、cgroup階層はv2 (統合階層)のみに切り替えられます。
SAP.slice用にMemoryLowを設定します。>sudosystemctlset-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が実際に使用されていることを確認します。
#grepcgroup /proc/mounts cgroup /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime 0 0低いメモリ値が設定されていることを確認します。
>systemctlshow -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の値を変更するには、次のコマンドを実行します。
#systemctlset-property SAP.slice MemoryLow=...
変更はすぐに有効になります。
基礎となるcgroupメモリコントローラは、値をページサイズの倍数に切り上げます。混乱を避けるため、MemoryLowの値をページサイズの倍数に設定してください。
MemoryLowの値
MemoryLowをすでにSAP.sliceに割り当てられているメモリより小さい値に設定しないでください。確認するには、次のコマンドを実行します。
#systemctlshow -p MemoryCurrent SAP.slice
9.5 sapwmpを使用したワークロードメモリ保護からのマイグレーション(SUSE Linux Enterprise Server for SAP applications 15 SP4以前のSLES) #
サービスパックSP4以前からアップグレードしていて、systemd対応のインスタンスにまだ切り替えていない場合、マイグレーションを実行する必要があります。
systemdが有効なSAPシステムに切り替えます。詳細については、 「3139184 - Linux: systemd integration for sapstartsrv and SAP Host Agent」および 「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)