Làm cách nào tôi có thể ưu tiên băng thông mạng trên mỗi ứng dụng?


20

Có cách nào trong Linux để cung cấp cho một ứng dụng cụ thể nhiều ưu tiên hơn / ít hơn cho băng thông mạng không? Một cái gì đó giống như làm thế nào niceđể ưu tiên CPU.

Bối cảnh: Hiện tại tôi đang có kết nối băng thông rất thấp (3G dongle). Mặc dù tôi đang thực hiện nâng cấp khá lớn bằng cách sử dụng aptitude, nhưng hầu như không thể duyệt web vì quá trình tải xuống nâng cấp đang làm tắc nghẽn kết nối Internet của tôi.

Vì vậy, những gì tôi muốn làm là bằng cách nào đó làm giảm mức độ ưu tiên băng thông mạng của aptitudequy trình (và tất cả các phần tử con của nó) để nó không sử dụng quá nhiều băng thông trong khi một quy trình khác đang sử dụng nó.


Có phải aptitude sử dụng một cổng cụ thể cho các kết nối của nó? Nếu vậy, bạn có thể đặt mức độ ưu tiên của cổng đó thấp hơn bằng cách sử dụng QoS trong bộ định tuyến của mình (nếu bộ định tuyến của bạn có khả năng đó).
MaQleod

@MaQleod: 1) Không, nó sử dụng HTTP để tải xuống. 2) Vì tôi đang sử dụng mạng 3G, tôi không có bộ định tuyến (tốt, dù sao tôi cũng không thể truy cập được).
Công việc

Tôi chỉ đánh giá giới hạn tốc độ tải xuống của aptitude / apt thay vì cố gắng chơi với mức độ ưu tiên của nó. Đặt nó thành một nửa băng thông tối đa của bạn để lại một số cho trình duyệt. Tôi đã cố gắng nêu lý do của mình về việc không chơi với QoS trong bình luận cho câu trả lời của Catalin.
vtest

Câu trả lời:


8

Bạn có thể sử dụng force_bind để đặt mức độ ưu tiên cho tất cả các ổ cắm của ứng dụng và sau đó, bằng cách sử dụng Linux QoS (lệnh tc), bạn có thể gán các ứng dụng cho một dải ưu tiên. Kiểm tra tệp README cho một ví dụ.

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

Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả.

Thí dụ:

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

Tất nhiên, bạn có thể sử dụng htb hoặc bất kỳ qdisc nào khác.


3
Cảm ơn từ chối trách nhiệm! Theo tinh thần của Siêu người dùng, sẽ thật tuyệt nếu bạn có thể cung cấp ví dụ ở đây cho tất cả mọi người thấy!
slhck

1
Tải xuống tạo ra lưu lượng truy cập đến. QoS có thể chính sách lưu lượng đi, nó không thể kiểm soát lượng dữ liệu đến. Để làm việc này, cần phải điều khiển bộ định tuyến giữa máy chủ và internet.
vtest

2
trickle(có sẵn ít nhất trong Ubuntu và debian) cũng sẽ làm điều đó cho bạn và có thể dễ sử dụng hơn một chút : trickle -d 1 -u 1 aptitude. Số là kilobyte.
taneli

1
Về lưu lượng truy cập đến, có thể làm cho một số loại lưu lượng truy cập đến có mức độ ưu tiên cao hơn các loại khác ngay cả khi bạn không thể kiểm soát bộ định tuyến? @vtest
CMCDragonkai 21/07/14

3
@taneli: tricklecó thể được sử dụng để thiết lập giới hạn băng thông, nhưng không thể sử dụng nó để xác định mức độ ưu tiên giữa các quy trình
a3nm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.