Obtenha a velocidade do link de um adaptador de rede virtio-net

4

Eu tenho um linux vm rodando em kvm com virtio-net, e eu quero verificar a velocidade do link. Como posso fazer isso?

O que eu tentei até agora:

# ethtool eth0
Settings for eth0:
Link detected: yes

Parece que o ethtool não suporta o virtio-net (ainda?) Eu tenho a versão 3.16-1 do debian jessie, o ethtool o suporta em versões mais recentes? A versão 6 das costuras é a mais nova.

 # cat /sys/class/net/eth0/speed
cat: /sys/class/net/eth0/speed: Invalid argument


 # lspci | grep -iE --color 'network|ethernet'
00:12.0 Ethernet controller: Red Hat, Inc Virtio network device

  # lshw -class network
  *-network
       description: Ethernet interface
       product: Virtio network device
       vendor: Red Hat, Inc
       physical id: 12
       bus info: pci@0000:00:12.0
       logical name: eth0
       version: 00
       serial: 4e:ff:a8:bf:61:12
       width: 32 bits
       clock: 33MHz
       capabilities: msix bus_master cap_list rom ethernet physical
       configuration: broadcast=yes driver=virtio_net driverversion=1.0.0 ip=172.30.2.152 latency=0 link=yes multicast=yes
       resources: irq:10 ioport:c080(size=32) memory:febf2000-febf2fff memory:febe0000-febeffff

Encontrei um link que descreve o problema no redhat kb , mas infelizmente não tenho uma assinatura para ler isso.

    
por ddio 25.11.2015 / 09:45

3 respostas

10

Virtio é um driver para-virtualizado, o que significa que o sistema operacional e o driver estão cientes de que não é um dispositivo físico. O driver é realmente uma API entre o convidado e o hipervisor, por isso a velocidade é totalmente desconectada de qualquer dispositivo físico ou padrão Ethernet.

Isso é bom, já que é mais rápido que o hipervisor fingir ser um dispositivo físico e aplicar um conceito arbitrário de "velocidade de link".

A VM apenas despeja quadros em um barramento e é o trabalho do host lidar com os dispositivos físicos; Não é necessário que a VM saiba ou se importe com a velocidade do link dos dispositivos físicos do host.

Uma das vantagens disso é que quando os pacotes estão se movendo entre 2 VMs no mesmo host, eles podem enviar pacotes tão rápido quanto a CPU do host pode movê-los de um conjunto de memória para outro, definindo um "linkspeed" aqui coloca em um limite de velocidade desnecessário.

Isso também permite que o host faça agrupamento de adaptadores e distribua o tráfego entre vários links, sem que todas as VM precisem ser explicitamente configuradas para obter a largura de banda total da configuração.

Se você quiser saber com que velocidade você pode realmente transferir dados de sua VM para outro local, é necessário fazer testes reais de produtividade com ferramentas como iperf .

    
por 25.11.2015 / 13:25
1

A Cumulus Networks atualizou seu patch para definir a velocidade no driver virtio_net. É útil em simulações de rede com seu produto Cumulus VX VM.

O patch está no Ubuntu Xenial. não tenho certeza se está no Fedora hoje.

Mais detalhes podem ser encontrados aqui. link

Outra referência é o post do meu blog sobre por que ter uma configuração de velocidade no driver virtio é útil.

link

    
por 14.07.2016 / 16:30
0

Para expandir um pouco sobre isso, porque eu também entrei recentemente nisso e também fiquei meio confuso com a falta de detalhes de velocidade ao executar ethtool em uma VM:

$ ethtool eth0
Settings for eth0:
    Link detected: yes

Quando pesquisei lshw output:

$ lshw -class network -short
H/W path            Device      Class          Description
==========================================================
/0/100/3                        network        Virtio network device
/0/100/3/0          eth0        network        Ethernet interface

Isso está nos dizendo que o driver de dispositivo sendo usado para essa VM é virtualizado, neste caso, essa é uma VM em execução no KVM e, portanto, a VM está usando os drivers virtio_ * para todas as suas interações com "hardware".

$ lsmod | grep virt
virtio_rng             13019  0
virtio_balloon         13864  0
virtio_net             28096  0
virtio_console         28066  1
virtio_scsi            18453  2
virtio_pci             22913  0
virtio_ring            22746  6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi
virtio                 14959  6 virtio_net,virtio_pci,virtio_rng,virtio_balloon,virtio_console,virtio_scsi

Estes módulos do kernel estão disponíveis para determinados sistemas operacionais (Linux, BSD e Windows). Com esses drivers instalados em sua VM, o kernel em sua VM tem acesso especial ao hardware subjacente por meio do kernel que está sendo executado em seu hipervisor.

Lembre-se de que, com hipervisores, existem dois tipos distintos. ESX / vsphere são considerados tipo 1 . Lembrete sobre os tipos:

  • Hypervisores tipo 1, nativos ou bare-metal
  • Hypervisores de tipo 2 ou hospedados

KVM é mais parecido com um tipo 2, mas tem alguns elementos, como virtio_ *, que faça com que ele se comporte e se apresente como um tipo 1, expondo à virtualização o kernel Linux subjacente do hipervisor de tal forma que as VMs possam ter acesso semi-direto a ele.

A velocidade da minha placa de rede?

Se você estiver usando um hipervisor paravirtualizado , é necessário entrar no hipervisor real para descobrir as hipóteses do seu NIC. velocidade usando ethtool . Em vez disso, só é possível descobrir algo como usar iperf para comparar a NIC sob carga e, experimentalmente, descobrir o que a velocidade das NICs parece ser.

Por exemplo, aqui tenho 2 servidores que estão sendo executados em dois hipervisores diferentes. Usando iperf nos dois servidores:

$ sudo yum install iperf

Em seguida, executando um servidor como um servidor iperf na VM host1:

host1$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------ 

Em seguida, em uma máquina cliente host2:

host2$ iperf -c 192.168.100.25
------------------------------------------------------------
Client connecting to 192.168.100.25, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.100.101 port 55854 connected with 192.168.100.25 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  10.0 GBytes  8.60 Gbits/sec

Na saída do host1, você verá isso:

$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.100.25 port 5001 connected with 192.168.100.101 port 55854
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  10.0 GBytes  8.60 Gbits/sec

Aqui podemos ver que a NIC conseguiu subir para 8.60Gbits / seg.

    
por 08.11.2018 / 17:02