Introdução
Este documento descreve como ler o uso da Unidade de Processo Central (CPU) em Roteadores de Serviço Integrado (ISR) da família da série 4300.
Pré-requisitos
Requisitos
A Cisco recomenda que você tenha conhecimento destes tópicos:
Componentes Utilizados
As informações neste documento são baseadas na versão de hardware e software:
- ISR4321/K9
- ISR4331/K9
- ISR4351/K9
- 03.16.01a.S // 15.5(3)S1a
- 03.16.04b.S // 15.5(3)S4b
- 16.9.7
- 16.12.4
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
Arquitetura
As plataformas Cisco ISR 4000 Series executam o Cisco IOS XE que tem uma arquitetura de software distribuída que executa um kernel Linux, onde o Cisco IOS® é executado como um dos muitos processos Linux. O Cisco IOS é executado como um daemon, que é conhecido como Cisco IOS-Daemon (IOSd).
Uso da CPU no Cisco IOSd
Para monitorar o uso da CPU no IOSd, execute o comando show process cpu:
#show process cpu
CPU utilization for five seconds: 1%/0%; one minute: 1%; five minutes: 0%
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
1 2 8 250 0.00% 0.00% 0.00% 0 Chunk Manager
2 5 18 277 0.07% 0.00% 0.00% 0 Load Meter
3 0 2 0 0.00% 0.00% 0.00% 0 DiagCard4/-1
4 0 1 0 0.00% 0.00% 0.00% 0 Retransmission o
5 0 1 0 0.00% 0.00% 0.00% 0 IPC ISSU Dispatc
A saída exibe dois valores para o uso da CPU, o primeiro valor é a quantidade total de utilização da CPU e o segundo valor é a quantidade de CPU por interrupções enviadas para IOSd:
A diferença entre a quantidade total de CPU e a quantidade de CPU por interrupções são os valores de CPU consumidos pelos processos; para confirmar, adicione todos os processos usados nos últimos cinco segundos:
- Consumo de CPU de processos = 1% - 0% = 1% = Todos os processos de consumo de CPU listados no comando
Para exibir os processos que consomem a maior parte da CPU na parte superior, execute o comando show process cpu sorted:
#show process cpu sorted
CPU utilization for five seconds: 1%/0%; one minute: 0%; five minutes: 0%
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
64 103 10 10300 0.33% 0.02% 0.00% 0 Licensing Auto U
83 26 231 112 0.27% 0.00% 0.00% 0 PuntInject Keepa
235 555 48176 11 0.11% 0.09% 0.07% 0 Inline Power
1 2 8 250 0.00% 0.00% 0.00% 0 Chunk Manager
Observação: a adição de todos os processos pode resultar em valores de ponto flutuante, o IOSd arredonda o resultado para o próximo inteiro.
Uso da CPU por tráfego
O design da família ISR4300, para encaminhar o tráfego, é feito por meio de um elemento conhecido como Processador QuantumFlow (QFP).
Cuidado: o QFP é encontrado no ASR1K como um ou vários chips físicos, no ISR4400 a mesma funcionalidade é feita com coprocessadores Cavium Octeon, no ISR4300 essa funcionalidade é feita em certos núcleos da CPU Intel principal. Você pode pensar no QFP na família ISR4300 como um software que encaminha pacotes.
Para determinar a quantidade de CPU consumida pelo tráfego, você pode executar o comando show platform hardware qfp ative datapath usage:
#show platform hardware qfp active datapath utilization
CPP 0: Subdev 0 5 secs 1 min 5 min 60 min
Input: Priority (pps) 0 0 0 0
(bps) 0 0 0 0
Non-Priority (pps) 3 2 2 1
(bps) 1448 992 992 568
Total (pps) 3 2 2 1
(bps) 1448 992 992 568
Output: Priority (pps) 0 0 0 0
(bps) 0 0 0 0
Non-Priority (pps) 3 2 2 1
(bps) 12216 8024 8024 4576
Total (pps) 3 2 2 1
(bps) 12216 8024 8024 4576
Processing: Load (pct) 0 0 0 1
O comando lista o uso da CPU de entrada e saída para pacotes prioritários e não prioritários, as informações são exibidas com pacotes por segundo (PPS) e bits por segundo (BPS), a última linha exibe a quantidade total de carga da CPU devido aos valores percentuais (PCT) de encaminhamento de pacotes.
Núcleos da CPU instalados
A família ISR4300 tem uma quantidade diferente de núcleos de CPU instalados que depende do modelo, para identificar o número de núcleos instalados no dispositivo e executar o comando show processes cpu platform:
#show processes cpu platform
CPU utilization for five seconds: 30%, one minute: 29%, five minutes: 29%
Core 0: CPU utilization for five seconds: 13%, one minute: 13%, five minutes: 13%
Core 1: CPU utilization for five seconds: 2%, one minute: 3%, five minutes: 3%
Core 2: CPU utilization for five seconds: 0%, one minute: 0%, five minutes: 0%
Core 3: CPU utilization for five seconds: 99%, one minute: 99%, five minutes: 99%
Pid PPid 5Sec 1Min 5Min Status Size Name
--------------------------------------------------------------------------------
1 0 0% 0% 0% S 1863680 init
2 0 0% 0% 0% S 0 kthreadd
Como alternativa, execute o comando show platform software status control-processor:
#show platform software status control-processor
<output omitted>
Per-core Statistics
CPU0: CPU Utilization (percentage of time spent)
User: 4.80, System: 10.30, Nice: 0.00, Idle: 84.50
IRQ: 0.40, SIRQ: 0.00, IOwait: 0.00
CPU1: CPU Utilization (percentage of time spent)
User: 2.00, System: 3.40, Nice: 0.00, Idle: 94.59
IRQ: 0.00, SIRQ: 0.00, IOwait: 0.00
CPU2: CPU Utilization (percentage of time spent)
User: 0.50, System: 0.00, Nice: 0.00, Idle: 99.49
IRQ: 0.00, SIRQ: 0.00, IOwait: 0.00
CPU3: CPU Utilization (percentage of time spent)
User: 24.72, System: 75.27, Nice: 0.00, Idle: 0.00
IRQ: 0.00, SIRQ: 0.00, IOwait: 0.00
Por outro lado, execute o comando show platform software status control-processor brief e qualquer um desses comandos exibe a quantidade de núcleos instalados:
#show platform software status control-processor brief
<output omitted>
CPU Utilization
Slot CPU User System Nice Idle IRQ SIRQ IOwait
RP0 0 4.30 9.80 0.00 85.90 0.00 0.00 0.00
1 0.79 0.99 0.00 98.20 0.00 0.00 0.00
2 0.50 0.00 0.00 99.50 0.00 0.00 0.00
3 24.60 75.40 0.00 0.00 0.00 0.00 0.00
Distribuição dos núcleos da CPU
O design da família ISR4300 resulta em núcleos específicos usados para o processo de pacotes. Os núcleos de quatro a sete são reservados para o processo de pacotes no ISR4331 e 4351, enquanto os núcleos dois e três são usados para o ISR4321.
Até e incluindo as versões 16.5.x do Cisco IOS XE devido a motivos de desempenho, o segmento de recursos do Hierarchical Queue Framework (HQF) sempre gira e é executado com alta utilização da CPU, independentemente da configuração na caixa ou da quantidade de tráfego que passa pelo sistema. Nas plataformas ISR4300, isso pode aparecer como alta utilização da CPU em um ou mais núcleos, pois o software QFP é executado na CPU principal.
Mas, após e incluindo as versões do Cisco IOS XE 16.6.x, uma alteração foi implementada para que essas plataformas não fizessem os threads hot-spin. Nesse caso, a utilização da CPU é mais distribuída pelos núcleos.
Para exibir o uso do hot-spin, execute o comando show processes cpu platform sorted, antes do Cisco IOS XE 16.6.x:
#show processes cpu platform sorted
CPU utilization for five seconds: 28%, one minute: 29%, five minutes: 29%
Core 0: CPU utilization for five seconds: 12%, one minute: 13%, five minutes: 14%
Core 1: CPU utilization for five seconds: 2%, one minute: 3%, five minutes: 3%
Core 2: CPU utilization for five seconds: 0%, one minute: 0%, five minutes: 0%
Core 3: CPU utilization for five seconds: 99%, one minute: 99%, five minutes: 99% <<< hot-spin
Pid PPid 5Sec 1Min 5Min Status Size Name
--------------------------------------------------------------------------------
2541 1955 99% 99% 99% S 1073807360 qfp-ucode-utah <<< high CPU process
1551 929 7% 7% 7% S 2038525952 fman_fp_image
Em uma arquitetura de oito núcleos, você pode ver o mesmo resultado, com um núcleo diferente em hot-spin, antes do Cisco IOS XE 16.6.x:
#show processes cpu platform sorted
CPU utilization for five seconds: 15%, one minute: 14%, five minutes: 15%
Core 0: CPU utilization for five seconds: 6%, one minute: 4%, five minutes: 8%
Core 1: CPU utilization for five seconds: 1%, one minute: 0%, five minutes: 2%
Core 2: CPU utilization for five seconds: 9%, one minute: 10%, five minutes: 7%
Core 3: CPU utilization for five seconds: 1%, one minute: 2%, five minutes: 1%
Core 4: CPU utilization for five seconds: 1%, one minute: 1%, five minutes: 1%
Core 5: CPU utilization for five seconds: 0%, one minute: 0%, five minutes: 0%
Core 6: CPU utilization for five seconds: 99%, one minute: 99%, five minutes: 99% <<< hot-spin
Core 7: CPU utilization for five seconds: 0%, one minute: 0%, five minutes: 0%
Pid PPid 5Sec 1Min 5Min Status Size Name
--------------------------------------------------------------------------------
3432 2779 99% 99% 99% S 1086341120 qfp-ucode-utah <<< high CPU process
2612 1893 7% 7% 7% S 2038697984 fman_fp_image
26114 25132 4% 5% 5% R 42803200 hman
Após e incluindo o Cisco IOS XE 16.6.x, no entanto, você pode ver que há uma distribuição de carga entre o Core 2 e o Core 3:
------------------ show process cpu platform sorted ------------------
CPU utilization for five seconds: 31%, one minute: 32%, five minutes: 29%
Core 0: CPU utilization for five seconds: 3%, one minute: 3%, five minutes: 3%
Core 1: CPU utilization for five seconds: 3%, one minute: 2%, five minutes: 2%
Core 2: CPU utilization for five seconds: 39%, one minute: 41%, five minutes: 34% <<< load distributed
Core 3: CPU utilization for five seconds: 84%, one minute: 83%, five minutes: 79% <<< load distributed
Pid PPid 5Sec 1Min 5Min Status Size Name
--------------------------------------------------------------------------------
26939 26344 127% 126% 116% S 1195311104 qfp-ucode-utah <<< high CPU process
Após e incluindo o Cisco IOS XE 16.6.x, aplica-se o mesmo que a saída anterior, mas para os Núcleos 4 a 7:
------------------ show process cpu platform sorted ------------------
CPU utilization for five seconds: 30%, one minute: 24%, five minutes: 27%
Core 0: CPU utilization for five seconds: 41%, one minute: 13%, five minutes: 13%
Core 1: CPU utilization for five seconds: 23%, one minute: 11%, five minutes: 13%
Core 2: CPU utilization for five seconds: 19%, one minute: 10%, five minutes: 12%
Core 3: CPU utilization for five seconds: 38%, one minute: 12%, five minutes: 12%
Core 4: CPU utilization for five seconds: 28%, one minute: 26%, five minutes: 28% <<< load distributed
Core 5: CPU utilization for five seconds: 53%, one minute: 40%, five minutes: 37% <<< load distributed
Core 6: CPU utilization for five seconds: 18%, one minute: 16%, five minutes: 17% <<< load distributed
Core 7: CPU utilization for five seconds: 93%, one minute: 81%, five minutes: 81% <<< load distributed
Pid PPid 5Sec 1Min 5Min Status Size Name
--------------------------------------------------------------------------------
26049 25462 164% 165% 170% S 394128 qfp-ucode-utah <<< high CPU process
Cuidado: se você suspeitar de um problema com o uso da CPU principal, abra um caso do Technical Assistance Center (TAC) para obter assistência e confirmar a estabilidade do dispositivo.
Práticas recomendadas para monitorar a CPU
É melhor usar os comandos específicos para utilização de caminho de dados ou uso de IOSd, o resultado dos comandos de exibição principais pode levar a alertas falsos positivos.
O comando para monitorar a utilização do caminho de dados é:
- show platform hardware qfp ative datapath usage
O comando para monitorar o uso do IOSd é:
Use qualquer um destes Object Identifiers (OID) para monitorar o uso da CPU do IOSd com o Simple Network Management Protocol (SNMP):
- busyPer = porcentagem de ocupação da CPU do IOSd nos últimos 5 segundos
- avgBusy1 = IOSd um minuto de média móvel exponencialmente reduzida da porcentagem de ocupação da CPU
- avgBusy5 = IOSd cinco minutos em média móvel exponencialmente reduzida da porcentagem de ocupação da CPU