Önceden başlatılmış bir işlemin ağ üretimini sınırlamak mı istiyorsunuz? (Linux / FreeBSD)


10

Bir işlem başlatıldıktan sonra ağ akışını sınırlamak için herhangi bir yardımcı program var mı? Basit örnek: Bir kullanıcının scp kullanarak tüm yükleme bant genişliğinizi aldığını ve aktarım hızını sınırlamak veya önceliğini azaltmak istediğinizi unutmayın.

Bunu başarmak için iptables / tc veya pf bir arada kullanabilirsiniz sanırım, ama mevcut bir "tek atış" aracı (- pid seçeneği ^^ ile damlama gibi) olup olmadığını merak ediyordum?


Şunu mu demek istediniz: "trickle"?
halp

Düzenleme: Ben "damlama" amaçlandığını varsaydı.
Steven Pazartesi

Yanıtlar:


3

Ne yazık ki FreeBSD için böyle bir çözüm yok. Ağ kullanımını farklı kalıplara göre sınırlamak için kullanılan ancak pidlere değil dummynet / ipfw veya altq / pf gibi birçok çözüm vardır.

Linux'ta ağ kullanımını kullanıcı bazında sınırlamanın bir yolu vardır:

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

Bence pid tabanlı ağ kullanımını sınırlamak için bir çözüm yoktur.


2
FreeBSD'nin ipfw uid ile trafiği de eşleştirebilir
gelraen


0

"--Pid-sahibi" seçeneği "sahibinden" iptables modülü den terk edildi çünkü Linux'ta, iptables ve tc hatta kombinasyonu (tablonun altında nota bakın, sert bir sorun olabilir burada ). Aslında, sadece bu ilişki (paket - süreç) karmaşık görünüyor, gerisini kolayca yapabiliriz, yani paketleri oldukça verimli bir şekilde filtreleyebilir ve sınırlayabiliriz.


0

Bunun için hazır bir çözüm olduğunu düşünmüyorum. Ancak, standart Linux araçlarını kullanarak işi yapacak bir komut dosyasını hackleyebilirsiniz.

İlk olarak, lsof ile belirli bir işlemin tüm bağlantılarının bir listesini alabilirsiniz. Ardından, bu bağlantılar için tc ile giriş politikaları oluşturabilirsiniz.


0

Kabaca, eğer süreci +20'ye düşürürseniz, sistemde çalışan başka bir şey öncelik kazanacak ve iş daha az zamanlanacak, bu nedenle bazı TCP'lere yol açacak arabellekleri veya işlem paketlerini doldurmak daha zor olacak daraltma. Sporadik olacak, ancak yeterince yardımcı olabilir.

# renice 20 -p $pid

1
Bu, bant genişliğini kontrol etmeye çalışmanın çok dolambaçlı bir yoludur ve gerçekten sadece sistem çok ağır yüklüyse çalışacaktır - Boş bir sistemde -20 olarak bilinen bir işlem hala CPU'ya istediği kadar girecektir.
voretaq7

Doğru, ancak bu diğer yerel bilgisayarlarla paylaşılan bant genişliği değilse, makine boşsa, çoğunlukla bu işlemin tüm bant genişliğini alıp almadığını umursamazsınız. Sadece önemli olan bant genişliğini kullanmaya çalışan başka bir işlem olduğunda. Farklı "çok yüklü" tanımlarını değiştirebiliriz - çalıştırmaya çalışan başka bir işlem varsa, bu öncelik kazanır ve böylece yük ortalaması çekirdek başına> = 1 ise, bu yardımcı olabilir. Ham olduğunu not ettim ama mevcut tek araç (FreeBSD) ise en azından denemeye değer.
Phil P
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.