Использование openvswitch с mpls и tcp

Я занимаюсь исследованиями и разработками в SDN. В этом случае мы используем маркировку MPLS и Open vSwitch в качестве программных переключателей. Мы используем 2 серверных узла с ovs 2.6.0, с загруженными модулями ядра и 2 хоста.

Они напрямую подключаются через 1 гигабитный Ethernet-канал, и rtt составляет около 1 мс, а в случае первого пакета менее 3 мс (с помощью утилиты ping). Я использую Iperf3 для выполнения тестов. Первый тест - это производительность, достигнутая без использования меток mpls, а второй - использование меток mpls. MTU настроен так, чтобы не выполнять фрагментацию, так что это не проблема. Я попытался настроить окно перегрузки и другие параметры, такие как используемый алгоритм TCP.

mar jul  4 12:21:09 CEST 2017
Connecting to host 192.168.20.2, port 5201
[  4] local 192.168.20.1 port 43526 connected to 192.168.20.2 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   112 MBytes   943 Mbits/sec    0    450 KBytes
[  4]   1.00-2.00   sec   112 MBytes   937 Mbits/sec    0    516 KBytes
[  4]   2.00-3.00   sec   112 MBytes   938 Mbits/sec    0    571 KBytes
[  4]   3.00-4.00   sec   112 MBytes   937 Mbits/sec    0    625 KBytes
[  4]   4.00-5.00   sec   112 MBytes   943 Mbits/sec    0    633 KBytes
[  4]   5.00-6.00   sec   111 MBytes   933 Mbits/sec    0    633 KBytes
[  4]   6.00-7.00   sec   111 MBytes   933 Mbits/sec    0    664 KBytes
[  4]   7.00-8.00   sec   112 MBytes   944 Mbits/sec    0    664 KBytes
[  4]   8.00-9.00   sec   111 MBytes   933 Mbits/sec    0    697 KBytes
[  4]   9.00-9.16   sec  18.8 MBytes   977 Mbits/sec    0    697 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-9.16   sec  1.00 GBytes   939 Mbits/sec    0             sender
[  4]   0.00-9.16   sec  1022 MBytes   935 Mbits/sec                  receiver

iperf Done.
<----------->
mar jul  4 12:40:10 CEST 2017
Connecting to host 192.168.20.2, port 5201
[  4] local 192.168.20.1 port 43530 connected to 192.168.20.2 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   203 KBytes  1.66 Mbits/sec   57   2.82 KBytes
[  4]   1.00-2.00   sec   398 KBytes  3.26 Mbits/sec  124   2.82 KBytes
[  4]   2.00-3.00   sec   400 KBytes  3.28 Mbits/sec  124   2.82 KBytes
[  4]   3.00-4.00   sec   319 KBytes  2.61 Mbits/sec  124   2.82 KBytes
[  4]   4.00-5.00   sec   398 KBytes  3.26 Mbits/sec  126   2.82 KBytes
[  4]   5.00-6.00   sec   395 KBytes  3.24 Mbits/sec  124   2.82 KBytes
[  4]   6.00-7.00   sec   398 KBytes  3.26 Mbits/sec  126   2.82 KBytes
[  4]   7.00-8.00   sec   324 KBytes  2.66 Mbits/sec  124   2.82 KBytes
[  4]   8.00-9.00   sec   398 KBytes  3.26 Mbits/sec  124   2.82 KBytes
[  4]   9.00-10.00  sec   400 KBytes  3.28 Mbits/sec  126   2.82 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-10.00  sec  3.55 MBytes  2.98 Mbits/sec  1179             sender
[  4]   0.00-10.00  sec  3.42 MBytes  2.87 Mbits/sec                  receiver

Я знаю, что есть проблемы с использованием MPLS и ovs, но есть некоторые факты, которые странны в этом случае:

  • Если я использую UDP вместо TCP, то один пакет выходит из строя, но все остальное хорошо, поэтому я думаю, что пакеты используют путь к данным ядра.
  • В начале передачи TCP потеряно 9 пакетов, и периодически теряется больше пакетов. Просматривая трассировки tcpdump, эти пакеты "отсутствуют" в первом узле, потому что во втором прыжке они не перехвачены.
  • Как вы можете видеть выше, производительность при использовании TCP без маркировки MPLS очень хорошая.

Есть кто-то, кто знает, как решить эту проблему?

PD: Извините за мои возможные английские опечатки.

1 ответ

Проведя некоторые исследования, мне удалось выделить проблему и решить ее. Сетевая карта была с некоторыми контрольными суммами и опциями выгрузки, заставляя пакет идти в пространство пользователя, я думаю, что проблема заключалась в инкапсуляции.

С помощью ethtool Утилита мы можем отключить эту разгрузку. В этом случае я использовал (как root):

ethtool -K <iface> gso off && ethtool -K <iface> tso off && ethtool -K <iface> gro off

Для отключения разгрузки сегментации TCP (TSO), разгрузки общей сегментации (GSO) и разгрузки общего приема (GRO). Также контрольные суммы rx и tx отключены.

источники: источник 1 источник 2

Я надеюсь, что это поможет кому-то, когда придет время.

Другие вопросы по тегам