Моя цель - создать приложение DPDK, которое будет действовать как посредник между диспетчером виртуальных машин (который в моем случае является процессом пользовательского пространства) и оборудованием NIC.
Пока что я пытался сделать что-то в меньшем масштабе. Вместо использования VMM я создал фиктивный процесс на языке C. Мне удалось привязать фиктивный процесс к процессу DPDK, используя именованные семафоры и разделяемую память. В основном в этой небольшой демонстрации приложение DPDK читает из буфера RX и помещает контент в общую память. Затем фиктивный процесс получает данные и выводит их на стандартный вывод.
Вся поддержка DPDK для многопроцессного взаимодействия нацелена на конкретный случай, когда оба приложения используют библиотеки dpdk. Мне интересно, есть ли какая-то поддержка для этого случая где одно приложение не использует эти библиотеки. Почему? Потому что VMM написан на Rust, и я не знаю, как добавить библиотеки DPDK в Rust.
Как вы думаете, какой способ общения был бы наиболее эффективным? Я думал, можно ли поместить мемпул в общую память и получить доступ к mbufs непосредственно из фиктивного процесса.
В настоящее время я использую dpdk 20.11 Ubuntu 20.04
Спасибо!
ОБНОВЛЕНИЕ 1:
это ваш вопрос Могу ли я взаимодействовать / взаимодействовать с приложением DPDK с приложением, отличным от DPDK
На самом деле я пытаюсь найти вот что: как эффективно переместить данные, полученные в буфере RX, в приложение, отличное от dpdk?
Мой текущий подход таков: https://imgur.com/a/cF2lq29
Это основной логический цикл для приложения dpdk, которое получает данные из буфера RX и отправляет их в приложение, отличное от dpdk.
Как это происходит:
- Прочитать данные из буфера приема.
- Подождите, пока приложение, отличное от dpdk, не сообщит, что я не использую разделяемую память, вы можете писать на ней
- Запись в разделяемую память (для простоты вместо всего пакета записывается nb_rx)
- Сообщите приложению без dpdk, что теперь общая память доступна для чтения.
Как видите, это не совсем эффективно, и я боюсь, что мой метод синхронизации создаст узкое место.
Так что это заставляет меня задаться вопросом, есть ли какие-нибудь лучшие способы достижения этого общения?
is your question Can I interface/interact DPDK application with non DPDK application
. Простой ответ - да, можно и нет предела. Но что мне непонятно в вашем процессе совместного использования RX-пакета. Поскольку в DPDK пакет RX хранится вrte_mbuf
, который создается с использованиемmempool over hugepages
. Из вашего объяснения вы закончите копированием пакета в разделяемую память. Если вы намерены избежать копирования памяти, ваше вторичное приложение должно иметь доступ к области памяти mbuf (огромная страница) как приложение DPDK. Так что не могли бы вы обновить. - person Vipin Varghese   schedule 20.03.2021rte_eal_init
и в IPC использовать PTR mbuf. - person Vipin Varghese   schedule 22.03.2021