Zdaję sobie sprawę, że wiele podobnych pytań zostało już zadanych, ale jak dotąd nie znalazłem rozwiązania mojego problemu.
Mam wirtualny serwer linuksowy (z systemem Debian Squeeze), którego używam do testowania prędkości stron internetowych w celu pomiaru wzrostu i zmniejszenia czasu ładowania tych stron. Próbuję ograniczyć przepustowość i opóźnienie tego serwera, aby zbliżyć się do rzeczywistych czasów ładowania na stronach internetowych, ale jak dotąd nie udało się.
To, czego konkretnie chcę, to:
- Aby ustawić opóźnienie przychodzące i wychodzące na 50 ms.
- Aby ustawić limit przepustowości przychodzącej 512 kb / s.
- Aby ustawić limit przepustowości wychodzącej na 4096 kb / s.
Czytałem o netemie i korzystałem z tc
polecenia, ale wciąż wszystko jest trochę powyżej mojej głowy. Udało mi się zebrać to polecenie, aby kontrolować opóźnienie, które wydaje się działać, ale nie jestem nawet pewien, czy to obsługuje tylko wychodzące opóźnienie, czy oba:
tc qdisc add dev eth0 root netem delay 50ms
Jakiś guru sieci, który może mi pomóc?
Edytować:
Po dalszych badaniach dotarłem w połowie drogi do celu, używając tego polecenia cały ruch wychodzący zachowuje się tak, jak chcę:
tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000
Nadal jednak nie byłem w stanie prawidłowo ograniczyć ruchu przychodzącego. Nauczyłem się, że powinienem używać „filtra Ingress Policer”. Próbowałem to zrobić za pomocą poniższego polecenia, bawiąc się różnymi wartościami, ale bez powodzenia.
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
Polecenie wpływa jednak na szerokość pasma, powyższe wartości powodują, że prędkość zaczyna się od 2 MB / s, a wraz z postępem transferu powoli spada do około 80-90 kB / s, które osiąga po około 30 sekundach transferu.
Jakieś pomysły na to, co robię źle?
źródło
netem delay 50ms
nie ogranicza opóźnienia. Zwiększa opóźnienie w50ms
porównaniu z tym, czym byłby inaczej.Odpowiedzi:
W końcu zdecydowałem się na ustawienie przepustowości / opóźnienia wychodzącego na serwerze, a następnie robienie tego samego na kliencie, co skutecznie doprowadziło do tego samego rezultatu.
Oto polecenia, które uruchomiłem odpowiednio na serwerze i kliencie, aby osiągnąć moje cele:
Serwer: 4 Mbit 50 ms
Klient: 512 kbit 50 ms
źródło
Około 80-90 kB / s dotyczy tego, czego można oczekiwać
Pytasz, czy przychodzące dane są wyrzucane, gdy docierają do 1 mBit / s, czyli około 125 kB / s. Serwer zdalny spadnie wtedy do znacznie niższej wartości (może połowa, nie jestem pewien). Następnie wszystkie pakiety przechodzą, więc zdalny koniec powoli przyspiesza, aż ponownie osiągnie 125 kB / s. Otrzymujesz średnią przepustowość znacznie poniżej 125 kB / s, co jest typowe dla kształtowania wejścia.
Jestem trochę zaskoczony, że prędkość powinna osiągnąć 2 MB / s przy już założonym filtrze polityki wejściowej. Gdzie zmierzyłeś - u klienta (programu) lub na pewnym routerze? A może najpierw nawiązałeś połączenie, a dopiero potem uruchomiłeś filtr zasad wejściowych?
źródło