VPP的主要应用场景包括: 1、云计算和数据中心网络:VPP可以与虚拟化和容器化技术结合使用,加速云计算平台中的网络数据包处理。 FD.io的一个关键项目是VPP(Vector Packet Processing:矢量报文处理)。VPP是高度模块化的项目,新开发的功能模块很容易被集成进VPP,而不影响VPP底层的代码框架。 VPP VPP(Vector Packet Processing,矢量数据包处理)其实就是一个用户态协议栈,也就是一个通用的数据平面。VPP主要有两个功能:框架可扩展;成熟的交换/路由功能。 VPP运行于用户空间,支持多种收包方式,常用的是DPDK。通俗来说,*DPDK是lib,VPP是应用*;或者,*VPP用DPDK收包,DPDK是VPP的一个插件*。 二、VPP软件架构 1. 三、VPP配置文件 /etc/vpp/startup.cfg: 四、VPP插件框架 VPP插件的流程“三步走”: init_plugin ------->> example.c把node加入到链当中 set
# 上述命令行来源于vpp dev邮件:https://lists.fd.io/g/vpp-dev/topic/30749806#12636 这里一直有个疑问,本地环境并没有配置大页内存,vpp安装后重启虚拟机时 下面就看看vpp官方文档中的介绍。本文简单翻译了一下。在文档的结尾解答了文章开头的问题。 vpp Huge page翻译 VPP在运行期间需要大页内存。 在VPP安装过程中,VPP将覆盖现有的巨页设置。缺省情况下,VPP将系统的大页数设置为1024*2m大页。这是系统上的大页面数量,而不仅仅是VPP使用的。 安装VPP后,会将vpp配置文件src/vpp/conf/80-vpp.conf拷贝到系统中/etc/sysctl.d/目录下。大页设置应用于VPP安装和系统重新启动时。使用下面的实例设置大页设置。 [root@learning_vpp2 vpp]# cat src/vpp/conf/80-vpp.conf # Number of 2MB hugepages desired vm.nr_hugepages
GTP-U User Plane Function (UPF) based on VPP。 本文主要讲解基于vpp的开源项目upg-vpp的编译安装运行。 1、 upg-vpp 开源地址: 在百度上搜索upf vpp会搜索到开源的项目,但是在readme介绍中,当前版本已经迁移到新的项目上并命名为upg-vpp。 2、下载 git clone https://github.com/travelping/upg-vpp.git 3、编译及安装 进入upg-vpp目录执行make vpp 或make update-vpp /fdio/vpp.git VPP_REPO=https://gitee.com/xxx/vpp.git VPP_BRANCH=master #执行make upte-vpp make update-vpp 执行命令make update-vpp会执行hack/update-vpp.sh脚本 下载vpp源码并打patch。
今天说一说VPP概述汇总,希望能够帮助大家进步!!! 架构:DPDK使用巨页、NUMA、D-cache优化,VPP 的I-cache优化; 算法:Bihash,查表lockless; 代码:Vector 、宏构造函数、结构体cacheline对齐、线程绑核 、指令预取、指令优化; 三、转发流程图谱 3.1 VPP转发图谱 https://blog.csdn.net/icebluechao/article/details/51208811 层二转发图谱: vlib_buffer_get_or_create_free_list 创建默认的缓冲区,dpdk使用了特定的缓冲区的格式,vpp在其头部添加信息使两者相对隔离,给网络栈和空间存储提供了便利。 作为家庭路由器,通过这个例子,可以看到用VPP可以完成路由转发功能。
在前面的章节中,我们讲述了如何编译思科开源的fdio/VPP Ubuntu22.04如何编译vpp-master版本 和介绍了VPP的启动流程介绍 思科VPP系列砖题二:VPP启动流程分析 本章节将要介绍 VPP node的注册机制,在介绍VPP的node机制之前,我们首先介绍一下VPP的软件架构核和设计思想。 软件架构描述:(图片来着腾讯大佬,公众号:Flowlet) 工作原理描述: 矢量图节点的数据处理架构: 矢量处理逻辑描述: 二、VPP节点注册流程 函数名称: void vlib_register_all_static_nodes = { #define _(s,n) [VXLAN_INPUT_NEXT_##s] = n, foreach_vxlan_input_next #undef _ }, }; 具体的流量在vpp 写在最后: 本章节我们主要讲述了 VPP的节点注册流程,讲述节点在初始化的过程中如何注册,和调用逻辑分析,以及以vxlan 节点为例子讲述注册的字段的含义。
learning_vpp1# set interface span GigabitEthernet13/0/0 destination GigabitEthernetb/0/0 both #查询span 在vpp1上trace流程,或在内核ens161接口上抓包。 #1、在vpp2上发起ping报文 ping 192.168.1.2 repeat 1000 interval 4 #2、在内核ens161上能抓取2个ping报文。 可以抓取到ping的请求和回应报文 [root@learning_vpp1 vpp]# tcpdump -nnvv -i ens161 icmp tcpdump: listening on ens161 /jin13417/dpdk-vpp-learning.git
前几天有人在微信群里询问bond相关的一些问题,在上家公司使用过bond功能,但当时是基于vpp 16.9版本。最近看了一下21.10版本的发现差异很大,bond node节点跳转方式完全不同了。 vpp bonding特性支持以下可选项目 1、mode:active-backup。此模式使用主备策略(热备)。 环境组网及配置 1、组网 利用wmware虚拟机搭建bond测试环境,每个虚拟机上存在5个虚拟网卡,其中2个绑定内核(1个用于ssh登录,1个用于和vpp接口连接测试),其余给vpp绑定。 ping 200.1.2.1 在learning vpp2上设置trace流程如下,报文从bond接口GigabitEthernet13/0/0回应。 上基于内核ping 200.1.2.2,在learning vpp2 设置trace流程,只显示从内核回应的reply报文,上从bond接口GigabitEthernet1b/0/0回应。
本文以vpp 20.1版本dhcp处理逻辑来说明: 基本配置 环境组网 vpp dhcp server vnet2 +------ vpp默认是每间隔租期的1/2时间发送一个dhcp request的单播报文(因为此时dhcp server及租约的ip地址都是确定的)。 接口使能dhcp功能, vpp只支持dhcp clinet,不支持配置server,通过下面命令使能 set dhcp client intfc GigabitEthernet0/3/0 在windows 系统是开启wirshark进行抓包vnet2,如下: 下面可以看到每隔30S收到一个client发的续约的请求: 在vpp源码中没有打印clinet端的基本信息,下面使用gdb来查看一下: (gdb dhcp-client-detect ip4-dhcp-client-detect ip4-dhcp-client-detect ip4-reassembly-feature 问题原因:vpp
本篇文章来源于对vpp官方开发文档的个人翻译,有翻译不当的地方欢迎指正。 原文地址: https://fd.io/docs/vpp/master/gettingstarted/developers/metadata.html#buffer-metadata-extensions 我们会详细检查vpp buffer metadata的使用细节,但是需要使用者修改或者扩展方案应该有一定的代码检查。 VNET_BUFFER_F_LOOP_COUNTER_VALID: packet look-up loop count valid VNET_BUFFER_F_LOCALLY_ORIGINATED: packet built by vpp 请使用提供 在vpp核心代码的头文件中添加插件或修改专有metadata数据是不合适的。相反,请按照以下方式进行。
比如可以在vpp中通过show hardware-interfaces命令行来查询虚拟机网卡队列支持情况及网卡卸载、rss能力(当前网卡默认并未开启RSS功能): #下面可以查询接口GigabitEthernetb /0/01已经开启多队列模式 DBGvpp# show interface rx-placement Thread 1 (vpp_wk_0): node dpdk-input: GigabitEthernetb /0/0 queue 0 (polling) Thread 2 (vpp_wk_1): GigabitEthernetb/0/0 queue 1 (polling) #查询接口队列支持能力及网卡卸载及 none #当前已生效的rss能力 tx burst function: (not available) rx burst function: (not available) VPP 还为用户提供了一种集中的方式来注册基于流量配置文件的自定义哈希函数,以用于不同的vpp功能,即Multi-TXQ,软件RSS或接口bonding驱动程序。
在前面的章节中,我们讲述了如何编译和安装思科开源的fdio/vpp Ubuntu22.04如何编译vpp-master版本 有关于如何编译vpp,本章节不做过多的讲述,下面我们主要分析一下VPP这款软件架构的启动流程 ; 下载源码 git clone https://git.fd.io/vpp VPP 初始化描述 在vpp代码中其初始化通过 VLIB_INIT_FUNCTION 宏来定义构造函数(代码路径vpp Vlib_main_loop 函数逻辑介绍: 函数位于:vpp/src/vlib/main.c 函数处理逻辑描述: 1、VLIB_NODE_TYPE_PRE_INPUT:类似DBG_CLI的节点 3、进程等待信号,这个很重要,因为所有的客户端都要通过共享内存和VPP通信。客户端向共享内存发送一些API消息,并且向VPP发送信号(SIGUSR1)。 写在最后: 本文主要讲述了思科开源的,可用于开箱生产的DPDK协议栈软件VPP的初始化流程,时间仓促,难免有疏漏之处,欢迎广大朋友们斧正。
本文章主要是用来描述如何使用vpp来搭建家庭网关。 首先vpp软件简介 VPP 平台是一个可扩展的框架,可提供开箱即用的生产质量交换机 / 路由器功能。 FD.io VPP 使用 DPDK 设备驱动程序和库来实现许多第 1 层的功能。 /vpp.log full-coredump cli-listen /run/vpp/cli.sock startup-config /setup.gate poll-sleep-usec 100 gid vpp } api-segment { gid vpp } dpdk { dev 0000:03:00.0 dev 0000:14:00.0 etc 这对于安装(并可能恢复)新的vpp软件非常方便。
本文章主要讲述思科vpp的Python接口,如果您对网络虚拟化感兴趣,欢迎关注公众号:通信行业搬砖工 ---- 1、VPP Python API VPP - API /python/中的VPP - ---- 2、安装: apt-get install vpp-api-python python3-vpp-api vpp-dbg vpp-dev 没有 pip 的请安装 pip,然后需要安装包 cffi from vpp_papi import VPP # first, construct a vpp instance from vpp json api files # this will there will be no vpp method available before vpp.connect() vpp = VPP(jsonfiles) r = vpp.connect('papi-example = os.environ['VPP'] + '/build-root/install-vpp_debug-native/vpp/share/vpp/api/core'
下来我们就来研究一下vpp的feature机制。 连接成一个有序的向量图,来实现VPP的业务功能,如下图所示: 而早期的VPP本身的node框架比较固定,各个node之间逻辑连接已经固定了。 VPP中,将不同的feature按照类型分成了不同的组,每组feature称之为一个arc。arc中的feature按照代码指定的顺序串接起来。 vpp是动态挂feature的。 2、show node ip4-input 查询当前node节点下feature的信息,node类型、node的状态及索引等。 通过VPP的feature机制,可以在不改变VPP现有框架 下,灵活地增加/删除业务功能。
本文已同步至:个人博客:itwakeup.com微信公众号:vpp与dpdk研习社(vpp_dpdk_lab)前言通过本文你将收获:如何编译和运行vpp简单的配置文件说明dpdk接口配置及L2收发包测试环境说明我的开发环境是 vpp先结束系统执行的vpp进程。 /build-root/build-vpp_debug-native/vpp/bin/vpp -c /etc/vpp/startup.conf方法四:安装rpm/deb包后运行以rpm包为例,根据之前介绍 restart vpp如果想关闭vpp随系统启动(需要时再启),执行以下命令:systemctl stop vppsystemctl disable vpp进入vpp命令行startup.conf可配置通过 '@@@@ Configuring vpp in /data/code/vpp/build-root/build-vpp_debug-native/vpp @@@@CMake Error: Error:
接触fd.io/vpp有大概一年半的时间了,在vpp框架基础上也做过不少项目。 对Vpp的框架也有一些了解但谈不上深入。因为公司业务调整,最近也要换一份工作,后面很有可能不再基于vpp二次开发。今天参考vpp官网文档,也做一个简单的总结吧。 vpp简介 VPP:(the vector packet processor)是一个可扩展框架,可提供开箱即用的交换机/路由器功能。 Vpp 分层实现 1、VPP Infra ( VPP infrastructure layer 基础结构层) 提供一些基本的通用的功能函数库:包括内存管理,向量操作,hash, timer Vpp add plugins vpp给开发者提供了一套工具,自动生成plugins框架,并将其添加到vpp框架中。
ifconfig ens256 192.168.2.2/24 route add -net 192.168.3.0/24 gw 192.168.2.1 trace流程 Vm2 ping vm1 ,分别在vpp 和vpp2 抓trace流程 00:34:05:585797: dpdk-input GigabitEthernet4/0/0 rx queue 0 buffer 0x84cf2: current 1、在配置vm1和vm2同网段测试中,发现vpp1上arp请求报文被丢弃,并没有bd域中泛洪,导致同网段通过vxlan隧道互通测试失败。 巨人的肩膀 1、华为Vxlan最全介绍 https://support.huawei.com/enterprise/zh/doc/EDOC1100087027 2、Vpp vxlan功能介绍 https ://wiki.fd.io/view/VPP/Using_VPP_as_a_VXLAN_Tunnel_Terminator 3、FD.IO-VPP研究及使用五 (隧道环境搭建) https://blog.csdn.net
对vpp自带的log模块了解很少,但是功能开发总是因为log的缺失导致问题很多定位。所以有必要了解一下log模块的记录。 unix 字段下log: unix { nodaemon log /var/log/vpp/vpp.log full-coredump cli-listen /run/vpp/cli.sock gid vpp startup-config /etc/vpp/start.txt } 这个log应该记录的是vppctl命令行所有操作信息,在定位一些配置下发过程引发的问题时,比较有用。 默认在系统/var/log并没有vpp的目录。需要自己手动创建一个,否则在启动时会报下面的错误,导致不会记录日志。 unix_config:463: couldn't open log '/var/log/vpp/vpp.log' #文件夹记录日志举例。
简介 先看一下vpp代码中特性的描述信息:创建一个pipe设备接口,该接口可以将管道一端的数据包双向传递到另一端。虽然在行为上类似于unix pipe,但它不是基于主机的管道。目前代码就三个文件。 vlearning_vpp1# show interface Name Idx State MTU (L3/IP4/IP6/MPLS) 提示错误如下: learning_vpp1# ping 192.168.100.2 table-id 1 Failed: no source address for egress interface l2 bridge pipe0.0 1 set interface l2 bridge pipe0.1 2 在vrf1中pingvrf2中loop1接口ip地址可以ping通. learning_vpp1 fragment id 0x3dd4, flags DONT_FRAGMENT ICMP echo_reply checksum 0x522b id 5000 关键处理流程如下: 总结: 本文简单说明vpp
具体如下: 2、基本配置: 1、vpp配置如下: #wan接口状态设置up并使能dhcp clinet。 learning_vpp2# bin dns_name_server_add_del 114.114.114.114 learning_vpp2# show dns servers ip4 name learning_vpp2# show dns cache verbose DNS cache contains 3 entries [P] www.dpdk-vpp.top: www.dpdk-vpp.top learning_vpp2# dns cache add www.dpdk-vpp.top 39.106.10.127 #查询dns cache learning_vpp2# show dns cache verbose DNS cache contains 4 entries [P] www.dpdk-vpp.top: www.dpdk-vpp.top: