Нет никаких проблем с сетевой картой Mellanox, поддерживающей базовый RSS, то есть: outer SRC-IP + Dst-IP + protocol
, но ожидание того, что сетевая карта Mellanox будет поддерживать RSS для контента заголовка SRV6, неверно. Текущая библиотека (глаголы) и прошивка на сегодняшний день RSS и RPS могут быть проверены
ethtool -S [interface-name] | grep packets | grep rx
- для аппаратного распространения RSS по нескольким очередям RX
grep mxl5 /proc/interupts
- для сопоставления очереди с процессором.
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)
, пакеты с разным хешем распределяются по разным очередям
![введите здесь описание изображения](https://i.stack.imgur.com/80cv8.png)
теперь, используя 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
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.2021https://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.2021RSS 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.2021src-ip & dst-ip
, значение RSS, сгенерированное для любого хэш-рета, будет одинаковым. Следовательно, насколько я понимаю, пакет всегда будет попадать в одну и ту же очередь RX. Для сегментной маршрутизации формат пакетаipv6 header->next_header = 43, extension header (different dst address)
, а неipv6_ipv6
. Могу и в скайпе помочь. - person Vipin Varghese   schedule 03.02.2021ethtool -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.2021Can 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.2021needs more clarity
, потому что 1. Код XDP Srv6 не используется совместно, 2. Файл pcap не используется совместно, 3. Нет снимка экрана, показывающего, что XDP работает только на одном ядре, 4. В режиме отладки информация не передается . - person Vipin Varghese   schedule 05.02.2021SRV6
наouter IP dst/src
RSS. Я тоже прекрасно понимаю, почему вы это сделали. - person Vipin Varghese   schedule 06.02.2021