Questo documento spiega il meccanismo SPD (Selective Packet Discard) e come può essere monitorato e regolato.
Nota: questo documento non spiega come risolvere i problemi relativi a un numero crescente di perdite di input nell'output show interfaces su un router Internet Cisco serie 12000. Per ulteriori informazioni su questo problema, consultare il documento sulla risoluzione dei problemi relativi alle gocce di input su Cisco serie 12000 Internet Router.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
Non sono previsti prerequisiti specifici per questo documento.
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
Router Cisco serie 7200
Router Cisco serie 7500
Cisco serie 12000 Internet Router
Tutte le versioni del software Cisco IOS®
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.
L'SPD (Selective Packet Discard) è un meccanismo che consente di gestire le code di input a livello di processo nel processore di routing (RP). L'obiettivo di SPD è fornire priorità ai pacchetti del protocollo di routing e ad altri importanti pacchetti keepalive di layer 2 per il controllo del traffico durante i periodi di congestione della coda a livello di processo.
Storicamente, su piattaforme come Cisco 7x00 e sistemi non Cisco Express Forwarding (CEF) 7500, il processore di routing ha inoltrato un numero significativo di pacchetti in transito per popolare la cache a commutazione rapida. Di conseguenza, in questo caso SPD doveva dare la priorità ai pacchetti del protocollo di routing sui pacchetti di transito che condividono la stessa coda.
Al momento, sul Cisco serie 12000 Internet Router e sul Cisco 7500 con CEF, solo il traffico destinato al router stesso viene inviato al livello di processo. In questo caso, SPD viene utilizzato per assegnare la priorità ai pacchetti del protocollo di routing quando è presente traffico di gestione, ad esempio SNMP (Simple Network Management Protocol) o quando si verifica un attacco Denial of Service (DoS) durante l'invio di traffico all'RP.
Su Cisco serie 12000, quando una scheda di linea determina che un pacchetto in arrivo deve essere inoltrato all'RP per l'elaborazione, il pacchetto viaggia attraverso il fabric dello switch come Cisco Cells ed è infine ricevuto dal Cisco Cell Segmentation and Reassembly (CSAR) Field Programmable Gate Array (FPGA).
Lo scopo è gestire il traffico tra il fabric dello switch e la CPU RP, ed è qui che vengono eseguiti i controlli SPD. Ciò si applica ai pacchetti IP, ai pacchetti CLNS (Connectionless Network Service), ai pacchetti keepalive di livello 2 e pacchetti simili inviati al protocollo RP. SPD esegue due controlli e potenzialmente può rilasciare un pacchetto in uno di questi due stati:
Controllo stato SPD
Controllo coda di input
La coda di elaborazione IP sull'RP è divisa in due parti: una coda di pacchetto generale e una coda di priorità. I pacchetti inseriti nella coda generale sono soggetti al controllo dello stato SPD, mentre quelli inseriti nella coda di priorità non lo sono. I pacchetti qualificati per la coda di pacchetti con priorità alta sono pacchetti con priorità alta come quelli con precedenza IP 6 o 7 e non devono mai essere scartati. I non qualificatori, tuttavia, possono essere scartati qui a seconda della lunghezza della coda generale del pacchetto, a seconda dello stato SPD. La coda di pacchetti generale può essere in tre stati e, come tale, i pacchetti a bassa priorità possono essere serviti in modo diverso:
NORMALE: dimensioni coda <= min
CADUTA CASUALE: min <= dimensione coda <= max
RILASCIO COMPLETO: max <= dimensioni coda
In stato NORMAL (NORMALE), non si eliminano mai pacchetti ben formati e non corretti.
Nello stato RANDOM DROP, i pacchetti ben formati vengono eliminati in modo casuale. Se è configurata la modalità aggressiva, tutti i pacchetti in formato non corretto vengono eliminati; in caso contrario, li trattiamo come pacchetti ben formati.
Nota: queste gocce casuali vengono definite scaricamenti SPD. In pratica, quando l'interfaccia è sovraccarica, si verificano svuotamenti. I mancati riscontri nel buffer incrementano il contatore di scaricamento.
Nello stato FULL DROP, tutti i pacchetti con formato corretto o errato vengono eliminati. i valori minimo (predefinito 73) e massimo (predefinito 74) derivano dalla coda di attesa più piccola sullo chassis, ma possono essere sostituiti con i comandi globali ip spd queue min-threshold e ip spd queue max-threshold.
SPD può essere configurato per due diverse modalità: normale (impostazione predefinita) e aggressivo. L'unica differenza tra le due è il modo in cui il router gestisce i pacchetti IP non validi (checksum non valido, versione non corretta, lunghezza dell'intestazione non corretta, lunghezza del pacchetto non corretta). I pacchetti IP non validi vengono scartati da SPD quando si è in modalità aggressiva e in stato di rilascio casuale. La modalità aggressiva può essere configurata usando il comando ip spd mode aggressive.
Nota: la modalità aggressiva non è implementata sul Cisco serie 12000 Internet Router perché i pacchetti IP non validi vengono scartati direttamente dalla scheda di linea in entrata e non vengono indirizzati al Gigabit Route Processor (GRP). Di conseguenza, su questa particolare piattaforma non è necessaria la modalità aggressiva.
La coda di input viene gestita per interfaccia hardware, condivisa tra tutte le sottointerfacce. Senza SPD, tutti i pacchetti vengono scartati se la coda di input è piena quando il pacchetto viene ricevuto. La dimensione predefinita della coda di input è 75 ed è configurabile per interfaccia utilizzando il comando di configurazione interfaccia hold-queue [size]. Il numero di pacchetti nella coda di input può essere visualizzato nel campo "input queue" nel comando show interfaces.
router#show interfaces pos 3/0 POS3/0 is up, line protocol is up Hardware is Packet over SONET Internet address is 137.40.55.2/24 MTU 4470 bytes, BW 2488000 Kbit, DLY 100 usec, rely 255/255, load 1/255 Encapsulation PPP, crc 32, loopback not set Keepalive not set Scramble disabled LCP Open Open: IPCP, CDPCP, OSICP, TAGCP Last input 00:00:01, output 00:00:00, output hang never Last clearing of "show interface" counters 2w3d Queueing strategy: fifo Output queue 0/40, 0 drops; input queue 0/75, 0 drops 30 second input rate 9000 bits/sec, 0 packets/sec 30 second output rate 0 bits/sec, 0 packets/sec 456292 packets input, 917329913 bytes, 0 no buffer Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 parity 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort 112046977 packets output, 32078928095 bytes, 0 underruns 0 output errors, 0 applique, 3 interface resets 0 output buffer failures, 0 output buffers swapped out 1 carrier transitions
Nota: la riduzione delle dimensioni della coda di input su un'interfaccia può causare un numero elevato di perdite di input su tutte le altre interfacce. Accertarsi di avere una dimensione minima della coda di attesa di input di almeno 75.
Anche con SPD, il comportamento dei normali pacchetti IP non viene modificato; tuttavia, ai pacchetti del protocollo di routing viene assegnata una priorità più alta in quanto SPD riconosce i pacchetti del protocollo di routing tramite il campo IP precedence. Pertanto, se la precedenza IP è impostata su 6, al pacchetto viene assegnata la priorità.
SPD assegna la priorità a questi pacchetti consentendo al software di accodarli nella coda di input a livello di processo oltre il normale limite della coda di input. Il numero di pacchetti consentiti che superano il limite normale è detto headroom spd. Il valore predefinito è 100, il che significa che un pacchetto con precedenza elevata non viene scartato se le dimensioni della coda di attesa di input sono inferiori a 175 (dimensioni predefinite della coda di input + dimensioni headroom spd).
A partire dal software Cisco IOS versione 12.0(22)S, l'headroom predefinito dell'spd è 1000 per il router Internet Cisco serie 12000, per supportare reti SP più grandi. Ciò è dovuto al fatto che il peering Border Gateway Protocol (BGP) viene utilizzato con un numero in costante crescita di router adiacenti per pubblicizzare un numero di route in costante crescita su interfacce sempre più veloci. Una singola cancellazione del BGP può spesso causare migliaia di perdite nella coda di input su una singola interfaccia, il che può gravemente ostacolare i tempi di convergenza.
Lo spazio di crescita dell'SPD è configurabile con il comando spd headroom. Il livello corrente di questo comando può essere restituito dal comando show spd o show ip spd.
Router#show spd Headroom: 1000, Extended Headroom: 10 Router#show ip spd Current mode: normal Queue min/max thresholds: 73/74, Headroom: 1000, Extended Headroom: 10 IP normal queue: 0, priority queue: 0. SPD special drop mode: none
Nota: le dimensioni della coda normale IP possono essere monitorate anche con il comando show ip spd.
Pacchetti non IP, come ad esempio i pacchetti CLNS ISIS (Intermediate System-to-Intermediate System) senza connessione, i pacchetti PPP (Point-to-Point Protocol) e i pacchetti keepalive HDLC (High-Level Data Link Control) sono stati trattati fino a poco tempo fa come priorità normale essendo Layer 2 anziché Layer 3. Inoltre, ai protocolli IGP (Interior Gateway Protocol) operanti sul Layer 3 o versioni successive è stata data priorità sui pacchetti IP normali, ma con la stessa priorità dei pacchetti BGP. Così, durante la convergenza BGP o nei periodi di attività BGP molto alta, gli hellop IGP e i keepalive venivano spesso scartati, causando il crollo delle adiacenze IGP.
Dal momento che la stabilità IGP e del collegamento sono più deboli e più cruciali della stabilità BGP, a tali pacchetti viene ora assegnata la priorità più alta e viene assegnato uno spazio di crescita SPD esteso con un valore predefinito di 10 pacchetti. Ciò significa che questi pacchetti non vengono scartati se le dimensioni della coda di attesa di input sono inferiori a 185 (dimensioni predefinite della coda di input + dimensioni spazio di testa spd + spazio di testa esteso spd).
L'headroom SPD esteso è configurabile con il comando spd extended [size] e il relativo livello corrente può essere visualizzato dall'output del comando show spd o show ip spd.
Router#show ip spd Current mode: normal Queue min/max thresholds: 73/74, Headroom: 100, Extended Headroom: 10 IP normal queue: 0, priority queue: 0. SPD special drop mode: none
Nota: sui router Internet Cisco serie 12000, i pacchetti keepalive HDLC e PPP, insieme ai pacchetti del protocollo di routing ISIS CLNS, sono considerati ad alta priorità e potrebbero essere accodati nell'headroom SPD esteso a partire dal software Cisco IOS versione 12.0(12)S1. Dal software Cisco IOS versione 12.0(18)S, tutti i pacchetti IGP potrebbero essere accodati nell'headroom SPD esteso.
I valori predefiniti, prima del software Cisco IOS versione 12.0(22)S, sono:
Dimensione coda di input = 75
Dimensione spazio di crescita SPD = 100
Dimensione spazio di crescita esteso = 10
I valori predefiniti, dopo il software Cisco IOS versione 12.0(22)S, sono:
Dimensione coda di input = 75
Dimensione spazio di crescita SPD = 1000
Dimensione spazio di crescita esteso = 10
Nel primo caso si ottiene quanto segue:
I pacchetti IP con precedenza normale possono essere accodati fino al limite predefinito (75)
I pacchetti IP ad alta priorità possono essere accodati fino al limite predefinito della coda + spd_headroom (175 o 1075 in base alla versione software Cisco IOS)
I pacchetti CLNS, IGP e LC keepalive possono essere accodati fino al limite predefinito + spd_headroom + spd_ext_headroom (185 o 1085 in base alla versione software Cisco IOS).
Ecco alcuni suggerimenti/informazioni aggiuntivi su SPD:
Per impostazione predefinita, SPD è attivato. Può essere attivato/disattivato usando il comando spd enable global.
Inizialmente, SPD era disponibile solo sulle interfacce Packet Over Sonet (PoS).
Nelle versioni precedenti al software Cisco IOS versione 12.0(21)S, SPD non funzionava sulle schede di linea Gigabit Ethernet (motore 1 e motore 2) e Fast Ethernet installate su un router Internet Cisco serie 12000. È stato necessario aumentare la coda di attesa di input per archiviare i pacchetti in eccesso.
Sul router Cisco serie 7200/7500, il contatore di scaricamenti (drop) dell'SPD può essere visualizzato nell'output del comando show interfaces a partire dal software Cisco IOS versione 12.1(1), 12.1(1)T e 12.0(9)ST per la coda non FIFO (First In First Out) e a partire dalle versioni 12.2(7), 12.2(7)T e 12.1(7)E per la coda FIFO. Nelle altre versioni e sui Cisco serie 12000 Internet Router, per visualizzare il contatore è sufficiente digitare il comando show interface switching. Ad esempio, il comando show interface pos 0/1 switching può essere usato per verificare gli scarichi dell'SPD, le cadute aggressive e la priorità.
Di seguito è riportato un esempio:
7500_Router#show interfaces FastEthernet0/0/0 is up, line protocol is up Hardware is cyBus FastEthernet Interface, address is 0090.9282.7000 (bia 0090) MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec, rely 255/255, load 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Full-duplex, 100Mb/s, 100BaseTX/FX ARP type: ARPA, ARP Timeout 04:00:00 Last input 00:00:01, output 00:00:01, output hang never Last clearing of "show interface" counters never Queueing strategy: fifo Output queue 0/40, 0 drops; input queue 0/75, 0 drops, 0 flushes 30 second input rate 4000 bits/sec, 9 packets/sec 30 second output rate 0 bits/sec, 0 packets/sec 2628397 packets input, 546327119 bytes, 0 no buffer Received 0 broadcasts, 0 runts, 0 giants, 0 throttles 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored 0 watchdog, 0 multicast 0 input packets with dribble condition detected 264792 packets output, 225434458 bytes, 0 underruns 0 output errors, 0 collisions, 20 interface resets 0 babbles, 0 late collision, 0 deferred 22 lost carrier, 0 no carrier 0 output buffer failures, 0 output buffers swapped out