Membatasi throughput jaringan dari proses yang sudah diluncurkan? (Linux / FreeBSD)

10

Apakah ada utilitas untuk membatasi throughput jaringan dari suatu proses setelah diluncurkan? Contoh sederhana: Anda perhatikan bahwa pengguna mengambil semua bandwidth unggah Anda menggunakan scp dan Anda ingin membatasi kecepatan atau mengurangi prioritas transfer.

Saya kira saya bisa menggunakan kombinasi iptables / tc atau pf untuk mencapai itu, tetapi saya bertanya-tanya apakah ada alat "satu-shot" yang tersedia (seperti tetesan dengan opsi --pid ^^)?

jbdenis
sumber
Apakah maksud Anda "menetes"?
Halp
Sunting: Saya berasumsi "menetes" dimaksudkan.
Steven Monday

Jawaban:

3

Sayangnya tidak ada solusi untuk FreeBSD. Ada banyak solusi seperti dummynet / ipfw atau altq / pf yang digunakan untuk membatasi penggunaan jaringan berdasarkan pola yang berbeda tetapi tidak pada pid.

Di linux ada cara untuk membatasi penggunaan jaringan berdasarkan pengguna:

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

Saya pikir tidak ada solusi untuk membatasi pemanfaatan jaringan berdasarkan pid.

Istvan
sumber
2
IPfw
0

Di Linux, bahkan kombinasi iptables dan tc bisa menjadi masalah yang sulit, karena opsi "--pid-owner" ditinggalkan dari modul iptables "owner" (lihat catatan di bawah tabel di sini ). Faktanya, hanya asosiasi ini (proses paket) yang tampaknya rumit, sementara kita dapat dengan mudah melakukan sisanya, yaitu memfilter dan membatasi paket dengan cukup efisien.

pitr
sumber
0

Saya tidak berpikir ada solusi yang sudah jadi untuk ini. Tetapi, dengan menggunakan alat-alat Linux standar Anda dapat meretas skrip yang akan melakukan hal itu.

Pertama, Anda bisa mendapatkan daftar semua koneksi proses tertentu dengan lsof. Kemudian, Anda dapat membuat kebijakan masuk dengan tc untuk koneksi tersebut.

thor
sumber
0

Secara kasar, jika Anda menyukai prosesnya hingga +20, maka apa pun yang berjalan pada sistem akan mendapat prioritas dan pekerjaan akan lebih jarang dijadwalkan, sehingga akan lebih sulit untuk mengisi buffer atau paket proses, yang seharusnya mengarah ke beberapa TCP pelambatan. Ini akan sporadis, tetapi mungkin cukup membantu.

# renice 20 -p $pid
Phil P
sumber
1
Ini adalah cara yang sangat memutar untuk mencoba mengendalikan bandwidth dan benar-benar hanya akan bekerja jika sistem sangat banyak dimuat - Pada sistem idle dan proses yang diubah menjadi -20 akan tetap menggunakan CPU sesering yang diinginkan.
voretaq7
Benar, tetapi jika ini bukan bandwidth yang dibagi dengan komputer lokal lainnya, maka jika mesinnya menganggur, Anda kebanyakan tidak peduli jika proses ini mendapatkan semua bandwidth. Hanya ketika ada proses lain yang mencoba menggunakan bandwidth yang penting. Kami mungkin memiliki definisi berbeda tentang "sangat banyak dimuat" - jika ada proses lain yang mencoba dijalankan, itu mendapat prioritas dan jadi jika rata-rata beban>> 1 per inti, ini dapat membantu. Saya memang mencatat bahwa itu kasar tetapi jika itu satu-satunya alat yang tersedia (FreeBSD) maka setidaknya layak dicoba.
Phil P