Introduzione
Questo documento descrive come leggere l'utilizzo della CPU (Central Process Unit) sui router di servizio integrati (ISR) dalla famiglia 4300.
Prerequisiti
Requisiti
Cisco raccomanda la conoscenza dei seguenti argomenti:
Componenti usati
Le informazioni di questo documento si basano sulla versione hardware e software:
- ISR 4321/K9
- ISR 4331/K9
- ISR 4351/K9
- 03.16.01a.S // 15.5(3)S1a
- 03.16.04b.S // 15.5(3)S4b
- 16.9.7
- 16.12.4
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Architettura
Le piattaforme Cisco ISR serie 4000 eseguono Cisco IOS XE con un'architettura software distribuita che esegue un kernel Linux, in cui Cisco IOS® viene eseguito come uno dei molti processi Linux. Cisco IOS viene eseguito come daemon, denominato Cisco IOS-Daemon (IOSd).
Utilizzo CPU su Cisco IOSd
Per monitorare l'utilizzo della CPU su IOSd, eseguire il 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
Nell'output vengono visualizzati due valori per l'utilizzo della CPU, il primo valore è la quantità totale di utilizzo della CPU e il secondo valore è la quantità di CPU per interrupt inviati a IOSd:
La differenza tra la quantità totale di CPU e la quantità di CPU per interrupt sono i valori della CPU utilizzata dai processi. Per confermare, aggiungere tutti i processi utilizzati negli ultimi cinque secondi:
- Utilizzo CPU dei processi = 1% - 0% = 1% = Utilizzo CPU di tutti i processi elencati nel comando
Per visualizzare i processi che utilizzano la maggior parte della CPU nella parte superiore, eseguire il 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
Nota: l'aggiunta di tutti i processi può generare valori a virgola mobile. IOSd arrotonda il risultato al numero intero successivo.
Utilizzo CPU per traffico
Per inoltrare il traffico, la famiglia ISR4300 è progettata attraverso un elemento chiamato QuantumFlow Processor (QFP).
Attenzione: QFP si trova su ASR1K come uno o più chip fisici, su ISR4400 la stessa funzionalità è fatta con i co-processori Cavium Octeon, su ISR4300 quella funzionalità è fatta su alcuni core della CPU principale Intel. La funzionalità QFP della famiglia ISR4300 può essere considerata come un componente software che inoltra i pacchetti.
Per determinare la quantità di CPU utilizzata dal traffico, è possibile eseguire il comando show platform hardware qfp active 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
Il comando elenca l'uso della CPU di input e output per i pacchetti con priorità e non con priorità, le informazioni vengono visualizzate con i pacchetti al secondo (PPS) e i bit al secondo (BPS), l'ultima riga mostra la quantità totale di carico della CPU dovuto all'inoltro di pacchetti in valori percentuali (PCT).
Core CPU installati
La famiglia ISR4300 ha installato una quantità diversa di core CPU che dipende dal modello. Per identificare il numero di core installati sul dispositivo, eseguire il 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
In alternativa, eseguire il 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
D'altra parte, eseguire il comando show platform software status control-processor brief e uno qualsiasi di questi comandi visualizza la quantità di core installati:
#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
Distribuzione core CPU
Il design della famiglia ISR4300 si traduce in core specifici utilizzati per il processo dei pacchetti. I core da 4 a 7 sono riservati all'elaborazione dei pacchetti su ISR4331 e 4351, mentre i core 2 e 3 sono utilizzati per ISR4321.
Finché non includerà Cisco IOS XE versioni 16.5.x per motivi di prestazioni, HQF (Hierarchical Queue Framework) offre thread che girano sempre a caldo ed è in esecuzione con un elevato utilizzo della CPU, a prescindere dalla configurazione presente o dalla quantità di traffico che attraversa il sistema. Sulle piattaforme ISR4300, questo può apparire come un elevato utilizzo della CPU su uno o più core, perché il software QFP viene eseguito sulla CPU principale.
Tuttavia, dopo l'inclusione di Cisco IOS XE versioni 16.6.x, è stata implementata una modifica che impedisce a queste piattaforme di attivare i thread. In questo caso, l'utilizzo della CPU è più distribuito attraverso i core.
Per visualizzare l'utilizzo della rotazione a caldo, eseguire il comando show PROCESSES cpu platform sorted, prima di 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
Su un'architettura a otto core è possibile ottenere lo stesso risultato, con un core diverso in modalità hot-spin, prima di 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
Dopo l'inclusione di Cisco IOS XE 16.6.x, è possibile notare una distribuzione del carico tra Core 2 e 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
Dopo l'inclusione di Cisco IOS XE 16.6.x, vengono applicate le stesse impostazioni dell'output precedente, ma per i core da 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
Attenzione: se si sospetta un problema nell'utilizzo della CPU di base, aprire una richiesta TAC (Technical Assistance Center) per ottenere assistenza e confermare la stabilità del dispositivo.
Procedure ottimali per il monitoraggio della CPU
Si consiglia di utilizzare i comandi specifici per l'utilizzo dei percorsi di dati o per l'utilizzo di IOSd. Il risultato dei comandi di visualizzazione di base può generare falsi allarmi positivi.
Di seguito è riportato il comando per monitorare l'utilizzo del percorso dati:
- mostra utilizzo percorso dati attivo qfp hardware della piattaforma
Il comando per monitorare l'utilizzo di IOSd è:
- mostra cpu processo ordinata
Utilizzare uno dei seguenti identificatori di oggetto (OID) per monitorare l'utilizzo della CPU IOSd con il protocollo SNMP (Simple Network Management Protocol):
- occupatoPer = percentuale di CPU IOSd occupata negli ultimi 5 secondi
- avgBusy1 = IOSd media mobile di un minuto, con decadimento esponenziale, della percentuale di CPU occupata
- avgBusy5 = IOSd cinque minuti (media mobile esponenzialmente decaduta) della percentuale di CPU occupata