Есть ли способ заставить RSS работать с пакетом SRv6?

Я использую мой проект github, который использует eBPF для фильтрации/просмотра/перенаправления/отбрасывания пакетов на основе маршрутизации SRv6. . Код eBPF работает на mellanox Connect5X для функциональности SRv6.

Я ожидаю, что mellanox Connect5X изучит заголовок внешнего IPv6-адреса SRv6 Destination и выполнит распространение пакетов RSS в очередях RX. Это позволит мне запускать XDP на нескольких ядрах для обработки.

Мой текущий результат: использовать только одно ядро ​​​​процессора, когда пакеты SRv6 являются многопотоковыми пакетами (такая же эффективность нагрузки, как и для однопотоковых).

Вопрос: Как сбалансировать нагрузку ЦП даже для пакетов SRv6?

Пример ожидаемого ответа: узнать, как включить RSS для IPv6 src, только dst addr и т. д.

Спасибо.


person takeru ta    schedule 21.01.2021    source источник
comment
не могли бы вы помочь мне понять вопрос, который вы задаете, потому что Packet is received at NIC, if enabled with RSS for IPV6 will do rss and put it to appropriate RX queue. If you have multiple queues packet steered to multiple core, the XDP instance running on that queue will be handling the packet. К чему это вы утверждаете only 1 CPU core is enabled for multiple RX queues for NIC?   -  person Vipin Varghese    schedule 02.02.2021
comment
@VipinVarghese привет, випин. Спасибо за комментарий и перефразировку! ну, вы правильно поняли! Таким образом, обычный пакет IPv6 загружает несколько процессоров. Это относится к пакетам SRv6, которые обрабатываются только одним процессором. тебе известно?   -  person takeru ta    schedule 02.02.2021
comment
Насколько я помню, у mellanox есть RSS для IPv6, пожалуйста, проверьте https://docs.mellanox.com/display/WINOFv55053000/RSS+Monitoring. В заявленном случае это может быть 1. RSS for IPv6 is set for TCP/UDP but not set for ipv6 only или the SRv6 packet you are sending is always having the same header. Обратите внимание, что я ничего не знаю о mxl5 supporting RSS on the inner dst IP if SRv6 value. Для достижения того же нужно использовать сетевую карту, которая поддерживает RSS на ofsset values or RAW bytes. Не могли бы вы подтвердить, что NIC is enabled with ipv6 only and you are sending different src/dst ip?   -  person Vipin Varghese    schedule 03.02.2021
comment
Я отвечу на них по порядку. RSS for IPv6 is set for TCP/UDP but not set for ipv6 only =› Я не знаю, как это установить. the SRv6 packet you are sending is always having the same header =› Конечно, внутренний адрес остался прежним, но я не думаю, что это важно. Причина в том, что структура пакетов SRv6 выглядит так [eth][ipv6][SRH(mean ipv6 ext)][Pyload].NIC is enabled with ipv6 only and you are sending different src/dst ip=›yep. собственно и сделал замеры. ipv6only: RSS работает, ipv6/udp: RSS работает, ipv6/tcp: RSS работает, ipv6/ipv6: RSS не работает,   -  person takeru ta    schedule 03.02.2021
comment
Ищу код Linux, похоже, он работает с IPIPv6. Но это не работает... Возможно, у меня есть ключ. (Структура SRv6 похожа на IPIPv6, поэтому я подумал, что ее можно применить). net/mlx5e: поддержка RSS для туннелируемых пакетов IP-in-IP и IPv6   -  person takeru ta    schedule 03.02.2021
comment
если пакет SRv6 имеет одинаковый src-ip & dst-ip, значение RSS, сгенерированное для любого хэш-рета, будет одинаковым. Следовательно, насколько я понимаю, пакет всегда будет попадать в одну и ту же очередь RX. Для сегментной маршрутизации формат пакета ipv6 header->next_header = 43, extension header (different dst address), а не ipv6_ipv6. Могу и в скайпе помочь.   -  person Vipin Varghese    schedule 03.02.2021
comment
Означают ли одинаковые src-ip и dst-ip, что адрес ipv6 внешнего заголовка одинаков? Я это понимаю. Прошу прощения за недоразумение. Я говорил о том, что это возможно из-за схожей структуры. Спасибо. Я бы попросил вас помочь мне, но я не говорю по-английски....????   -  person takeru ta    schedule 03.02.2021
comment
Я понял утверждение, что RSS можно включить в ipv6 src-addr и dst-addr, чтобы включить его для SRv6. Это правильно? Если да, то не могли бы вы сказать мне, как включить его с этим? При измерении я установил следующие настройки ethtool -L ens4f1 combined $(nproc --all);ethtool -K ens4f1 rxhash on;ethtool -K ens4f1 ntuple on; for proto in tcp4 udp4 tcp6 udp6; do /sbin/ethtool -N ens4f1 rx-flow-hash $proto sd;done;   -  person takeru ta    schedule 03.02.2021
comment
спасибо за понимание, что IP-RSS работает с SRC-IP и DST-IP, а не с заголовком расширения для SRv6. Не могли бы вы сообщить мне, какие тестируемые пакеты вы отправляете с одним и тем же SRC-IP и DST-IP или с разными? Я могу быть доступен по скайпу для отладки.   -  person Vipin Varghese    schedule 04.02.2021
comment
Can you please let me know for packets under test, are you sending with same SRC-IP and DST-IP or different? => Используются разные Src-IP. Однако Dst-IP всегда один и тот же. Большое спасибо. Я просто думаю, что это крайняя мера (я живу в JST, поэтому знаю, что трудно уложиться во времени????)   -  person takeru ta    schedule 04.02.2021
comment
Я пометил этот вопрос needs more clarity, потому что 1. Код XDP Srv6 не используется совместно, 2. Файл pcap не используется совместно, 3. Нет снимка экрана, показывающего, что XDP работает только на одном ядре, 4. В режиме отладки информация не передается .   -  person Vipin Varghese    schedule 05.02.2021
comment
Я вижу, что вы отредактировали и изменили SRV6 на outer IP dst/src RSS. Я тоже прекрасно понимаю, почему вы это сделали.   -  person Vipin Varghese    schedule 06.02.2021


Ответы (1)


Нет никаких проблем с сетевой картой Mellanox, поддерживающей базовый RSS, то есть: outer SRC-IP + Dst-IP + protocol, но ожидание того, что сетевая карта Mellanox будет поддерживать RSS для контента заголовка SRV6, неверно. Текущая библиотека (глаголы) и прошивка на сегодняшний день RSS и RPS могут быть проверены

  1. ethtool -S [interface-name] | grep packets | grep rx - для аппаратного распространения RSS по нескольким очередям RX
  2. grep mxl5 /proc/interupts - для сопоставления очереди с процессором.
  3. ethtool --show-rxfh-indir [interface-name] - для идентификации настройки хэша потока

судя по комментариям, есть пробел в понимании формата пакета и для SRv6. Формат пакета ETh + IPv6 + next-header is 43 + srv6 header (next header can be ip/tcp/udp).

поэтому RSS выполняется на outer src-IP + dst-ip + protocol (43), пакеты с разным хешем распределяются по разным очередям

введите здесь описание изображения

теперь, используя XDP, загруженный в интерфейс, можно filter for SRv6 headers применить простой xor-хэш или хеш-шум, а затем перенаправить сокеты или интерфейс AF_XDP.

следовательно, все ожидания и предположения неверны

[EDIT-1] на основе отладки в реальном времени мы потратили 1,5 часа на объяснение и обучение.

[EDIT-2] устранить комментарии 1. Это относится к тому, что уже накоплено счетчиком rx-flow-counter, а не к увеличению количества пакетов SRv6 В отладке в реальном времени @takeru использует TREX packet generator для отправки пакетов на сетевую карту с форматом пакета ETH + SRC-IP-1 ... SRC-IP-n + DST-IP + Srv6. При прямом подключении интерфейса к интерфейсу никакие другие пакеты, кроме пакетов SRv6, приниматься не будут

2. На самом деле, если вы проверите нагрузку на ЦП в случае пакетов SRv6, то увидите, что загружается только одно ядро ​​ЦП В живом отладке @takeru не запускал top/htop, это новая информация. @takeru пытался понять, происходит ли RSS на внешнем IP или нет. Я запросил скриншот использования ЦП и tcpdump.

3. Если это только IPv6, нагрузка ЦП будет применена к другим ядрам Был размещен запрос на запуск простой программы XDP-eBPF, которая перенаправляет/отбрасывает пакет ipv6-Srv6. @takeru еще не работал так же

4. Только случаи IPv6 и ip / udp увеличили количество значений с помощью упомянутого вами метода отладки. То же самое происходит с SRv6 в ядре Linux Я указал @takeru, пакет TREX, который он генерирует, имеет формат ETH + Ipv6 + next-hdr routing + Srv6 header + next-header UDP. Следовательно, статика ядра будет обновляться как ipv6/UDP, поскольку это не TCP, не SCTP или неизвестный протокол.

Примечание: справочный проект Takeru на github

person Vipin Varghese    schedule 05.02.2021
comment
Нет, это неправильно. Я не думаю, что вы понимаете поведение xdp. Я скажу это снова. 1. It refers to what the rx-flow-counter has already accumulated, not the increase in SRv6 packets 2. In fact, if you check the load on the CPU in the case of SRv6 packets, you will see that only one CPU core is being loaded 3. If it is only IPv6, the CPU load will be applied to other cores 4. Only IPv6 and ip / udp cases have increased the value count by the debugging method you mentioned То же самое происходит с SRv6 в ядре linux, так что можете сами проверить, если хотите - person takeru ta; 05.02.2021
comment
@takeruta Я уже много раз делился и объяснял, что если аппаратная сетевая карта использует RSS, пакеты будут отправляться в несколько очередей на основе хеш-значений. Если вы загрузили XDP для каждой очереди портов, будет запущен соответствующий EBPF. в зависимости от логики eBPF вы также можете сбрасывать/отправлять в ядро/отправлять на интерфейс/баланс баланса на несколько сокетов AF_XDP. это зависит от содержимого пакетов для HW NIC для выполнения RSS. - person Vipin Varghese; 05.02.2021
comment
Ваш комментарий правильный. У меня такое же понимание. Итак, вы понимаете, что вам нужно использовать RSS для распределения нагрузки на ЦП, верно? Я хочу сказать, что rx-flow-counter in your answer is counted by other RSS driven packets, not SRv6 driven by RSS. top/htop работал.It's strange that it existed to share the screen and you didn't check it. Во-первых, я не хочу говорить о том, чтобы не бегать, я хочу, чтобы вы сказали мне, как бегать. Если нет возможности это сделать, перестаньте писать этот ответ. .Мой вопрос, подскажите, как включить RSS для пакетов SRv6. - person takeru ta; 06.02.2021
comment
@takeruta Я несколько раз объяснял в комментариях, ответах и ​​в отладке в реальном времени, что текущее ожидание MXL5 to do SRv6 RSS равно incorrect, потому что он поддерживает более общий RSS, например outer-ip/outer-ip-tcp/udp/sctp, inner-ip, inner-ip-tcp/udp/sctp. Существуют программируемые сетевые карты, которые позволяют использовать поля смещения RSS в пакетах doc.dpdk.org/guides/prog_guide. /rte_flow.html. Но вы не используете DPDK для программирования, а используете Kernel для запуска того же самого, - person Vipin Varghese; 06.02.2021