web-dev-qa-db-fra.com

Limiter la largeur de bande et la latence entrantes et sortantes à Linux

Je réalise que de nombreuses questions similaires ont déjà été posées, mais jusqu'à présent, je n'ai pas encore de solution à mon problème.

J'ai un serveur Virtual Linux (exécutant Debian Squeeze) que j'utilise pour tester les vitesses de sites Web afin de mesurer l'augmentation et la diminution de la durée de charge desdits sites Web. J'essaie de limiter la bande passante et la latence de ce serveur afin de pouvoir se rapprocher des temps de chargement du monde réel sur les sites Web, mais j'ai échoué jusqu'à présent.

Ce que je veux spécifiquement, ce sont les suivants:

  • Définir une latence entrante et sortante de 50 ms.
  • Définir une limite de bande passante entrante de 512 Kbps.
  • Définir une limite de bande passante sortante de 4096 Kbps.

J'ai lu sur Netem et à l'aide de la commande tc, mais c'est toujours un peu au-dessus de ma tête. J'ai réussi à mettre en place cette commande pour contrôler la latence qui semble fonctionner, mais je ne suis même pas sûr que cela ne traite que la latence sortante ou les deux:

tc qdisc add dev eth0 root netem delay 50ms

Des gourous de réseau autour qui peuvent m'aider?

Edit :

Après de nouvelles recherches, j'ai obtenu à mi-chemin de mon objectif, en utilisant cette commande tout le trafic sortant se comporte comme je le souhaite:

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

Cependant, je n'ai toujours pas été en mesure d'étrangler le trafic entrant correctement. J'ai appris que je suis censé utiliser un "filtre à l'échelle d'entrée" J'essaie de faire cela avec la commande ci-dessous, jouant avec différentes valeurs, mais pas de chance.

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

La bande passante est affectée par la commande cependant, les valeurs ci-dessus rendent la vitesse de démarrage à 2 Mo et, en progression du transfert, tombant lentement jusqu'à environ 80-90 kb/s qu'il atteint environ 30 secondes de transfert.

Des idées sur ce que je fais mal?

16
yzfr1

Je me suis finalement installé pour simplement définir la bande passante/latence sortante sur le serveur, puis en faisant la même chose sur le client, atteignant effectivement le même résultat.

Ce sont les commandes que j'ai couru sur le serveur et le client respectivement pour atteindre mes objectifs:

Serveur: 4 mbit 50 ms

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

Client: 512 Kbit 50 ms

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms
13
yzfr1

Quelque 80 à 90 kolyte/s est sur ce à quoi s'attendre de

    tc filter add ... police rate 1.0mbit ...

Vous demandez des données entrantes à être jetées lorsqu'elle arrive à 1 Mbit/s, c'est environ 125 Ko/s. Le serveur distant chutera ensuite à considérablement inférieur à celui (peut-être la moitié, pas sûr). Après cela, tous les paquets sont passés, de sorte que l'extrémité distante ramasse lentement la vitesse jusqu'à 125 koh/s à la fois atteinte. Vous obtenez un débit moyenne considérablement inférieur à 125 kohodien/s, qui est typique de la mise en forme.

Je suis un peu surpris que la vitesse atteigne 2 Mo/s avec le filtre politique d'entrée déjà en place. Où avez-vous mesuré - au client en aval (programme) ou à un routeur en amont? Ou peut-être avez-vous d'abord lancé la connexion et que vous avez seulement donné un coup de pied au filtre politique d'entrée en place?

2