Назад | Перейти на главную страницу

Получите скорость соединения сетевого адаптера virtio-net

У меня Linux vm работает на kvm с virtio-net, и я хочу проверить скорость соединения. Как я могу это сделать?

Что я пробовал до сих пор:

# ethtool eth0
Settings for eth0:
Link detected: yes

Похоже, что ethtool не поддерживает virtio-net (пока?) У меня есть версия 3.16-1 от debian jessie, поддерживает ли ethtool в более новой версии? По швам, версия 6 - самая новая.

 # 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

Я нашел одну ссылку, описывающую проблему в redhat kb, но, к сожалению, у меня нет подписки на его чтение.

Virtio - это паравиртуализированный драйвер, что означает, что ОС и драйвер знают, что это не физическое Устройство. Драйвер на самом деле представляет собой API-интерфейс между гостем и гипервизором, поэтому его скорость полностью отключена от любого физического устройства или стандарта Ethernet.

Это хорошо, так как это быстрее, чем гипервизор, который притворяется физическим устройством и применяет к потоку произвольную концепцию «скорости соединения».

ВМ просто выгружает кадры на шину, а задача хоста - иметь дело с физическими устройствами; ВМ нет необходимости знать или заботиться о скорости соединения физических устройств хоста.

Одним из преимуществ этого является то, что, когда пакеты перемещаются между двумя виртуальными машинами на одном и том же хосте, они могут отправлять пакеты с такой скоростью, с какой ЦП хоста может перемещать их из одного набора памяти в другой, установка «скорости соединения» здесь просто добавляет ненужное ограничение скорости.

Это также позволяет хосту объединять адаптеры и распределять трафик по нескольким каналам без необходимости явно настраивать каждую виртуальную машину для получения полной пропускной способности установки.

Если вы хотите узнать, с какой скоростью вы действительно можете передавать данные со своей виртуальной машины в другое место, вам необходимо провести фактические тесты пропускной способности с помощью таких инструментов, как iperf.

Чтобы немного подробнее остановиться на этом, потому что я слишком недавно столкнулся с этим, и был также полусумлен из-за отсутствия деталей скорости при запуске ethtool на ВМ:

$ ethtool eth0
Settings for eth0:
    Link detected: yes

Когда я заглянул в lshw вывод:

$ 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

Это говорит нам о том, что драйвер устройства, используемый для этой виртуальной машины, виртуализирован, в данном случае это виртуальная машина, работающая на KVM, и поэтому виртуальная машина использует драйверы virtio_ * для всех своих взаимодействий с «оборудованием».

$ 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

Эти модули ядра доступны для определенных ОС (Linux, BSD и Windows). Когда эти драйверы установлены на вашей виртуальной машине, ядро ​​вашей виртуальной машины имеет специальный доступ к базовому оборудованию через ядро, работающее на вашем гипервизоре.

Помните, что у гипервизоров есть 2 разных типа. ESX / vsphere которые считаются Тип 1. Напоминание о типах:

  • Тип 1, собственные или голые гипервизоры
  • Тип 2 или размещенные гипервизоры

KVM больше похож на тип 2, но имеет некоторые элементы, такие как virtio_ *, которые заставляют его вести себя и работать больше как тип 1, подвергая виртуализации базовое ядро ​​Linux гипервизора таким образом, что виртуальные машины могут иметь к нему полупрямой доступ.

Скорость моей сетевой карты?

Учитывая, что вы работаете на паравиртуализированный гипервизор, вам нужно перейти на фактический гипервизор, чтобы узнать теоретическую скорость вашей сетевой карты, используя ethtool. Вместо этого можно узнать, только выполнив что-то вроде использования iperf для тестирования сетевой карты под нагрузкой и экспериментального определения скорости сетевой карты.

Например, у меня есть 2 сервера, на которых работают 2 разных гипервизора. С помощью iperf на обоих серверах:

$ sudo yum install iperf

Затем запустить один сервер как iperf сервер на ВМ host1:

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

Затем на клиентской виртуальной машине 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

На выходе host1 вы увидите это:

$ 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

Здесь мы видим, что сетевая карта смогла увеличить скорость до 8,60 Гбит / с.

Cumulus Networks обновили свой патч, чтобы установить скорость драйвера virtio_net. Это полезно при моделировании сети с их продуктом Cumulus VX VM.

Патч есть в Ubuntu Xenial. не уверен, есть ли это в Fedora сегодня.

Более подробную информацию можно найти здесь. https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1581132

Еще одна ссылка - это мое сообщение в блоге о том, почему полезно устанавливать скорость в драйвере virtio.

http://linuxsimba.com/network-bonds-vagrant-libvirt