lxc controle de largura de banda usando tc

6

Estou tentando restringir a largura de banda em meus contêineres. Eu tentei usar os seguintes comandos, mas acho que não está sendo eficaz.

cd /sys/fs/cgroup/net_cls/
echo 0x1001 > A/net_cls.classid   # 10:1
echo 0x1002 > B/net_cls.classid   # 10:2
tc qdisc add dev eth0 root \
           handle 10: htb
tc class add dev eth0 parent 10: \
           classid 10:1 htb rate 40mbit
tc class add dev eth0 parent 10: \
           classid 10:2 htb rate 30mbit
tc filter add dev eth0 parent 10: \
           protocol ip prio 10 \
           handle 1: cgroup

Aqui A e B são contêineres criados com este comando.

lxc-execute -n A -f configfile /bin/bash
lxc-execute -n B -f configfile /bin/bash

Considerando que o arquivo de configuração contém apenas esta entrada:

lxc.utsname = test_lxc

Depois de iniciar o contêiner, iniciei o vsftpd dentro do contêiner A e tente acessar os arquivos usando o cliente ftp de outra máquina. Então eu matei o vsftpd no container A e iniciei o vsftpd no container B e tente acessar os arquivos usando o cliente ftp de outra máquina.

Eu não posso observar nenhuma diferença no desempenho, pois não está nem perto de 40mbit / 30mbit.

Por favor corrija-me se algo está errado aqui.

    
por kumar 05.10.2012 / 09:46

2 respostas

5

O problema aqui não está bem documentado, mas eu já experimentei isso antes. Em sistemas de 64 bits, o valor que você echo é não representado como um inteiro de 16 bits, mas um inteiro de 32 bits.

Tente substituir:

echo 0x1001 > A/net_cls.classid   # 10:1
echo 0x1002 > B/net_cls.classid   # 10:2

com

echo 0x00100001 > A/net_cls.classid   # 10:1
echo 0x00100002 > B/net_cls.classid   # 10:2

Isso deve resolver seu problema.

Nota: Não é realmente necessário fornecer os zeros à esquerda no início, mas para maior clareza adicionei-os.

    
por 11.10.2012 / 23:29
2

Muitos dos contêineres que não são hipervisores (lxc, jails) tendem a ter medições desonestas / incompletas (disk iops, net) que afetam outros contêineres. Se limitar o trânsito externo é a principal preocupação, coloque um firewall transparente (ou seja, ArmorLogic, Barracuda, etc.) na frente destes primeiro.

Em qualquer caso, faça um teste de carga para ver se faz alguma diferença.

(ProTip: Heroku executa o LXC. heroku run bash )

    
por 14.10.2012 / 02:22