Linux'ta gelen ve giden bant genişliğini ve gecikmeyi sınırlayın


15

Benzer soruların zaten sorulduğunu fark ettim, ancak şimdiye kadar sorunuma bir çözüm bulamadım.

Bahsedilen web sitelerinin yükleme süresinde artış ve azalmayı ölçmek için web sitesi hızlarını test etmek için kullandığım sanal bir linux sunucum var (Debian Squeeze çalıştıran). Web sitelerinde gerçek dünya yükleme sürelerine yakın olabilmek için bu sunucunun bant genişliğini ve gecikmesini sınırlamaya çalışıyorum, ancak şu ana kadar başarısız oldum.

Özellikle istediğim şu:

  • 50 ms'lik bir gelen ve giden gecikme süresi ayarlamak için.
  • 512 kbps gelen bir bant genişliği sınırı ayarlamak için.
  • 4096 kbps'lik bir giden bant genişliği sınırı ayarlamak için.

Netem'de okuyorum ve tckomutu kullanıyorum , ama yine de biraz kafamın üstünde. İşe yarayan gecikmeyi kontrol etmek için bu komutu bir araya getirmeyi başardım, ancak bunun yalnızca giden gecikmeyi veya her ikisini de ele alıp almadığından emin değilim:

tc qdisc add dev eth0 root netem delay 50ms

Etrafımda bana yardımcı olabilecek herhangi bir ağ gurusu var mı?

Düzenle:

Daha fazla araştırmadan sonra hedefimin yarısına ulaştım, bu komutu kullanarak tüm giden trafik istediğim gibi davranıyor:

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

Ancak yine de gelen trafiği gerektiği gibi kısamadım. Bir "Ingress Policer filtresi" kullanmam gerektiğini öğrendim. Sadece aşağıdaki komutla bunu yapmaya çalışıyorum, farklı değerlerle uğraşıyorum ama şans yok.

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

Bant genişliği komuttan etkilenir, ancak yukarıdaki değerler hızı 2MB / s'de başlatır ve aktarım ilerledikçe, yaklaşık 30 saniye aktarımdan sonra ulaştığı yaklaşık 80-90kB / s'ye yavaşça düşer.

Neyi yanlış yaptığım hakkında bir fikrin var mı?


netem delay 50msgecikmeyi sınırlamaz. Gecikmeyi 50ms, aksi takdirde ne olacağına kıyasla artırır .
kasperd

Gerçekten haklısın. Aslında aradığım 50 ms'lik bir artış olduğu için kelime sınırı kaldırıldı (aynı bilgisayarda sanal bir makine olduğu için orijinal gecikme zaten 0'a yeterince yakındı)
yzfr1

Yanıtlar:


12

Sonunda sadece sunucuda giden bant genişliğini / gecikmesini ayarlamak ve daha sonra istemcide aynısını yapmak için etkili bir şekilde aynı sonuca ulaşmaya karar verdim.

Bunlar, hedeflerime ulaşmak için sırasıyla sunucuda ve istemcide çalıştırdığım komutlar:

Sunucu: 4 Mbit 50 ms

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

Müşteri: 512 kbit 50 ms

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms

Bunu aylardır arıyordum. Teşekkürler. Bir soru? Kuralı nasıl silebilirsiniz? tc sınıf del dev eth0 root RTNETLINK cevapları gösterir: Böyle bir dosya veya dizin yok
Nur

Birkaç ay önceydi, ama qdisc'i kaldırmanın yeterli olduğunu hatırlıyorum: tc qdisc del dev eth0 root
yzfr1

2

Bazı 80-90 kByte / s'den ne beklenir

    tc filter add ... police rate 1.0mbit ...

Gelen verilerin 1 mBit / s değerine ulaştığında atılmasını istersiniz, bu yaklaşık 125 kByte / s'dir. Daha sonra uzak sunucu bundan çok daha düşük bir değere düşecektir (belki yarısı, emin değilim). Bundan sonra, tüm paketler gelir, böylece uzak uç 125 kByte / s değerine tekrar ulaşılana kadar yavaşça hızlanır. 125 kByte / s'nin oldukça altında bir ortalama verim elde edersiniz , bu da giriş şekillendirme için tipiktir.

Hâlihazırda giriş politikası filtresi ile hızın 2 MByte / s'ye ulaşması biraz şaşırdım. Nerede ölçüm yaptınız - aşağı akış istemcisinde (program) veya bazı yukarı akış yönlendiricisinde? Ya da ilk önce bağlantıyı başlattınız ve ancak daha sonra giriş politikası filtresini yerine attınız?

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.