IOS-XR において、パフォーマンス限界や、S/W 不具合等で CPU 使用率の高騰が発生した際、CPU 使用率が 25% や 50% 前後で固定された状態が継続する場合があります。
この症状は、IOS-XR がマルチコア CPU をサポートしており、多くのモジュールでマルチコア CPU が使用されていることに起因します。
※マルチコア CPU の場合でも、状況によっては 100% の CPU 使用率(High CPU) になることがあります。
CPU 使用率の確認方法と例
コマンドの実行例 |
---|
パターン1(負荷なしの例) RP/0/RP0/CPU0:XR#show processes cpu | inc util CPU utilization for one minute: 1%; five minutes: 1%; fifteen minutes: 1% パターン2 (100% の負荷が発生した例)
RP/0/RP0/CPU0:XR#show processes cpu | inc util CPU utilization for one minute: 100%; five minutes: 76%; fifteen minutes: 26% パターン3 (50% の負荷が発生した例)
RP/0/RP0/CPU0:XR#show processes cpu | inc util CPU utilization for one minute: 50%; five minutes: 50%; fifteen minutes: 34% パターン4(25% の負荷が発生した例)
RP/0/RP0/CPU0:XR#show processes cpu | inc util CPU utilization for one minute: 25%; five minutes: 25%; fifteen minutes: 22% |
IOS-XR では、各プロセスの中にスレッドがあり、各スレッドが別の CPU コア上で動作しています。
以下の例では、4コア CPU の RP 上で動作する BGP プロセスの状況を show processes コマンドを使用して確認しています。TID の値から、 BGP プロセスの中に23個のスレッドが存在することが確認できます。CPU の値からは、各スレッドが 0~3 の 4 つのコアに振り分けられて動作していることが分かります。
BGP プロセスの詳細情報
コマンドの実行例 |
---|
RP/0/RSP0/CPU0:ASR9K#show processes bgp detail Job ID: 1049 << スレッドの名前を確認する際に使用します PID: 573758 Executable path: /disk0/iosxr-routing-4.3.1/0x100000/bin/bgp <snip> JID TID CPU Stack pri state TimeInState HR:MM:SS:MSEC NAME 1049 1 1 392K 10 Receive 0:00:12:0222 0:00:00:0347 bgp 1049 2 0 392K 10 Receive 359:12:28:0410 0:00:00:0000 bgp 1049 3 2 392K 10 Receive 359:12:28:0392 0:00:00:0000 bgp 1049 4 3 392K 10 Receive 0:00:03:0906 0:00:00:0017 bgp 1049 5 1 392K 10 Receive 359:12:18:0812 0:00:00:0000 bgp 1049 6 2 392K 10 Sigwaitinfo 359:12:19:0701 0:00:00:0000 bgp 1049 7 3 392K 10 Receive 0:01:49:0982 0:00:00:0002 bgp 1049 8 2 392K 10 Receive 0:00:58:0570 0:00:00:0607 bgp 1049 9 1 392K 10 Receive 0:00:49:0977 0:00:00:0006 bgp 1049 10 3 392K 10 Nanosleep 0:00:00:0567 0:00:00:0044 bgp 1049 11 3 392K 10 Receive 0:00:49:0977 0:00:00:0011 bgp 1049 12 3 392K 10 Receive 0:00:02:0636 0:00:43:0721 bgp 1049 13 3 392K 10 Receive 0:00:00:0600 0:00:44:0163 bgp 1049 14 2 392K 10 Receive 0:00:58:0557 0:00:00:0012 bgp 1049 15 1 392K 10 Receive 0:00:58:0564 0:00:00:0007 bgp 1049 16 3 392K 10 Receive 0:00:50:0013 0:00:00:0003 bgp 1049 17 1 392K 10 Receive 0:00:50:0004 0:00:00:0001 bgp 1049 18 3 392K 10 Receive 0:00:58:0120 0:00:00:0010 bgp 1049 19 3 392K 10 Receive 0:00:08:0833 0:00:21:0598 bgp 1049 20 2 392K 10 Receive 359:11:28:0520 0:00:00:0000 bgp 1049 21 2 392K 10 Receive 0:00:00:0805 0:00:00:0006 bgp 1049 22 1 392K 10 Receive 0:00:49:0978 0:00:00:0000 bgp 1049 23 2 392K 10 Receive 359:09:55:0658 0:00:00:0005 bgp |
BGP プロセスの各スレッドの名前は show processes threadname <jid> にて確認できます。
※jid は show processes コマンドで確認できる Job Id を指定します。
BGP プロセスの各スレッドの名前
コマンドの実行例 |
---|
RP/0/RSP0/CPU0:ASR9K#show processes bgp threadname 1049 << show processes bgp で確認した jid を指定 JID TID ThreadName pri state TimeInState NAME 1049 1 bgp-io-control 10 Receive 0:00:06:0598 bgp 1049 2 cdm_evm_thread 10 Receive 359:21:47:0206 bgp 1049 3 10 Receive 359:21:47:0188 bgp 1049 4 bgp-rpki 10 Receive 0:00:02:0590 bgp 1049 5 spp_nsr_client_conn_monitor 10 Receive 359:21:37:0608 bgp 1049 6 10 Sigwaitinfo 359:21:38:0497 bgp 1049 7 bgp-label 10 Receive 0:01:08:0769 bgp 1049 8 bgp-mgmt 10 Receive 0:00:17:0357 bgp 1049 9 bgp-rib-upd-0 10 Receive 0:00:08:0764 bgp 1049 10 lspv_lib BGPv4 10 Nanosleep 0:00:04:0253 bgp 1049 11 bgp-rib-upd-1 10 Receive 0:00:08:0764 bgp 1049 12 bgp-io-read 10 Receive 0:00:01:0332 bgp 1049 13 bgp-io-write 10 Receive 0:00:01:0332 bgp 1049 14 bgp-router 10 Receive 0:00:17:0344 bgp 1049 15 bgp-import 10 Receive 0:00:17:0351 bgp 1049 16 bgp-upd-gen 10 Receive 0:00:08:0800 bgp 1049 17 bgp-sync-active 10 Receive 0:00:08:0791 bgp 1049 18 bgp-crit-event 10 Receive 0:00:16:0908 bgp 1049 19 bgp-event 10 Receive 0:00:27:0622 bgp 1049 20 bgp-mib-trap 10 Receive 359:20:47:0318 bgp 1049 21 bgp-io-ka 10 Receive 0:00:07:0483 bgp 1049 22 bgp-l2vpn-thr 10 Receive 0:00:08:0766 bgp 1049 23 async 10 Receive 359:19:14:0456 bgp |
例として、BGP プロセス内の bgp-router スレッドが CPU リソースを 100% 消費したとします。
bgp-router スレッド は TID(Thread ID) 14 なので、show processes bgp detail から CPU コア2 で動作していることが分かります。この状況で show processes cpu にて CPU 使用率を確認した場合は以下のようになります。
BGP プロセスの CPU 使用率
コマンドの実行例 |
---|
RP/0/RSP0/CPU0:ASR9K#show processes cpu CPU utilization for one minute: 25%; five minutes: 16%; fifteen minutes: 3% PID 1Min 5Min 15Min Process <snip> 573758 25% 12% 2% bgp <snip> |
CPU 使用率は4つのコアの使用率を合計して計算する為、1つのコアで 100% 近いCPU 使用率になったとしても、この環境での CPU 使用率は 25% 程度となります。よって、マルチコアCPUの場合は、CPU 使用率を監視をしていたとしても High CPU 状態であるとには気づきにくいです。
※動作に問題はなくとも、25% や 50% の CPU 使用率が継続することで、問合せ頂くことがあります。
CPU のコア単位で CPU 使用率が確認できる ”run top_procs -D -i1" コマンドを使用すると、CPU コア2 のCPU リソースが 0 に近い(idle が少ない)ことが分かります。
※run コマンドは TAC から指示のあった場合以外は非サポートです。
CPU コア単位の CPU 使用率の確認
コマンドの実行例 |
---|
RP/0/RSP0/CPU0:ASR9K#run top_procs -D -i1 node0_RSP0_CPU0: 328 procs, 4 cpus, 5.08 delta, 359:54:21 uptime Memory: 8192 MB total, 6.303 GB free, sample time: Sat Jan 20 08:09:51 2014 cpu 0 idle: 99.30%, cpu 1 idle: 98.74%, cpu 2 idle: 0.56%, cpu 3 idle: 98.60%, total idle: 74.87%, kernel: 0.05% <snip> |
以上の理由で、IOS-XR でマルチコア CPU が搭載されたモジュールを使用されている場合、一つのプロセスが CPU 使用率 25% や 50% 前後で固定された状態が継続している場合は、CPU 全体の使用率が100% を継続していなくとも従来の High CPU 問題と同様にパフォーマンス限界や、S/W 不具合等の可能性があります。CPU 使用率について気になるようであれば TAC までお問い合わせください。
CRS-1/CRS-3/ASR9000 でサポートする RP と LC の CPU コア数については、下記ドキュメントに記載してあります。
IOS-XR: CRS-1/CRS-3/ASR9000 でサポートする RP/LC の CPU コア数
https://supportforums.cisco.com/ja/document/12067881