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 tc
Befehl 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?
quelle
netem delay 50ms
begrenzt die Latenz nicht. Es erhöht die Latenz im50ms
Vergleich zu dem, was es sonst gewesen wäre.Antworten:
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
Client: 512 kbit 50 ms
quelle
Bei 80-90 kByte / s geht es darum, was Sie erwartet
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?
quelle