Truenas Core. Bhyve. Jails. Скорость виртуальной сети.

kixx

Cadet
Joined
Apr 9, 2023
Messages
8
Здравствуйте.
Я мало что понимаю во FreeBSD, возможно, делаю что-то не так и надеюсь, сообщество сможет помочь советом.

Итак, есть Truenas Core 13.0-U4
CPU: Xeon E3-1275L v3
RAM: 32GB
MB: Supermicro X10SLM-F

Сетевая igb0: I210 AT
Вторая сетевая em0 I217-LM неактивна, не используется.

Запущены несколько Jail и одна виртуалка с Debian 11 внутри.
У джейлов сеть с DHCP+VNET+BPF, приаттачено к em0 через (если я правильно понял) vnet1(tap)+bridge0
У виртуалки сеть через VirtIO.


Наблюдается странный казус со скоростью виртуальной сети, сравнивая ситуации хост-jail и хост-VM

Вот результаты iperf между хостом и jail (в обе стороны скорость плюс-минус одинаковая).


Тест от хост к джейлу:

Code:
# iperf3 -c databases -i 1  
Connecting to host databases, port 5201
[  5] local 192.168.15.198 port 22022 connected to 192.168.15.100 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   661 MBytes  5.54 Gbits/sec    0   1.61 MBytes      
[  5]   1.00-2.00   sec   637 MBytes  5.35 Gbits/sec    0   1.61 MBytes      
[  5]   2.00-3.00   sec   669 MBytes  5.61 Gbits/sec    0   1.61 MBytes      
[  5]   3.00-4.00   sec   658 MBytes  5.52 Gbits/sec    0   1.61 MBytes      
[  5]   4.00-5.00   sec   656 MBytes  5.50 Gbits/sec    0   1.61 MBytes      
[  5]   5.00-6.00   sec   651 MBytes  5.46 Gbits/sec    0   1.61 MBytes      
[  5]   6.00-7.00   sec   645 MBytes  5.41 Gbits/sec    0   1.61 MBytes      
[  5]   7.00-8.00   sec   643 MBytes  5.39 Gbits/sec    0   1.61 MBytes      
[  5]   8.00-9.00   sec   637 MBytes  5.34 Gbits/sec    0   1.61 MBytes      
[  5]   9.00-10.00  sec   641 MBytes  5.38 Gbits/sec    0   1.61 MBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  6.35 GBytes  5.45 Gbits/sec    0             sender
[  5]   0.00-10.00  sec  6.35 GBytes  5.45 Gbits/sec                  receiver


И в обратную сторону:

Code:
# iperf3 -c databases -i 1 -R
Connecting to host databases, port 5201
Reverse mode, remote host databases is sending
[  5] local 192.168.15.198 port 18494 connected to 192.168.15.100 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   646 MBytes  5.42 Gbits/sec                
[  5]   1.00-2.00   sec   652 MBytes  5.47 Gbits/sec                
[  5]   2.00-3.00   sec   635 MBytes  5.32 Gbits/sec                
[  5]   3.00-4.00   sec   624 MBytes  5.24 Gbits/sec                
[  5]   4.00-5.00   sec   611 MBytes  5.12 Gbits/sec                
[  5]   5.00-6.00   sec   598 MBytes  5.02 Gbits/sec                
[  5]   6.00-7.00   sec   603 MBytes  5.06 Gbits/sec                
[  5]   7.00-8.00   sec   600 MBytes  5.03 Gbits/sec                
[  5]   8.00-9.00   sec   588 MBytes  4.93 Gbits/sec                
[  5]   9.00-10.00  sec   602 MBytes  5.05 Gbits/sec                
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  6.02 GBytes  5.17 Gbits/sec    0             sender
[  5]   0.00-10.00  sec  6.01 GBytes  5.17 Gbits/sec                  receiver


Т.е. скорость практически одинаковая в обоих нааправлениях.

А вот такие же тесты с VM

От хоста к VM:

Code:
# iperf3 -c dockervm -i 1  
Connecting to host dockervm, port 5201
[  5] local 192.168.15.198 port 26337 connected to 192.168.15.104 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   764 MBytes  6.41 Gbits/sec  510   80.6 KBytes      
[  5]   1.00-2.00   sec   785 MBytes  6.58 Gbits/sec  524    123 KBytes      
[  5]   2.00-3.00   sec   762 MBytes  6.39 Gbits/sec  575    129 KBytes      
[  5]   3.00-4.00   sec   770 MBytes  6.46 Gbits/sec  402    173 KBytes      
[  5]   4.00-5.00   sec   784 MBytes  6.58 Gbits/sec  491    127 KBytes      
[  5]   5.00-6.00   sec   743 MBytes  6.23 Gbits/sec  377    200 KBytes      
[  5]   6.00-7.00   sec   765 MBytes  6.42 Gbits/sec  436    124 KBytes      
[  5]   7.00-8.00   sec   810 MBytes  6.79 Gbits/sec  575    170 KBytes      
[  5]   8.00-9.00   sec   812 MBytes  6.81 Gbits/sec  579    167 KBytes      
[  5]   9.00-10.00  sec   750 MBytes  6.29 Gbits/sec  526    180 KBytes      
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  7.56 GBytes  6.50 Gbits/sec  4995             sender
[  5]   0.00-10.04  sec  7.56 GBytes  6.47 Gbits/sec                  receiver


И в обратном направлении:

Code:
# iperf3 -c dockervm -i 1 -R
Connecting to host dockervm, port 5201
Reverse mode, remote host dockervm is sending
[  5] local 192.168.15.198 port 47312 connected to 192.168.15.104 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   201 MBytes  1.69 Gbits/sec                
[  5]   1.00-2.00   sec   203 MBytes  1.71 Gbits/sec                
[  5]   2.00-3.00   sec   202 MBytes  1.69 Gbits/sec                
[  5]   3.00-4.00   sec   201 MBytes  1.68 Gbits/sec                
[  5]   4.00-5.00   sec   201 MBytes  1.69 Gbits/sec                
[  5]   5.00-6.00   sec   202 MBytes  1.70 Gbits/sec                
[  5]   6.00-7.00   sec   201 MBytes  1.69 Gbits/sec                
[  5]   7.00-8.00   sec   200 MBytes  1.67 Gbits/sec                
[  5]   8.00-9.00   sec   196 MBytes  1.65 Gbits/sec                
[  5]   9.00-10.00  sec   197 MBytes  1.65 Gbits/sec                
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.04  sec  1.96 GBytes  1.68 Gbits/sec    0             sender
[  5]   0.00-10.00  sec  1.96 GBytes  1.68 Gbits/sec                  receiver


Тест показывает, что от VM к хосту скорость сети почти в 3 раза ниже, чем от хоста к VM. И это для меня какая-то мистика.

Вторая мистика это TSO
В дефолте TSO у меня выключено для igb0.
При его ручном включении скорость до джейлов поднимаетя до 35-40ГБит\с, а до VM - до 25-30Гбит\с, однако спустя минут 10-15 FreeBSD зачем-то (почему-то) сама отключает TSO, ни слова ни говоря ни в dmesg ни в /var/log/messages
Если без моего вмешательства в ifconfig, то Truenas загружается вот с такой картиной для интерфейса igb0:

Code:
# ifconfig igb0
igb0: flags=8963<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=8100b8<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER>
    ether 0c:xx:xx:xx:xx
    inet6 fe80::xxx:xxx:xxx:yyy%igb0 prefixlen 64 scopeid 0x2
    inet6 2403:5811:xxx:xxx:xxx:yyy prefixlen 64 autoconf
    inet6 fd44:aaaa::xxx:xxx:xxx:yyy prefixlen 64 autoconf
    inet 192.168.15.198 netmask 0xffffff00 broadcast 192.168.15.255
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active
    nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>


Вопроса два:
1. Почему может быть такой перекос в скоростях сети между хостом и виртуалкой.
2. Почему FreeBSD отключает TSO сама, и почему молча.

Спасибо.
 

kixx

Cadet
Joined
Apr 9, 2023
Messages
8
Апдейт.
Я, видимо от нечего делать, поковырял ещё настройки igb0.
Раз оно не хочет (сбрасывает) TSO, остается только задрать MTU до 9000.
Сделал на хосте и также внутри VM.

Теперь скорость на тестах интереснее, но имеются retransmissions:

Code:
# iperf3 -c dockervm -i 1   
Connecting to host dockervm, port 5201
[  5] local 192.168.15.151 port 11284 connected to 192.168.15.152 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  2.48 GBytes  21.3 Gbits/sec  566    472 KBytes       
[  5]   1.00-2.00   sec  2.48 GBytes  21.3 Gbits/sec  473    516 KBytes       
[  5]   2.00-3.00   sec  2.48 GBytes  21.3 Gbits/sec  532    779 KBytes       
[  5]   3.00-4.00   sec  2.46 GBytes  21.1 Gbits/sec  515    709 KBytes       
[  5]   4.00-5.00   sec  2.46 GBytes  21.1 Gbits/sec  506    498 KBytes       
[  5]   5.00-6.00   sec  2.43 GBytes  20.8 Gbits/sec  527    726 KBytes       
[  5]   6.00-7.00   sec  2.49 GBytes  21.4 Gbits/sec  502    787 KBytes       
[  5]   7.00-8.00   sec  2.45 GBytes  21.1 Gbits/sec  523    638 KBytes       
[  5]   8.00-9.00   sec  2.43 GBytes  20.9 Gbits/sec  511    621 KBytes       
[  5]   9.00-10.00  sec  2.41 GBytes  20.7 Gbits/sec  487    490 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  24.6 GBytes  21.1 Gbits/sec  5142             sender
[  5]   0.00-10.04  sec  24.6 GBytes  21.0 Gbits/sec                  receiver


Но в обратном направлении, хоть и нет retransmissions, скорость ниже, хоть и не настолько как было:

Code:
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  1.60 GBytes  13.8 Gbits/sec    0   1.84 MBytes       
[  5]   1.00-2.00   sec  1.68 GBytes  14.4 Gbits/sec    0   1.84 MBytes       
[  5]   2.00-3.00   sec  1.69 GBytes  14.5 Gbits/sec    0   1.84 MBytes       
[  5]   3.00-4.00   sec  1.67 GBytes  14.4 Gbits/sec    0   1.84 MBytes       
[  5]   4.00-5.00   sec  1.63 GBytes  14.0 Gbits/sec    0   1.84 MBytes       
[  5]   5.00-6.00   sec  1.67 GBytes  14.4 Gbits/sec    0   1.84 MBytes       
[  5]   6.00-7.00   sec  1.66 GBytes  14.2 Gbits/sec    0   1.84 MBytes       
[  5]   7.00-8.00   sec  1.66 GBytes  14.3 Gbits/sec    0   1.84 MBytes       
[  5]   8.00-9.00   sec  1.67 GBytes  14.4 Gbits/sec    0   1.84 MBytes       
[  5]   9.00-10.00  sec  1.66 GBytes  14.3 Gbits/sec    0   1.84 MBytes       
[  5]  10.00-10.04  sec  67.5 MBytes  14.0 Gbits/sec    0   1.84 MBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.04  sec  16.7 GBytes  14.3 Gbits/sec    0             sender


И самое веселое, что тесты на копирование данных из(на) NFS шар(ы) из-под VM, похоже, честно упираются в скорости чтения\записи дисков на этих датасетах.
Виной тут, похоже, бутерброд из truenas -> debian VM -> docker -> MakeMKV. Однако под фряхой MakeMkv c web gui мне найти не удалось.
Т.е. этот вопрос тоже снимается, остаётся только один: отчего скорость назад всегда ниже скорости вперед в виртуальной сети truenas -> debian VM (тестировалось также на Ubuntu 22.04, результат тот же).
 
Top