Ograniczasz przepustowość sieci już uruchomionego procesu? (Linux / FreeBSD)

10

Czy jest jakieś narzędzie do ograniczenia przepustowości sieci procesu po jego uruchomieniu? Prosty przykład: zauważasz, że użytkownik bierze całą przepustowość przesyłania za pomocą scp i chcesz ograniczyć szybkość lub zmniejszyć priorytet transferu.

Myślę, że mógłbym to zrobić za pomocą kombinacji iptables / tc lub pf, ale zastanawiałem się, czy jest dostępne narzędzie „one-shot” (jak struga z opcją --pid ^^)?

jbdenis
źródło
Miałeś na myśli „lejka”?
halp
Edycja: Zakładałem, że „struga” była zamierzona.
Steven poniedziałek

Odpowiedzi:

3

Niestety nie ma takiego rozwiązania dla FreeBSD. Istnieje wiele rozwiązań, takich jak dummynet / ipfw lub altq / pf, które służą do ograniczania wykorzystania sieci na podstawie różnych wzorców, ale nie na pidach.

W systemie Linux istnieje sposób ograniczenia użycia sieci na podstawie użytkownika:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

Myślę, że nie ma rozwiązania ograniczającego wykorzystanie sieci na podstawie pid.

Istvan
źródło
2
Ipfw
0

W Linuksie nawet kombinacja iptables i tc może być trudnym problemem, ponieważ opcja „--pid-owner” została porzucona z modułu iptables „właściciela” (patrz uwaga poniżej tabeli tutaj ). W rzeczywistości tylko to skojarzenie (pakiet - proces) wydaje się być skomplikowane, podczas gdy my możemy łatwo zrobić resztę, tj. Dość skutecznie filtrować i ograniczać pakiety.

pitr
źródło
0

Nie sądzę, że istnieje gotowe rozwiązanie tego problemu. Ale używając standardowych narzędzi Linuksa możesz zhakować skrypt, który to zrobi.

Po pierwsze, możesz uzyskać listę wszystkich połączeń określonego procesu za pomocą lsof. Następnie możesz utworzyć zasady wejściowe za pomocą tc dla tych połączeń.

thor
źródło
0

Zasadniczo, jeśli spowolnisz ten proces do +20, wtedy wszystko inne uruchomione w systemie otrzyma priorytet, a zadanie zostanie zaplanowane rzadziej, więc będzie trudniej zapełnić bufory lub pakiety procesów, co powinno prowadzić do niektórych TCP dławienie. Będzie to sporadyczne, ale może pomóc.

# renice 20 -p $pid
Phil P.
źródło
1
Jest to bardzo okrągły sposób próby kontrolowania przepustowości i naprawdę będzie działał tylko wtedy, gdy system jest bardzo mocno obciążony - W bezczynnym systemie evan proces ustawiony na -20 nadal dostanie się na procesor tak często, jak chce.
voretaq7 24.01.11
Zgadza się, ale jeśli nie jest to przepustowość współdzielona z innymi komputerami lokalnymi, to jeśli maszyna jest bezczynna, przeważnie nie obchodzi cię, czy ten proces uzyska całą przepustowość. Tylko wtedy, gdy istnieje inny proces, który próbuje wykorzystać przepustowość, ma to znaczenie. Możemy mieć różne definicje „bardzo mocno obciążonego” - jeśli próbuje się uruchomić inny proces, ma on pierwszeństwo, więc jeśli średnia obciążenia wynosi> = 1 na rdzeń, może to pomóc. Zauważyłem, że jest surowe, ale jeśli jest to jedyne dostępne narzędzie (FreeBSD), to przynajmniej warto spróbować.
Phil P