Limitazione della larghezza di banda dell'interfaccia con tc sotto Linux


8

Ho un router Linux che ha un'interfaccia da 10 GBe all'esterno e interfacce Ethernet Gigabit collegate all'interno.

Al momento disponiamo di budget per 2 GBit / s. Se superiamo tale tasso di oltre il 5% in media per un mese, verrà addebitato l'intero importo di 10 Gbit / s. Abbastanza un passo avanti in termini di dollari.

Quindi, voglio limitare questo a 2 GBit / s su interfaccia da 10 GBe.

Il filtro TBF potrebbe essere l'ideale, ma questo commento è preoccupante.

Su tutte le piattaforme ad eccezione di Alpha, è in grado di modellare fino a 1 mbit / s di traffico normale con una raffica minima ideale, inviando i dati esattamente alle velocità configurate.

Dovrei usare TBF o qualche altro filtro per applicare questa velocità all'interfaccia e come lo farei. Non capisco l'esempio fornito qui: Traffic Control HOWTO

In particolare "Esempio 9. Creazione di un TBF a 256kbit / s"

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0
tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps

Come viene calcolata la velocità di 256K bit / s? In questo esempio, 32000 bps = 32k byte al secondo. Poiché tc utilizza bps = byte al secondo. Immagino che il burst e il limite entrino in gioco, ma come sceglieresti numeri sensibili per raggiungere la velocità desiderata?

Questo non è un errore Ho provato questo e ha dato un tasso vicino a 256K ma non esattamente.


MODIFICARE

Dopo aver fatto molte letture e test, sono giunto alla conclusione che TBF è inappropriato a causa della larghezza di banda coinvolta. Indipendentemente dalle impostazioni che ho provato, non sono riuscito a ottenere TBF per fornire una larghezza di banda> ~ 50 Mbit / s. Secondo lartc.org/lartc.pdf, il metodo RED è migliore per modellare la larghezza di banda> 100 Mbit / s, quindi tenterò di usarlo.

Tuttavia, scegliendo un valore per min (ovvero la dimensione media della coda per cui la marcatura diventa una possibilità). L'esempio fornito è questo:

È necessario impostare il valore minimo calcolando la latenza di accodamento di base accettabile più elevata desiderata e moltiplicarlo per la larghezza di banda. Ad esempio, sul mio collegamento ISDN a 64 kbit / s, potrei desiderare una latenza di accodamento di base di 200 ms, quindi ho impostato un minimo di 1600 byte.

  1. come scegliere la latenza di accodamento di base accettabile più alta? L'esempio è per 64kbit / s.

  2. Cosa sarebbe accettabile per 2Gbit / s?

Risposte:


2
  1. È necessario scegliere una latenza di accodamento accettabile in base al tipo di traffico.

    • Ad esempio, per l'accodamento vocale superiore a 200 ms è già un problema.
    • Pur avendo un buffer di 500ms per il traffico ftp / torrent non è affatto un grosso problema.
  2. La latenza / strategia di accodamento è una questione di tipo di traffico e non di velocità dell'interfaccia. Ad esempio, VOIP, forse, non dovrebbe assolutamente essere messo in coda. Sfortunatamente la documentazione di tc RED non è molto chiara, è meglio leggere alcune informazioni RED sul sito Juniper / Cisco e applicare tali conoscenze a tc.


1

Come viene calcolata la velocità di 256K bit / s? In questo esempio, 32.000 bps = [32.000] byte al secondo.

Sì, la matematica è corretta. Se vedi un numero vicino a 256k, probabilmente è leggermente al di sotto. Da dove stai misurando quel numero? Se è il downlaod del tuo browser o qualcosa di simile, non contano il sovraccarico delle intestazioni dei pacchetti, ma tcconta tutto.


Buon punto. Stavo usando iperf.
Matt,

1

Nella mia esperienza, qdisc TBF è facilmente in grado di limitare la larghezza di banda a 1 Gbps, quindi immagino che ridimensionerà anche a 2 Gbps. Tuttavia, probabilmente avrai bisogno di una vera CPU per il lavoro invece di un router edge di fascia bassa. Qualcosa come 4 GHz i3 sarà sicuramente abbastanza.

Prova qualcosa del genere

tc qdisc add dev "$DEV" root handle 1: \
  tbf rate "$UPLINK_RATE" burst "$UPLINK_BURST" latency "$TBF_LATENCY"

dove

DEV="$(ip route | grep "^default " | grep -Po "(?<=dev )[^ ]+")"
UPLINK_RATE="2000Mbit"
UPLINK_BURST="6500"
TBF_LATENCY="14ms"

Si noti che per utilizzare TBF a bassa latenza potrebbe essere necessario eseguire il kernel PREEMPT (ad es. linux-lowlatency-hwe-*Pacchetto Ubuntu ) o il sistema potrebbe non riuscire a gestire tutti quei pacchetti.

Vedi anche: https://networkengineering.stackexchange.com/a/54404/36597


Grazie. Ho dimenticato questa domanda. Ho trovato una risposta e ho avuto una sceneggiatura che l'ha fatto. Ma ho lasciato l'azienda e non posso pubblicare la soluzione ora. Tuttavia, sì, credo che sia stato utilizzato TBF e sì, il router era un server xeon veloce.
Matt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.