Можно ли написать веб-сервер с помощью Intel DPDK?

Я новичок в Intel DPDK. Я планирую написать http веб-сервер.

Можно ли это реализовать, используя следующую логику, используя DPDK?

  1. Получите пакеты и отправьте их в Worker Logical Cores.
  2. Сборка рабочего логического ядра «http reuqest», отправленная клиентом с использованием входящих пакетов.
  3. Обработайте «http-запрос» в Worker Logical Core и создайте «http-ответ».
  4. Создайте пакеты для «ответа http» и отправьте их на выходные программные кольца.

Я не уверен, возможно ли вышеизложенное или нет.

Можно ли написать веб-сервер с помощью Intel DPDK?


person HPCM    schedule 04.11.2014    source источник
comment
Вам нужно сначала реализовать стек TCP/IP для получения HTTP-сообщений, не так ли? Возможно, github.com/opendp/dpdk-ans это заработает.   -  person Unmanned Player    schedule 24.11.2016


Ответы (2)


Это большая работа, так как вам понадобится стек TCP/IP поверх DPDK. Даже после того, как вы перенесете стек TCP/IP поверх DPDK (или повторно используете порт из ОС), вы не получите производительности, потому что легко написать код C, который работает, но написание TCP/IP стек, который поддерживает хорошую производительность, это очень сложная разработка.

Вы можете попробовать http://www.6wind.com/6windgate-performance/tcp-termination/ : они не предоставляют HTTP-сервер, но они обеспечивают поддержку сокета L7, подобного TCP, для создания самых быстрых HTTP-серверов.

person Vincent    schedule 10.02.2015

Да, с помощью DPDK можно создать веб-сервер. Вы можете использовать интерфейс KNI, предоставляемый DPDK. Все пакеты, полученные на интерфейсах KNI, по-прежнему маршрутизируются через сетевой стек ядра, однако, и здесь есть подвох, это все же быстрее, чем прямой прием пакетов из ядра (требуется несколько копий). С DPDK вы по-прежнему можете пинговать ядра на RX и разные ядра на TX. Затем вы можете указать своей ОС не использовать эти lcore для чего-либо еще. Таким образом, у вас действительно есть выделенные ядра для пакетной передачи и приема. Убедитесь, что ядра Tx и RX расположены на разных сокетах ЦП.

Дополнительные сведения см. по адресу: http://dpdk.org/doc/guides/sample_app_ug/kernel_nic_interface.html

person Abhishek    schedule 03.07.2015
comment
Привет, Абхишек, Почему необходимо, чтобы Tx и Rx lcore находились в разных сокетах ЦП, что произойдет, если они будут на одном сокете ЦП? - person Subbu; 23.08.2016