如何针对每个应用程序确定网络带宽的优先级?


20

Linux中有没有一种方法可以为特定应用程序提供更多/更少的网络带宽优先级?诸如如何nice获得CPU优先级之类的东西。

上下文:我目前使用的带宽非常低(3G加密狗)。当我使用进行相当大的升级时aptitude,由于升级下载占用了我的Internet连接,因此几乎无法浏览网络。

因此,我想做的是以某种方式降低aptitude进程(及其所有子进程)的网络带宽优先级,以便在另一个进程正在使用该进程时,它不会使用过多的带宽。


aptitude是否使用特定端口进行连接?如果是这样,您可以使用路由器中的QoS(如果路由器具有该功能)将该端口的优先级设置得较低。
MaQleod 2011年

@MaQleod:1)不,它使用HTTP进行下载。2)由于我在3G网络上,因此没有路由器(嗯,无论如何我都无法访问)。
Job

我只是对aptitude / apt的下载速度进行分级,而不是尝试使用其优先级。将其设置为最大带宽的一半,以留出一些空间供浏览。我已经在Catalin的答案评论中指出了我不使用QoS的原因。
vtest 2011年

Answers:


8

您可以使用force_bind设置应用程序所有套接字的优先级,然后使用Linux QoS(tc命令)将应用程序分配给优先级范围。查看自述文件中的示例。

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

免责声明:我是作者。

例:

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

当然,您可以使用htb或任何其他qdisc。


3
感谢您的免责声明!本着超级用户的精神,如果您可以在此处提供示例供所有人查看,那就太好了!
slhck 2011年

1
下载会产生传入流量。QoS可以控制传出流量,它无法控制传入数据量。为此,需要控制主机和Internet之间的路由器。
vtest 2011年

2
trickle(至少在ubuntu和debian中可用)也将为您做到这一点,并且可能会更易于使用:trickle -d 1 -u 1 aptitude。数字是千字节。
taneli

1
关于传入流量,即使您无法控制路由器,是否可以使某些类型的传入流量具有比其他类型更高的优先级?@vtest
CMCDragonkai 2014年

3
@taneli:trickle可用于设置带宽限制,但不能用于定义进程之间的优先级
a3nm 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.