Como posso priorizar a largura de banda de rede por aplicativo?

20

Existe uma maneira no Linux de dar a um aplicativo específico mais / menos prioridade para a largura de banda da rede? Algo parecido com o nice da prioridade da CPU.

Contexto: No momento, estou com uma conexão de largura de banda muito baixa (dongle 3G). Enquanto eu estou executando uma atualização muito grande usando aptitude , torna-se praticamente impossível navegar na web desde o download da atualização está monopolizando minha conexão com a Internet.

Então, o que eu gostaria de fazer é diminuir a prioridade de largura de banda da rede do processo aptitude (e todos os seus filhos) para que não use muita largura de banda enquanto outro processo estiver usando.

    
por Job 11.07.2011 / 10:50

1 resposta

9

Você pode usar force_bind para definir uma prioridade para todos os soquetes de um aplicativo e, usando o Linux QoS (comando tc), é possível atribuir aplicativos a uma faixa de prioridade. Verifique o arquivo README para um exemplo.

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

Disclaimer: eu sou o autor.

Exemplo:

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

Claro, você pode usar htb ou qualquer outro qdisc.

    
por 23.08.2011 / 10:50