如何根据每个应用程序对网络带宽进行优先排序?

如何根据每个应用程序对网络带宽进行优先排序?

Linux 中是否有办法为特定应用程序提供更多/更少的网络带宽优先级?类似于如何nice为 CPU 优先级提供优先级。

语境:我目前处于非常低带宽的连接状态(3G 适配器)。当我使用 执行相当大的升级时aptitude,由于升级下载占用了我的互联网连接,因此几乎无法浏览网页。

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

答案1

您可以使用 force_bind 为应用程序的所有套接字设置优先级,然后使用 Linux QoS(tc 命令)将应用程序分配到优先级带。查看 README 文件以获取示例。

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。

相关内容