web-dev-qa-db-ja.com

アプリケーションごとにネットワーク帯域幅に優先順位を付けるにはどうすればよいですか?

Linuxで、特定のアプリケーションにネットワーク帯域幅の優先度を上げる/下げる方法はありますか? CPU優先度に対してNiceが行う方法のようなもの。

Context:現在、非常に低帯域幅の接続(3Gドングル)を使用しています。 aptitudeを使用して非常に大規模なアップグレードを実行している間、アップグレードのダウンロードがインターネット接続を占有しているため、Webを閲覧することは事実上不可能になります。

したがって、私がやりたいのは、aptitudeプロセス(およびそのすべての子)のネットワーク帯域幅の優先度を下げて、別のプロセスが使用しているときに帯域幅を使いすぎないようにすることです。

22
Job

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を使用することもできます。

9
Catalin M. BOIE