O conjunto de documentação deste produto faz o possível para usar uma linguagem imparcial. Para os fins deste conjunto de documentação, a imparcialidade é definida como uma linguagem que não implica em discriminação baseada em idade, deficiência, gênero, identidade racial, identidade étnica, orientação sexual, status socioeconômico e interseccionalidade. Pode haver exceções na documentação devido à linguagem codificada nas interfaces de usuário do software do produto, linguagem usada com base na documentação de RFP ou linguagem usada por um produto de terceiros referenciado. Saiba mais sobre como a Cisco está usando a linguagem inclusiva.
A Cisco traduziu este documento com a ajuda de tecnologias de tradução automática e humana para oferecer conteúdo de suporte aos seus usuários no seu próprio idioma, independentemente da localização. Observe que mesmo a melhor tradução automática não será tão precisa quanto as realizadas por um tradutor profissional. A Cisco Systems, Inc. não se responsabiliza pela precisão destas traduções e recomenda que o documento original em inglês (link fornecido) seja sempre consultado.
Este documento descreve como solucionar problemas de alto uso da CPU devido a interrupções nas plataformas Cisco IOS® XE executando as versões 16.x.
Este documento contou com a contribuição de Raymond Whiting e Yogesh Ramdoss, Engenheiros do Cisco TAC.
Este documento também introduz vários comandos novos nesta plataforma que são integrais para resolver problemas de alto uso da CPU. É importante entender como o Cisco IOS XE é construído. Com o Cisco IOS XE, a Cisco migrou para um kernel Linux e todos os subsistemas foram divididos em processos. Todos os subsistemas que estavam dentro do Cisco IOS anteriormente - como os drivers de módulos, High Availability (HA) e assim por diante - agora são executados como processos de software dentro do sistema operacional Linux (SO). O próprio Cisco IOS é executado como um daemon no sistema operacional Linux (IOSd). O Cisco IOS XE mantém não apenas a mesma aparência do Cisco IOS clássico, mas também sua operação, suporte e gerenciamento.
Aqui estão algumas definições úteis:
Um diagrama de alto nível do caminho de comunicação entre o plano de dados e o plano de controle:
Esta seção fornece um fluxo de trabalho sistemático para fazer a triagem de problemas de alta utilização da CPU nos switches. Observe que ele abrange um processo selecionado no momento da criação desta seção.
O processo de identificação e solução de problemas desta seção pode ser amplamente utilizado para alto uso da CPU devido a interrupções.
O show process cpu comando é usado para exibir o estado atual do processo dentro do daemon IOSd. Quando você adiciona a modificação
| exclude 0.00 de
saída, ela filtra os processos que estão ociosos no momento.
Há duas informações valiosas nesta saída:
- Utilização da CPU por cinco segundos: 91%/30%
- O primeiro número (91%) é a utilização geral da CPU do switch
- O segundo número (30%) é a utilização causada por interrupções do plano de dados
- O processo Address Resolution Protocol
(ARP) Input é atualmente o principal processo do Cisco IOS que consome os recursos:
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
O comando
show processes cpu platform sorted é usado para exibir a aparência da utilização do processo do kernel do Linux. A partir da saída, pode-se observar que o processo FED está alto, o que se deve às solicitações ARP apontadas para o processo IOSd:
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
Etapa 2. Investigue por que o FED está lançando pacotes no plano de controle
Da Etapa 1. Você pode concluir que o processo IOSd/ARP está alto, mas é vítima do tráfego introduzido do plano de dados. É necessária uma investigação mais detalhada sobre por que o processo de FED aponta o tráfego para a CPU e de onde esse tráfego está vindo.
O
show platform software fed switch active punt cause summary fornece uma visão geral de alto nível do motivo do punt. Qualquer número incrementado em várias execuções desse comando indica:
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 ------------------------------------------------------------------------------
Os pacotes que são enviados para o plano de controle do FED usam uma estrutura de fila dividida para garantir tráfego de controle de alta prioridade. Ele não se perde atrás do tráfego de prioridade mais baixa, como o ARP. Uma visão geral de alto nível dessas filas pode ser visualizada com o uso do
show platform software fed switch active cpu-interface. Depois de executar esse comando várias vezes, pode-se descobrir que a fila
Forus Resolution (Forus - que significa tráfego destinado à CPU) é incrementada rapidamente.
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
O uso do
show platform software fed switch active punt cpuq all fornece uma visão mais detalhada dessas filas. A fila 5 é responsável pelo ARP e, como esperado, incrementa em várias execuções do comando. O comando
show plat soft fed sw active inject cpuq clear pode ser usado para limpar os contadores para facilitar a leitura.
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>
A partir daqui, há algumas opções. O ARP é tráfego de broadcast, portanto, você pode procurar interfaces que tenham uma taxa anormalmente alta de tráfego de broadcast (também útil para solucionar problemas de loops de Camada 2). É necessário executar esse comando várias vezes para determinar qual interface é incrementada ativamente.
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
A outra opção é usar a ferramenta EPC (Embedded Packet Capture) para coletar uma amostra dos pacotes vistos no plano de controle.
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)
Esse comando configura uma captura interna no switch para capturar qualquer tráfego que esteja apontado para o plano de controle. Esse tráfego é salvo em um arquivo na memória flash. Esse é um arquivo normal
wireshark pcap que pode ser exportado de um switch e aberto no Wireshark para análise posterior.
Inicie a captura, deixe-a ser executada por alguns segundos e interrompa a captura:
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.
Também é possível visualizar o arquivo de captura no 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
A partir dessa saída, é evidente que o host 192.168.1.2 é a origem dos ARPs constantes que causam a alta utilização da CPU no switch. Use os comandos
show ip arp e
show mac address-table address para rastrear o host e removê-lo da rede ou endereçar os ARPs. Também é possível obter detalhes completos de cada pacote capturado com o uso da opção detail no comando capture view,
show monitor capture file flash:cpuCap.pcap detail. Consulte este guia para obter mais informações sobre capturas de pacotes em um Switch Catalyst.
Casos Práticos 2. Redirecionamentos de IP com CoPP
Os Switches Catalyst de última geração são protegidos por Política de Plano de Controle (CoPP) por padrão. O CoPP é usado para proteger a CPU de ataques mal-intencionados e configurações incorretas, que podem prejudicar a capacidade dos switches de manter funções críticas, como spanning trees e protocolos de roteamento. Essas proteções podem levar a cenários onde o switch tem apenas uma CPU levemente elevada e contadores de interface claros, mas o tráfego é descartado enquanto atravessa o switch. É importante observar a utilização da CPU de linha de base no dispositivo no momento das operações normais. Não é necessariamente um problema ter a utilização elevada da CPU e isso depende dos recursos habilitados no dispositivo, mas quando essa utilização aumenta sem alterações de configuração, isso pode ser um sinal de preocupação.
Considere este cenário - os hosts que vivem fora do switch Gateway relatam velocidades de download baixas e perda de ping para a Internet. Uma verificação de integridade geral do switch não mostra erros nas interfaces ou nenhuma perda de ping quando originado do switch de gateway.
Quando você verifica a CPU, ela mostra números levemente elevados devido a interrupções.
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
Ao verificar a interface da CPU, você verá que o contador de redirecionamento ICMP está ativamente incrementado.
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
Embora não sejam observadas quedas no FED, se você verificar CoPP, as quedas podem ser observadas na fila de redirecionamento 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 é essencialmente uma política de QoS colocada no plano de controle do dispositivo. O CoPP funciona como qualquer outro QoS no switch: quando a fila de um tráfego específico é esgotada, o tráfego que usa essa fila é descartado. A partir dessas saídas, você sabe que o tráfego está sendo comutado por software devido a redirecionamentos de ICMP e sabe que esse tráfego está sendo descartado devido ao limite de taxa na fila de redirecionamento de ICMP. Você pode realizar uma captura no plano de controle para validar se os pacotes que chegam ao plano de controle são dos usuários.
Para ver qual lógica de correspondência cada classe usa, você tem uma CLI para ajudar a identificar os tipos de pacotes que atingem uma determinada fila. Considere este exemplo, para saber o que atinge a classe
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>
Quando este host executa ping no 8.8.8.8, ele envia o ping ao endereço MAC do gateway, pois o endereço de destino está fora da VLAN. O switch de gateway detecta que o próximo salto está na mesma VLAN, regrava o endereço MAC de destino no firewall e encaminha o pacote. Esse processo pode ocorrer no hardware, mas uma exceção a esse encaminhamento de hardware é o processo de redirecionamento de IP. Quando o switch recebe o ping, ele detecta que está roteando o tráfego na mesma VLAN e direciona o tráfego para a CPU a fim de gerar um pacote de redirecionamento de volta para o host. Essa mensagem de redirecionamento é para informar ao host que há um caminho mais ideal para o destino. Nesse caso, o próximo salto da camada 2 é projetado e esperado, o switch deve ser configurado para não enviar as mensagens de redirecionamento e encaminhar os pacotes no hardware. Isso é feito quando você desabilita os redirecionamentos na interface VLAN.
interface Vlan1 ip address 192.168.1.1 255.255.255.0 no ip redirects end
Quando os redirecionamentos de IP são desativados, o switch regrava o endereço MAC e o encaminha no hardware.
Casos Práticos 3. CPU alta intermitente
Caso a alta utilização da CPU no switch seja intermitente, é possível configurar um script no switch para executar automaticamente esses comandos no momento de eventos de alta utilização da CPU. Isso é feito com o uso do Cisco IOS Embedded Event Manager (EEM).
O valor de entrada é usado para determinar a altura da CPU antes que o script seja acionado. O script monitora a média de 5 segundos do OID de SNMP da CPU. Dois arquivos são gravados na memória flash,
tac-cpu-<timestamp>.txt contém as saídas do comando e
tac-cpu-<timestamp>.pcap contém a captura de entrada da CPU. Esses arquivos poderão ser revisados posteriormente.
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"
Informações Relacionadas
- Resumo do Cisco IOS XE 16
- Troubleshooting de Uso Elevado da CPU do Catalyst 3850 Series Switch
- Exemplo de Configuração de Captura de Pacotes Incorporados para Cisco IOS e Cisco IOS XE
- Configurar a captura de pacotes Punt/Inject FED em Switches Catalyst que executam o Cisco IOS XE 16.x
- Suporte técnico e download da Cisco
Revisão | Data de publicação | Comentários |
---|---|---|
2.0 |
13-Mar-2024 |
Recertificação |
1.0 |
08-Aug-2018 |
Versão inicial |