У меня 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. Напоминание о типах:
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.