Limiter la bande passante de l'interface avec tc sous Linux

8

J'ai un routeur Linux qui a une interface de 10 Go à l'extérieur et des interfaces Ethernet Gigabit liées à l'intérieur.

Nous avons actuellement un budget de 2 Go / s. Si nous dépassons ce taux de plus de 5% en moyenne pendant un mois, nous serons facturés pour toute la capacité de 10 Gbit / s. Un pas en avant en termes de dollars.

Donc, je veux limiter cela à 2 Go / s sur l'interface 10 Go.

Le filtre TBF pourrait être idéal, mais ce commentaire est préoccupant.

Sur toutes les plates-formes, à l'exception d'Alpha, il est capable de façonner jusqu'à 1 Mo / s de trafic normal avec une rafale minimale idéale, en envoyant des données exactement aux taux configurés.

Dois-je utiliser TBF ou un autre filtre pour appliquer ce taux à l'interface et comment dois-je le faire. Je ne comprends pas l'exemple donné ici: Traffic Control HOWTO

En particulier "Exemple 9. Création d'un TBF 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

Comment est calculé le débit 256K bit / s? Dans cet exemple, 32000bps = 32k octets par seconde. Puisque tc utilise bps = octets par seconde. Je suppose que l'éclatement et la limite entrent en jeu, mais comment choisiriez-vous des nombres sensibles pour atteindre le taux souhaité?

Ce n'est pas une erreur. J'ai testé ceci et cela a donné un taux proche de 256K mais pas exactement ça.


ÉDITER

Après avoir fait beaucoup de lecture et de test, je suis arrivé à la conclusion que TBF est inapproprié en raison de la bande passante impliquée. Quels que soient les paramètres que j'ai essayés, je n'ai pas pu obtenir de TBF pour fournir une bande passante> ~ 50Mbit / s. Selon lartc.org/lartc.pdf, la méthode RED est meilleure pour façonner la bande passante> 100Mbit / s, donc j'essaierai de l'utiliser.

Cependant, choisir une valeur pour min (c.-à-d. Taille moyenne de la file d'attente à laquelle le marquage devient une possibilité). L'exemple donné est le suivant:

Vous devez définir le min en calculant la latence de mise en file d'attente de base acceptable la plus élevée que vous souhaitez, et en la multipliant par votre bande passante. Par exemple, sur ma liaison RNIS à 64 kbit / s, je voudrais peut-être une latence de mise en file d'attente de base de 200 ms, j'ai donc défini min à 1600 octets.

  1. comment choisiriez-vous la latence de mise en file d'attente de base acceptable la plus élevée? L'exemple est pour 64 kbit / s.

  2. Qu'est-ce qui serait acceptable pour 2 Gbit / s?

Mat
la source

Réponses:

2
  1. Vous devez choisir une latence de file d'attente acceptable en fonction du type de trafic.

    • Par exemple, pour la mise en file d'attente vocale de plus de 200 ms, c'est déjà un problème.
    • Tout en ayant un tampon de 500 ms pour le trafic ftp / torrent n'est pas du tout un gros problème.
  2. La latence / stratégie de file d'attente est une question de type de trafic et non de vitesse d'interface. Par exemple, VOIP, peut-être, ne devrait pas du tout être mis en file d'attente. Malheureusement, la documentation tc RED n'est pas très claire, vous feriez mieux de lire certaines informations RED sur le site Juniper / Cisco et d'appliquer ces connaissances à tc.

Alex_www
la source
1

Comment est calculé le débit 256K bit / s? Dans cet exemple, 32 000 bps = [32 000] octets par seconde.

Oui, les calculs sont corrects. Si vous voyez un nombre proche de 256k, il est probablement légèrement inférieur. D'où mesurez-vous ce nombre? Si c'est le téléchargement de votre navigateur ou quelque chose de similaire, ils ne comptent pas les frais généraux des en-têtes de paquets, mais tccomptent tout.

Jeff Ferland
la source
Bon point. J'utilisais iperf.
Matt
1

D'après mon expérience, qdisc TBF est facilement en mesure de limiter la bande passante à 1 Gbps, donc je suppose qu'il évoluera également à 2 Gbps. Cependant, vous aurez probablement besoin d'un vrai processeur pour le travail au lieu d'un routeur de bord bas de gamme. Quelque chose comme 4 GHz i3 sera sûrement suffisant.

Essayez quelque chose comme

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

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

Notez que pour utiliser TBF à faible latence, vous devrez peut-être exécuter le noyau PREEMPT (par exemple, le linux-lowlatency-hwe-*package Ubuntu ) ou le système peut ne pas gérer tous ces packages.

Voir également: https://networkengineering.stackexchange.com/a/54404/36597

Mikko Rantalainen
la source
Merci. J'ai oublié cette question. J'ai trouvé une réponse et j'avais un script qui le faisait. Mais j'ai quitté l'entreprise et je ne peux pas publier la solution maintenant. Cependant oui je crois que c'est TBF que j'ai utilisé et oui le routeur était un serveur xeon rapide.
Matt