Bagaimana saya bisa memprioritaskan bandwidth jaringan berdasarkan aplikasi?

20

Apakah ada cara di Linux untuk memberikan aplikasi tertentu lebih / kurang prioritas untuk bandwidth jaringan? Sesuatu seperti bagaimana niceprioritas CPU.

Konteks: Saya saat ini pada koneksi bandwidth yang sangat rendah (dongle 3G). Sementara saya melakukan peningkatan penggunaan yang cukup besar aptitude, menjadi hampir tidak mungkin untuk menelusuri web karena unduhan pemutakhiran itu menghambat koneksi Internet saya.

Jadi yang ingin saya lakukan adalah mengurangi prioritas bandwidth jaringan dari aptitudeproses (dan semua anak-anaknya) sehingga tidak akan menggunakan terlalu banyak bandwidth saat proses lain sedang menggunakannya.

Pekerjaan
sumber
Apakah aptitude menggunakan port khusus untuk koneksinya? Jika demikian, Anda dapat mengatur prioritas port yang lebih rendah menggunakan QoS di router Anda (jika router Anda memiliki kemampuan itu).
MaQleod
@MaQleod: 1) Tidak, ia menggunakan HTTP untuk unduhannya. 2) Karena saya menggunakan jaringan 3G, saya tidak punya router (yah, toh tidak ada yang bisa saya akses).
Pekerjaan
Saya hanya akan menilai membatasi kecepatan unduhan aptitude / apt daripada mencoba untuk bermain dengan prioritasnya. Setel ke setengah dari bandwidth maks Anda untuk membiarkan sebagian untuk browsing. Saya sudah mencoba menyatakan alasan saya untuk tidak bermain dengan QoS dalam komentar untuk jawaban Catalin.
vtest

Jawaban:

8

Anda dapat menggunakan force_bind untuk menetapkan prioritas untuk semua soket aplikasi, dan kemudian, menggunakan Linux QoS (perintah tc), Anda dapat menetapkan aplikasi ke pita prioritas. Periksa file README untuk contoh.

http://kernel.embedromix.ro/us/

Penafian: Saya penulis.

Contoh:

14: Force priority (between 0 and 6 for non-root users). You can
        use 'tc' command from iproute to set-up 'prio' qdisc and to
        assign prio to queues:
        # 0. setup
        export FORCE_NET_VERBOSE=1
        export LD_PRELOAD=${LD_PRELOAD}:/usr/lib/force_bind.so
        # 1. Make sure you have a 'prio' qdisc attached to eth0, for example:
        tc qdisc add ev eth0 root handle 1: prio
        # 2. Assign applications to classed (bands):
        export FORCE_NET_PRIO=6 # interactive, band 0
        your_voip_program_here
        export FORCE_NET_PRIO=0 # best effort, band 1
        your_mail_program_here
        export FORCE_NET_PRIO=2 # bulk, band 2
        your_remote_backup_program_here
        # 3. Run tc statistics so you can see the classification:
        tc -s class show dev eth0

Tentu saja, Anda dapat menggunakan htb atau qdisc lainnya.

Catalin M. BOIE
sumber
3
Terima kasih atas sangkalannya! Dalam semangat Pengguna Super, alangkah baiknya jika Anda bisa memberikan contoh di sini untuk dilihat semua orang!
slhck
1
Mengunduh menghasilkan lalu lintas masuk. QoS dapat membuat kebijakan lalu lintas keluar, tidak dapat mengontrol jumlah data yang masuk. Agar ini berfungsi, diperlukan untuk mengontrol router antara host dan internet.
vtest
2
trickle(tersedia setidaknya di ubuntu dan debian) akan melakukannya untuk Anda juga, dan mungkin sedikit lebih mudah untuk digunakan: trickle -d 1 -u 1 aptitude. Angka adalah kilobyte.
taneli
1
Mengenai lalu lintas masuk, apakah mungkin untuk membuat jenis lalu lintas masuk tertentu memiliki prioritas lebih tinggi dari jenis lain bahkan jika Anda tidak dapat mengontrol router? @vtest
CMCDragonkai
3
@taneli: trickledapat digunakan untuk mengatur batas bandwidth, tetapi tidak dapat digunakan untuk menentukan prioritas antar proses
a3nm