Membatasi bandwidth antarmuka dengan tc di Linux

8

Saya memiliki router linux yang memiliki antarmuka 10GBe di luar dan antarmuka ethernet Gigabit terikat di dalam.

Saat ini kami memiliki anggaran untuk 2GBit / s. Jika kami melebihi nilai tersebut dengan rata-rata lebih dari 5% selama sebulan maka kami akan dikenakan biaya untuk seluruh kapasitas 10Gbit / s. Cukup langkah dalam hal dolar.

Jadi, saya ingin membatasi ini hingga 2GBit / s pada antarmuka 10GBe.

Filter TBF mungkin ideal, tetapi komentar ini menjadi perhatian.

Pada semua platform kecuali untuk Alpha, mampu membentuk hingga 1mbit / s lalu lintas normal dengan burstiness minimal yang ideal, mengirimkan data dengan tepat pada tingkat yang dikonfigurasi.

Haruskah saya menggunakan TBF atau filter lain untuk menerapkan kecepatan ini ke antarmuka dan bagaimana saya melakukannya. Saya tidak mengerti contoh yang diberikan di sini: Traffic Control HOWTO

Khususnya "Contoh 9. Membuat TBF 256kbit / s"

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0
tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps

Bagaimana laju 256K bit / s dihitung? Dalam contoh ini, 32000bps = 32k byte per detik. Karena tc menggunakan bps = byte per detik. Saya kira burst dan limit ikut bermain, tetapi bagaimana Anda memilih angka yang masuk akal untuk mencapai tingkat yang diinginkan?

Ini bukan kesalahan. Saya menguji ini dan memberikan tingkat mendekati 256 ribu tetapi tidak persis seperti itu.


EDIT

Setelah melakukan banyak membaca dan menguji, saya sampai pada kesimpulan bahwa TBF tidak pantas karena bandwidth yang terlibat. Pengaturan apa pun yang saya coba, saya tidak bisa mendapatkan TBF untuk menyediakan bandwidth> ~ 50Mbit / s. Menurut lartc.org/lartc.pdf, metode RED lebih baik untuk membentuk bandwidth> 100Mbit / s jadi saya akan mencoba menggunakannya.

Namun, memilih nilai untuk min (yaitu ukuran antrian rata-rata di mana penandaan menjadi kemungkinan). Contoh yang diberikan adalah ini:

Anda harus mengatur min dengan menghitung latensi antrian dasar tertinggi yang dapat diterima yang Anda inginkan, dan mengalikannya dengan bandwidth Anda. Sebagai contoh, pada tautan ISDN 64kbit / s saya, saya mungkin menginginkan latensi dasar antrian 200 ms jadi saya menetapkan min menjadi 1600 byte.

  1. bagaimana Anda memilih latensi antrian basis tertinggi yang dapat diterima? Contohnya adalah untuk 64kbit / s.

  2. Apa yang bisa diterima untuk 2Gbit / s?

Mat
sumber

Jawaban:

2
  1. Anda harus memilih latensi antrian yang dapat diterima berdasarkan jenis lalu lintas.

    • Misalnya, untuk suara yang antri lebih dari 200 ms sudah menjadi masalah.
    • Meskipun memiliki buffer 500ms untuk lalu lintas ftp / torrent bukan masalah besar sama sekali.
  2. Antrian latensi / strategi adalah pertanyaan tentang jenis lalu lintas bukan kecepatan antarmuka. Misalnya VOIP, mungkin, tidak boleh antri sama sekali. Sayangnya dokumentasi tc RED tidak terlalu jelas, Anda sebaiknya membaca beberapa info RED di situs Juniper / Cisco dan menerapkan pengetahuan itu ke tc.

Alex_www
sumber
1

Bagaimana laju 256K bit / s dihitung? Dalam contoh ini, 32.000bps = [32.000] byte per detik.

Ya, perhitungannya benar. Jika Anda melihat angka mendekati 256 ribu, itu mungkin sedikit di bawah. Dari mana Anda mengukur angka itu? Jika downlaod browser Anda atau yang serupa, mereka tidak menghitung overhead header paket, tetapi tcmenghitung semuanya.

Jeff Ferland
sumber
Poin yang bagus. Saya menggunakan iperf.
Matt
1

Dalam pengalaman saya, qdisc TBF dengan mudah dapat membatasi bandwidth hingga 1 Gbps jadi saya kira itu juga akan skala ke 2 Gbps. Namun, Anda mungkin membutuhkan CPU nyata untuk pekerjaan itu daripada router low-end edge. Sesuatu seperti 4 GHz i3 pasti akan cukup.

Coba sesuatu seperti

tc qdisc add dev "$DEV" root handle 1: \
  tbf rate "$UPLINK_RATE" burst "$UPLINK_BURST" latency "$TBF_LATENCY"

dimana

DEV="$(ip route | grep "^default " | grep -Po "(?<=dev )[^ ]+")"
UPLINK_RATE="2000Mbit"
UPLINK_BURST="6500"
TBF_LATENCY="14ms"

Perhatikan bahwa untuk menggunakan TBF latensi rendah Anda mungkin perlu menjalankan PREEMPT kernel (misalnya linux-lowlatency-hwe-*paket Ubuntu ) atau sistem mungkin gagal menangani semua paket itu.

Lihat juga: https://networkengineering.stackexchange.com/a/54404/36597

Mikko Rantalainen
sumber
Terima kasih. Saya lupa pertanyaan ini. Saya menemukan jawaban dan memiliki skrip yang melakukannya. Tetapi saya telah meninggalkan perusahaan dan tidak dapat memposting solusinya sekarang. Namun ya saya percaya itu TBF yang saya gunakan dan ya router itu adalah server xeon cepat.
Matt