Questo documento spiega i motivi dell'elevato utilizzo della CPU dovuto agli interrupt e fornisce suggerimenti e linee guida per la risoluzione dei problemi.
Nessun requisito specifico previsto per questo documento.
Il documento può essere consultato per tutte le versioni software o hardware.
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.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
L'elevato utilizzo della CPU a livello di interrupt è causato principalmente dai pacchetti gestiti a livello di interrupt. Gli interrupt vengono generati ogni volta che un carattere viene emesso dalle porte della console o dalle porte ausiliarie di un router.
I ricevitori/trasmettitori asincroni universali (UART, Universal Asynchronous Receiver/Transmitters) sono lenti rispetto alla velocità di elaborazione del router, quindi è improbabile, sebbene possibile, che gli interrupt della console o ausiliari possano causare un elevato utilizzo della CPU sul router (a meno che il router non abbia un elevato numero di linee tty in uso).
L'utilizzo elevato della CPU dovuto agli interrupt può essere dovuto a diversi motivi:
Sul router è configurato un percorso di commutazione non appropriato
Alcune interfacce ATM (Asynchronous Transfer Mode) sono attive sul router
Troppi pacchetti inviati dal PXF al processore di routing (RP)
Per risolvere questo potenziale problema, verificare quanto segue:
Verificare se il router esegue Cisco Express Forwarding:
Verificare la configurazione per il comando di configurazione globale ip cef.
Verificare che Cisco Express Forwarding sia abilitato e funzioni usando il comando show ip cef summary.
Verificare che Cisco Express Forwarding sia abilitato come percorso di commutazione su tutte le interfacce. Come si può vedere nell'output del comando show cef interface e show ip interface. Se Cisco Express Forwarding è configurato, ma non abilitato su un'interfaccia, l'incapsulamento dell'interfaccia non è supportato in Cisco Express Forwarding. Verificare che Cisco Express Forwarding sia operativo, ossia controllare se i pacchetti sono effettivamente scambiati attraverso il router usando Cisco Express Forwarding controllando il comando show cef non-cef-switched.
Usando il comando show cef drop e il comando show interfaces switching (questo è un comando nascosto che può essere usato per cercare mancati riscontri nella cache), verificare che Cisco Express Forwarding non stia scartando pacchetti. In questo caso, vedere la pagina CEF sulla risoluzione dei problemi.
Verificare se per una delle interfacce sono configurati elenchi accessi lunghi.
In linea generale, un elenco degli accessi con più di dieci righe è considerato lungo.
Passare ripetutamente su elenchi di accesso lunghi richiede un utilizzo intensivo della CPU. Con la commutazione NetFlow, se il flusso è già nella cache, non è più necessario controllare l'elenco degli accessi. In questo caso, la commutazione NetFlow sarebbe utile. È possibile abilitare la commutazione NetFlow usando il comando ip route-cache flow.
Si noti che se Cisco Express Forwarding e NetFlow sono entrambi configurati su un'interfaccia, Cisco Express Forwarding verrà utilizzato per prendere una decisione di commutazione.
Verificare che la commutazione NetFlow sia configurata sul router:
Controllare le statistiche usando il comando show ip cache flow. Esaminare il numero di nuovi flussi al secondo.
Se Cisco Express Forwarding non è abilitato, abilitare Cisco Express Forwarding per velocizzare la decisione di commutazione.
Se non ci sono elenchi di accesso lunghi, provare a disabilitare la commutazione NetFlow.
Gli errori di allineamento sono causati da letture e scritture non allineate. Ad esempio, una lettura a due byte in cui l'indirizzo di memoria non è un multiplo pari di due byte è un errore di allineamento.
Gli errori di allineamento sono in genere causati da un bug del software. La CPU corregge l'errore, ma se è necessario apportare molte correzioni, l'operazione richiede un utilizzo intensivo della CPU. Per la risoluzione di questo tipo di errore, vedere Risoluzione dei problemi relativi agli accessi spuri, agli errori di allineamento e agli interrupt spuri.
L'output dei comandi show interfaces e show interfaces switching (nascosto) restituisce informazioni sulle interfacce sovraccaricate. Per acquisire l'output di questi comandi in un file di log per analisi successive, attenersi alla procedura riportata di seguito.
Eseguire il comando terminal length 0.
Controllare l'output di show interfaces. Esaminare il carico e il numero di limitazioni sulle interfacce. Il carico è un valore medio calcolato, per impostazione predefinita, su cinque minuti. Per modificare questo intervallo, eseguire il comando load-interval seconds, in cui i secondi rappresentano l'intervallo di tempo per cui i dati vengono utilizzati per calcolare le statistiche di carico. Utilizzare un valore multiplo di 30.
Le velocità sono una buona indicazione di un router in sovraccarico. Mostrano il numero di volte in cui il ricevitore sulla porta è stato disabilitato, probabilmente a causa di un sovraccarico del buffer o del processore. Insieme all'elevato utilizzo della CPU a livello di interrupt, le velocità indicano che il router è sovraccarico di traffico.
Controllare l'output del comando show interfaces switching (nascosto) per verificare il tipo di traffico (protocollo e percorso di commutazione) che sta attraversando l'interfaccia sovraccaricata. Se alcune interfacce sono troppo sovraccariche di traffico, provare a riprogettare il flusso del traffico nella rete o ad aggiornare l'hardware.
Il loop di rete può essere anche la causa del sovraccarico del traffico. Verificare la topologia di rete.
Se esiste la possibilità che un singolo dispositivo generi pacchetti a una velocità estremamente elevata e quindi sovraccarichi il router, è possibile determinare l'indirizzo MAC del dispositivo aggiungendo il comando di configurazione dell'interfaccia ip accounting mac-address {input|output} alla configurazione dell'interfaccia sovraccaricata.
Il comando show interfaces [ ] mac-accounting visualizza le informazioni raccolte. Dopo aver trovato l'indirizzo MAC del dispositivo di origine, è possibile trovare l'indirizzo IP corrispondente usando l'output del comando show ip arp.
Se si sospetta la presenza di un bug nella versione software Cisco IOS in esecuzione sul router, è possibile controllare Bug Toolkit (solo utenti registrati) per individuare il bug che segnala sintomi simili in un ambiente simile.
Anche in assenza di traffico, il software continua a monitorare la segnalazione associata al canale (CAS, Channel-Associated Signaling), che utilizza risorse CPU.
Anche se non c'è traffico, le interfacce ATM inviano celle null (secondo gli standard ATM) e continuano a usare le risorse CPU.
Quando PXF reindirizza troppi pacchetti all'RP, quest'ultimo potrebbe sovraccaricarsi. È possibile confrontare la quantità di pacchetti punted con la quantità totale di pacchetti in entrata usando il comando show pxf accounting summary. Utilizzare lo stesso comando per individuare il motivo per cui i pacchetti vengono inoltrati all'RP. Potrebbe trattarsi di un bug del software o il traffico non è supportato da PXF.
Il profiling della CPU è un modo a basso sovraccarico per determinare dove la CPU trascorre il tempo. Il sistema funziona campionando la posizione del processore ogni quattro millisecondi. Il conteggio per la posizione in memoria viene incrementato. La causa principale dell'utilizzo della CPU verrà determinata dal profilo della CPU.
Completare questi passaggi per eseguire la profilatura della CPU. L'utilizzo della CPU viene eseguito quando si riscontra un elevato utilizzo della CPU.
Nota: tutti questi comandi devono essere digitati in modalità abilitazione
Acquisire l'output dell'area show e prendere l'indirizzo iniziale, l'indirizzo finale e le dimensioni dell'area main:text
Acquisire l'output di show memory statistics e verificare le dimensioni del blocco più grande nella memoria del processore.
Esegui profilatura interrupt attività per configurare la profilatura solo per interrupt.
Confrontare le dimensioni dell'area main:text con quelle del blocco più grande di memoria libera del processore. In teoria, il blocco più grande dovrebbe essere più grande del blocco main:text.
Se il blocco più grande è più piccolo della dimensione main:text, regolare la granularità per assicurarsi che il profiling sia in grado di ottenere un blocco di memoria del processore.
Se il blocco più grande è più grande dell'area main:text, utilizzare una granularità pari a 4.
Se il blocco più grande è più grande della metà dell'area main:text, usate una granularità di 8.
Se il blocco più grande è più grande di un quarto dell'area main:text, utilizzare una granularità di 10 (16 in esadecimale).
Nota: la granularità deve essere una potenza di 2 e deve essere il più piccola possibile (ma non inferiore a 4)
Avvia profilatura eseguendo il profilo
Profile <starting address> <ending address> <granularity value>
L'indirizzo iniziale e l'indirizzo finale vengono determinati dal passaggio 1.
Attendere da 5 a 10 minuti
Interrompere la creazione del profilo eseguendo l'interruzione del profilo
Acquisire l'output di show profile reter.
Accertarsi che la memoria sia liberata eliminando il profilo
Questo comando è usato per determinare i percorsi di commutazione attivi sulle interfacce. Per ulteriori informazioni sui percorsi di commutazione nel software Cisco IOS, consultare il documento sulla configurazione dei percorsi di commutazione.
Di seguito viene riportato un esempio di output del comando show interfaces switching per un'interfaccia:
RouterA#show interfaces switching Ethernet0 Throttle count 0 Drops RP 0 SP 0 SPD Flushes Fast 0 SSE 0 SPD Aggress Fast 0 SPD Priority Inputs 0 Drops 0 Protocol Path Pkts In Chars In Pkts Out Chars Out Other Process 0 0 595 35700 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 IP Process 4 456 4 456 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 IPX Process 0 0 2 120 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 Trans. Bridge Process 0 0 0 0 Cache misses 0 Fast 11 660 0 0 Auton/SSE 0 0 0 0 DEC MOP Process 0 0 10 770 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 ARP Process 1 60 2 120 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0 CDP Process 200 63700 100 31183 Cache misses 0 Fast 0 0 0 0 Auton/SSE 0 0 0 0
L'output mostra i percorsi di switching per tutti i protocolli configurati sull'interfaccia, in modo che sia possibile visualizzare facilmente il tipo e la quantità di traffico che attraversa il router. Nella tabella seguente vengono descritti i campi di output:
Campo | Definizione |
---|---|
Processo | Pacchetti elaborati. Può trattarsi di pacchetti destinati al router o di pacchetti per i quali non vi è stata alcuna voce nella cache di switching rapido. |
Mancati riscontri nella cache | Pacchetti per i quali non era presente alcuna voce nella cache di commutazione veloce. Verrà elaborato il primo pacchetto per questa destinazione (o flusso, a seconda del tipo di commutazione veloce configurato). Tutti i pacchetti successivi saranno commutati rapidamente, a meno che l'opzione di commutazione veloce non sia disabilitata in modo esplicito sull'interfaccia in uscita. |
Veloce | Pacchetti a commutazione rapida. L'opzione di commutazione veloce è attivata per impostazione predefinita. |
Auton/SSE | Pacchetti a commutazione autonoma, a commutazione di silicio o a commutazione distribuita. Disponibile solo sui router Cisco serie 7000 con processore switch o processore switch in silicio (rispettivamente per switching autonomo o switching in silicio) o sui router Cisco serie 7500 con VIP (per switching distribuito). |
Questo script salva gli output su flash:CPU_Profile quando l'utilizzo della CPU è superiore al 75%:
service internal event manager applet High_CPU event snmp oid 1.3.6.1.4.1.9.9.109.1.1.1.1.6 get-type next entry-opge entry-val 75 exit-time 10 poll-interval 5 action 0.1 syslog msg "CPU Utilization is high" action 0.2 cli command "enable" action 0.4 cli command "show log | append flash:CPU_Profile.txt" action 0.5 cli command "show process cpu sorted | append flash:CPU_Profile.txt" action 0.6 cli command "show interfaces | append flash:CPU_Profile.txt" action 1.1 cli command "configure terminal" action 1.2 cli command "profile xxxxxxx yyyyyyyyZ" action 1.3 cli command "profile start" action 2.3 syslog msg "Entering TCLSH" action 2.4 cli command "tclsh" action 2.5 cli command "after 240000" action 2.6 cli command "exit" action 2.9 syslog msg "Exiting TCLSH" action 3.0 cli command "profile stop" action 3.1 cli command "show profile terse | append flash:CPU_Profile.txt" action 3.2 cli command "clear profile" action 3.3 cli command "unprofile all" action 4.1 syslog msg "Finished logging information to flash:CPU_Profile.txt..." action 4.2 cli command "end"
Revisione | Data di pubblicazione | Commenti |
---|---|---|
1.0 |
29-May-2008 |
Versione iniziale |