VPP学习-startup.conf配置文件

背景

        VPP(Vector Packet Processing,矢量报文处理),作为一个开源的高性能数据包处理框架,旨在提供可扩展、灵活且高效的网络数据包处理能力;由于传统Linux 内核协议栈整体网络吞吐性能的局限性,目前VPP已被广泛运用于路由器、防火墙等网络设备上,因此,作为网络开发工程师,在熟悉Linux内核协议栈的同时,有必要对VPP用户态协议栈有所了解,了解其实现原理、编码特点,报文处理方式以及通过何种方式实现性能提升,从今天开始希望和大家一起研究学习。

概念

         VPP启动需配置特定的选项参数,有两种方式:1.通过命令行的形式直接下发;2.通过配置文件设定,通过配置文件的好处是使得配置信息具有很好的可读性。

        VPP启动时通过-c选项加载配置文件,示例如下:

sudo /usr/bin/vpp -c /etc/vpp/startup.conf

        当VPP 服务启动时,则通过另外一个安装文件vpp.service 使用此选型启动,查看ExecStart参数信息如下:

        这里我们着重了解学习下配置文件的相关内容。 

配置文件

        配置文件信息示例如下:

        由文件内容可知,通过配置文件可以配置多种参数;VPP配置参数分为两类:1)基本配置参数 2)高级配置参数

基本参数

        基本参数包含如下几类:unix、dpdk、cpu

unix

        unix 用于配置VPP启动和行为类型属性,或其他任何基于操作系统的属性;

        interactive:将CLI连接到标准输入/输出,并提供调试命令行界面,意味着:nodaemon

        nodaemon:不要fork/后台 vpp进程,默认startup.conf会配置

        log:指定log文件路径,记录vpp启动配置以及后续所有CLI,默认startup.conf设置为 var/log/vpp/vpp.log,示例:log /var/log/vpp/vpp.log

        full-coredump:要求Linux 转储所有内存映射区域,而不仅仅是text+data+bss段。

        cli-prompt <string>:将命令行提示符配置为string所指示的字符串,示例:cli-prompt vpp-2

        runtime-dir <dir>:设置运行目录,这是特定文件(如socket 文件)的固定位置,默认为/run/vpp

        pidfile <filename>:将主线程pid写入指定文件

dpdk

        dpdk配置控制许多参数,包括设备白名单、可用于启动dpdk-eal控制线程的CPU数量、I/O缓冲区数据以及进程关联掩码。

        常用选项参数包括:

        dev <pci-dev> :将特定PCI设备列入白名单,pci-dev是一个"DDDD:BB:SS.F"格式的字符串,其中,DDDD = Domain, BB = Bus Number(总线号),SS = Slot number(槽位号),F = Function,示例:dev 0000:02:00.0

        dev <pci-dev> {...} :在将指定PCI设备列入白名单时,还可指定其他参数,有效选项包括:

                1)num-rx-queues <n> 接收队列数量,同时启用RSS,默认值为1

                2)num-tx-queues <n> 传输队列数量,默认等于工作线程数,如果没有工作线程,默认为1 

                3)num-rx-desc <n> ring-buffer接收缓冲区描述符数量,默认为1024,增加或减少数量会影响性能,默认为1024.

                4)num-tx-desc <n> ring-buffer接收缓冲区描述符数量,默认为1024,增加或减少数量会影响性能,默认为1024

                5) vlan-strip-offload on|off 接口的VLAN strip offload模式,对于除VIC之外的所有NIC, VLAN剥离默认处于关闭状态,使用ENIC驱动程序,该驱动程序默认启动VLAN剥离。

       num-mbufs <n>:增加分配的缓冲区数量,在接口和工作线程数量较多,或物理接口较多且有多个RSS队列的场景中可能需要,n代表每个CPU的数量,默认为16384。

        no-pci:当VPP启动时,如果接口不属于Linux内核(接口处于Down状态),VPP将尝试管理该接口."no-pci"表示VPP不应该遍历PCI表来寻找接口。

        kni <n>:KNI接口数量,依据DPDK文档。示例 kni 2

        uio-driver uio_pci_generic | igb_uio | auto :改变被VPP使用的UIO驱动,默认是auto。

cpu

        cpu配置控制命名线程类型的创建及其CPU的关联性,在VPP中,有一个主线程,用户可以选择创建工作线程,主线程和工作线程可以自动或手动固定到CPU核心。

        自动固定:

        workers <n> :创建n个工作线程

        io <n>:创建n个 <i/o>线程

        main-thread-io:通过线程0处理i/o设备,将流量移交给工作线程,要求 "workers n"

        skip-cores <n>:设置要跳过的CPU核心数(1..N-1),跳过的核心不用于绑定主线程或工作线程,主线程自动固定到第一个可用的CPU核心,并且在核心分配给主线程后,工作线程会绑定到下一个可用的CPU核上,将进程亲和性掩码的低nn位清除。

        手动固定:

        main-core <n> :将主线程绑定到特定核上,示例:main-core 1

        coremask-workers <hex-mask>:依据hex-mask绑定工作线程到特定核.

        corelist-workers <list> :功能和coremask-workers一样,但接收core list代替bitmap。

高级参数

        高级参数有很多,这里简单列举几项。

acl-plugin

        acl-plugin参数更改ACL插件的配置,例如ACL双哈希表的初始化方式,通常只能由熟悉VPP和ACL插件交互的人员来设置。

        connection hash buckets <n> :设置两个双哈希表中每个哈希桶的数量,默认为64 * 1024(65536)

        connection hash memory <n> :为双哈希表中的每一个分配内存大小,默认为1073741824个字节

        connection count max <n>:设置连接会话池的最大池元素个数,默认为:500000个元素

        main heap size <n> G | M| K | <n> :设置保存所有ACL模块相关分配的主内存堆大小

buffers

        控制缓冲区管理

        memory-size-in-mb <n>:配置缓冲区内存大小,如果没有设置,VPP默认为32MB

ip

        ipv4堆配置,堆大小是在启动序列的早期配置的,在加载插件或执行其他任何操作之前。

        heap-size <n> G | <n> M | <n> K | <n> :设置ipv4 mtrie堆大小,即专门用于目的IP查找表的的大小。

plugins

        默认情况下可以禁用插件,比如某个插件还处于实验阶段,可以在startup.conf中明确启用该插件,此外,默认启用的插件可以在startup.conf中明确禁用。

        此部分的另一个有用用途是禁用所有插件,然后仅启用所需插件。

        想要了解更多参数配置、含义及作用,请参考官方文档:VPP startup.conf配置文件及参数配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/366140.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)

目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组&#xff0c;本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组&#xff0c;每行先给出正整数N&#xff08;≤20&#xff09;&#xff0c;随后是N个整数&a…

SpringMVC请求和响应

文章目录 1、请求映射路径2、请求参数3、五种类型参数传递3.1、普通参数3.2、POJO类型参数3.3、嵌套POJO类型参数3.4、数组类型参数3.5、集合类型参数 4、json数据传递4.1、传递json对象4.2、传递json对象数组 5、日期类型参数传递6、响应6.1、响应页面6.2、文本数据6.3、json数…

Spring速成(三)

文章目录 Spring速成&#xff08;三&#xff09;1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点…

刨析数据结构(二)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;数据结构————"带你无脑刨析" &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于数据结构的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎…

d3dcompiler_47.dll是什么文件,如何解决找不到d3dcompiler_47.dll文件

d3dcompiler_47.dll是一个属于微软DirectX组件的动态链接库文件&#xff0c;它是Direct3D编译器的一部分&#xff0c;主要用于在Windows操作系统中编译和运行Direct3D 11应用程序和游戏。当你在电脑上尝试打开某些依赖Direct3D图形技术的软件或游戏时&#xff0c;如果系统找不到…

Flume搭建

压缩包版本&#xff1a;apache-flume-1.9.0-bin.tar 百度盘链接&#xff1a;https://pan.baidu.com/s/1ZhSiePUye9ax7TW5XbfWdw 提取码&#xff1a;ieks 1.解压 tar -zxvf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/ 2. 修改文件名 [rootbigdata1 opt]…

基于SpringBoot Vue超市管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Codeforces Round 169 (Div. 2) D 异或最大值 二进制

题目&#xff1a; Problem - 276D - Codeforces 思路&#xff1a; l < r 1. l r &#xff0c;异或的结果为0 2. l < r &#xff08;注意&#xff1a;二进制位中&#xff0c;某一位是1,这一位后面的全是1&#xff0c;也没这个1大&#xff0c;比如1000 > 0111&…

HCIP-Datacom(H12-821)81-90题解析

有需要完整题库的同学可以私信博主&#xff0c;博主看到会回复将文件发给你&#xff01;&#xff08;麻烦各位同学给博主推文点赞关注和收藏哦&#xff09; 81、在状态检测防火墙中&#xff0c;开启状态检测机制时&#xff0c;三次握手的第二个报文(SYNACK)到达防火墙的时候如…

最新!2024顶级SCI优化!TTAO-CNN-BiGRU-MSA三角拓扑聚合优化、双向GRU融合注意力的多变量回归预测程序!

适用平台&#xff1a;Matlab 2023版及以上 TTOA三角聚合优化算法&#xff0c;将在2024年3月正式发表在中科院1区顶级SCI期刊《Expert Systems with Applications》上。 该算法提出时间极短&#xff0c;目前以及近期内不会有套用这个算法的文献。新年伊始&#xff0c;尽快拿下…

什么是在线教育,在线教育系统开源版本搭建教程

引言 随着数字化时代的到来&#xff0c;教育领域也在经历着一场深刻的变革。在线教育作为一种新兴的教育形式&#xff0c;正在以其灵活性和便利性受到越来越多人的关注和青睐。本文将介绍在线教育的概念&#xff0c;并提供基于开源版本的在线教育系统搭建教程&#xff0c;让教…

Docker容器引擎(5)

目录 一.docker-compose docker-compose的三大概念&#xff1a; yaml文件格式&#xff1a; json文件格式&#xff1a; docker-compose 配置模板文件常用的字段&#xff1a; 二.Docker Compose 环境安装&#xff1a; 查看版本&#xff1a; 准备好nginx 的dockerfile的文…

mysql本地数据库连接失败?

情景&#xff1a;mysql本地连接失败&#xff0c;账号密码都没问题。 原因&#xff1a;本地mysql服务没有启动 解决方案&#xff1a; 1、进入本地mysql安装的bin目录下D:\mysql-8.0.35-winx64\mysql-8.0.35-winx64\bin&#xff08;我的&#xff09;&#xff1b; 2、执行net st…

Android使用ScrollView导致鼠标点击事件无效

平台 测试平台: RK3288 Android8.1RK3588 Android 12 问题 首先, 这个问题的前提是, 使用的输入设备是**鼠标**, 普通的触摸屏并不会出现这个问题. 大致的流程是APP的UI布局中采用ScrollView作为根容器, 之后添加各类子控件, 在一起准备就绪后, 使用鼠标进行功能测试, 出现…

【Oracle云】OCI DevOps Services 教程 (3) - 创建自动化部署流水线【CD流水线】

欢迎来到【Oracle云】OCI DevOps Services教程的第三部分&#xff01;在这一部分中&#xff0c;我们将介绍如何在OCI上创建自动化部署流水线&#xff0c;也称为持续部署&#xff08;CD&#xff09;流水线。OCI DevOps Services提供了一套标准的构建工具&#xff0c;帮助我们简化…

解决WARNING: IPv4 forwarding is disabled. Networking will not work的具体操作步骤

IPv4转发禁用警告&#xff1a;网络无法正常工作 在使用网络连接的过程中&#xff0c;我们可能遇到警告消息“WARNING: IPv4 forwarding is disabled. Networking will not work”&#xff08;警告&#xff1a;IPv4转发已禁用&#xff0c;网络将无法正常工作&#xff09;。这个…

2.2号作业

一 1.A 2. A 3. A 4. D 5. D 6. B 7. A 8. C 9. A 10. 二 1. 42 2. cerr 3. cout <<"\n" 4. 5 5. 0 6. 7. 20 8. 1.50 9. ssi2 i…

UE4学习笔记 FPS游戏制作2 制作第一人称控制器

文章目录 章节目标前置概念Rotator与Vector&#xff1a;roll与yaw与pitch 添加按键输入蓝图结构区域1区域2区域3区域4 章节目标 本章节将实现FPS基础移动 前置概念 Rotator与Vector&#xff1a; Vector是用向量表示方向&#xff0c;UE中玩家的正前方是本地坐标系的(1,0,0)&…

ARM架构可视化ROS消息方案部署

ARM架构可视化ROS消息方案部署 三种方案, 1. webviz 2. foxglove 3. rosviz 注: web要用firefox, chromimum用不了, 可能是因为取消了时间同步机制的原因 先说三种方案的优劣, webviz 延迟比较高, 但是部署相对简单, foxglove 部署比较费劲, 但是效果不错, 延迟低, 本文会尽…

k8s kubeadm部署安装详解

目录 kubeadm部署流程简述 环境准备 步骤简述 关闭 防火墙规则、selinux、swap交换 修改主机名 配置节点之间的主机名解析 调整内核参数 所有节点安装docker 安装依赖组件 配置Docker 所有节点安装kubeadm&#xff0c;kubelet和kubectl 定义kubernetes源并指定版本…