はじめに
このドキュメントでは、パントキープアライブの障害をトラブルシューティングする方法について説明します。
前提条件
要件
Cisco IOS® XEの基礎知識
使用するコンポーネント
このドキュメントは、CSR8000v、ASR1000、ISR4000シリーズなどのCisco IOS XEルータに基づいています。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
背景説明
Cisco IOS XEベースシステムのパントパスは、内部データパスです。これは、コントロールプレーンとデータプレーン間の通信が行われるパスです。
この内部パスは、ルータで使用されるコントロールプレーンパケットを送信するために使用されます。
このパスに障害が発生すると、ログに次のようなエラーが記録されます。
%IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 60 seconds
キープアライブメッセージは、QFPとRPの間のパスの状態を監視するメッセージです。
このパスは、システムの運用に不可欠です。
これらのキープアライブが5分以内に受信されない場合は、次のような重要なログが表示されます。
%IOSXE_INFRA-2-FATAL_NO_PUNT_KEEPALIVE: Keepalive not received for 300 seconds resetting
この状態から回復するために、システムがリセットされます。
パントデバッグログファイル
パントキープアライブが失敗し、それに起因するリセットが発生した場合、問題発生時の動作を理解するために関連データを収集するpunt_debug.logというファイルが作成されます。
注:ファイルpunt_debug.logを生成するには、システムが最新のCisco IOS XEソフトウェアリリースで最新の状態になっていることを確認します。
このファイルには、さまざまなカウンタを理解するために、これらのコマンドの実行が複数回含まれています。
show platform software infra punt-keepalive(プラットフォームのソフトウェアを表示)
show platform software infra lsmpi(登録ユーザ専用)
show platform software infrastructure lsmpiドライバ
show platform software infra lsmpi bufusage(登録ユーザ専用)
show platform software punt-policer(登録ユーザ専用)
show platform software status control-processor brief
show process cpu platform sorted(プロセスCPUプラットフォームのソート済み)
show platform software infrastructure punt(プラットフォームのソフトウェアのパント)
show platform hardware qfp active statistics drop(プラットフォームのハードウェアQFPアクティブ統計ドロップ)
show platform hardware qfp active infra punt statistics type(原因別)
show platform hardware qfp active infrastructure bqs queue output default all(プラットフォームのハードウェアqfpアクティブインフラストラクチャbqsキュー出力のデフォルトすべて)
注:punt_debug.logでは、問題を引き起こす可能性のあるエラーインジケータと大量のパケットに注目します。
Linux共有メモリパントインターフェイス(LSMPI)
このコンポーネントは、フォワーディングプロセッサからルーティングプロセッサにパケットとメッセージを送信するために使用されます。
パントポリサー
パントポリサーは、コントロールプレーンパケットをシステムで保護およびポリシングできるようにするコントロールプレーン保護メカニズムです。
show platform software punt-policerコマンドを使用すると、適合パケットとこのポリサーによる廃棄を確認できます。
----------------- show platform software punt-policer ------------------
Per Punt-Cause Policer Configuration and Packet Counters
Punt Config Rate(pps) Conform Packets Dropped Packets Config Burst(pkts) Config Alert
Cause Description Normal High Normal High Normal High Normal High Normal High
-------------------------------------------------------------------------------------------------------------------------------------------------------------
2 IPv4 Options 874 655 0 0 0 0 874 655 Off Off
3 Layer2 control and legacy 8738 2185 0 0 0 0 8738 2185 Off Off
4 PPP Control 437 1000 0 0 0 0 437 1000 Off Off
—— snip : output omitted for brevity ——
コマンドshow platform software infrastructure punt は、パントの原因に関するカウンタデータを表示します。
------------------ show platform software infrastructure punt ------------------
LSMPI interface internal stats:
enabled=0, disabled=0, throttled=0, unthrottled=0, state is ready
Input Buffers = 51181083
Output Buffers = 51150283
—— snip : output omitted for brevity ——
EPC CP RX Pkt cleansed 0
Punt cause out of range 0
IOSXE-RP Punt packet causes:
3504959 ARP request or response packets
27 Incomplete adjacency packets
—— snip : output omitted for brevity ——
FOR_US Control IPv4 protcol stats:
2369262 TCP packets
FOR_US Control IPv6 protcol stats:
6057 ICMPV6 packets
Packet histogram(500 bytes/bin), avg size in 119, out 95:
Pak-Size In-Count Out-Count
0+: 51108211 51144723
500+: 22069 2632
1000+: 2172 0
1500+: 3170 0
このデータは、パントキープアライブパスに影響を与える可能性のある内容を理解するのに役立ちます。
データ収集用のEmbedded Event Manager(EEM)
punt_debug.logが問題を診断するのに十分なデータを提供しない場合は、EEMスクリプトを使用して、問題が発生した時点でより多くのデータポイントを取得できます。
event manager applet punt_script authorization bypass
event syslog pattern "IOSXE_INFRA-4-NO_PUNT_KEEPALIVE" maxrun 1000
action 0.0 cli command "enable"
action 0.1 set i "0"
action 0.2 cli command "test platform software punt-keepalive ignore-fault"
action 0.3 while $i lt 10
action 0.4 syslog msg "iteration $i"
action 0.9 cli command "show clock | append bootflash:qfp_lsmpi.txt"
action 1.0 cli command "show platform software infrastructure lsmpi | append bootflash:qfp_lsmpi.txt"
action 1.1 cli command "show platform software infrastructure lsmpi driver | append bootflash:qfp_lsmpi.txt"
action 1.2 cli command "show platform software infrastructure lsmpi driver 0 | append bootflash:qfp_lsmpi.txt"
action 1.3 cli command "show platform software infrastructure lsmpi bufusage | append bootflash:qfp_lsmpi.txt"
action 1.4 cli command "show platform software infrastructure lsmpi bufusage 0 | append bootflash:qfp_lsmpi.txt"
action 1.5 cli command "show platform software infrastructure punt-keepalive | append bootflash:qfp_lsmpi.txt"
action 1.6 cli command "show platform software infrastructure punt | append bootflash:qfp_lsmpi.txt"
action 1.7 cli command "show platform software punt-policer | append bootflash:qfp_lsmpi.txt"
action 1.8 cli command "show platform hardware qfp active infrastructure punt stat type per-cause | append bootflash:qfp_lsmpi.txt"
action 1.9 cli command "show platform hardware qfp active infrastructure punt statistics type punt-drop | append bootflash:qfp_lsmpi.txt"
action 1.a cli command "show platform hardware qfp active infrastructure punt statistics type inject-drop | append bootflash:qfp_lsmpi.txt"
action 1.b cli command "show platform hardware qfp active infrastructure bqs queue output default interface-string internal0/0/rp:0 hier detail | append bootflash:qfp_lsmpi.txt"
action 1.c cli command "show platform hardware qfp active statistics drop | append bootflash:qfp_lsmpi.txt"
action 1.d cli command "show platform hardware qfp active datapath utilization | append bootflash:qfp_lsmpi.txt"
action 1.e cli command "show platform hardware qfp active datapath infrastructure sw-hqf | append bootflash:qfp_lsmpi.txt"
action 1.f cli command "show platform hardware qfp active datapath infrastructure sw-distrib | append bootflash:qfp_lsmpi.txt"
action 1.g cli command "show platform hardware qfp active datapath infrastructure sw-pktmem | append bootflash:qfp_lsmpi.txt"
action 1.h cli command "show platform software status control-processor brief | append bootflash:qfp_lsmpi.txt"
action 2.0 increment i
action 2.1 wait 3
action 2.4 end
action 3.0 syslog msg "End of data collection. Please transfer the file at bootflash:qfp_lsmpi.txt"
action 5.0 cli command "debug platform hardware qfp active datapath crashdump"
注:スクリプトに含まれるコマンドは、スクリプトが設定されているプラットフォームによって異なります。
このスクリプトを使用すると、問題発生時のlsmpi、リソース、およびパント状態を理解できます。
EEMスクリプトには、qfpコアダンプを生成するdebug platform hardware qfp active datapath crashdumpコマンドが含まれています。このコアダンプは開発者チームとTACが必要とします。
注:Cisco TACにケースを提出する場合は、スクリプトによって生成されたコアファイルを提供してください。
パケットトレースが必要な場合は、次の修正をスクリプトに追加できます。
まず、パケットトレースの設定をセットアップします。これは、EEMスクリプトから実行できます。
debug platform packet-trace packet 8192 fia-trace circular(隠しコマンド)
debug platform condition both(プラットフォームの両方の状態をデバッグ)
debug platform packet-trace copy packet both L2
次に、EEMスクリプト内で次のアクションを実行して開始および停止します。
アクション6.2 cliコマンド「debug platform condition start」
アクション6.3待機8
アクション6.4 cliコマンド「debug platform condition stop」
次に、次のコマンドを使用してデータを別のファイルにダンプします。
action 6.5 cliコマンド「show platform packet-trace statistics | append bootflash:traceAll.txt」と入力します。
アクション6.6 cliコマンド「show platform packet-trace summary | append bootflash:traceAll.txt」と入力します。
アクション6.7 cliコマンド「show platform packet-trace packet all decode | append bootflash:traceAll.txt」と入力します。
このパケットトレースアクションロジックは、EEMスクリプト内のwhileサイクルのendステートメントの直後に追加されます。
このスクリプトを使用すると、問題を引き起こしている可能性のあるパケットのタイプを把握できます。
パケットトレースは、「IOS XEデータパスパケットトレース機能によるトラブルシューティング」で説明されている機能です。
実例
CSR8000vは絶えずリブートしています。
システムレポートを抽出すると、クラッシュダンプと、スタックトレース内のpunt keep alive関連機能を示すiosdコアファイルを確認できます。
注:スタックトレースのデコードには、TACのサポートが必要です。
ただし、crashinfoファイルはクリアテキストであり、次の症状が見られます。
Jan 15 14:29:41.756 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 160 seconds
Jan 15 14:30:01.761 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 180 seconds
Jan 15 14:30:21.766 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 200 seconds
Jan 15 14:30:41.776 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 220 seconds
Jan 15 14:31:01.780 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 240 seconds
Jan 15 14:31:41.789 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 280 seconds
Jan 15 14:32:01.791 AWST: %IOSXE_INFRA-4-NO_PUNT_KEEPALIVE: Keepalive not received for 300 seconds
Jan 15 14:32:01.791 AWST: %IOSXE_INFRA-2-FATAL_NO_PUNT_KEEPALIVE: Keepalive not received for 300 seconds resetting
%Software-forced reload
Exception to IOS Thread:
Frame pointer 0x7F0AE0EE29A8, PC = 0x7F0B342C16D2
UNIX-EXT-SIGNAL: Aborted(6), Process = PuntInject Keepalive Process
-Traceback= 1#7b5996c3
影響を受けるプロセスは、PuntInject Keepaliveプロセスです。
キープアライブが300秒のしきい値に達すると、システムはアボート信号をトリガーする必要があります。
punt_debug.logは、show platform software infrastructure lsmpi driverコマンド内の送信エラーの一部を示します。
Reason for TX drops (sticky):
Bad packet len : 0
Bad buf len : 0
Bad ifindex : 0
No device : 0
No skbuff : 0
Device xmit fail : 82541 >>>>>>>>>>>>>>>>>>>>> Tx failure
これは一般的な障害です。
このカウンタは、ファイルで取得された複数のサンプル内で増加します。
EEMスクリプトは、リソース、パントデータパス、およびその他のインフラストラクチャ関連コマンドに関する詳細なデータを取得するために提供されています。
lsmpiトラフィックパントカウンタを確認すると、EIGRPコントロールプレーンパケットが顕著であることがわかります。usパケットとして識別されるパケットを次に示します。
17660574 For-us data packets
543616 RP<->QFP keepalive packets
1004 Glean adjacency packets
3260636 BFD control packets
122523839 For-us control packets<<<<
FOR_US Control IPv4 protcol stats:
153551 TCP packets
2663105 GRE packets
104394559 EIGRP packets<<<<
その後、ハイパーバイザがオーバーサブスクライブされ、基盤となるコンピューティングリソースに影響を与えていることが判明しました。
CSR8000vは別のハイパーバイザに導入され、問題の軽減に役立ちました。
機能拡張
Cisco Bug ID CSCwf85505により、Cisco IOS XE 17.15バージョン以降、自動QFPコアファイル生成の拡張機能が導入されました