Eu sei de apenas 2 cgroups relacionados à rede, net_prio (defina a prioridade do tráfego de rede) e net_cls (marca os pacotes para permitir a identificação pelo Linux tc
).
- net_prio foi introduzido no Linux Kernel 3.3, então é normal que você não o veja no Ubuntu LTS 12.04 a menos que você instale a pilha de habilitação de hardware LTS (que te dá um Linux Kernel 3.5), veja em o fim.
- net_cls , eu não sei quando foi introduzido, mas há um módulo para ele com o 3.2 Kernel fornecido com o Ubuntu 12.04 LTS.
configuração net_cls
Como definir net_cls obviamente não é feito automaticamente. Primeiro verifique se você tem suporte (só para você saber como eu descobri!):
$ grep CGROUP /boot/config-'uname -r'
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_MEM_RES_CTLR=y
CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NET_CLS_CGROUP=m
Isto diz-lhe que net_cls é um módulo e não compilado como parte do Kernel (o m
).
Agora que você sabe que tem o módulo, vamos procurá-lo:
$ find /lib/modules/'uname -r' -iname "*cgroup*"
/lib/modules/3.2.0-38-generic/kernel/net/sched/cls_cgroup.ko
Então agora você sabe que o módulo é chamado cls_cgroup , basta carregá-lo:
$ sudo modprobe cls_cgroup
Hop feito! Agora vamos fazer a montagem. As informações que você obteve são bastante incorretas para o Kernel entregue com o Ubuntu 12.04 LTS. Não é devido ao Ubuntu, mas sim que a API para cgroups provavelmente mudou. Como o seguinte é compatível com a documentação oficial do kernel:
$ sudo mkdir /sys/fs/cgroup/net_cls
$ sudo mount -t cgroup -o net_cls none /sys/fs/cgroup/net_cls
Agora você deve poder marcar seu pacote para tc
.
configuração net_prio
Para net_prio , o processo é bastante semelhante. Mas você precisa instalar um kernel mais novo. O Ubuntu 12.04 LTS suporta o que eles chamam de LTS Hardware Enablement Stack que lhe fornece uma nova versão do kernel 3.5. Para instalá-lo:
$ sudo apt-get install linux-generic-lts-quantal xserver-xorg-lts-quantal
Após a reinicialização, você estará usando o Linux Kernel 3.5. Se você usar o comando grep
dado acima, ele retornará uma lista ligeiramente diferente. Notavelmente, você tem agora CONFIG_NETPRIO_CGROUP=m
, que é outro módulo. Você pode novamente procurar o módulo usando o mesmo comando find
como acima e você encontrará netprio_cgroup
, simplesmente carregue-o:
$ sudo modprobe netprio_cgroup
Então, como antes, agora você pode montar o cgroup:
$ sudo mkdir /sys/fs/cgroup/net_prio
$ sudo mount -t cgroup -o net_prio none /sys/fs/cgroup/net_prio
Consulte a documentação (veja o primeiro link) para saber como usar o net_prio cgroup ou você também pode se referir a este Documentação da Red Hat .
Essas alterações não são persistentes
Como diz o título, na próxima reinicialização, as alterações serão perdidas.
Se você quiser que isso seja persistente, edite o arquivo /etc/rc.local
e adicione as etapas acima que estão criando o diretório e montando o cgroup. E adicione os módulos (ambos ou um deles, dependendo do que você deseja usar) ao arquivo /etc/modules
, simplesmente adicione cada nome em uma nova linha, por exemplo:
sudo bash -c "echo cls_cgroup >> /etc/modules"
Aviso : ao modificar os arquivos em /etc
, se você não tiver cuidado, poderá interromper o processo de inicialização. Nada que uma pessoa qualificada não possa reparar, mas é melhor ter cuidado e saber o que você vai fazer ou ter um amigo para ajudá-lo. Além disso, os backups dos seus dados preciosos são sempre uma boa ideia!