Begrenzen Sie eingehende und ausgehende Bandbreite und Latenz unter Linux

14

Mir ist klar, dass bereits viele ähnliche Fragen gestellt wurden, aber ich habe bisher noch keine Lösung für mein Problem gefunden.

Ich habe einen virtuellen Linux-Server (unter Debian Squeeze), den ich zum Testen der Website-Geschwindigkeit verwende, um die Zunahme und Abnahme der Ladezeit dieser Websites zu messen. Ich versuche, die Bandbreite und die Latenz dieses Servers zu begrenzen, um den tatsächlichen Ladezeiten auf den Websites nahe zu kommen, bin aber bisher gescheitert.

Was ich speziell möchte, ist Folgendes:

  • Eingehende und ausgehende Latenz von 50 ms einstellen.
  • Festlegen einer eingehenden Bandbreitenbeschränkung von 512 KBit / s.
  • So legen Sie ein ausgehendes Bandbreitenlimit von 4096 kbit / s fest

Ich habe in Netem nachgelesen und den tcBefehl verwendet, aber es geht mir immer noch ein bisschen über den Kopf. Ich habe es geschafft, diesen Befehl zusammenzustellen, um die Latenz zu steuern, die zu funktionieren scheint, aber ich bin mir nicht einmal sicher, ob dies nur die ausgehende Latenz oder beides regelt:

tc qdisc add dev eth0 root netem delay 50ms

Gibt es Netzwerk-Gurus, die mir weiterhelfen können?

Bearbeiten:

Nach weiteren Recherchen bin ich auf halbem Weg zu meinem Ziel gekommen. Mit diesem Befehl verhält sich der ausgehende Verkehr so, wie ich es möchte:

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

Trotzdem konnte ich den eingehenden Verkehr nicht richtig drosseln. Ich habe gelernt, dass ich einen "Ingress Policer-Filter" verwenden soll. Ich habe versucht, genau das mit dem folgenden Befehl zu tun. Ich habe mit verschiedenen Werten herumgespielt, aber kein Glück.

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

Die Bandbreite wird jedoch vom Befehl beeinflusst. Die obigen Werte bewirken, dass die Geschwindigkeit bei 2 MB / s beginnt und im Verlauf der Übertragung langsam auf etwa 80-90 kB / s abfällt, die nach etwa 30 Sekunden Übertragung erreicht werden.

Irgendwelche Ideen, was ich falsch mache?

yzfr1
quelle
netem delay 50msbegrenzt die Latenz nicht. Es erhöht die Latenz im 50msVergleich zu dem, was es sonst gewesen wäre.
Kasperd
In der Tat hast du recht. Entfernt , um das Wort zu begrenzen , weil es eine Zunahme von 50 ms war , wurde ich tatsächlich auf der Suche nach (wie es eine virtuelle Maschine auf dem gleichen Computer war die ursprüngliche Latenz nahe genug , um 0 war sowieso)
YZFR1

Antworten:

11

Ich entschied mich schließlich dafür, nur die ausgehende Bandbreite / Latenz auf dem Server einzustellen und dann dasselbe auf dem Client zu tun, um effektiv das gleiche Ergebnis zu erzielen.

Dies sind die Befehle, die ich auf dem Server bzw. dem Client ausgeführt habe, um meine Ziele zu erreichen:

Server: 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
quelle
Ich habe seit Monaten danach gesucht. Vielen Dank. Eine Frage? Wie löscht man die Regel? tc class del dev eth0 root zeigt RTNETLINK-Antworten: Keine solche Datei oder Verzeichnis
Nur
Es war vor ein paar Monaten, aber ich scheine mich zu erinnern, dass es genug war, um die qdisc zu entfernen: tc qdisc del dev eth0 root
yzfr1
2

Bei 80-90 kByte / s geht es darum, was Sie erwartet

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

Sie fordern ankommende Daten auf, verworfen zu werden, wenn sie bei 1 mBit / s ankommen, das sind ungefähr 125 kByte / s. Der Remote-Server sinkt dann auf einen erheblich niedrigeren Wert (möglicherweise die Hälfte, nicht sicher). Danach kommen alle Pakete durch, so dass das entfernte Ende langsam die Geschwindigkeit aufnimmt, bis wieder 125 kByte / s erreicht sind. Sie erhalten einen für Ingress Shaping typischen mittleren Durchsatz deutlich unter 125 kByte / s.

Ich bin ein bisschen überrascht, dass die Geschwindigkeit 2 MByte / s erreichen sollte, wenn der Filter für die Eingangsrichtlinie bereits aktiviert ist. Wo haben Sie gemessen - am Downstream-Client (Programm) oder an einem Upstream-Router? Oder haben Sie zuerst die Verbindung hergestellt und erst danach den Ingress-Policy-Filter aktiviert?

anonymer Linux-Liebhaber
quelle