Batasi lebar pita masuk dan keluar dan latensi di linux

15

Saya menyadari banyak pertanyaan serupa telah diajukan, tetapi sejauh ini saya belum menemukan solusi untuk masalah saya.

Saya memiliki server linux virtual (menjalankan Debian Squeeze) yang saya gunakan untuk menguji kecepatan situs web untuk mengukur peningkatan dan penurunan waktu buka situs web tersebut. Saya mencoba membatasi bandwidth dan latensi server ini agar dapat mendekati waktu muat dunia nyata di situs web, tetapi sejauh ini gagal.

Yang saya inginkan secara khusus adalah sebagai berikut:

  • Untuk mengatur latensi masuk dan keluar 50 ms.
  • Untuk menetapkan batas bandwidth masuk 512 kbps.
  • Untuk menetapkan batas lebar pita keluar 4096 kbps.

Saya sudah membaca di netem dan menggunakan tcperintah, tapi itu masih sedikit di atas kepala saya. Saya telah berhasil menyusun perintah ini untuk mengontrol latensi yang tampaknya berfungsi, tetapi saya bahkan tidak yakin apakah itu hanya menangani latensi keluar atau keduanya:

tc qdisc add dev eth0 root netem delay 50ms

Adakah pakar jaringan di sekitar yang dapat membantu saya?

Edit:

Setelah penelitian lebih lanjut, saya sudah setengah jalan ke tujuan saya, menggunakan perintah ini semua lalu lintas keluar berperilaku seperti yang saya inginkan:

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

Namun, saya masih belum dapat membatasi lalu lintas yang masuk dengan benar. Saya telah belajar bahwa saya seharusnya menggunakan "Ingress Policer filter" Saya sudah mencoba melakukan hal itu dengan perintah di bawah ini, bermain-main dengan nilai yang berbeda, tetapi tidak berhasil.

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

Bandwidth dipengaruhi oleh perintah, nilai-nilai di atas membuat kecepatan mulai dari 2MB / s dan, saat transfer berlangsung, perlahan-lahan turun menjadi sekitar 80-90 kB / s yang dicapai setelah sekitar 30 detik transfer.

Ada gagasan tentang apa yang saya lakukan salah?

yzfr1
sumber
netem delay 50mstidak membatasi latensi. Ini meningkatkan latensi 50msdibandingkan dengan apa yang seharusnya.
kasperd
Memang kamu benar. Menghapus batas kata karena merupakan peningkatan 50ms yang sebenarnya saya cari (karena itu adalah mesin virtual di komputer yang sama latensi aslinya cukup dekat dengan 0)
yzfr1

Jawaban:

12

Saya akhirnya memutuskan untuk hanya mengatur bandwidth keluar / latensi pada server, dan kemudian melakukan hal yang sama pada klien, secara efektif mencapai hasil yang sama.

Ini adalah perintah yang saya jalankan di server dan klien masing-masing untuk mencapai tujuan saya:

Server: 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

Klien: 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
yzfr1
sumber
Saya sudah mencari ini selama berbulan-bulan. Terima kasih. Satu pertanyaan? Bagaimana Anda menghapus aturan? tc class del dev eth0 root menunjukkan jawaban RTNETLINK: Tidak ada file atau direktori seperti itu
Nur
Itu beberapa bulan yang lalu, tapi sepertinya saya ingat itu sudah cukup untuk menghapus qdisc: tc qdisc del dev eth0 root
yzfr1
2

Sekitar 80-90 kByte / s adalah tentang apa yang diharapkan

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

Anda meminta data yang masuk dibuang saat mencapai 1 mBit / s, itu sekitar 125 kByte / s. Server jauh kemudian akan turun menjadi jauh lebih rendah dari itu (mungkin setengah, tidak yakin). Setelah itu, semua paket masuk, sehingga ujung jarak jauh perlahan-lahan menambah kecepatan hingga 125 kByte / s tercapai lagi. Anda mendapatkan throughput rata - rata jauh di bawah 125 kByte / s, yang merupakan ciri khas dari ingress forming.

Saya agak terkejut bahwa kecepatannya harus mencapai 2 MByte / s dengan filter kebijakan masuknya sudah ada. Di mana Anda mengukur - di klien hilir (programm) atau di beberapa router hulu? Atau mungkin Anda pertama kali memulai koneksi dan hanya setelah itu Anda menendang filter kebijakan masuknya?

pecinta linux anonim
sumber