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 ^^)?


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.


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.


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ń.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.