Czy istnieje metoda symulacji dużych opóźnień?

11

To bardzo dobra odpowiedź na temat ograniczenia przepustowości .

Teraz przepustowość nie jest moim głównym zmartwieniem - opóźnienie jest.

Co się stanie, jeśli położę kilkaset kilometrów między moimi serwerami aplikacji a ich serwerami baz danych?

Szukam możliwości symulacji oczekiwanego opóźnienia dla każdego pakietu IP.

Nils
źródło

Odpowiedzi:

14

Możesz to zrobić za pomocą netem. Z ich strony głównej :

Emulowanie opóźnień sieci rozległej

Jest to najprostszy przykład, po prostu dodaje stałą ilość opóźnienia do wszystkich pakietów wychodzących z lokalnej sieci Ethernet.

# tc qdisc add dev eth0 root netem delay 100ms

Teraz prosty test ping do hosta w sieci lokalnej powinien wykazać wzrost o 100 milisekund. Opóźnienie jest ograniczone rozdzielczością zegara jądra (Hz). W większości systemów 2.4 zegar systemowy pracuje z częstotliwością 100 Hz, co pozwala na opóźnienia w odstępach co 10 ms. W wersji 2.6 wartością jest parametr konfiguracyjny od 1000 do 100 Hz.

Późniejsze przykłady zmieniają parametry bez ponownego ładowania qdisc

Rzeczywiste sieci rozległe wykazują zmienność, dzięki czemu można dodawać zmienność losową.

# tc qdisc change dev eth0 root netem delay 100ms 10ms

To powoduje, że dodane opóźnienie wynosi 100 ± 10 ms. Zmienność opóźnienia sieci nie jest czysto losowa, więc aby naśladować, że istnieje również wartość korelacji.

# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

To powoduje, że dodane opóźnienie wynosi 100 ± 10 ms, przy czym następny losowy element zależy od 25% od ostatniego. To nie jest prawdziwa korelacja statystyczna, ale przybliżenie.

Opóźniona dystrybucja

Zazwyczaj opóźnienie w sieci nie jest jednolite. Bardziej powszechne jest użycie czegoś w rodzaju rozkładu normalnego do opisania zmiany opóźnienia. Dyscyplina netem może wziąć tabelę, aby określić nierównomierny rozkład.

# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal

Rzeczywiste tabele (normal, pareto, paretonormal) są generowane jako część kompilacji iproute2 i umieszczane w / usr / lib / tc; więc możliwe jest z pewnym wysiłkiem stworzenie własnej dystrybucji w oparciu o dane eksperymentalne.

Chris Down
źródło
3
Świetnie - i tcjest nawet obecny w obecnych systemach SLES i RHEL.
Nils,