1. Технология ВПП
Программное обеспечение Cisco с открытым исходным кодом Технология VPP (Vector Packet Processing) — это высокопроизводительное программное обеспечение для обработки сетевых пакетов данных, которое в основном используется для ускорения обработки и маршрутизации сетевых пакетов данных.
VPP — это проект с открытым исходным кодом, разработанный Cisco и написанный в основном на языке C. Его особенности включают высокую производительность, гибкость, масштабируемость и программируемость. VPP может обрабатывать пакеты данных на очень высоких скоростях и поддерживает несколько протоколов, таких как IPv4, IPv6, ARP, VLAN, GRE и MPLS и т. д. Кроме того, модульная конструкция VPP обеспечивает гибкое расширение функций путем добавления и удаления функциональных модулей, а также предоставляет богатые API и инструменты, позволяющие пользователям расширять его функции программным путем.
К основным сценариям применения VPP относятся:
1. Облачные вычисления и сети центров обработки данных. VPP можно использовать в сочетании с технологиями виртуализации и контейнеризации для ускорения обработки сетевых пакетов на платформах облачных вычислений.
2. Виртуализация сетевых функций (NFV). VPP можно использовать в качестве компонента виртуальной сетевой функции (VNF) в архитектуре виртуализации сетевых функций, что делает развертывание сетевых функций и управление ими более гибким и эффективным.
3. Периферийные вычисления и Интернет вещей. VPP можно использовать на периферийных устройствах для обработки больших сетевых пакетов данных и обеспечения эффективных периферийных вычислений и поддержки приложений Интернета вещей.
4. Высокопроизводительная маршрутизация. VPP можно использовать в высокопроизводительных маршрутизаторах и коммутаторах для обеспечения высокопроизводительных, масштабируемых и программируемых функций маршрутизации.
VPPпроизводительностьПреимущество главным образом связано с используемой технологией векторной обработки сообщений.。По сравнению с традиционной скалярной обработкой сообщений,Векторная обработка сообщений использует идею «классификации».,Классифицировать пакет сообщений в одну категорию,Представлен узлом графа。Этот способ обращенияМожет значительно повысить эффективность обработки, уменьшить задержки обработки и снизить нагрузку на процессор.。
В целом, программное обеспечение Cisco с открытым исходным кодом VPP — это высокопроизводительное, гибкое, масштабируемое и программируемое программное обеспечение для обработки сетевых пакетов, подходящее для различных сценариев применения, включая облачные вычисления, NFV, периферийные вычисления и высокопроизводительное ожидание маршрутизации.
1. FD.io
FD.io (Быстрые данные — ввод/вывод) — это набор множества проектов и библиотек, основанный на DPDK и постепенно развивающийся для поддержки развертывания гибких и изменяемых сервисов на общих аппаратных платформах. FD.io поддерживает несколько платформ (x86, ARM и PowerPC) и развертывается в разных средах (голое железо, виртуальные машины и контейнеры).
Ключевой проект FD.io — VPP (векторная обработка пакетов). VPP — это высокомодульный проект, и недавно разработанные функциональные модули можно легко интегрировать в VPP, не затрагивая базовую структуру кода VPP.
2. VPP
VPP (векторная обработка пакетов) на самом деле представляет собой стек протоколов пользовательского режима, который представляет собой общую плоскость данных. VPP в основном выполняет две функции: расширяемую структуру и развитые функции коммутации/маршрутизации;
VPP работает в пространстве пользователя и поддерживает несколько методов сбора пакетов. Обычно используется DPDK. С точки зрения непрофессионала, *DPDK — это библиотека, а VPP — это приложение* или *VPP использует DPDK для приема пакетов, а DPDK — это плагин VPP*;
Программная среда VPP включает инфраструктурный уровень VPP INFRA, библиотеку векторной обработки VLIB, сетевой уровень VNET и набор подключаемых модулей Plugins.
1. VPP Infra: предоставляет некоторые основные библиотеки функций: включая управление памятью, векторные операции, хеширование, таймер и т. д.;
2. VLIB: в основном предоставляет базовые библиотеки управления приложениями: управление буфером, управление узлами графа, потоки, CLI, трассировку и т. д.;
3. Виртуальная сеть: предоставляет возможности сетевых ресурсов: такие как оборудование, функции L2-4, управление сеансами, управление контролем, управление трафиком и т. д.;
4. Плагины: в основном для реализации некоторых функций, они загружаются при запуске программы. Как правило, в плагин добавляются некоторые узлы для реализации связанных функций.
5. vppInfra: предоставляет некоторые основные библиотеки функций: включая управление памятью, векторные операции, хеширование, таймер и т. д.;
6. VLIB: в основном предоставляет базовые библиотеки управления приложениями: управление буфером, управление узлами графа, потоки, CLI, трассировку и т. д.;
7. Виртуальная сеть: предоставляет возможности сетевых ресурсов: такие как оборудование, функции L2-4, управление сеансами, управление контролем, управление трафиком и т. д.;
8. Плагины: в основном для реализации некоторых функций, они загружаются при запуске программы. Как правило, в плагин добавляются некоторые узлы для реализации связанных функций.
(1) Узлы графа в VPP делятся на четыре типа (четыре механизма ввода-вывода).
VLIB_NODE_TYPE_INTERNAL:Внутренние узлы вызываемого графа,Отвечает за обработку пакетов данных.
VLIB_NODE_TYPE_INPUT:Логический узел приема пакетов,Главное каждый раз Цикл будет вызываться перед итерацией.
VLIB_NODE_TYPE_PRE_INPUT:Вызовите узел графа перед входным узлом,Используется, например, для очистки сетевой карты перед обработкой входящих пакетов.
VLIB_NODE_TYPE_PROCESS:Узлы могут быть приостановлены или возобновлены,Аналогично механизму многозадачного планирования в одном потоке.
(2) Основная структура
vlib_node_main_t:Структура столбца узла графа,Запишите глобальную информацию об узлах графа.
vlib_node_t:Запишите соответствующую статическую информацию об узлах графа.。
vlib_node_runtime_t:Структура, фактически используемая при планировании узлов графа,Состоит из информации в структуре vlib_node_t и частной информации.
vlib_frame_t:Сохраните информацию об адресе памяти данных, которые будут обработаны узлом графа.。
vlib_pending_frame_t:Запишите индекс работающего узла、Индекс пакета и индекс следующего пакета.
vlib_next_frame_t:Запишите следующие данные, которые будут обработаны узлом графа.。
(3) Процесс планирования узла графа
Функция vlib_main_loop отвечает за планирование узлов графа. Вызов функции vpp больше похож на соединение между различными узлами, и путь выполнения всего кода определяется путем определения пути следующего узла прыжка. Вызовы функций таким образом также обеспечивают очень низкую связь, поэтому вторичная разработка на основе этого метода не требует слишком большого внимания к взаимодействию между различными модулями. Пользовательские узлы предоставляют соответствующие функции обратного вызова в соответствии с форматом для вставки пользовательских функций.
3. Файл конфигурации VPP
/etc/vpp/startup.cfg:
4. Платформа плагинов VPP
Трехэтапный процесс установки плагина VPP:
init_plugin ------->> example.c добавляет узел в цепочку
set command ------->> example_node.c
function -------->> example_node.c
В этом исследовании используется версия vpp18.01.2, которая до сих пор скомпилирована в форме make-файла и не была обновлена до VPP19 или выше для использования cmake.
2. Анализ исходного кода
Некоторые файлы в созданном плагине шаблона ссылаются на файлы в нескольких ключевых каталогах библиотеки VPP. Вся программная среда VPP в основном разделена на четыре уровня, порядок выполнения следующий: VPP Infra -> VLIB -> VNET -> Плагины, поэтому кодирование программы будет выполняться на основе макросов VLIB, за которыми следуют макросы, связанные с VNET.
(1) Узел регистрации: VLIB_REGISTER_NODE.
Внутренний узел ck_sample зарегистрирован в VLIB_REGISTER_NODE файла pktdump_node.c.
В pktdump_node.c получите пакет и распечатайте выходные данные.
В VLIB_PLUGIN_REGISTER файла pktdump.c описываются номер версии VPP и описание плагина.
В функции VLIB_INIT_FUNCTION файла pktdump.c создайте экземпляр структуры ck_sample_main_t и назначьте каждый параметр.
(5) Инициализация узла регистрации 2: VNET_FEATURE_INIT
Поскольку VLIB и VNET имеют иерархическую связь вызовов, VNET_FEATURE_INIT в pktdump.c инициализируется для запуска до запуска узла ввода Ethernet. На этом этапе функциональные функции, определенные в VLIB, соединяются через .node_name и .arc_name.
Запустите событие VLIB_CLI_COMMAND (ck_sample_command, static) через командную строку.
Статья взята из CSDN, автор: Dangdangxiang
Оригинальная ссылка:
https://blog.csdn.net/zhpCSDN921011/article/details/124661782