Desempenho dos Tipos de Dispositivos de Rede

Há pouco tempo atrás descobri um terrível gargalo que estava prejudicando o compartilhamento de arquivos com o NFS (Network File System). Trata-se da seleção do Modelo de Dispositivo de Rede a ser utilizado como Placa de Rede em uma VM. No KVM são apenas três opções possíveis: e1000, rtl8139 e virtio; sendo que a primeira opção, Hypervisor padrão, no caso do CEFALA é o virtio. Por não saber do problema, todas as VMs do CEFALA estavam utilizando o rtl8139 por ser um driver mais conhecido. Após perceber que esta configuração acarretava em uma perda em performance, decidi testar os demais modelos para verificar o desempenho de cada um deles.

Os testes utilizaram o iperf combinando os modelos de dispositivos de rede existentes em um enlace virtual: e1000 <-> e1000, rtl8131 <-> rtl8139 e virtio <-> virtio. O iperf foi executado por três vezes consecutivas e o melhor resultado para 10 segundos de transferência é apresentado abaixo:

e1000 <-> e1000

[ ID] Interval       Transfer     Bandwidth
[ 3]  0.0-10.0 sec  1.48 GBytes  1.27 Gbits/sec

rtl8131 <-> rtl8139

[ ID] Interval       Transfer     Bandwidth
[ 3]  0.0-10.0 sec   179 MBytes   150 Mbits/sec

virtio <-> virtio

[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  20.9 GBytes  18.0 Gbits/sec

Os testes deixam claro o desempenho do virtio em comparação com os demais. Obviamente todas as VMs passaram a utilizá-lo em substituição ao rtl8139. Como este post não tem o intuito de investigar o motivo da diferença, mas sim de expor a mesma, vou parando por aqui...

social