Kolejka FIFO (First-In-First-Out, czasami określana jako FCFS - First-Come-First-Served) jest najprostrzym algorytmem kolejkowania, a właściwie brakiem algorytmu kolejkowania. Kolejke opuszcza zawsze najstarszy pakiet (tzn. najdłużej czekający). Implementacja jest niezwykle prosta i stosowana w urządzeniach o bardzo ograniczonej mocy obliczeniowej, ale najczęściej nie daje zbyt dobrych wyników. Jej zastosowaniem może być zliczanie zaległych pakietów (backlog), czekających na wysłanie. Na przykład Linux oferuje dwie takie proste kolejki: pfifo i bfifo -- pierwsza pozwalaką one zliczać ilość pakietów/bajtów w buforze. Różnia się tym, że tej pierwsej podajemy ograniczenie kolejki w pakietach, a tej drugiej w bajtach.
Dane tego algorytmu to właściwie jeden parametr $limit$ oznaczający maksymalną wielkość kolejki (w pakietach lub bajtach). Podczas dokładania pakietu na koniec kolejki, jeśli okaże się, że przekroczyliśmy limit, pakiet jest odrzucany.
Warto wspomnieć, że domyślna kolejka linuksowa pfifo_fast nie podlega problemowi pokazanemu na rysunku, gdyż wewnętrznie posiada ona trzy "podkolejki", więc mały pakiet interaktywny trafiłby do oddzielnej "podkolejki" niż duże pakiety FTP czy podobne. Dodatkowo, kolejka dla pakietów interaktywnych ma wyższy priorytet, i pakiety FTP nie byłyby wysyłane, póki jest coś do wysłania w kolejce interaktywnej. Dokładniej o niej tutaj.
Wstawienie na wyjście sieciówki eth0 kolejki FIFO o długości 2000 pakietów:
tc qdisc add dev eth0 root pfifo limit 2000
Wstawienie na wyjście sieciówki eth kolejki FIFO o długośći txqueuelen razy MTU urządzenia (wartości te można sprawdzić poleceniem ifconfig):
tc qdisc add dev eth0 root handle 1: bfifo
Sprawdzenie statystyk kolejki:
tc -s qdisc ls dev eth0Wynik tego polecenia może być na przykład taki:
qdisc pfifo 8006: root limit 1000p Sent 157586 bytes 1655 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0To znaczy, że kolejka pfifo ma długość 1000 pakietów, wysłała juz 157586 bajtów w 1655 pakietach. Jak narazie żaden pakiet nie został odrzucony (dropped 0).
Content by Michał Pokrywka
is licensed under a Creative Commons BY-SA 3.0 Ostatnia znacząca zmiana: 2010-04-28 |