编译安装VPP及运行

38 篇文章 19 订阅
订阅专栏

本文基于VMware虚拟机环境,详细请参考 本文源站地址。

操作系统:CentOS7.6 Linux version 3.10.0-957.27.2.el7.x86_64

适用VPP版本:19.08-20.05,本文示例版本19.08

操作用户权限:root

  • 系统驱动如果支持MSI-X,就无法使用驱动uio_pci_generic,必须使用vfio-pci。
  • 在没有IOMMU的系统上,vfio驱动也能被用到 内核4.15.0-33-generic kernel (Ubuntu 18.04)非iommu模式下。
  • 下载地址:
    gerrit: https://gerrit.fd.io/r/admin/repos/vpp
    GitHub: https://github.com/FDio/vpp
#例如下载某分支
git clone -b stable/2001 https://github.com/FDio/vpp.git

1. VPP构建安装

1.1 下载VPP及编译

首先附上官方文档

  • Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code
  • https://docs.fd.io/vpp/20.01/

  如果读者采用git克隆master版本,最好切换到稳定发布版本再进行编译,如下图,然后git checkout XXX。
vpp版本

  也可以直接克隆稳定分支,采用SSH协议 git clone -b stable/1908 "ssh://XXX@gerrit.fd.io:29418/vpp",XXX表示用户登录账号。

  根据版本运行如下命令。因为不同版本编译方式会有细微改变,可以通过vpp源码目录中运行make查看命令帮助。例如18.07版本集成dpdk,需要执行make dpdk-install-dev来安装运行DPDK来辅助VPP。

# if vpp<08.10
make install-dep
make bootstrap
make build        # or `make build-release`

# vpp 08.10+ (cmake)
make install-dep
make install-ext-deps
make build        # or `make build-release`

#make pkg-rpm    用于构建vpp的rpm安装包

  本文采用19.08版本VPP编译,目前编译操作方式也适用于版本20.05,最后一步make build编译好DEBUG版本后,可以在/root/vpp/build-root下面看到生成目录install-vpp_debug-native/vpp以及build-vpp_debug-native/vpp目录,其中第一个目录为运行安装文件目录,所有编译好的运行及配置等文件已准备好;第二个目录为编译时运行目录,里面很多编译过程中采用的文件。

1.2 问题排查

  • 问题1 如果make install-dep步骤遇到–skip-broken问题,是依赖包版本冲突问题,需要删除对应版本冲突包,yum remove XXX,再进行make install-dep即可。

  • 问题2 编译工具缺失,出现如下问题

CMake Error at CMakeLists.txt:4 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.
make[3]: *** [/root/vpp-20.01/build/external/rpm/tmp/.quicly.build.ok] Error 1
make[3]: Leaving directory `/root/vpp-20.01/build/external'
错误:/var/tmp/rpm-tmp.J9OIpD (%install) 退出状态不好

解决方法 安装gcc-c++模块,执行yum install gcc-c++

2. 配置运行vpp

2.1 关闭待接管网卡接口

  关闭计划用dpdk接管的网卡接口,并查询其pci端口号,可以通过lspci |grep Ethernet查看。此时需要确认本机物理网卡或虚拟网卡为DPDK支持类型,查询网址 https://core.dpdk.org/supported/

ifconfig ens34 down

2.2 安装NIC网卡驱动模块

  为了正常工作,不同物理介质关联层接口(PMD)可能需要不同驱动程序。取决正在使用的PMD,同时加载对应的内核驱动并绑定网络端口。这里网卡可加载模块驱动类型包含uio_pci_generic、igb_uio、vfio-pci等。

注意:

  • 作为uio_pci_generic替代方案,DPDK包含igb_uio模块。对于一些不支持传统中断的设备,例如虚拟化功能(VF)设备,可能需要使用igb_uio來代替uio_pci_generic。

  • 如果启用UEFI安全引导,则Linux可能会禁止在系统上使用UIO。因此,由DPDK使用的设备应绑定到vfio-pci内核模块,而不是使用igb_uio或uio_pci_generic。 VFIO内核模块自Linux内核3.6.0版以来已包含在内核中,通常是默认存在的,请查阅您的发行版文档以确保是这样的。此外,要使用VFIO,内核和BIOS必须支持并配置为使用IO虚拟化(如Intel®VT-d)

  因为虚拟机的系统内核为3.10,内置vfio,所以直接加载vfio-pci。读者可根据实际情况选用uio_pci_generic/igb_uio/vfio-pci等。(如果igb_uio,需要单独编译dpdk获取igb_uio.ko,并采用命令insmod igb_uio.ko进行安装)

#0.启动对应驱动模块,此处选用vfio
modprobe vfio
modprobe vfio-pci
#modprobe igb-uio
#modprobe uio_pci_generic

#1.如果采用vfio,启动非安全NO IOMMU模式(仅在系统没有IOMMU时) ,启动该选项VPP可自动接管网卡显示在vppctl中
echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode

2.3 设置大页存储(可选步骤,可后期配置)

# 分配巨页1024*2M=2G
echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# 后面方法也可行sysctl -w vm.nr_hugepages=2048
# 查看大页分配数目
cat /proc/meminfo| grep Huge

2.4 接口绑定驱动(建议执行步骤,可不选)

  本步骤主要用于检验物理网口是否DPDK驱动是否接管网卡成功,首次使用时一定要执行,具体绑定及几种驱动理解也可参考作者另一篇文章 DPDK编译及使用,也可参考 VPP官方相关文档。
  创建网卡接口时可选用指定接口来创建。通过驱动vfio-pci绑定网卡pci端口,-b表示–bind的意思;0000:0b:00.0是当前物理机或虚拟机采用的网卡pci端口号。

#0.查询网卡物理地址
lspci |grep Ethernet
#或采用如下命令
sudo lshw -class network -businfo
#回显返回02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01),其中02.05.0为物理地址。

#1.绑定接口到vfio-pci
cd /root/vpp/extras/vpp_config/scripts/
./dpdk-devbind.py --bind vfio-pci 0000:02:05.0    //将物理网卡绑定驱动
#也可执行./dpdk-devbind.py --bind vfio-pci ens34
./dpdk-devbind.py --status               //查看网卡使用驱动状态

  如果绑定网卡出现问题,通过dmesg|grep -i vfio-pci检查错误信息。实验中总是绑定网卡失败错误码-22,表示无效参数。最后证明是驱动不支持网卡类型,或者是DPDK不支持. 排错时首先需要确认IOMMU。

# 修改系统内核启动参数,重启系统,查看是否开启IOMMU
$ dmesg | grep -e DMAR -e IOMMU
[ 0.000000] DMAR: IOMMU enabled

# 查看是否开启intel-vt-x/vt-d
$ cat /proc/cpuinfo | grep vmx

  这里重点是,一定要启动intel-vt(IOmmu)或AMD-V!!!-22错误一般都是它没有开启。解决方法如下依次列出,读者可以根据情况尝试。

  • 开机后按F12进入BIOS界面打开VT-x和VT-d;

  • 若虚拟机,点击设置,处理器,并开启VT-x等;若无法打开,需要提高内存分配;有些需要在虚拟机选项上配置,右键单击虚拟机(关机状态)-》设置-》处理器-》虚拟化引擎标签栏中,选中 启动虚拟化IOmmu。IntVT_amdV

  • 在Linix内核启动选项设置intel_iommu=on;
      在参考许多教程之后,他们会要求你改变grub文件 /boot/grub/grub.conf,但在Centos7中路径为/etc/default/grub或/etc/sysconfig/grub。在内核中激活Intel VT-d。通过将intel_iommu = on参数附加到grub.conf文件中内核行的内核行来激活内核中的Intel VT-d。通过vi /etc/default/grub编辑器修改,修改GRUB_CMDLINE_LINUX=的参数最后增加一条intel_iommu=on.

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on"//添加配置信息iommu=pt intel_iommu=on"
    

    然后使用dracut重新生成grub配置:

    yum install grub2
    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    sudo reboot
    

相关参考来源

  • https://blog.51cto.com/14207158/2352319
  • https://www.cnblogs.com/vancasola/p/9378970.html
  • https://fd.io/docs/vpp/master/usecases/vhost/vhost.html
  • https://blog.51cto.com/10017068/2107562

2.5 配置vpp(建议执行步骤,可不选)

  如果采用rpm包安装,默认配置文件位置为/etc/vpp/startup.conf。如果采用编译安装方式安装,配置文件位置为/root/vpp/build-root/install-vpp_debug-native/vpp/etc/vpp/startup.conf。

cd /root/vpp/build-root/install-vpp_debug-native/vpp     //该路径为生成vpp的安装路径
vim ./etc/vpp/startup.conf                               #添加如下内容
    dpdk {
        uio-driver auto             #设置网卡驱动类型,vpp会根据情况自动判断并接管网卡
        dev 0000:02:05.0 {name G0}  #根据命令查看lspci |grep Ethernetpci接口修改
        dev 0000:02:06.0 {name G1}
        socket-mem 1024
    }

  读者可以先不采用步骤3,初次使用VPP或DPDK一定请执行第4步,第5步可以视情况修改对应配置,例如网口端口名称,cli入口,cpu,存储等。

2.6 启动vpp

  1. 如果采用rpm安装包安装VPP,可以通过修改/etc/vpp/startup.conf之后,然后systemctl start vpp启动服务。如果想要VPP自动加载并接管网卡,需要先down掉网卡,然后采用命令systemctl restart vpp重启VPP后,稍等数秒采用命令vppctl登录。

  2. 如果采用编译源码安装方式,可以执行如下命令

cd /root/vpp/build-root/install-vpp_debug-native/vpp
./bin/vpp -c ./etc/vpp/startup.conf &
#按住ctrl+C退出该服务

2.7 创建网卡接口及IP地址

  通过vppctl控制台登录服务进行管理

cd /root/vpp/build-root/install-vpp_debug-native/vpp
./bin/vppctl

  登录vppctl控制台后, 如下图所示,表示登录进入控制台。大多情况下vpp可识别端口并动态创建好,仅需up启动即可。如果没有创建好,通过手动绑定,或重启vpp服务来获取绑定网卡。

vppctl

  通过命令查询pci接口,并进行端口创建。

showpci

  我们可以通过命令行接口(CLI)动态创建网络接口,而不用配置文件绑定。如执行上述4、5步骤配置pci接口,则下面代码可以忽略。

#个别驱动通过该命令执行
create interface avf 0000:02:06.0
set int state G1 up

显示端口并配置ip

show int        #显示所有网络接口
set int state G0 up   #启动网络接口
set int ip address G0 192.168.2.2/24    #网络接口设置IP
show int address    #显示所有网络接口地址
show hardware       #显示所有网络接口物理状态
show ip arp         #显示arp信息
show ip fib         #显示fib表相关路由信息
Ubuntu 16.0.4从源码编译安装VPP
qq_44768749的博客
11-24 1479
这里写自定义目录标题Ubuntu 16.0.4从源码编译安装VPP操作系统与源码依赖获取源码安装依赖项CMake移除之前的安装安装依赖的软件包可能遇到如下问题解决方法编译运行合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 Ubuntu 16
在虚拟机上编译安装运行VPP
12-24
如何在虚拟机上编译安装运行VPP
VPP编译安装运行
hhd1988的专栏
06-25 3175
VPP编译安装运行
开源项目 UPG-VPP 安装与使用指南
最新发布
gitblog_00066的博客
08-24 840
开源项目 UPG-VPP 安装与使用指南 upg-vppUser Plane Gateway (UPG) based on VPP项目地址:https://gitcode.com/gh_mirrors/up/upg-vpp 项目概述 UPG-VPP 是一个基于 GitHub 的开源项目 travelping/upg-vpp,它旨在提供高性能网络处理解决方案,利用VPP(Vector Packet...
VPP编译运行
qq_36381626的博客
07-23 234
vpp学习
VPP编译安装及测试
AcTarjan的博客
07-25 1059
测试环境:主机1(172.20.10.37/24) 和 主机2(172.20.10.38/24)各使用VPP接管10G网卡,两网卡通过光纤直连。(注:上述ip是在VPP网络下的):VPP Communication Library,VCL可以在不修改应用的情况下,使应用访问VPP网络。说明:VPP网络和内核网络是独立的(不通的),有两套路由和网络。下图是绑定成功后结果。
vpp 2101 编译安装运行
weixin_43941593的博客
02-16 2838
参考 官网 FD.io/VPPVPP安装部署 一、下载源码 排查之前是否安装vpp/dpdk并卸载 dpkg -l | grep vpp dpkg -l | grep DPDK 下载后切换分支到2101上。master容易编译不过。 $ apt-get update $ git clone https://gerrit.fd.io/r/vpp $ cd vpp $ git checkout stable/2101 如果git时出现server certificate verificati
ubuntu20.04编译生成的vpp包以及依赖包
12-08
ubuntu20.04编译生成的vpp包以及依赖包,可以实现离线安装
ubuntu18.04编译生成的vpp包以及依赖包
12-08
- 安装:使用`sudo make install`将VPP及依赖安装到系统路径。 4. **离线安装** 提供的压缩包包含了所有编译后的VPP组件和其依赖项,使得用户可以在没有互联网连接的环境中安装VPP。首先,将压缩包解压到目标系统...
Ubuntu虚拟机上VPP编译安装运行指南
这个过程会自动下载安装必要的编译工具,并按照依赖顺序编译VPP的不同模块,最终生成.deb格式的安装包。编译过程产生的所有文件会被保存在`build-root`目录。 安装时,切换到`build-root`目录并使用`sudo dpkg -i...
vpp2101交叉编译方法
guoqixin2008的专栏
01-10 1412
1环境和条件: 1.1开发机: CentOS Linux release 8.3.2011 Linux localhost.localdomain 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 1.2目标机: Linux Switch 3.14.57_v1.0 #2 SMP Mon May 17 18:29:08 CST 2021 aarch64_..
VPP 】将编译好的VPP安装到系统
roshy的专栏
10-07 113
编译好的VPP安装到系统中。
vpp安装
记录工作的点滴收获
04-23 572
记录从0开始安装vpp的基础开发环境,尝试在vpp基础上进行2次开发
CentOS下的VPP编译运行
gbbfum的博客
12-03 1348
代码下载 git clone https://github.com/FDio/vpp.git [root@localhost vpp]# git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/map-fib remotes/origin/master remotes/...
VPP学习——安装(一)
weixin_44729198的博客
03-20 2425
ubuntu虚拟机安装VPP+DPDK
centos7编译源码安装vpp
zby枣菠鱼的博客
11-26 2691
本次编译源码用的系统是centos7.9,内存40G的服务器(编译源码内存需要大于4G,4G内存编译出错,推荐8G)。环境为联网环境,因为下载的依赖包和安装包比较多,最后生成的rpm包可以进行无网安装,最后生成的rpm包适用于centos7和centos8,亲测centos8也能安装成功。 一。下载源码 二。安装依赖 三。编译源码 四。生成rpm包 五。rpm包安装vpp 六。问题记录 一。下载源码 1.git clone -b master https://github.com/FDio/vpp.git
VPP2101 编译步骤和常用命令
paopaolele的博客
04-27 1113
2101为例: 环境: 1个处理器2个核,内存8G,硬盘60G; 升级kernel 参考:https://www.cnblogs.com/xzkzzz/p/9627658.html 设备启动后增加一条默认路由 route add default gw 192.168.222.2 1. 编译过程: $ git clone https://gerrit.fd.io/r/vpp (如需特性版本可回退到特性版本) git reset --hard 3d2d96e5547484290c9368bac0...
vpp源码之Makefile分析(编译调试)
u012919476的博客
12-25 1084
下面是vpp的命令: [root@localhost vpp-18.07]# make Make Targets: install-dep - install software dependencies wipe - wipe all products of debug build wipe-release - wipe all ...
Cisco VPP 编译
迷失的专栏
02-27 3555
VPP介绍 FD.io(Fast data - Input/Output)是Linux基金会旗下的又一开源项目,其成立于2016年2月11日。该项目在通用硬件平台上提供了具有灵活性、可扩展、组件化等特点的高性能IO服务框架,用以迎接下一个网络和存储浪潮。该框架支持高吞吐量、低延迟、高资源利用率的user space IO服务,并可适用于多种硬件架构(x86, ARM, and PowerP...
写文章

热门文章

  • NDK版本、获取以及和ANDROID对应关系 41351
  • CentOS8系统配置国内yum源 39527
  • SRv6技术课堂:SRv6概述 33543
  • 逻辑视图、实现视图、进程视图、部署视图和用例视图 28494
  • CMake编译中target_link_libraries中属性PRIVATE、PUBLIC、INTERFACE含义 28120

分类专栏

  • VNF/SDN 38篇
  • SRv6 4篇
  • BGP 8篇
  • FRR 3篇
  • Server 8篇
  • Shell 4篇
  • IPC 1篇
  • Compile 7篇
  • Docker 4篇
  • Network 24篇
  • Alpine 1篇
  • Cloud 13篇
  • 系统架构 14篇
  • Codes 3篇
  • C/C++ 13篇
  • Boost 4篇
  • Golang 10篇
  • MYSQL 1篇
  • Others 11篇
  • MQTT 3篇
  • Wordpress 1篇
  • GIT 8篇
  • ANDROID 2篇

最新评论

  • Linux创建操作网桥的两种命令及持久化

    CSDN20200515: NM_CONIROLLED=no写错了,应该是NM_CONTROLLED=no

  • Linux创建操作网桥的两种命令及持久化

    CSDN20200515: vim ifg-enp1s0 NM_CONIROLLED=no

  • CentOS8系统配置国内yum源

    m0_57521394: 3. 配置清华源Centos8 $ vi /etc/yum.repos.d/CentOS-cnnic.repo CentOS-cnnic.repo这个文件是新建的还是在第二步生成的?

  • CentOS8系统配置国内yum源

    2401_82739502: 唔?完了,没有wget

  • BGP学习总结笔记

    L17310780371: 补充下 从ebgp 学习的路由会传递给所有对等体

大家在看

  • 《 C++ 修炼全景指南:十六 》玩转 C++ 特殊类:C++ 六种必备特殊类设计的全面解析 2214
  • 【计算机毕业设计选题推荐】基于python的重庆旅游景点数据分析系统的设计与实现 【附源码+数据库+部署】
  • c++实现简单的Socket套接字 203
  • 【算法】小红的ABC 91
  • 我与C语言二周目邂逅vlog——8.编译和链接

最新文章

  • gRPC的Golang编译及简单使用
  • Golang数组和切片区别及切片扩容
  • BGP建立连接问题排查
2021年4篇
2020年78篇
2019年50篇

目录

目录

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢雕塑产品资料淄博玻璃钢雕塑订制价格商场美陈夜景太湖石校园玻璃钢雕塑制作黄石人物玻璃钢雕塑玻璃钢象雕塑商场美陈质量安全方案河南玻璃钢浮雕喷泉雕塑设计青岛雕塑玻璃钢华1邯郸玻璃钢仿真水果雕塑杭州玻璃钢佛像雕塑定制海南玻璃钢雕塑销售市场侯马玻璃钢座椅雕塑泰州玻璃钢雕塑厂家云县玻璃钢雕塑厂家潮州古代玻璃钢雕塑上海走廊商场美陈多少钱商场美陈和道具邯郸户外玻璃钢雕塑全国有多少家玻璃钢雕塑厂家天门玻璃钢考拉雕塑定制松原玻璃钢卡通雕塑闵行区拉丝玻璃钢雕塑品牌企业蜗牛玻璃钢雕塑现货新蔡玻璃钢雕塑威海玻璃钢人物雕塑价格湛江玻璃钢卡通雕塑加工厂家成都玻璃钢雕塑制作厂玻璃钢大碗雕塑驻马店玻璃钢卡通雕塑厂家价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化