W jaki sposób powiązane są ważone uczciwe kolejkowanie i ważone losowe wczesne wykrywanie?

10

Próbuję zrozumieć, jak działają systemy QoS, i nie jestem pewien, jak dokładnie współdziałałyby WFQ i WRED.

Na początku myślałem, że WFQ to mechanizm kolejkowania, a WRED to mechanizm unikania zatorów. WFQ powinien planować pakiety w kolejkach, a WRED może je usunąć, gdy kolejki są pełne. Jeśli konfiguruję QoS na przykład na przełączniku L3, skonfigurowałbym mechanizm kolejkowania i mechanizm unikania przeciążenia, więc teoretycznie mogłem współpracować WFQ i WRD. Na przykład ten dokument wydaje się sugerować, że zostałyby utworzone w taki sposób. Niektóre inne dokumenty Cisco wspominają, że mógłbym z nich korzystać niezależnie.

Potem chciałem dowiedzieć się więcej o tym, jak działają i zacząłem przeszukiwać Internet. W rezultacie nie mam pojęcia, czym one są i jak działają.

Niektóre witryny (przynajmniej w moim rozumieniu treści) twierdzą, że algorytmy planowania pakietów i algorytmy unikania zatorów są w zasadzie takie same. Na przykład w tym artykule w Wikipedii wszystkie są umieszczone w tej samej grupie. Niektóre losowe artykuły wspominały, że mogę użyć WFQ XOR WRED.

Chciałem więc zapytać, jak powiązane są WFQ i WRED? Kiedy miałbym użyć jednego lub drugiego, a kiedy oba, jeśli to w ogóle możliwe?

AndrejaKo
źródło
1
wfq i wred nie mają ze sobą żadnych relacji poza wspólnym używaniem tego samego angielskiego słowa
Mike Pennington
1
„Potem chciałem dowiedzieć się więcej o tym, jak działały i zacząłem przeszukiwać Internet. W rezultacie nie mam pojęcia, czym one są i jak działają”. To opisuje 99,98% mojego doświadczenia w próbowaniu zrozumienia QoS.
Nanban Jim

Odpowiedzi:

10

Ważone uczciwe kolejkowanie (WFQ) jest, jak sama nazwa wskazuje, algorytm kolejkowania. Kolejkowanie jest używane, gdy interfejs jest przeciążony. Jest to zwykle wykrywane przez to, że pierścień nadawczy (pierścień TX) jest pełny. Oznacza to, że interfejs jest zajęty wysyłaniem pakietów. Kolejkowanie nie odbywa się, chyba że interfejs jest przeciążony. W niektórych przypadkach można zmieniać rozmiar pierścienia TX. Mały pierścień TX zapewnia kolejce programowej więcej mocy w zakresie tego, które pakiety są wysyłane jako pierwsze, ale nie jest to bardzo skuteczne. Zbyt duży pierścień TX sprawi, że kolejka oprogramowania będzie prawie bezużyteczna i doprowadzi do wyższych opóźnień i fluktuacji ważnych pakietów.

Domyślnym algorytmem kolejkowania jest zazwyczaj pierwszy na pierwszym wyjściu (FIFO). Oznacza to, że pakiety są dostarczane dokładnie w takiej kolejności, w jakiej przybywają na wejście interfejsu. Zwykle nie jest to pożądane, ponieważ niektóre pakiety powinny mieć priorytet.

Dość często klient kupuje usługę od dostawcy usług internetowych (ISP) na subrate. Oznacza to, że klient kupuje usługę 50 Mbit / s, ale fizyczny interfejs działa z prędkością 100 Mbit / s. W takim przypadku nie będzie zatorów, ale dostawca usług internetowych ograniczy ruch z klienta. Aby wprowadzić sztuczne zatory w tych przypadkach, można zastosować kształtownik.

Dlatego teraz, gdy występuje przeciążenie, można zastosować algorytm kolejkowania. Zauważ, że algorytmy kolejkowania nie zapewniają żadnej dodatkowej przepustowości, po prostu pozwalają nam zdecydować, które pakiety są dla nas ważniejsze. WFQ to algorytm, który przyjmuje kilka parametrów i na tej podstawie podejmuje decyzję. Algorytm jest dość złożony i wykorzystuje parametry (priorytet IP), rozmiar pakietu i czas planowania jako parametry. Tutaj znajduje się bardzo szczegółowe wyjaśnienie od INE . WFQ to dobry wybór, jeśli nie chce się zbytnio kręcić w kolejce, ponieważ zapewnia odpowiednią przepustowość małym przepływom, takim jak SSH, Telnet, głos, a to oznacza, że ​​transfer plików nie kradnie całej przepustowości.

Ważone losowe wczesne wykrywanie (WRED) jest mechanizmem unikania zatorów. WRED mierzy rozmiar kolejek w zależności od wartości Pierwszeństwa i rozpoczyna usuwanie pakietów, gdy kolejka znajduje się między progiem minimalnym a maksymalnym. Konfiguracja zdecyduje, że 1 na każde N pakietów zostanie odrzuconych. WRED pomaga zapobiegać synchronizacji TCP i głodowaniu TCP. Gdy TCP traci pakiety, zacznie się powoli uruchamiać, a jeśli wszystkie sesje TCP utracą pakiety w tym samym czasie, mogą zostać zsynchronizowane, co zapewnia następujący wykres:

Synchronizacja TCP

Jak można zauważyć, jeśli WRED nie jest skonfigurowany, wykres przechodzi w pełny wybuch, następnie cicho, a następnie w pełni i tak dalej. WRED zapewnia bardziej średnią szybkość transmisji. Należy zauważyć, że upuszczanie pakietów nie wpływa na UDP, ponieważ nie ma mechanizmu potwierdzania i okna przesuwnego zaimplementowanego jak TCP. Dlatego WRED nie powinien być implementowany na klasie opartej na UDP, takiej jak klasa obsługująca SNMP, DNS lub inne protokoły oparte na UDP.

Zarówno WFQ, jak i WRED mogą i powinny być wdrażane razem.

Daniel Dib
źródło
2
Cześć Daniel, fajna odpowiedź. Czy nie powinno to być WFQ (nie WQF)? Warto również wspomnieć, że WRED nie jest skuteczny przeciwko UDP i należy unikać używania go w klasach opartych na UDP, takich jak UDP Voice
Mike Pennington
Dzięki Mike. Nie jestem pewien, dlaczego źle wpisałem WFQ, edytowałem to. Zrobił też szybką notatkę na temat UDP. Zawsze udostępniasz świetne posty.
Daniel Dib,
8

Przede wszystkim nie wierz we wszystko, co czytasz w Internecie ;-)

Czasami algorytmy (lub sposób ich fizycznej realizacji) nie pasują do kategorii teoretycznej. To, co nazywacie, jest mniej ważne niż zrozumienie, co robi.

Cały punkt WFQ (lub dowolnego innego algorytmu szeregowania) polega na współdzieleniu ograniczonej przepustowości łącza między różnymi przepływami. WFQ próbuje przydzielić przepustowość proporcjonalnie do każdego przepływu. CBWFQ robi to samo z każdą „klasą”. W idealnym świecie, z nieograniczonymi kolejkami i nieograniczoną pamięcią, to wszystko, czego potrzebujesz - dzielisz przepustowość i wszyscy są zadowoleni.

Ponieważ jednak urządzenia nie mają nieograniczonej liczby kolejek i pamięci, należy wprowadzić pewne „skróty”. Ponieważ kolejka ma ograniczony rozmiar, istnieje niebezpieczeństwo, że kolejka się zapełni, powodując opadanie ogonów i synchronizację ruchu. Zasadniczo, jeśli moja kolejka jest przepełniona, nie kontroluję już przepustowości.

Aby uniknąć przepełnienia kolejek, używam Random Early Detection. Ten algorytm losowo upuszcza pakiety z kolejki zgodnie z zapełnieniem kolejki (głębokość) - im pełniejsza kolejka, tym więcej pakietów zostanie upuszczonych. Celem jest zapobieganie przepełnieniu kolejki, aby algorytm planowania mógł działać.

Następnie jakiś bystry inżynier Cisco zauważył, że można użyć mniejszej liczby kolejek (prostszy sprzęt) i losowo upuszczać różne rodzaje ruchu na różnych głębokościach kolejek. WRED upuszcza ruch z kolejki na różnych głębokościach w zależności od rodzaju ruchu. Chociaż WRED można nazwać mechanizmem unikania zatorów, ponieważ głębokość, z jaką ruch jest upuszczany, różni się w zależności od rodzaju ruchu, efektem jest to, że różne typy mają mniej miejsca w kolejce, a tym samym mniejszą przepustowość. Działa więc również jako algorytm planowania. Mówisz po-tay-to, a ja mówię po-tah-toe.

Jeszcze jedna różnica: FQ i WFQ działają na wszystkich rodzajach ruchu, ponieważ w zasadzie liczą bajty. RED i WRED działają tylko z TCP, ponieważ zależą one od mechanizmu kontroli przepływu TCP, aby spowolnić ruch i zapobiec przepełnieniu kolejki.

(Uwaga: dla wyjaśnienia ignoruję kolejki priorytetowe i LLQ. To kolejna odpowiedź).

Zgadzam się ze wszystkim, co powiedział Mike.

Ron Trunk
źródło
1
Doskonała odpowiedź i komentarz.
generalnetworkerror
-1

Oto przykład CBWFQ i WRED:

mapa polityki OUT

klasa
Procent priorytetu głosu 20

klasa
procent przepustowości wideo 30

klasa
przepustowości P1 procent 10
losowe
wykrywanie DSCP na bazie DSCP AF31 26 40 10


procent przepustowości klasy P2 15
losowe
wykrywanie DSCP na bazie DSCP AF21 24 40 10

class-default-
fair-queue
oparte na wykrywaniu losowym oparte na dscp

Mihai
źródło
niestety ten przykład nie odpowiada na jego pytanie. Kiedy to nie to samo, jak
Mike Pennington,
Z perspektywy czasu przypomina to kierowcę samochodu wyścigowego, w jaki sposób turbosprężarki i przełożenia skrzyni biegów są ze sobą powiązane, i poprowadzenie go po torze wyścigowym bez słowa. Jeśli już rozumiesz interakcję (i / lub jej brak), jest w porządku ... ale wtedy nie zadałbyś pytania.
Nanban Jim