vpp安装运行

2022-11-22 213061 编程学习

有2点:

1、如果编译完没有dpdk,比如没有igb_uio.ko,可以自己编译安装,见我另一篇博文

2、vpp编译出来的RPM安装后,一定要根据个人及其情况进行配置,不要直接reboot,可能导致起不来

/etc/sysctl.d/80-vpp.conf (重要,设置大页) 和 99-systl.conf

/usr/lib/sysctl.d/00-system.conf 和 50-default.conf

3、必须的vpp rpm包:vpp-lib 、 vpp-plugins 、vpp


以下是拷贝的网络上兄弟的,可参考

========================编译安装===============================

编译安装 参考http://blog.csdn.net/icebluechao/article/details/51208560
编译安装运行参考http://blog.csdn.net/shaoyunzhe/article/details/53096932
1、 下载代码: git clone https://gerrit.fd.io/r/vpp
2、  进入目录并且查找更新依赖: cd vpp; make install-dep;
3、  生成Makefile: cd vpp/build-root;make distclean;./bootstrap.sh;

-----4、  进行编译:make V=0 PLATFORM=vpp TAG=vpp install-rpm;或者make V=0 PLATFORM=vpp TAG=vpp install-deb;

4、 cd vpp, 执行make,如下图所示


开发一般编译测试版,执行make build编译vpp主程序,执行make plugins编译插件,make wipe清除,带有release的就是发型版本了。dpdk不用专门下载,在执行make build的时候会自动下载dpdk到vpp/dpdk目录下。

只要执行make build和make plugins后,vpp基本就编译成功了

编译成功后vpp位置: vpp/build-root/install-vpp-native/vpp/bin/vpp

编译成功后插件位置:vpp/build-root/install-vpp-native/plugins/lib64/vpp_plugins/

igb_uio.ko位置:vpp/build-root/install-vpp-native/dpdk/build/lib/librte_eal/linuxapp/igb_uio/igb_uio.ko

vpp/build-root/install-vpp-native/dpdk/kmod/igb_uio.ko

igb_uio.ko可以说是dpdk编译后生成的网卡驱动,vpp好像不能自动加载igb_uio.ko,需要自己手动加载insmodigb_uio.ko

vpp运行加载插件默认位置是/usr/lib/vpp_plugins/ ,没有yum安装过vpp的话需要自己手动创建这个目录

5、  包安装:rpm –ivh*.rpm或者dpkg –i *.deb
编译成功后vpp位置: vpp/build-root/install-vpp-native/vpp/bin/vpp 
========================运行准备===============================
插入uio模块 modprobe uio
插入igb_uio模块 insmod  /home/lwh/vpp/build-root/rpm/vpp-17.01/build-root/install-vpp-native/dpdk/build/lib/librte_eal/linuxapp/igb_uio/igb_uio.ko


设置大页
mkdir /mnt/huge 
mount -t hugetlbfs nodev /mnt/huge
设置大页数目 echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
查看大页分配数目 cat /proc/meminfo| grep Huge   


查看网卡pci号,并绑定绑卡驱动为igb_uio
cd /home/lwh/vpp/build-root/build-vpp-native/dpdk/dpdk-16.07/tools/
查看网卡使用驱动状态 ./dpdk-devbind.py --status
解除网卡的驱动 ./dpdk-devbind.py -u 0000:06:00.0
加载igb_uio驱动到网卡 ./dpdk-devbind.py --bind=igb_uio 0000:06:00.0


编辑配置文件/etc/vpp/startup.conf内容如下
##################/etc/vpp/startup.conf  start#####################
#参考网站https://wiki.fd.io/view/VPP/Command-line_Arguments
#参考代码中自带的 startup.conf 文件中的解释说明
unix {
  #交互模式
  interactive 
  
  #使用telnet 127.0.0.1 5002访问
  cli-listen 127.0.0.1:5002 
  
  log /tmp/vpp.log
  full-coredump
}


cpu {
  #主线程运行在0核
  main-core 0 
  
  #工作线程运行的cpu 16位掩码
  coremask-workers 2 
}


dpdk {
  #使用的驱动
  uio-driver igb_uio
  #使用的dev 及队列数
  dev 0000:05:00.0 {num-rx-queues 2}
  dev 0000:05:00.1 {num-rx-queues 2}
  num-mbufs 65536
  socket-mem 1024
}


api-trace {
  on
}


api-segment {
  gid vpp
}
###########################/etc/vpp/startup.conf  end######################################## 


========================运行vpp===============================
开启vpp systemctl start vpp.service
关闭vpp systemctl stop vpp.service
查看vpp状态 systemctl status vpp.service


vpp基本命令
交互模式
连接vpp telnet 127.0.0.1 5002
show interface
show ip arp
show ip fib
show error
clear run
show run
set int state GigabitEthernet6/0/0 up
set int ip address GigabitEthernet6/0/0 X.X.X.X/24
show threads
show dpdk interface placement
set interface l2 bridge GigabitEthernet6/0/0 1


非交互模式
vppctl show interface
vppctl show ip arp
vppctl show ip fib
vppctl show error
vppctl clear run
vppctl show run
vppctl set int state GigabitEthernet6/0/0 up
vppctl set int ip address GigabitEthernet6/0/0 X.X.X.X/24
vppctl show threads
vppctl show dpdk interface placement
vppctl set interface l2 bridge GigabitEthernet6/0/0 1


命令行参考
https://wiki.fd.io/view/VPP/Command-line_Interface_(CLI)_Guide

为什么安装Python后Scripts文件夹下没有pip.exe文件?

运行python-mensurepip--upgrade--default-pip可重建pip.exe;若报Nomodulenamedensurepip,则需离线下载get-pip.py安装;Python3.12+默认不生成pip.exe,但功能等价;PATH配置错误或虚拟环境无pip也是常见原因。 python-mpip--version能跑通,但Scripts里没pip.exe 说明pip模块...

为什么Python脚本在任务计划程序中由于路径问题无法运行?

根本原因是Windows任务计划程序默认工作目录为C:\Windows\System32,导致相对路径失效;需强制切换工作目录、使用绝对路径、配置完整Python解释器路径、显式添加环境变量、重定向日志并启用历史记录。 任务计划程序中Python脚本找不到模块或文件 根本原因不是Python本身出错,而是Windows任务计划程序启动时的工作目录默认是C:\Windows\System32,而不是...

为什么Python爬虫在Linux服务器上运行效率高于Windows?

Linux内核epoll机制以O(1)复杂度高效调度海量socket,而Windows默认回退低效select层;Linux服务器精简无GUI、定时器精准、文件系统优化好、PyPI轮子编译更激进,综合性能显著优于Windows。 Linux内核对网络IO的调度更高效 Python爬虫本质是IO密集型任务,大量时间花在等待HTTP响应上。Linux内核的epoll机制能以O(1)复杂度管理成千上万个...

如何在Python中通过pytest-forked实现在独立的进程中运行每个用例?

pytest-forked不支持单个用例独立进程,因其fork发生在模块级而非用例级,仅对整个测试文件生效;真正实现per-test-case进程隔离需使用pytest-xdist的--boxed模式。 直接用pytest-forked无法让「每个测试用例」都在独立进程中运行——它只支持「每个测试文件」或「每个测试会话」级的fork,不支持per-test-case粒度。 为什么pytest-fo...

为什么Python的二进制分发版比源代码安装快得多?

wheel安装快是因为跳过编译环节,直接解压预编译的二进制模块到site-packages;编译环节需调用gcc等工具构建C扩展,耗时且依赖本地开发环境。 wheel文件安装快,是因为它跳过了编译环节——你拿到的就是已经编译好的字节码或平台原生二进制模块,直接解压、校验、复制到site-packages就完事。 编译环节到底在干啥? 当你用pipinstall源码包(.tar.gz)时,pip会:...

如何在 Python 中提前终止程序执行以避免后续代码运行

当用户输入无效数字时,需立即停止程序并输出错误提示,防止继续执行图像打印和电脑选择逻辑。本文介绍三种主流解决方案:使用exit()退出、合理缩进控制流程,以及封装为函数后用return提前返回。 当用户输入无效数字时,需立即停止程序并输出错误提示,防止继续执行图像打印和电脑选择逻辑。本文介绍三种主流解决方案:使用exit()退出、合理缩进控制流程,以及封装为函数后用return提前返回。 在Pyt...

为什么Python脚本在IDE中运行正常但在命令行报错_检查PYTHONPATH配置

根本原因是IDE自动将项目根目录加入sys.path,而命令行仅按默认顺序搜索(脚本所在目录→PYTHONPATH→标准库→site-packages),导致模块路径不可见。 为什么IDE里能import,命令行却报ModuleNotFoundError 根本原因不是代码问题,而是Python解释器启动时看到的sys.path不一样。IDE(如PyCharm、VSCode)通常会自动把项目根目录加...

如何在Python中检查当前脚本是否在虚拟环境中运行_通过sys.prefix判断

最可靠判断是否在虚拟环境的方法是比较sys.prefix与sys.base_prefix:若二者不等,则处于激活的虚拟环境(含conda);若相等,则为系统Python或未激活环境;PyInstaller等场景需用getattr防base_prefix缺失。 用sys.prefix判断是否在虚拟环境中最直接但有陷阱 是的,sys.prefix是最常用的方法——它指向当前Python解释器的“安装根...