Серия специальных тем Cisco VPP, тринадцать: Анализ примера подключаемого модуля Vpp
Серия специальных тем Cisco VPP, тринадцать: Анализ примера подключаемого модуля Vpp

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*;

2. Архитектура программного обеспечения VPP

1. Инфраструктура

Программная среда 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. Плагины: в основном для реализации некоторых функций, они загружаются при запуске программы. Как правило, в плагин добавляются некоторые узлы для реализации связанных функций.

3. Планирование узлов графа VPP

(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

1. Структура каталогов шаблонов плагинов.

В этом исследовании используется версия 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.

(2) Функция реализации функции узла: VLIB_NODE_FN

В pktdump_node.c получите пакет и распечатайте выходные данные.

(3) Зарегистрируйте имя и описание плагина: VLIB_PLUGIN_REGISTER.

В VLIB_PLUGIN_REGISTER файла pktdump.c описываются номер версии VPP и описание плагина.

(4) Инициализация узла регистрации 1: VLIB_INIT_FUNCTION

В функции 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.

(6) Команда CLI и активация зарегистрированного узла: VLIB_CLI_COMMAND

Запустите событие VLIB_CLI_COMMAND (ck_sample_command, static) через командную строку.

(7) Сводная блок-схема

Статья взята из CSDN, автор: Dangdangxiang

Оригинальная ссылка:

https://blog.csdn.net/zhpCSDN921011/article/details/124661782

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose