Controle de banda no VirtualBox

banda_iptraf

Cumprindo parte da promessa de mostrar recursos do VirtualBox que não estão disponíveis na interface gráfica dele — ou que ao menos eu nunca tenha encontrado por lá. O primeiro exemplo foi o de redimensionamento das imagens de disco e agora é a vez de controlar a largura de banda da interface de rede na máquina virtual.

Limitação de banda

Em primeiro lugar é bom explicar que a limitação de largura de banda (bandwidth) pode ser aplicada tanto para os adaptadores de rede quanto para o  acesso a disco e que somados com a limitação de CPU*, permitem que você dimensione razoavelmente os limites (e capacidades) de uma máquina virtual do VirtualBox.

(*) Parâmetro “- – cpuexecutioncap” do VBoxManage mas também está acessível pela interface gráfica.

Também é interessante informar que a limitação de banda só se aplica ao tráfego da máquina virtual para o lado de fora (tráfego de saída, outgoing) e não daquilo que chega até ela (tráfego de entrada, incoming). Este é ilimitado — aqui você lerá ilimitado como sinônimo de “limitado pelo hardware”. 🙂

Um último comentário, como é um ajuste no hipervisor e não na máquina virtual ele funcionará com qualquer sistema operacional executado dentro delas (mas com ressalvas, já explic0).

A máquina virtual

banda_maquina-virtual

Para exemplificar preparei uma máquina virtual comum com Ubuntu Server 15.04, baixei um arquivo razoavelmente grande para dentro dela (a imagem de instalação em CD da Debian Jessie) e depois copiei para outro host usando scp:

$ scp 192.168.0.2:~/debian-8.2.0-amd64-CD-1.iso .
debian-8.2.0-amd64-CD-1.iso       100%  627MB  25.1MB/s  00:25

Só foram necessários, sem aplicar limitação alguma, 25 segundos para transferir o arquivo.

Configuração

Lembra da ressalva? Então, a documentação do VirtualBox recomenda, por questões de performance e melhor suporte dos drivers em determinados sistemas operacionais que seja usado, na ordem, o adaptador de rede virtio — Rede Paravirtualizada (virtio-net) — ou a série 8254XXX — as Intel PRO/1000 — e o tipo de conexão em modo bridge:

banda_adaptador_de_rede

A primeira coisa é definir o limite da banda, eu considerei inicialmente que 16KBits/s são mais que suficientes para a necessidades desta máquina virtual. Logo é criar um perfil com este valor (o chamei de “basico”):

$ VBoxManage bandwidthctl «Nome da VM/UUID» add basico \
  --type network --limit 16k
VBoxManage: error: Bandwidth groups cannot be created while
the VM is running

Deixei a mensagem de erro como lembrete, infelizmente não é possível fazer estes ajustes com a máquina virtual em funcionamento, assim desligue-a antes! Uma vez o grupo criado e associado ao adaptador de rede é possível alterar  este valor com ela em funcionamento.

Este comando apenas criará o grupo (um perfil) e para que o controle se torne efetivo é necessário indicar a qual adaptador de rede ele será aplicado, ainda com a máquina virtual faça:

$ VBoxManage modifyvm «Nome da VM/UUID» \
  --nicbandwidthgroup1 basico

O  parâmetro “- – nicbandwidthgroup1” corresponde ao primeiro adaptador de rede da máquina virtual (NIC 1) e só para verificar que tudo está configurado corretamente:

$ vbinfo «Nome da VM/UUID» | grep NIC\ 1
NIC 1:           MAC: 080027C1C514, Attachment: Bridged Inter
face 'eth0', Cable connected: on, Trace: off (file: none), Ty
pe: virtio, Reported speed: 0 Mbps, Boot priority: 0, Promisc
Policy: deny, Bandwidth group: basico

Agora é testar!

Testando e ajustando

Hora de refazer a experiência e verificar se a limitação está funcionando:

$ scp 192.168.0.2:~/debian-8.2.0-amd64-CD-1.iso .
debian-8.2.0-amd64-CD-1.iso       0%  80KB  8.6KB/s -stalled-
^C

Chega, desisti de esperar, não estava assim com tanta saudade da época da conexão discada. 🙂

Ficou lento de mais assim é melhor corrigir a maldade e definir uma taxa de transferência mais razoável. Que tal 2MB/s?

$ VBoxManage bandwidthctl «Nome da VM/UUID» set basico \
  --limit 2M

Como já comentei, agora que o grupo está criado e associado, as mudanças podem ser feitas a máquina virtual em execução. Daí é refazer o teste:

$ scp 192.168.0.2:~/debian-8.2.0-amd64-CD-1.iso .
debian-8.2.0-amd64-CD-1.iso     100% 627MB  2.0MB/s 05:22

Bem melhor, não? Pouco mais de 5 minutos para baixar o arquivo agora.

Liberando do controle

Precisando desligar temporariamente a limitação, basta informar que o limite é zero:

$ VBoxManage bandwidthctl «Nome da VM/UUID» set basico \
  --limit 0

E, claro, havendo a necessidade também se pode remover o adaptador de rede do grupo e depois o próprio grupo da máquina virtual, ou seja, desfazer a configuração.

Fechando

Usos? Você escolhe! Desde otimizar o uso da rede entre máquinas virtuais de forma “igualitária” (digamos 10 máquinas virtuais, cada uma limitada a 10% da CPU hospedeira e da rede) até a limitação proposital para um host de acesso público (na Internet achei gente querendo limitar a largura de banda de um servidor de jogos online) etc.

Anúncios

2 comentários sobre “Controle de banda no VirtualBox

  1. Pingback: Controle de banda no VirtualBox - Peguei do

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s