はじめに
このドキュメントでは、StarOSのリリース21.5.0で導入された「グレースフルアサート処理」機能について説明します。
前提条件
要件
次の項目に関する知識があることが推奨されます。
- スターOs
- サービングGPRSサポートノード(SGSN)
使用するコンポーネント
このドキュメントの情報は、StarOS R21.5以降に基づくものです。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
この機能は、公式ドキュメント(SGSN-Adminガイド)で確認できます。
グレースフルアサート処理フレームワークは、コールの実行時にASSERT条件に一致したサブスクライバセッションのグレースフルハンドリングを可能にします。これは、同じProclet上の他のサブスクライバセッションに影響を与えずに実現されます。
通常、ASSERT条件が満たされると、Session Manager(SessMgr)Procletが再起動し、AAA Manager(AAAMgr)からすべてのサブスクライバセッションを回復します。 リカバリされたサブスクライバセッションはIDLE状態に移行します。
正常なアサート処理が有効な場合、SessMgrプロトコルは再起動されません。その代わりに、SessMgrプローブは、影響を受けたサブスクライバのセッションだけをAAAMgrから回復し、SessMgr上の既存のサブスクライバのセッションをクリアします。リカバリされたサブスクライバセッションはIDLE状態に移行します。回復手順の時点で、サブスクライバ宛てのすべてのメッセージがドロップされます。回復後、サブスクライバは自身に宛てられたメッセージを処理し続けます。この手順では、SessMgrに残っているサブスクライバセッションは影響を受けません。
問題
根本原因の修正が複雑であるか、根本原因が不明である、コーナーやコリジョンのケースがあります。このような場合、セッションマネージャの完全な再起動を回避するために、グレースフルアサート方式が採用されます。
解決方法
グレースフルアサートでは、グレースフルアサート条件に一致する1セッションをクリーンアップして復元できます。
同じsessmgr上の他のセッションへの影響はありません。
グレースフルリスタートのためのSNMPトラップやsyslogはありません。
正常なアサートの場合、KPIの損失はありません。タスク自体は再起動されません。
ただし、グレースフルアサートは他のクラッシュと同様に処理されるため、show crash listでエントリを取得することになります。
SSDからグレースフルアサートを特定する方法:
- システムが開始するコア付き状態ダンプ。 – スタックの前に「show crash」の出力に表示される
- クラッシュしたprocletは、ユーザが開始したものか、非ボクサーのものかのいずれかです。スタックの後の「debug console cpu」出力に表示されます。
- pid 7939 facility sessmgr failover 5132->94 - 「debug console CPU」の下に、グレースフルアサートの場合にログが記録されず、表示されない
設定
グレースフルアサート処理は、次のように設定できます。
configure
debug controlled-assert s4sgsn
[ disable | enable ] core-generation
limit-per-assert assert_value
[ no ] test file-name file_name line-number line_num [ sequence-number seq_num ]
end メモ:
-
controlled-assert:コントロールアサートフレームワークを設定します。
-
s4sgsn:S4-SGSN制御アサートを設定します。
-
core-generation:コア生成を制御アサートに設定します。デフォルト:有効。
-
limit-per-assert:コントロールアサートに対するアサートごとの制限を設定します。デフォルト:5
-
test file-name file_name line-number line_num [ sequence-number seq_num ]:制御アサートテスト処理を設定します。
-
file-name file_name:アサート制御が必要なファイル名を構成します。file_nameは1から254文字の英数字文字列である必要があります。
-
line-number line_num:アサート制御が必要な行番号を構成します。line_numは1から4294967295の整数である必要があります。
-
sequence-number seq_num:アサート制御が必要な順序番号を構成します。seq_numは1から100の整数である必要があります。デフォルト:1
-
disable:制御されたアサートフレームワークに対して指定されたアクションを無効にします。
-
enable:制御されたアサートフレームワークに対して指定されたアクションを有効にします。
-
no:制御されたアサートフレームワークに関連する指定のテスト構成を削除します。
例
********************* CRASH #93 ***********************
SW Version : 21.5.19
Similar Crash Count : 8
Time of First Crash : 2019-May-21+06:57:14
Fatal Signal 6: Aborted
Note: System-initiated state dump w/core. <<< This note indicates a graceful assert.
Process: card=10 cpu=0 arch=X pid=11573 cpu=~16% argv0=sessmgr
Crash time: 2019-May-23+06:00:13 UTC
Recent errno: 11 Resource temporarily unavailable
Build_number: 71813
確認
このセクションでは、設定が正常に動作していることを確認します。
すべてのアクティブなセッションの制御されたアサート統計の取得例:
# zcat ssd_s4sgn.log.gz | sed -n -e '/\*\{7\} show session subsystem facility sessmgr all debug-info /,/\*\{7\}/p' | sed -e '/^SessMgr: /,/^Controlled Assert Stats/{/^SessMgr: /!{/^Controlled Assert Stats/!d}}' | grep -E "SessMgr: Instance [0-9]{1,3}$" -A 10出力例:
SessMgr: Instance 135
Controlled Assert Stats
Module Name :SGW_DRV
Assert Count:0
Count File:Line Last Assert hit time(in sec)
Module Name :S4_SGSN
Assert Count:1
Count File:Line Last Assert hit time(in sec)
1 sess/sgsn/sgsn-app/s4_sm/s4_smn_egtpc.c:3164 2019/01/30 09:28:11 UTC
この情報(カウントと回線番号)は、sessmgrが他のクラッシュのために再起動した場合にリセットされます。最大数(デフォルトは5)に達すると、コアは生成されません。
トラブルシュート
現在、この設定に関する特定のトラブルシューティング情報はありません。