LINUX.ORG.RU
ФорумAdmin

Низкая скорость скачивания в виртуалке

 , , ,


0

1

Всех приветствую.

Сложилась неприятная ситуация на рабочем месте.

Для выхода в интернет у нас используется отдельный vlan. Соответственно, для простого доступа туда. Ставится виртуалка, там линукс. Этот линукс цепляется к этому vlan и вот так ходим в интернет.

У меня стоит слака15 (ядро 5.15.19) и на хосте и в госте. Для виртуалки используется Vbox 7.1.4 (сетевой драйвер для гостя 82540EM). Для связи виртуалки и хоста используется бридж.

Если на хосте поднимаю линк в vlan, то скорость у меня максимальная (по ~800 в каждую сторону). Если иду через виртуалку, то на прием ~20мбит/с, на отдачу ~800мбит/с.

Админы клянутся-божатся, что никакого шейпинга и ограничений нет.

Подскажите, многоуважаемые админы куда посмотреть и в чем может быть проблема? А то чего-то я уже всю голову сломал. Есть ощущение, что что-то простое, типа несовпадения MTU, или кривых дров в vbox.

★★★★★

В VB всегда была низкая скорость работы сети.

Зачем тебе вм, если ты можешь поднять влан на холсте.

И в чем суть отдельного влан? Со стороны клиентов должен быть порт доступа.

kostik87 ★★★★★
()
Ответ на: комментарий от alegz

Через виртио вообще сеть не поднимается. Там что-то особенное надо дополнительно включать или настраивать?

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Да не помню такого. Вот щас сижу из-под виртуалки в VBox’е, в настройках гостя сетевое устройство «virtio-net», в госте его подхватил ядрёный драйвер из коробки. Гость на стабильном Дебиане с ядром 6.1.140.

alegz ★★★★★
()
Ответ на: комментарий от yax123

У меня хосте при старте виртуалки с виртио чего-то сегфолтится на хосте в разделе NET.

yax123 ★★★★★
() автор топика

Не понял зачем виртуалка, тем более что у тебя там такая же ОС как на хосте.

Попробуй ещё два бенчмарка: скачать что-то с инета в /dev/null внутри виртуалки и скачать что-то с виртуалки на хост (без участия физической сети).

firkax ★★★★★
()
Ответ на: комментарий от yax123

На хосте вообще винда-семёрка с виртуалбоксом 7.0.8 (рабочая машина, нужно). Но дома, насколько помню, на хосте под дебианом с виртуалбоксом 7.1 проблем с virtio тоже не было.

alegz ★★★★★
()
Ответ на: комментарий от alegz

Похоже проблема была в другом месте. На реддите тоже кто-то спросил про замедление. Там ему посоветовали изменить тип чипсета с PIIX3 на ICH9. Сейчас у себя попробовал, само переключение не помогло. Но зато после этого взлетел virtio. А вот с ним скорость до 100мб/с поднялась. Зато отдача упала до 4мбит/с.

Продолжаю наблюдения.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Тут еще похоже какая то херня с MTU. По умолчанию 1500. Тут приходил какой-то шибко грамотный монтажник соседний комп по дружбе чинить и сказал, что наши админы чего-то накосячили с MTU на vlan. И там надо поменьше. Ну я решил, тоже пойти на это. Поставил 1476. Но особо ничего не заметил.

Сейчас вот крутил этот MTU туда-сюда. Когда завел ICH9+virtio поставил мту 1400. Скорость выросла. Поставил 1500, и не смог отправить пост на лорчик, просто полный отвал. Хотя на прием все нормуль. Потом поставил 1476 - на лорчик все сразу ушло.

Научите, как проверить где и на сколько ограничивается MTU?

yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

MTU в пределах ip-сети должно быть одинаковое!
Приём пакета больше чем mtu приводит к его молчаливому дропу (+1 к ошибкам интерфейса?).
tracepath показывает mtu или через «ping -M do -s xxx host» можно попробовать определить.
Ну и еще «ss -t -n -i» показывает pmtu/(rcv|adv)mss для соединений.

mtu/mss можно ограничить для маршрута (ip ro ... mtu XXX advmss XXX).

Баги с mtu на vlan-ах (-4 байта) это что-то из очень древнего.
Вот если у вас балуются с q-in-q тогда да, нужно прибавить 4 байта к mtu на основном интерфейсе и не забыть поставить стандартный 1500 на всех vlan-интерфейсах.

Я бы еще проверил/поменял tso/gro (см. ethtool -k).

vel ★★★★★
()
Ответ на: комментарий от yax123

q-in-q это когда один vlan помещают в другой vlan.
это даёт 4 лишних байта. Но это явно не твой случай.

Как отдан этот vlan гостю? Там сначала нормальный интерфейс и в нем vlan или сразу vlan в виде интерфейса?

У тебя изначально все работало, только скорость на приём была низкой. Я бы начал с проверки/отключения всяких offload на сетевых адаптерах и хоста и гостя (ethtool -К).

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от vel

Как отдан этот vlan гостю?

На хосте eth0

В госте eth0 - цепляется через бридж на eth0 хоста

в госте vlan1 цепляется к eth0 гостя.

в параметрах vlan:

  • переупорядочивание
  • GVRP
  • Свободная привязка

Изначально вроде как все работало (но это было давно и я уже не помню). Потом переехали в новый офис, тут все заново настроили (другие номера сетей и т д. что там делали админы мне неведомо). И скорость на прием упала. Я терпел-терпел и вот мы здесь.

yax123 ★★★★★
() автор топика
Ответ на: комментарий от vel

Я бы начал с проверки/отключения всяких offload

на хосте:

ethtool -k eth0 | grep offload
tcp-segmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
macsec-hw-offload: off [fixed]
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]

на госте:

ethtool -k eth0 | grep offload
tcp-segmentation-offload: on
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
macsec-hw-offload: off [fixed]
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]
yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

Гм. Никогда не настраивал vbox.

в госте vlan1 цепляется к eth0 гостя.

vlan1 - это default vlan и в большинстве случаев это «native vlan», который без тегов. Может там вообще про vlan не нужно вспоминать?

А что говорит «bridge vlan» на хосте при запущенной виртуалке?

Про offload: я бы на хосте и госте попробовал бы сделать «ethtool -K eth0 gro off gso off».

Чтобы понять, что проблема в мосте, можно сделать простенький стенд: создать netns, создать veth, один конец от дать в netns, а второй включить в мост. Провести тест скорости из netns.

brX - мост с eth0 на хосте.

ip netns add guest
ip li add srv type veth peer name client
ip link set dev srv qlen 1000
ip link set dev client qlen 1000
ip link set dev client netns guest
ip link set srv master brX
ip link set dev srv up

PS1='guest \$' ip netns exec guest /bin/bash --noprofile --norc

ip netns del guest
В госте нужно задать адрес «ifconfig client xxx.xxx.xxx.xxx/24»
и добавить шлюз по умолчанию «ip ro add default via xxx.xxx.xxx.yyy»
После чего можно запускать iperf3 для тестирования скорости. Не забываем тестировать в обе стороны.

Между хостом и netns iperf3 должен показывать скорость сопоставимую с iperf3 -c 127.0.0.1

Дальше нужна еще одна машина в этой же локалке с iperf3. Скорость должна соответствовать скорости локальной сети (<= 940MBit/s для гигабита).

Если все хорошо, то проблема в настройках vbox.

vel ★★★★★
()
Ответ на: комментарий от vel

vlan1 - это default vlan и в большинстве случаев это «native vlan», который без тегов.

в реальности там не vlan1, просто какой-то номер больше 50. Не хочу светить подробности.

yax123 ★★★★★
() автор топика

У меня стоит слака15

Насколько я понимаю там ванильное ядро … а есть под нее libvitd? (и я не верю дело может в хдд в госте)

mx__ ★★★★★
()
Ответ на: комментарий от yax123

т.е. на eth0 хоста приходит некий tagged vlan, который дальше отдается гостю без тегов? Это делается средствами бриджа или vbox?

Есть еще более простой вопрос: скорость хост - гость iperf3 какую паказывает?

vel ★★★★★
()
Ответ на: комментарий от vel

на виртуалке поднял еще один интерфейс. повесил его бриджем на интерфейс хоста. раздал на него адрес из той же сети что и на хосте. iperf показал:

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

[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  23.6 GBytes  20.2 Gbits/sec

$ iperf -c 
------------------------------------------------------------

TCP window size: 85.0 KByte (default)
------------------------------------------------------------

[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  4.39 GBytes  3.77 Gbits/sec

yax123 ★★★★★
() автор топика
Последнее исправление: yax123 (всего исправлений: 2)
Ответ на: комментарий от yax123

Хрень какая-то! Почему сервер и клиент показывают разные скорости?

Где ты iperf нашел? Выкинь его! Он кривой. iperf3 наше фсе!

Запусти сервер «iperf3 -s» на сервере.

Запусти на сервере «iperf3 -c 127.0.0.1» - это калибровка. Сервер и клиент должен показать близкие числа!

Дальше в госте «iperf3 -c <server_ip>» и «iperf3 -c <server_ip> -R»

vel ★★★★★
()
Ответ на: комментарий от vel

те же яйца в профиль:

сам себя:

# iperf -c localhost
------------------------------------------------------------
Client connecting to localhost, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[  3] local 127.0.0.1 port 53360 connected with 127.0.0.1 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   102 GBytes  87.6 Gbits/sec
root@yac:/tftpboot# iperf3 -c localhost
Connecting to host localhost, port 5201
[  5] local ::1 port 44570 connected to ::1 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  9.98 GBytes  85.7 Gbits/sec    0   1.37 MBytes
[  5]   1.00-2.00   sec  9.86 GBytes  84.7 Gbits/sec    0   1.37 MBytes
[  5]   2.00-3.00   sec  7.83 GBytes  67.3 Gbits/sec    0   1.37 MBytes
[  5]   3.00-4.00   sec  8.03 GBytes  69.0 Gbits/sec    0   1.37 MBytes
[  5]   4.00-5.00   sec  9.92 GBytes  85.2 Gbits/sec    0   1.37 MBytes
[  5]   5.00-6.00   sec  7.36 GBytes  63.2 Gbits/sec    0   1.75 MBytes
[  5]   6.00-7.00   sec  8.04 GBytes  69.0 Gbits/sec    0   1.75 MBytes
[  5]   7.00-8.00   sec  9.74 GBytes  83.6 Gbits/sec    0   1.75 MBytes
[  5]   8.00-9.00   sec  6.82 GBytes  58.6 Gbits/sec    0   2.81 MBytes
[  5]   9.00-10.00  sec  7.20 GBytes  61.9 Gbits/sec    0   2.81 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  85.5 GBytes  73.5 Gbits/sec    0             sender
[  5]   0.00-10.00  sec  85.5 GBytes  73.4 Gbits/sec                  receiver

iperf Done.

здесь с виртуалкой:

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from IP_VIRT, port 40556
[  5] local IP_HOST port 5201 connected to IP_VIRT port 40558
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  2.32 GBytes  19.9 Gbits/sec
[  5]   1.00-2.00   sec  2.27 GBytes  19.5 Gbits/sec
[  5]   2.00-3.00   sec  2.22 GBytes  19.1 Gbits/sec
[  5]   3.00-4.00   sec  2.41 GBytes  20.7 Gbits/sec
[  5]   4.00-5.00   sec  2.23 GBytes  19.1 Gbits/sec
[  5]   5.00-6.00   sec  2.29 GBytes  19.6 Gbits/sec
[  5]   6.00-7.00   sec  2.38 GBytes  20.5 Gbits/sec
[  5]   7.00-8.00   sec  2.35 GBytes  20.2 Gbits/sec
[  5]   8.00-9.00   sec  2.42 GBytes  20.8 Gbits/sec
[  5]   9.00-10.00  sec  2.35 GBytes  20.2 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  23.2 GBytes  20.0 Gbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------
^Ciperf3: interrupt - the server has terminated

$ iperf3 -c IP_VIRT
Connecting to host IP_VIRT, port 5201
[  5] local IP_HOST port 59650 connected to IP_VIRT port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   414 MBytes  3.47 Gbits/sec   96    336 KBytes
[  5]   1.00-2.00   sec   446 MBytes  3.75 Gbits/sec   95    343 KBytes
[  5]   2.00-3.00   sec   434 MBytes  3.64 Gbits/sec  135    320 KBytes
[  5]   3.00-4.00   sec   422 MBytes  3.54 Gbits/sec  133    314 KBytes
[  5]   4.00-5.00   sec   434 MBytes  3.64 Gbits/sec  166    230 KBytes
[  5]   5.00-6.00   sec   440 MBytes  3.69 Gbits/sec   90    305 KBytes
[  5]   6.00-7.00   sec   443 MBytes  3.72 Gbits/sec  171    289 KBytes
[  5]   7.00-8.00   sec   434 MBytes  3.64 Gbits/sec  159    227 KBytes
[  5]   8.00-9.00   sec   435 MBytes  3.65 Gbits/sec  126    309 KBytes
[  5]   9.00-10.00  sec   434 MBytes  3.64 Gbits/sec  151    330 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  4.23 GBytes  3.64 Gbits/sec  1322             sender
[  5]   0.00-10.00  sec  4.23 GBytes  3.64 Gbits/sec                  receiver

iperf Done.
yax123 ★★★★★
() автор топика
Ответ на: комментарий от yax123

localhost у тебя хороший.

А вот с виртуалкой что-то странное. У тебя скорость с разных сторон различается 5 раз? Или я что-то не так понял.

Запустил своё тестовый qemu. Cкорость туда и обратно (iperf3 -c и ipserf3 -c -R) различается в 2 раза (20/9.8 GBit/s), но при этом и сервер и клиент сообщают одинаковые цифры.

Хорошо было бы проверить скорость между гостём и машиной в том же vlan-е. Если там всё хорошо, то проблема где-то дальше.

vel ★★★★★
()
Ответ на: комментарий от yax123

Извини, я спрашивал до запуска иперфа.

mx__ ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.