目錄

簡介

背景資訊

高CPU故障排除工作流程

案例研究1.地址解析協定中斷

步驟1.確定消耗CPU週期的進程

步驟2.調查FED將資料包傳送到控制平面的原因

案例研究2.使用CoPP的IP重定向

案例研究3.間歇性高CPU

相關資訊

簡介

本檔案介紹如何在執行16.x版本（也稱為Polaris）的新Cisco IOS®-XE平台上排解主要由於中斷而導致的CPU使用率過高問題。 此外，本文還介紹了此平台上用於排除此類問題的幾個整合新命令。

背景資訊

瞭解Cisco IOS®-XE的構建方式非常重要。藉助Cisco IOS®-XE，Cisco已遷移到Linux核心，並且所有子系統都已分解為多個進程。之前Cisco IOS®中的所有子系統(如模組驅動程式、高可用性(HA)等)現在都作為Linux作業系統(OS)中的軟體進程運行。 Cisco IOS®本身作為Linux OS(IOSd)中的守護程式運行。 Cisco IOS®-XE不僅保留傳統Cisco IOS®的外觀和感覺，而且保留其操作、支援和管理。

以下是一些有用的定義：

- 轉發引擎驅動程式(FED):這是Cisco Catalyst交換機的核心，負責所有硬體程式設計/轉發

- IOSd:這是在Linux核心上運行的Cisco IOS®守護程式。它在核心中作為軟體進程運行

- 封包交付系統(PDS):這是將資料包傳輸到各個子系統和從各個子系統傳輸資料包的結構和過程。例如，它控制資料包如何從FED傳送到IOSd，反之亦然

- 控制平面(CP):控制平面是一個通用術語，用於將涉及Catalyst交換機CPU的功能和流量組合在一起。其中包括目的地為交換器或來自交換器的跨距樹狀目錄通訊協定(STP)、熱待命路由器通訊協定(HSRP)和路由通訊協定等流量。這也包括必須由CPU處理的應用層協定，如安全外殼(SSH)和簡單網路管理協定(SNMP)

- 資料平面(DP):通常，資料平面包括硬體ASIC和不需要控制平面的幫助而轉發的資料流

- 點選：由DP攔截的入口協定控制資料包傳送到CP進行處理

- 注入：CP生成的協定資料包傳送到DP以在IO介面上輸出

- LSMPI:Linux共用記憶體輸入介面

資料平面和控制平面之間通訊路徑的高級圖：

高CPU故障排除工作流程

本部分提供一個系統工作流程來分類交換機上的高CPU問題。請注意，在撰寫本部分時，本部分涵蓋選定的流程。

案例研究1.地址解析協定中斷

本節中的故障排除和驗證過程可廣泛用於由於中斷而導致CPU使用率較高的情況。

步驟1.確定消耗CPU週期的進程

show process cpu命令用於顯示IOSd守護程式的當前進程狀態。新增輸出時，修改 |排除0.00，它將過濾掉當前空閒的進程。

此輸出提供兩個有價值的資訊：

- 五秒的CPU使用率：91% / 30%

- 第一個數字(91%)是交換機的總體CPU利用率

- 第二個數字(30%)是由資料平面中斷引起的利用率

- 位址解析通訊協定(ARP)輸入程式目前是消耗資源的頂級IOS®程式：

Switch# show processes cpu sort | ex 0.00

CPU utilization for five seconds: 91%/30%; one minute: 30%; five minutes: 8%

PID Runtime(ms)     Invoked      uSecs   5Sec   1Min   5Min TTY Process

37       14645         325      45061 59.53% 18.86%  4.38%   0 ARP Input

137        2288         115      19895  1.20%  0.14%  0.07%   0 Per-minute Jobs

373        2626       35334         74  0.15%  0.11%  0.09%   0 MMA DB TIMER

218        3123       69739         44  0.07%  0.09%  0.12%   0 IP ARP Retry Age

404        2656       35333         75  0.07%  0.09%  0.09%   0 MMA DP TIMER

show processes cpu platform sorted命令用於顯示來自Linux核心的進程利用率情況。從輸出中可以看到FED進程較高，這是由於傳入IOSd進程的ARP請求所致：

Switch# show processes cpu platform sorted

CPU utilization for five seconds: 38%, one minute: 38%, five minutes: 40%

Core 0: CPU utilization for five seconds: 39%, one minute: 37%, five minutes: 39%

Core 1: CPU utilization for five seconds: 41%, one minute: 38%, five minutes: 40%

Core 2: CPU utilization for five seconds: 30%, one minute: 38%, five minutes: 40%

Core 3: CPU utilization for five seconds: 37%, one minute: 39%, five minutes: 41%

Pid    PPid    5Sec    1Min    5Min  Status        Size  Name

--------------------------------------------------------------------------------

22701   22439     89%     88%     88%  R       2187444224  linux_iosd-imag

11626   11064     46%     47%     48%  S       2476175360  fed main event

4585       2      7%      9%      9%  S                0  lsmpi-xmit

4586       2      3%      6%      6%  S                0  lsmpi-rx

步驟2.調查FED將資料包傳送到控制平面的原因

在步驟1中，您可以斷定IOSd/ARP進程運行較高，但它是從資料平面引入的流量的犧牲品。需要進一步調查FED進程將流量傳送到CPU的原因以及此流量的來源位置。

show platform software fed switch active punt cause summary簡要概述了punt原因。此命令多次運行後遞增的任何數字：

Switch#show platform software fed switch active punt cause summary

Statistics for all causes

Cause    Cause Info                                       Rcvd         Dropped

------------------------------------------------------------------------------

7        ARP request or response                          18444227     0

11       For-us data                                      16           0

21       RP<->QFP keepalive                               3367         0

24       Glean adjacency                                  2            0

55       For-us control                                   6787         0

60       IP subnet or broadcast packet                    14           0

96       Layer2 control protocols                         3548         0

------------------------------------------------------------------------------

從FED傳送到控制平面的資料包使用分割隊列結構來保證高優先順序控制流量。它不會丟在優先順序較低的流量後面，例如ARP。可以使用show platform software feed switch active cpu-interface檢視這些隊列的高級概述。運行此命令數次後，可以發現Forus Resolution（Forus — 表示目的地為CPU的流量）隊列增長迅速。

Switch#show platform software fed switch active cpu-interface

queue                      retrieved   dropped     invalid     hol-block

-------------------------------------------------------------------------

Routing Protocol           8182        0           0           0

L2 Protocol                161         0           0           0

sw forwarding              2           0           0           0

broadcast                  14          0           0           0

icmp gen                   0           0           0           0

icmp redirect              0           0           0           0

logging                    0           0           0           0

rpf-fail                   0           0           0           0

DOT1X authentication       0           0           0           0

Forus Traffic              16          0           0           0

Forus Resolution           24097779    0           0           0

Inter FED                  0           0           0           0

L2 LVX control             0           0           0           0

EWLC control               0           0           0           0

EWLC data                  0           0           0           0

L2 LVX data                0           0           0           0

Learning cache             0           0           0           0

Topology control           4117        0           0           0

Proto snooping             0           0           0           0

DHCP snooping              0           0           0           0

Transit Traffic            0           0           0           0

Multi End station          0           0           0           0

Webauth                    0           0           0           0

Crypto control             0           0           0           0

Exception                  0           0           0           0

General Punt               0           0           0           0

NFL sampled data           0           0           0           0

Low latency                0           0           0           0

EGR exception              0           0           0           0

FSS                        0           0           0           0

Multicast data             0           0           0           0

Gold packet                0           0           0           0

通過使用show platform software fed switch active punt cpuq，所有都提供了這些隊列的更詳細檢視。隊列5負責ARP，並在命令的多個運行中按預期遞增。show platt soft fed sw active inject cpuq clear命令可用於清除計數器以方便讀取。

Switch#show platform software fed switch active punt cpuq all

<snip>

CPU Q Id                       : 5

CPU Q Name                     : CPU_Q_FORUS_ADDR_RESOLUTION

Packets received from ASIC     : 21018219

Send to IOSd total attempts    : 21018219

Send to IOSd failed count      : 0

RX suspend count               : 0

RX unsuspend count             : 0

RX unsuspend send count        : 0

RX unsuspend send failed count : 0

RX consumed count              : 0

RX dropped count               : 0

RX non-active dropped count    : 0

RX conversion failure dropped  : 0

RX INTACK count                : 1050215

RX packets dq'd after intack   : 90

Active RxQ event               : 3677400

RX spurious interrupt          : 1050016

<snip>

從這裡我們可以選擇幾個。ARP是廣播流量，因此您可以查詢廣播流量速率異常高的介面（對於排除第2層環路也很有用）。 可能需要多次運行此命令，以確定哪個介面主動增加。

Switch#show interfaces counters

Port            InOctets    InUcastPkts    InMcastPkts    InBcastPkts

Gi1/0/1    1041141009678              9              0    16267828358

Gi1/0/2             1254             11              0              1

Gi1/0/3                0              0              0              0

Gi1/0/4                0              0              0              0

另一種方法是使用嵌入式封包擷取(EPC)工具來收集在控制平面上可見的封包範例。

Switch#monitor capture cpuCap control-plane in match any file location flash:cpuCap.pcap

Switch#show monitor capture cpuCap

Status Information for Capture cpuCap

Target Type:

Interface: Control Plane, Direction: IN

Status : Inactive

Filter Details:

Capture all packets

Buffer Details:

Buffer Type: LINEAR (default)

File Details:

Associated file name: flash:cpuCap.pcap

Limit Details:

Number of Packets to capture: 0 (no limit)

Packet Capture duration: 0 (no limit)

Packet Size to capture: 0 (no limit)

Packet sampling rate: 0 (no sampling)

此命令在交換機上配置內部捕獲，以捕獲傳送到控制平面的所有流量。此流量會儲存在快閃記憶體上的檔案中。這是正常的wireshark pcap檔案，可從交換機匯出並在wireshark中開啟以供進一步分析。

啟動擷取，使其執行幾秒鐘，並停止擷取：

Switch#monitor capture cpuCap start

Enabling Control plane capture may seriously impact system performance. Do you want to continue? [yes/no]: yes

Started capture point : cpuCap

*Jun 14 17:57:43.172: %BUFCAP-6-ENABLE: Capture Point cpuCap enabled.

Switch#monitor capture cpuCap stop

Capture statistics collected at software:

Capture duration - 59 seconds

Packets received - 215950

Packets dropped - 0

Packets oversized - 0

Bytes dropped in asic - 0

Stopped capture point : cpuCap

Switch#

*Jun 14 17:58:37.884: %BUFCAP-6-DISABLE: Capture Point cpuCap disabled.

也可以在switch：提示上檢視擷取檔案

Switch#show monitor capture file flash:cpuCap.pcap

Starting the packet display ........ Press Ctrl + Shift + 6 to exit

1   0.000000 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

2   0.000054 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

3   0.000082 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

4   0.000109 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

5   0.000136 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

6   0.000162 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

7   0.000188 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

8   0.000214 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

9   0.000241 Xerox_d7:67:a1 -> Broadcast    ARP 60 Who has 192.168.1.24? Tell 192.168.1.2

從該輸出可以明顯看出，192.168.1.2主機是導致交換機上CPU使用率較高的常數ARP的來源。使用show ip arp和show mac address-table address命令來跟蹤主機，並將其從網路中刪除或對ARP進行定址。使用capture view命令show monitor capture file flash:cpuCap.pcap detail上的detail選項，也可以獲得捕獲的每個資料包的完整詳細資訊。如需Catalyst交換器上封包擷取的詳細資訊，請參閱本指南。

案例研究2.使用CoPP的IP重定向

預設情況下，最新一代Catalyst交換器受控制階段管制(CoPP)保護。CoPP用於保護CPU免受惡意攻擊和配置錯誤的影響，這些攻擊和錯誤可能危害交換機維護生成樹和路由協定等關鍵功能的能力。這些保護可能導致交換機的CPU和清除介面計數器僅略高，但在穿越交換機時流量被丟棄的情況。在正常操作時注意裝置上的基線CPU利用率非常重要。CPU使用率提高並不一定是個問題，這取決於裝置上啟用的功能，但當此使用率增加且未更改配置時，這可能成為一個問題。

請考慮以下情況。位於網關交換機之外的主機報告下載速度慢和ping丟失。交換機的常規運行狀況檢查不會顯示介面上的錯誤或來自網關交換機的任何ping丟失。

當您檢查CPU時，它顯示由於中斷而稍微增加的數字。

Switch#show processes cpu sorted | ex 0.00

CPU utilization for five seconds: 8%/7%; one minute: 8%; five minutes: 8%

PID Runtime(ms)     Invoked      uSecs   5Sec   1Min   5Min TTY Process

122      913359     1990893        458  0.39%  1.29%  1.57%   0 IOSXE-RP Punt Se

147        5823       16416        354  0.07%  0.05%  0.06%   0 PLFM-MGR IPC pro

404       13237      183032         72  0.07%  0.08%  0.07%   0 MMA DP TIMER

檢查CPU介面時，會看到ICMP重新導向計數器已主動增加。

Switch#show platform software fed switch active cpu-interface

queue                      retrieved   dropped     invalid     hol-block

-------------------------------------------------------------------------

Routing Protocol           12175       0           0           0

L2 Protocol                236         0           0           0

sw forwarding              714673      0           0           0

broadcast                  2           0           0           0

icmp gen                   0           0           0           0

icmp redirect              2662788     0           0           0

logging                    7           0           0           0

rpf-fail                   0           0           0           0

DOT1X authentication       0           0           0           0

Forus Traffic              21776434    0           0           0

Forus Resolution           724021      0           0           0

Inter FED                  0           0           0           0

L2 LVX control             0           0           0           0

EWLC control               0           0           0           0

EWLC data                  0           0           0           0

L2 LVX data                0           0           0           0

Learning cache             0           0           0           0

Topology control           6122        0           0           0

Proto snooping             0           0           0           0

DHCP snooping              0           0           0           0

Transit Traffic            0           0           0           0

雖然FED中不會觀察到捨棄專案，但如果您勾選CoPP，則可以在ICMP重新導向佇列中觀察到捨棄專案。

Switch#show platform hardware fed switch 1 qos queue stats internal cpu policer

CPU Queue Statistics

============================================================================================

(default)  (set)     Queue

QId PlcIdx  Queue Name                Enabled   Rate     Rate      Drop(Bytes)

-----------------------------------------------------------------------------

0    11     DOT1X Auth                  Yes     1000      1000     0

1    1      L2 Control                  Yes     2000      2000     0

2    14     Forus traffic               Yes     4000      4000     0

3    0      ICMP GEN                    Yes     600       600      0

4    2      Routing Control             Yes     5400      5400     0

5    14     Forus Address resolution    Yes     4000      4000     0

6    0      ICMP Redirect               Yes     600       600      463538463

7    16     Inter FED Traffic           Yes     2000      2000     0

8    4      L2 LVX Cont Pack            Yes     1000      1000     0

<snip>

CoPP實質上是一種置於裝置控制平面上的QoS策略。CoPP的工作方式與交換機上的任何其他QoS相同：當特定流量的隊列用盡時，使用該隊列的流量會被丟棄。從這些輸出中，您知道由於ICMP重定向流量正在進行軟體交換，並且您知道由於ICMP重定向隊列的速率限制，此流量將被丟棄。您可以在控制平面上執行捕獲，以驗證到達控制平面的資料包是否來自使用者。

為了檢視每個類使用的匹配邏輯，您有一個CLI來幫助識別到達特定隊列的資料包型別。例如，如果您想瞭解什麼會影響system-cpp-routing-control類：

Switch#show platform software qos copp policy-info

Default rates of all classmaps are displayed:

policy-map system-cpp-policy

class system-cpp-police-routing-control

police rate 5400 pps

Switch#show platform software qos copp class-info

ACL representable classmap filters are displayed:

class-map match-any system-cpp-police-routing-control

description Routing control and Low Latency

match access-group name system-cpp-mac-match-routing-control

match access-group name system-cpp-ipv4-match-routing-control

match access-group name system-cpp-ipv6-match-routing-control

match access-group name system-cpp-ipv4-match-low-latency

match access-group name system-cpp-ipv6-match-low-latency

mac access-list extended system-cpp-mac-match-routing-control

permit any host 0180.C200.0014

permit any host 0900.2B00.0004

ip access-list extended system-cpp-ipv4-match-routing-control

permit udp any any eq rip

<...snip...>

ipv6 access-list system-cpp-ipv6-match-routing-control

permit ipv6 any FF02::1:FF00:0/104

permit ipv6 any host FF01::1

<...snip...>

ip access-list extended system-cpp-ipv4-match-low-latency

permit udp any any eq 3784

permit udp any any eq 3785

ipv6 access-list system-cpp-ipv6-match-low-latency

permit udp any any eq 3784

permit udp any any eq 3785

<...snip...>

Switch#monitor capture cpuSPan control-plane in match any file location flash:cpuCap.pcap

Control-plane direction IN is already attached to the capture

Switch#monitor capture cpuSpan start

Enabling Control plane capture may seriously impact system performance. Do you want to continue? [yes/no]: yes

Started capture point : cpuSpan

Switch#

*Jun 15 17:28:52.841: %BUFCAP-6-ENABLE: Capture Point cpuSpan enabled.

Switch#monitor capture cpuSpan stop

Capture statistics collected at software:

Capture duration - 12 seconds

Packets received - 5751

Packets dropped - 0

Packets oversized - 0

Bytes dropped in asic - 0

Stopped capture point : cpuSpan

Switch#

*Jun 15 17:29:02.415: %BUFCAP-6-DISABLE: Capture Point cpuSpan disabled.

Switch#show monitor capture file flash:cpuCap.pcap detailed

Starting the packet display ........ Press Ctrl + Shift + 6 to exit

Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface 0

<snip>

Ethernet II, Src: OmronTat_2c:a1:52 (00:00:0a:2c:a1:52), Dst: Cisco_8f:cb:47 (00:42:5a:8f:cb:47)

<snip>

Internet Protocol Version 4, Src: 192.168.1.10, Dst: 8.8.8.8

<snip>

此主機ping 8.8.8.8時，會將ping傳送到閘道MAC位址，因為目的地位址在VLAN之外。網關交換機檢測到下一跳位於同一個VLAN中，並將目的MAC地址重新寫入防火牆並轉發資料包。此過程可能會在硬體中發生，但此硬體轉發的一個例外是IP重定向過程。交換器收到ping時，會偵測到它是在同一VLAN上路由流量，並將流量傳送到CPU，以便產生重新導向封包回主機。此重新導向訊息旨在通知主機有前往目的地的更佳路徑。在此案例中，第2層下一跳按照設計且符合預期，需要將交換機配置為不傳送重定向消息並在硬體中轉發資料包。當您停用VLAN介面上的重新導向時，會執行此作業。

interface Vlan1

ip address 192.168.1.1 255.255.255.0

no ip redirects

end

關閉IP重定向後，交換機將重寫MAC地址並在硬體中轉發。

案例研究3.間歇性高CPU

如果交換機上的高CPU使用率是間歇性的，可以在交換機上設定指令碼，以便在高CPU事件發生時自動運行這些命令。這是使用Cisco IOS®嵌入式事件管理器(EEM)完成的。

entry-val用於確定在指令碼觸發之前的CPU使用率。指令碼監控5秒的CPU平均SNMP OID。兩個檔案寫入快閃記憶體，tac-cpu-<timestamp>.txt包含指令輸出，tac-cpu-<timestamp>.pcap包含CPU輸入擷取。以後可以複查這些檔案。

config t

no event manager applet high-cpu authorization bypass

event manager applet high-cpu authorization bypass

event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.3.1 get-type next entry-op gt entry-val 80 poll-interval 1 ratelimit 300 maxrun 180

action 0.01 syslog msg "High CPU detected, gathering system information."

action 0.02 cli command "enable"

action 0.03 cli command "term exec prompt timestamp"

action 0.04 cli command "term length 0"

action 0.05 cli command "show clock"

action 0.06 regex "([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9]):([0-9]|[0-9][0-9])" $_cli_result match match1

action 0.07 string replace "$match" 2 2 "."

action 0.08 string replace "$_string_result" 5 5 "."

action 0.09 set time $_string_result

action 1.01 cli command "show proc cpu sort | append flash:tac-cpu-$time.txt"

action 1.02 cli command "show proc cpu hist | append flash:tac-cpu-$time.txt"

action 1.03 cli command "show proc cpu platform sorted | append flash:tac-cpu-$time.txt"

action 1.04 cli command "show interface | append flash:tac-cpu-$time.txt"

action 1.05 cli command "show interface stats | append flash:tac-cpu-$time.txt"

action 1.06 cli command "show log | append flash:tac-cpu-$time.txt"

action 1.07 cli command "show ip traffic | append flash:tac-cpu-$time.txt"

action 1.08 cli command "show users | append flash:tac-cpu-$time.txt"

action 1.09 cli command "show platform software fed switch active punt cause summary | append flash:tac-cpu-$time.txt"

action 1.10 cli command "show platform software fed switch active cpu-interface | append flash:tac-cpu-$time.txt"

action 1.11 cli command "show platform software fed switch active punt cpuq all | append flash:tac-cpu-$time.txt"

action 2.08 cli command "no monitor capture tac_cpu"

action 2.09 cli command "monitor capture tac_cpu control-plane in match any file location flash:tac-cpu-$time.pcap"

action 2.10 cli command "monitor capture tac_cpu start" pattern "yes"

action 2.11 cli command "yes"

action 2.12 wait 10

action 2.13 cli command "monitor capture tac_cpu stop"

action 3.01 cli command "term default length"

action 3.02 cli command "terminal no exec prompt timestamp"

action 3.03 cli command "no monitor capture tac_cpu"

相關資訊

- Cisco IOS-XE 16 — 概覽

- Catalyst 3850 系列交換器高 CPU 使用率疑難排解

- 適用於Cisco IOS®和IOS®-XE的嵌入式封包擷取組態範例

- 在執行IOS-XE 16.X的Catalyst交換器上設定傳輸/插入FED封包擷取

- 技術支援與文件 - Cisco Systems