Jak ustalić priorytety przepustowości sieci dla poszczególnych aplikacji?

20

Czy jest sposób w Linuksie, aby nadać konkretnej aplikacji większy / mniejszy priorytet przepustowości sieci? Coś w rodzaju nicepriorytetu procesora.

Kontekst: Obecnie korzystam z połączenia o bardzo niskiej przepustowości (klucz 3G). Podczas gdy wykonuję dość dużą aktualizację za pomocą aptitude, przeglądanie Internetu staje się praktycznie niemożliwe, ponieważ pobieranie aktualizacji blokuje moje połączenie internetowe.

Tak więc chciałbym w jakiś sposób zmniejszyć priorytet przepustowości sieci dla aptitudeprocesu (i wszystkich jego elementów potomnych), aby nie używał zbyt dużej przepustowości, gdy inny proces z niej korzysta.

Praca
źródło
Czy aptitude używa określonego portu do swoich połączeń? Jeśli tak, możesz ustawić priorytet tego portu na niższy, używając QoS w routerze (jeśli router ma taką możliwość).
MaQleod
@MaQleod: 1) Nie, używa HTTP do pobierania. 2) Ponieważ jestem w sieci 3G, nie mam routera (cóż, i tak nie mam dostępu).
Job
Chciałbym po prostu ograniczyć szybkość pobierania aptitude / apt zamiast próbować grać z jego priorytetem. Ustaw ją na połowę maksymalnej przepustowości, aby pozostawić trochę do przeglądania. W komentarzu do odpowiedzi Catalin próbowałem podać powód, dla którego nie bawiłem się QoS.
vtest

Odpowiedzi:

8

Za pomocą force_bind można ustawić priorytet dla wszystkich gniazd aplikacji, a następnie za pomocą Linux QoS (polecenie tc) można przypisać aplikacje do pasma priorytetowego. Sprawdź plik README na przykład.

http://kernel.embedromix.ro/us/

Oświadczenie: Jestem autorem.

Przykład:

14: Force priority (between 0 and 6 for non-root users). You can
        use 'tc' command from iproute to set-up 'prio' qdisc and to
        assign prio to queues:
        # 0. setup
        export FORCE_NET_VERBOSE=1
        export LD_PRELOAD=${LD_PRELOAD}:/usr/lib/force_bind.so
        # 1. Make sure you have a 'prio' qdisc attached to eth0, for example:
        tc qdisc add ev eth0 root handle 1: prio
        # 2. Assign applications to classed (bands):
        export FORCE_NET_PRIO=6 # interactive, band 0
        your_voip_program_here
        export FORCE_NET_PRIO=0 # best effort, band 1
        your_mail_program_here
        export FORCE_NET_PRIO=2 # bulk, band 2
        your_remote_backup_program_here
        # 3. Run tc statistics so you can see the classification:
        tc -s class show dev eth0

Oczywiście możesz użyć htb lub innej qdisc.

Catalin M. BOIE
źródło
3
Dziękuję za wyłączenie odpowiedzialności! W duchu superużytkownika byłoby wspaniale, gdybyś mógł podać tutaj przykład dla wszystkich!
slhck,
1
Pobieranie generuje ruch przychodzący. QoS może regulować ruch wychodzący, nie może kontrolować ilości przychodzących danych. Aby to zadziałało, konieczne jest kontrolowanie routera między hostem a Internetem.
vtest
2
trickle(dostępny przynajmniej w Ubuntu i Debianie) zrobi to za Ciebie, jak również, a może być nieco łatwiejsze w użyciu: trickle -d 1 -u 1 aptitude. Liczby są kilobajtami.
taneli
1
Jeśli chodzi o ruch przychodzący, czy możliwe jest, aby niektóre rodzaje ruchu przychodzącego miały wyższy priorytet niż inne typy, nawet jeśli nie można kontrolować routera? @vtest
CMCDragonkai
3
@taneli: tricklemożna użyć do ustawienia limitu przepustowości, ale nie można go użyć do zdefiniowania priorytetów między procesami
a3nm