DEV_TX_OFFLOAD_VXLAN_TNL_TSO Тестирование разгрузки - DPDK

Я работаю над картами Mellanox ConnectX-5 и использую DPDK 20.11 с CentOS 8 (4.18.0-147.5.1.el8_1.x86_64).

Я хотел протестировать разгрузку DEV_TX_OFFLOAD_VXLAN_TNL_TSO, и я хочу спросить, какой должна быть структура пакета (я использую scapy), которую я должен отправить в приложение DPDK, чтобы эта разгрузка попала в действие и выполнить сегментацию (поскольку это VXLAN_TNL_TSO).

Я изменяю пример dpdk-ip_fragmentation и добавляю: DEV_TX_OFFLOAD_IP_TNL_TSO внутри port_conf

static struct rte_eth_conf port_conf = {
    .rxmode = {
        .max_rx_pkt_len = JUMBO_FRAME_MAX_SIZE,
        .split_hdr_size = 0,
        .offloads = (DEV_RX_OFFLOAD_CHECKSUM |
                 DEV_RX_OFFLOAD_SCATTER |
                 DEV_RX_OFFLOAD_JUMBO_FRAME),
    },
    .txmode = {
        .mq_mode = ETH_MQ_TX_NONE,
        .offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM | 
                 DEV_TX_OFFLOAD_VXLAN_TNL_TSO
                 ),
    },
};

И в ol_flags:

ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM | PKT_TX_TUNNEL_VXLAN );

Короче говоря, для проверки этой разгрузки было бы здорово, если бы кто-нибудь помог мне с двумя вещами:

  1. Какой должна быть структура пакета, которую я должен отправить (используя scapy, чтобы разгрузка вступила в действие)?
  2. Обязательные настройки, которые нужно выполнить в примере приложения DPDK (нет необходимости использовать пример ip_fragmentation, любой другой пример тоже подойдет).

person Ameer Usman    schedule 15.01.2021    source источник
comment
Я должен отметить этот вопрос как missing inforamtion. Поскольку вы не упомянули 1. версию DPDK, 2. ядро ​​Linux, 3. прошивку (если применимо), 4. текущие результаты или журналы ошибок или журналы (pkt_dump)   -  person Vipin Varghese    schedule 16.01.2021
comment
Я добавил информацию о DPDK & Kernel. Нет никаких журналов ошибок, просто то, что TSO не происходит вообще, даже после включения ol_flags внутри структуры mbuf.   -  person Ameer Usman    schedule 18.01.2021
comment
Вы пробовали использовать DEV_TX_OFFLOAD_UDP_TNL_TSO для разгрузки пакетов туннеля UDP? Я доступен для отладки по скайпу   -  person Vipin Varghese    schedule 18.01.2021
comment
Я также включил DEV_TX_OFFLOAD_UDP_TNL_TSO, но безрезультатно, я не вижу сегментируемых пакетов, когда я отправляю пакет VxLan. Конечно, мы тоже можем использовать Skype, мой адрес электронной почты - [email protected].   -  person Ameer Usman    schedule 18.01.2021
comment
основанный на живой отладке, запрос совершенно другой. @AmeerUsman нужен TSO for inner TCP payload and not VXLAN Tunnel. Я попросил Амира обновить билет на то же самое.   -  person Vipin Varghese    schedule 18.01.2021


Ответы (1)


примечание: на основании 3-часового сеанса отладки выяснилось, что общие title и question неверны. Следовательно, вопрос будет отредактирован для отражения фактических требований как how enable DPDK port with TCP-TSO offloads for tunnelled VXLAN packets.

Ответ на первый вопрос какие должны быть scapy настройки для отправки пакета DPDK DUT для TSO и получения сегментированного трафика:

  1. Отключите всю разгрузку, связанную с TSO, на интерфейсе SCAPY с помощью ethtool -K [scapy interface] rx off tx off tso off gso off gro off lro off
  2. Установите MTU для отправки более крупных кадров, например 9000
  3. Убедитесь, что в качестве полезной нагрузки отправляются большие кадры, но less than interface MTU.
  4. Запустите tcpdump для входящего трафика с флагом направления как tcpdump -eni [scapy interface] -Q in

Ответы на второй вопрос Необходимые настройки в примере приложения DPDK:

  1. Приложение dpdk testpmd может включать разгрузку HW и SW TSO на основе поддержки NIC.
  2. следующее лучшее приложение - tep_termination, но для достижения того же требуется интерфейс vhost (VM) или vhost DPDK.
  3. Поскольку требование предназначено для любого общего приложения, такого как skeleton, l2fwd, можно включить следующее:

  • Убедитесь, что вы используете DPDK 20.11 LTS (чтобы получить самую последнюю и лучшую поддержку для TUNNEL TSO)
  • В приложении проверьте возможность tx_offload с dev_get_info API.
  • Перекрестная проверка HW TSO для туннелированных (VXLAN) пакетов.
  • Если TSO необходимо выполнить для полезной нагрузки UDP, проверьте поддержку UDP_TSO в HW.
  • сконфигурируйте NIC без мультисегмента, большого кадра, максимальной длины кадра ›9000 байт.
  • Получите пакет через rx_burst и убедитесь, что это пакет ipv4, UDP, VXLAN (туннель) с nb_segs как 1.
  • измените mbuf, чтобы он указывал на l2_len, l3_len, l4_len.
  • пометьте пакеты ol_flags как PKT_TX_IPV4 | PKT_TX_TUNNEL_VXLAN | PKT_TX_TUNNEL_IP. Для внутренней полезной нагрузки UDP PKT_TX_TUNNEL_UDP.
  • затем установите размер сегмента как DPDK MTU (1500 as default) - l3_len - l4_len

Это позволит PMD, который поддерживает разгрузку HW TSO, обновлять соответствующие поля в дескрипторах для данной полезной нагрузки для передачи в виде нескольких пакетов. Для нашего тестового примера пакет scapy send размером 9000 байт будет преобразован в пакеты размером 7 * 1500 байт. это можно увидеть как часть tcpdump.

Примечание:

  1. ссылочный код присутствует в tep_termination и test_pmd.
  2. Если разгрузка HW отсутствует, доступна библиотека SW для rte gso.
  3. Для разгрузки HW все PMD на сегодняшний день требуют, чтобы MBUF был непрерывным одиночным невнешним буфером. Поэтому убедитесь, что вы создали mbufpool или mempool с достаточным размером для приема больших пакетов.
person Vipin Varghese    schedule 19.01.2021
comment
@AmeerUsman, пожалуйста, обновите вопрос на основе информации о трехчасовом сеансе отладки, которой вы поделились, и также просмотрите ответ. Если это то же самое, что мы изучили и поняли, пожалуйста, примите и проголосуйте за. - person Vipin Varghese; 20.01.2021
comment
Я отредактировал вопрос. Еще раз спасибо за ваше время для решения проблемы @Vipin - person Ameer Usman; 21.01.2021