Limitez la bande passante et la latence entrantes et sortantes sous Linux

15

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

J'ai un serveur Linux virtuel (exécutant Debian Squeeze) que j'utilise pour tester les vitesses des sites Web afin de mesurer l'augmentation et la diminution du temps de chargement desdits sites Web. J'essaie de limiter la bande passante et la latence de ce serveur afin d'être en mesure de se rapprocher des temps de chargement réels sur les sites Web, mais j'ai jusqu'à présent échoué.

Ce que je veux en particulier, c'est ce qui suit:

  • Pour définir une latence entrante et sortante de 50 ms.
  • Pour définir une limite de bande passante entrante de 512 kbps.
  • Pour définir une limite de bande passante sortante de 4096 kbps.

J'ai lu sur netem et utilisé la tccommande, mais c'est toujours un peu au-dessus de ma tête. J'ai réussi à assembler cette commande pour contrôler la latence qui semble fonctionner, mais je ne suis même pas sûr si cela ne gère que la latence sortante ou les deux:

tc qdisc add dev eth0 root netem delay 50ms

Des gourous du réseau qui pourraient m'aider?

Éditer:

Après de nouvelles recherches, j'ai atteint la moitié 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 de limiter correctement le trafic entrant. J'ai appris que je suis censé utiliser un "filtre Ingress Policer". J'ai essayé de faire exactement cela avec la commande ci-dessous, en 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 cependant affectée par la commande, les valeurs ci-dessus font démarrer la vitesse à 2 Mo / s et, à mesure qu'un transfert progresse, descendant lentement à environ 80 à 90 Ko / s, qu'elle atteint après environ 30 secondes de transfert.

Des idées sur ce que je fais mal?

yzfr1
la source
netem delay 50msne limite pas la latence. Il augmente la latence par 50msrapport à ce qu'elle aurait été autrement.
kasperd
En effet, vous avez raison. Suppression de la limite de mots, car c'était une augmentation de 50 ms que je cherchais réellement (car c'était une machine virtuelle sur le même ordinateur, la latence d'origine était de toute façon assez proche de 0)
yzfr1

Réponses:

12

Je me suis finalement contenté de définir la bande passante / latence sortante sur le serveur, puis de faire de même sur le client, pour atteindre effectivement le même résultat.

Ce sont les commandes que j'ai exécutées 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
yzfr1
la source
Je le cherche depuis des mois. Merci. Une question? Comment supprimez-vous la règle? tc class del dev eth0 root montre les réponses de RTNETLINK: Aucun fichier ou répertoire de ce type
Nur
C'était il y a quelques mois, mais je me souviens qu'il suffisait de supprimer le qdisc: tc qdisc del dev eth0 root
yzfr1
2

Quelque 80-90 kByte / s est à quoi s'attendre de

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

Vous demandez que les données entrantes soient jetées lorsqu'elles arrivent à 1 mBit / s, soit environ 125 kByte / s. Le serveur distant chutera alors considérablement plus bas que cela (peut-être la moitié, pas sûr). Après cela, tous les paquets transitent, donc l'extrémité distante prend lentement de la vitesse jusqu'à ce que 125 kByte / s soient à nouveau atteints. Vous obtenez une moyenne débit considérablement inférieur à 125 koctets / s, ce qui est typique de la mise en forme d'entrée.

Je suis un peu surpris que la vitesse atteigne 2 Mo / s avec le filtre de stratégie d'entrée déjà en place. Où avez-vous mesuré - sur le client en aval (programme) ou sur un routeur en amont? Ou peut-être que vous avez commencé la connexion pour la première fois et que vous avez ensuite activé le filtre de stratégie d'entrée en place?

amateur de linux anonyme
la source