首页 > 其他分享 >Vector Packet Processor(VPP)使用简介

Vector Packet Processor(VPP)使用简介

时间:2023-08-01 22:31:36浏览次数:42  
标签:VPP ## Packet Vector dev interface 数据包 vpp

Author [email protected]

Date Aug. 01, 2023

Description VPP的简介以及安装

简介

最早的VPP是由Cisco提出来的,不过现在已经开源了。

FD.io的Vector Packet Processor(VPP)是一个快速、可扩展的2-4层多平台网络协议栈,可以运行多种架构的如x86\ARM\Power架构的Linux用户空间。它期望提供的是可扩展的、开箱即用的交换机或者路由器功能。

VPP是高性能的网络协议栈,可以通过使用插件来扩展功能。DPDK(Data Plane Development Kit)是最常用的数据面插件,为VPP提供了非常重要的功能和驱动。DPDK同样是运行在用户空间,提供高速的包处理函数以及用户空间的驱动。其实就是把数据包从Linux内核态玻璃了出来,DPDK以较小的CPU周期接受和发送数据包。DPDK使用的是用户态poll mode驱动。

VPP支持和OpenStack或者Kubernetes集成。网络管理功能包括配置、计数器、采样等。对于开发者,VPP包含了高性能事件日志以及多样的包跟踪。开发调试功能包含完整的符号表以及大量的一致性检验。

使用VPP的例子很多,例如vSwitches,vRouters,Gateways,Firewalls以及负载均衡等。

VPP向量处理数据包,即以批处理的方式处理,每个批处理叫做向量,一次性可以处理256个之多的数据包,这最大化的使用了缓存命中。而标量处理(顺序处理)的数据包,可能就会超出缓存,造成频繁的缓存换入换出。

VPP平台包含一系列的有向图节点构成,这个有向图称为数据包处理图。每个节点向数据包提供了特定的网络功能,每个有向边指示了下一个处理该数据包的网络功能。对于向量中的所有数据包,只有第一个数据包需要加载CPU指令到内存中。

编译安装VPP

可以查看具体需要安装的版本,我们这里使用23.06。

# The base home directory
cd /usr/local/src
# Get the VPP Sources
git clone https://gerrit.fd.io/r/vpp
cd vpp
git checkout v23.06 # 最新的稳定版本
make install-deps
make build
cd build-root
make install-extra-deps
make pkg-deb
sudo dpkg -i build-root/*.deb

不确定安装的是啥,可以去build-root下看看有哪些deb文件。

配置文件

默认的配置文件安装在了/etc/sysctl.d/80-vpp.conf以及/etc/vpp/startup.conf/startup.conf。 前者是配置DPDK的巨页,后者是配置VPP。

启用巨页,使用

sysctl -p /etc/sysctl.d/80-vpp.conf

VPP配置文件中的我们就在配置文件的注释中写了。

unix {
  nodaemon              # 不在后台运行
  log /tmp/vpp.log      # 日志文件
  full-coredump         # 调试coredump
  interactive           # 启用交互模式,也就是使用CLI
}

api-trace {
  on
}

api-segment {
  gid vpp
}

cpu {
     ## In the VPP there is one main thread and optionally the user can create worker(s)
        ## The main thread and worker thread(s) can be pinned to CPU core(s) manually or automatically

        ## Manual pinning of thread(s) to CPU core(s)

        ## Set logical CPU core where main thread runs
        main-core 1

        ## Set logical CPU core(s) where worker threads are running
        # 使用了4个worker线程,2,3,22,33
        corelist-workers 2-3,22-23
}

dpdk {
        ## Change default settings for all intefaces
        # dev default {
                ## Number of receive queues, enables RSS
                ## Default is 1
                # num-rx-queues 3

                ## Number of transmit queues, Default is equal
                ## to number of worker threads or 1 if no workers treads
                # num-tx-queues 3

                ## Number of descriptors in transmit and receive rings
                ## increasing or reducing number can impact performance
                ## Default is 1024 for both rx and tx
                # num-rx-desc 512
                # num-tx-desc 512

                ## VLAN strip offload mode for interface
                ## Default is off
                # vlan-strip-offload on
        # }

        ## Whitelist specific interface by specifying PCI address
        # 这个记者要使用dev来绑定dpdk接管的网络接口,可以给其一个别名
        # 别名的用途就是不会以路由器接口的名字形式来显示了
        dev 0000:00:09.0 {
                name ens802f0
        }
        dev 0000:00:0a.0 {
                name ens802f1
        }

        ## Whitelist specific interface by specifying PCI address and in
        ## addition specify custom parameters for this interface
        # dev 0000:02:00.1 {
        #       num-rx-queues 2
        # }

        ## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci
        ## and uio_pci_generic (default)
        # uio-driver vfio-pci
}

# Adjusting the plugin path depending on where the VPP plugins are:
# 插件的配置,默认是都启用的,如果不启用还需要配置default为false。
plugins
{
        path /usr/lib/vpp_plugins
}

这并没有结束,还需要进入vppctl进行其它的如ip地址的配置。如果使用linux-cp插件,那么就能把用户空间的接口映射到内核中去,和DPDK KNI有些像。这样就可以使用Linux的命令来操作了。

loopback create-interface
set interface state loop0 up
set interface state ens802f0 up
set interface state ens802f1 up
set interface ip address ens802f0 10.10.1.1/24
set interface ip address ens802f1 10.10.2.1/24

接下来就可以通过ping的方式检查下配置是否成功了。建议拓扑使用至少两台机器(不然你也不会需要这样使用VPP了)。一台配置VPP,一台就是普通的linux。对于普通linux,在测试的时候,还需要配置它的地址。假设我们采用如下的拓扑。csp2s22c03是配置了VPP,另外两台则是普通的Linux机器。那么如果想要csp2s22c04 ping csp2s22c05,那么就需要给csp2s22c04和csp2s22c05分别配置默认路由。

image.png

# csp2s22c04
sudo ip address add 10.10.1.2/24 dev ens802
sudo ip route add 10.10.2.0/24 via 10.10.1.1 dev ens802

# csp2s22c05
sudo ip address add 10.10.2.2/24 dev ens803f0
sudo ip route add 10.10.1.0/24 via 10.10.2.1 dev ens803f0

至于使用iperf3还是其它的测试吞吐,请自行琢磨吧。

参考

  1. What is the Vector Packet Processor (VPP)
  2. What is VPP
  3. Build a Fast Network Stack with Vector Packet Processing (VPP) on an Intel® Architecture Server

标签:VPP,##,Packet,Vector,dev,interface,数据包,vpp
From: https://blog.51cto.com/u_12639411/6929458

相关文章

  • 《向量数据库指南》——2023年7月国产向量数据库排行榜Top3:Milvus,Milvus Cloud,Tencent
    向量数据库排行榜分析报告随着人工智能和大数据技术的不断发展,向量数据库在各个领域的应用越来越广泛。向量数据库是一种存储和管理大规模向量数据的数据库,具有高效的数据查询和分析能力,是人工智能领域的重要基础架构。在本文中,我们将对2023年7月的国产向量数据库排行榜进行分析和......
  • 【数据结构】vector用法
    1.初始化:vector<类型>标识符vector<类型>标识符(最大容量)vector<类型>标识符(最大容量,初始所有值)inti[5]={1,2,3,4,5}vector<类型>vi(i,i+2);//得到i索引值为3以后的值vector<vector<int>>v;二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过2.常......
  • 【ACM专项练习#02】整行字符串、输入vector、打印图形、处理n组数据以及链表操作等
    输入整行字符串平均绩点题目描述每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。输入有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。输出每组输出结果占一行。如果输入的大......
  • 重新定义:全新应用XPackets
    X·PacketsX·Packets是著名的文件搜索工具Everything的迭代品X·Packets相比Eveything,多了针对Windows文件资源管理器的一些GUI适配,若您安装了虚拟机VMware,也同时搜索虚拟机中的文件及应用同时,也装载宏编译,以达到更好的效果现在,X·Packet处于开发中,由TheMuggle开发......
  • vector的用法
    1.打印函数12template<typenameContainer>13voiddisplay(Container&con){14for(auto&elem:con){15cout<<elem<<"";16}17cout<<endl;18}......
  • 110.vector
    110.vector1.vector概述vector是最常用的容器之一,功能十分强大,可以储存、管理各种类型的数据。在很多情况下可以用来代替功能比较局限的普通数组,因为我们知道,普通数组只能实现一对一的映射而不能实现一对多的映射,vector就是专门为了解决这个问题而诞生的。vector也可以称为动态......
  • 类中的vector初始化
    (21条消息)vector在类中声明问题_c++应输入类型说明符_线上幽灵的博客-CSDN博客在类中,vector不可以直接用下面的方式初始化 这应该是因为编译器无法知道这是函数还是vector定义,可以通过base(){a.resize(10)}或者base():a(10,1){}这种方式再初始化......
  • 【linux】gcc编译选项:-fomit-frame-pointer,-fno-tree-vectorize,-fno-strict-aliasing
    Date:2018.9.81、参考https://www.cnblogs.com/islandscape/p/3444122.htmlhttps://blog.csdn.net/chdhust/article/details/8462414https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc.pdfhttps://blog.csdn.net/u012927281/article/details/50999138https://blog.csdn.net/sof......
  • vector最大流试预习
    最大流预习目录最大流预习前情提要:EK算法流程重要代码实现:1.vector怎么快速找反向边呢?2.已知u,v,两者我都不知道具体存储位置怎么办?3.去重怎么办?4.最后一定记住bfs及其小细节即可!前情提要:看看人家初中,早就学完最大流最小割,还在最小费用流了,我却从来没有正式接触过太丢脸了吧所......
  • vector 容器的容量(capacity)和大小(size)之间的区别
    vector容器的容量(用capacity表示),指的是在不分配更多内存的情况下,也就是事先分配好内存大小,如果不超出容量即便有新的元素加入也不会分配内存空间;容器可以保存的最多元素个数;而vector容器的大小(用size表示),指的是它实际所包含的元素个数。对于一个vector对象来说,通过该......