Как сбалансировать нагрузку с помощью циклического перебора в DPDK с использованием RTE_FLOW?

в моей проблеме у RSS не было хорошего баланса нагрузки между ядрами ЦП. В случае, если пакеты rx были изменены путем вставки тегов между mac и ip, поэтому dpdk не смог его распознать. очереди rx настроены. в этом ответе на вопрос: как отключить RSS, но при этом использовать несколько очередей RX в DPDK? он говорит, что можно балансировать нагрузку в циклическом режиме, используя RTE_FLOW. как правильно это сделать грамматически? Я хотел бы знать API или структуры для настройки метода циклического перебора вот моя информация о среде выполнения: 1) версия dpdk: 19.11.9 2) ник PMD: ixgbe 3) прошивка: 825999 и XXV710 4) версия ОС: ядро ​​Ubuntu 16.04: 4.4.0-186

не могли бы вы обновить следующую информацию 1) dpdk version, 2) nic PMD, 3) firmware, 4) os version, 5) sample code for rte_flow distribution.

Vipin Varghese 23.03.2022 17:26

хорошо, вот это 1) версия dpdk: 19.11.9 2) nic PMD: ixgbe 3) fireware: 825999 и XXV710 4) версия ОС: ubuntu 16.04 kerner: 4.4.0-186 5) пример кода для дистрибутива rte_flow: у меня есть Я еще не написал никакого кода о распределении rte_flow, я прочитал пример rte_flow, не вижу кода для настройки циклического перебора. кажется, указывает очередь для указывает поток. и я новичок в dpdk, поэтому, если это не то, что вы хотите, укажите. Я спросил соответствующих практиков, они сказали, что изменение драйвера pmd может решить мою проблему, это единственный способ?

Johnny 24.03.2022 02:39

Общая практика @Jhonny заключается в том, чтобы обновить недостающую информацию в вопросе. Пожалуйста, сделайте то же самое.

Vipin Varghese 24.03.2022 03:51

Что касается фрагмента кода, «лучше всего поделиться фрагментом кода для воспроизведения ошибки». Но здесь непонятно, задаете ли вы вопрос или просите решение, не попробовав или не поделившись фрагментом кода.

Vipin Varghese 24.03.2022 03:53

@Jhonny, вы упоминаете, что спрашивали других, и соответствующие специалисты предлагали изменить драйвер PM. Насколько я понимаю, это неправильный совет, поскольку закрепление очереди rte_flow выполняется из приложения, а не из pmd. Пожалуйста, обновите вопрос с соответствующим предложением, которым поделились специалисты. Это поможет лучше понять их точку зрения

Vipin Varghese 24.03.2022 03:55

Спасибо за совет, я обновил вопрос. im not ask for solution, I just want to know how to set up round robin by 'RTE_FLOW' Can you give me a few API имя или примеры на официальном сайте dpdk

Johnny 24.03.2022 04:44

спасибо за обновление вопроса с необходимой информацией. На ваш вопрос: «Просто хочу узнать, как настроить циклический перебор с помощью RTE_FLOW. Можете ли вы дать мне несколько API; I have already mentioned in my comment . Насколько я понимаю, это неправильный совет, поскольку закрепление очереди rte_flow выполняется из приложения, а не из pmd. следовательно, нет API для DPDK, который делал бы для вас что-то кроме RSS в конкретной очереди (но это не то, что вы хотите, согласно вопросу)`. Если вам нужен официальный ответ, я также могу обновить раздел ответов.

Vipin Varghese 24.03.2022 04:50

хорошо, спасибо, я вижу, вы можете обновить ответ, и я приму его

Johnny 24.03.2022 05:09

Я подробно обновил ответ на вопросы. Если вы найдете это полезным, пожалуйста, примите и проголосуйте, чтобы закрыть то же самое.

Vipin Varghese 25.03.2022 03:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно вопросу

RSS did not have a good load balance between CPU cores case the rx packets has been modified by insert tags between mac and ip

Есть пара моментов, которые необходимо уточнить. так что позвольте мне объяснить

  1. Некоторые физические и виртуальные сетевые карты предоставляют RSS через разгрузку DPDK RX для фиксированных кортежей, таких как IP, протокол, номер порта TCP|UDP|SCTP.
  2. Определенная сетевая карта позволяет настроить алгоритм reta хеширования, чтобы он лучше соответствовал потребностям (например, когда исходный IP-адрес назначения фиксирован, мы можем пропустить и использовать другие).
  3. Насколько я помню из DPDK 18.11, RTE_FLOW был введен для поддержки RSS в выбранных очередях RX (например, Q1, Q2, Q3 могут быть RSS для пакетов TCP, а Q4, Q5 могут использоваться для UDP). Но опять же, это основано на внутреннем или внешнем IP + номере порта.
  4. Для DPDK версии 19.11 и выше RTE_FLOW был улучшен для поддержки RAW Pattern. Целью этой функции является поддержка специального протокола, который по умолчанию не понимает сетевая карта (VXLAN, GENEVE, RTP и другие протоколы).
  5. Для NIC, таких как Fortville и Columbiaville (от Intel), позволяет загружать специальную прошивку через DDP (Dynamic Device Personation) для настройки специальных заголовков фабрики или MPLS-подобных заголовков (между ethernet и ip) для анализа, поиска и использования в качестве начального значения для RSS (что позволяет лучшее распространение).
  6. Существуют сетевые карты, которые поддерживают уровень L2, но они будут ограничены только SMAC, DMAC, VLAN1, VLAN2, MPLS, а не пользовательским заголовком.

Следовательно, в зависимости от сетевой карты, поставщика, поддержки RSS для L2 и встроенного ПО возможность вычисления RSS для полей между ними зависит от инициализации порта или конкретной конфигурации RTE_FLOW. Например, RSS ETH поддерживается на

  1. I40E это I40E_INSET_DMAC | I40E_INSET_SMAC
  2. DPAA2 это NH_FLD_ETH_TYPE and NET_PROT_ETH
  3. CNXK это RSS_DMAC_INDEX
  4. OCTEONX2 это FLOW_KEY_TYPE_VLAN and FLOW_KEY_TYPE_CH_LEN_90B

Следовательно, для NIC ixgbe and XXV710 нет готовой поддержки custom header между Ethernet и IP.

Альтернативы:

  1. Используйте интеллектуальную сетевую карту или FPGA: они запрограммированы на синтаксический анализ и RSS для ваших конкретных заголовков в RSS для нескольких очередей RX.
  2. Работайте с Intel, используя XXV710 (Fortville): для создания DDP, который может анализировать ваши определенные заголовки как RSS в нескольких очередях RX.
  3. Определите сетевую карту DPDK: которая может анализировать заголовок RAW, как определено 12.2.6.2. После того, как поставщик добавил поддержку, вы можете создать простой traffic spread tool, который обеспечит распределение трафика по нужным очередям RX в циклическом режиме.
  4. Используйте ПО для поддержки отсутствующего оборудования.

примечание: я не рекомендую использовать статический Round Robin на основе HW, так как это создаст двойную проблему.

  • если это чистый ДПДК БОНД Круговой алгоритм, у вас не будет закрепления потока
  • Если вы используете закрепление на основе хэша, есть вероятность, что слоновый поток может протолкнуть 1 или несколько очередей, что приведет к падению производительности при обработке процессора.
  • Я рекомендую использовать модель EVENTDEV с атомарным режимом, который обеспечивает лучшую локальность кеша (в данном случае одни и те же потоки будут попадать в рабочий поток) и практически линейную производительность. пример приложения

Для варианта 4 (Модель программного обеспечения):

  1. Отключить RSS в функции port_init
  2. Используйте одну очередь RX для получения всего пакета либо пользовательского потока RX.
  3. вычислить хэш на основе желаемого заголовка и обновить хеш-поле mbuf.
  4. Используйте библиотеку rte_distributor для распределения трафика на основе кастома.
  5. или используйте rte_eventdev с атомарной моделью, чтобы распределить рабочую нагрузку на нескольких рабочих.

[Пояснение из комментариев]:

  1. Я спросил соответствующих практиков, они сказали, что изменение драйвера pmd может решить мою проблему, это единственный способ?

[ОТВЕЧАТЬ] Поскольку вы используете настраиваемый заголовок, а не общий VLAN|IP|порт, это предложение неверно. Как вы пояснили в вопросе и комментариях, которые вы хотите распространять как RSS для пользовательского заголовка.

  1. Я еще не написал никакого кода о распределении rte_flow, я прочитал пример rte_flow, не вижу кода для настройки циклического перебора.

[ОТВЕЧАТЬ], как описано выше, не все сетевые карты поддерживают RSS и RAW. Поскольку ваша текущая сетевая карта ixgbe and i40e, функция анализа и выполнения RSS для пользовательского заголовка маловероятна. вы можете попробовать вариант 2 (работа с Intel, создание нового ddp) для i40e, чтобы добиться того же или реализовать в ПО, как предложено в варианте 4.

  1. я не прошу решения, я просто хочу знать, как настроить циклический перебор с помощью «RTE_FLOW». Можете ли вы дать мне несколько API

[ОТВЕЧАТЬ] обычно обновляется фрагментами кода или шагами, используемыми для воспроизведения ошибки. Но текущий вопрос больше похож на уточнение. Пожалуйста, обратитесь выше.

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