VPP学习-startup.conf配置文件

news2024/11/19 7:43:47

背景

        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配置文件及参数配置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL | 一定会走索引却没有走的原因,日志报conversion相关错误

TL;DR&#xff1a;函数作用于表字段时&#xff0c;索引会失效。 具体情况 Indexes如下&#xff1a; SQL如下&#xff1a; explain select *from accounting_status_flow_tab_00000000WHERE ( client_no 6848134000 and loan_no 0119324345936016261000 )order by modif…

MySQL 8.0 引入 innodb_flush_method 等新参数的系统调用分析

本文我们将讨论如何在操作系统级别验证 innodb_flush_method 和 innodb_use_fdatasync 修改为默认值之外的其它值&#xff08;特别是 O_DIRECT 是最常用的&#xff09;后的效果。 介绍 首先&#xff0c;让我们定义该 innodb_flush_method 参数的作用。它规定了 InnoDB 如何管…

加快“数实融合”推进新型工业化 济南个性化体检“把脉”企业数字化转型难点痛点

加快“数实融合”推进新型工业化 济南个性化体检“把脉”企业数字化转型难点痛点 以主流价值为光&#xff0c;解读“济南故事”&#xff0c;解码C位新闻。爱济南客户端推出“追光”栏目&#xff0c;发挥新型主流媒体权威性和创新性&#xff0c;着眼经济社会发展紧要处、关键处、…

Java学习day26:和线程相关的Object类的方法、等待线程和唤醒线程(知识点详解)

声明&#xff1a;该专栏本人重新过一遍java知识点时候的笔记汇总&#xff0c;主要是每天的知识点题解&#xff0c;算是让自己巩固复习&#xff0c;也希望能给初学的朋友们一点帮助&#xff0c;大佬们不喜勿喷(抱拳了老铁&#xff01;) 往期回顾 Java学习day25&#xff1a;守护线…

压力测试工具-Jmeter使用总结

目录 一.前言 二.线程组 三.线程组的组件 四.线程组-HTTP请求 1、JSON提取器 2、XPATH提取器 3、正则表达式提取器 五.线程组-断言 1、响应断言 2、JSON断言 六.创建测试 1.创建线程组 2.配置元件 3.构造HTTP请求 4.添加HTTP请求头 5.添加断言 6.添加查看结果树…

Python之Numpy 和 Pandas

目录 2.1 numpy import numpy as np array np.array([[1,2,3],[2,3,4]]) print(array) print(number of dim:,array.ndim) print(shape:,array.shape) print(size:,array.size)pandas 1,pandas 基本介绍 df2 pd.DataFrame({A:1.,B:pd.Timestamp(20130102),C:pd.Series(1,i…

算法设计与分析实验:最短路径算法

一、网络延迟时间 力扣第743题 本题采用最短路径的思想进行求解 1.1 具体思路 &#xff08;1&#xff09;使用邻接表表示有向图&#xff1a;首先&#xff0c;我们可以使用邻接表来表示有向图。邻接表是一种数据结构&#xff0c;用于表示图中顶点的相邻关系。在这个问题中&am…

【C语言进阶篇】assert宏 使用详解

文章目录 一、assert简介 二、assert使用方法和规则 2.1 头文件 2.2 原型 2.3 功能 2.4 示例 2.5 assert的打开与关闭 三、注意事项 3.1 运行效率问题 3.2 assert只适用于调试版本 3.3 资源释放与清理 3.4 过度依赖 四、总结 个人主页&#xff1a; 倔强的石头的…

Datax3.0+DataX-Web部署分布式可视化ETL系统

一、DataX 简介 DataX 是阿里云 DataWorks 数据集成的开源版本&#xff0c;主要就是用于实现数据间的离线同步。DataX 致力于实现包括关系型数据库&#xff08;MySQL、Oracle 等&#xff09;、HDFS、Hive、ODPS、HBase、FTP 等各种异构数据源&#xff08;即不同的数据库&#x…

(2024,SaFaRI,双三上采样和 DFT,空间特征和频率特征)基于扩散模型的图像空间和频率感知恢复方法

Spatial-and-Frequency-aware Restoration method for Images based on Diffusion Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 修改数据保真度 3.2 …

Python中使用Opencv-python库绘制直线、矩形、圆、文本

Python中使用Opencv-python库绘制直线、矩形、圆、文字 在Python中使用Opencv-python绘制直线、矩形、圆、文本非常简单&#xff0c;分别使用到line、rectangle、circle、putText这几个函数&#xff0c;具体可以参考https://docs.opencv.org/4.9.0/d6/d6e/group__imgproc__dra…

基础小白快速入门c语言----数据类型

数据类型&#xff0c;运算符&#xff0c;表达式 1c语言支持 数据类型 1.基础类型&#xff08;基本类型&#xff09; a数值类型 整型&#xff1a;往往有符号和无符号的区分&#xff0c;&#xff08;signed&#xff09;有符号 &#xff08;unsigned)无符号 基础整型&#xff1…

GSM模块的使用及注意事项

1.如何使用&#xff1f; 最近&#xff0c;我准备使用GSM模块&#xff08;SIM900A&#xff09;发送英文短信到指定号码&#xff0c;翻阅资料如下&#xff1a; 可见&#xff0c;只要给该模块按照如下步骤发送指令&#xff1a; 就可以使得模块正常工作。&#xff08;SIM900A&#…

6-1 A. DS二叉树—二叉树构建与遍历(不含框架)

题目描述 给定一颗二叉树的逻辑结构如下图&#xff0c;&#xff08;先序遍历的结果&#xff0c;空树用字符‘#’表示&#xff0c;例如AB#C##D##&#xff09;&#xff0c;建立该二叉树的二叉链式存储结构&#xff0c;并输出该二叉树的先序遍历、中序遍历和后序遍历结果。 输入 第…

【Java程序设计】【C00231】基于Springboot的景区寄存管理系统(有论文)

基于Springboot的景区寄存管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的景区行李寄存系统 主要功能如下&#xff1a;用户登录模块、用户信息管理模块、角色信息管理模块、部门信息管理模块、行李寄存柜…

十、Qt三维图表

一、Data Visualization模块概述 Data Visualization的三维显示功能主要有三种三维图形来实现&#xff0c;三各类的父类都是QAbstract3DGraph&#xff0c;从QWindow继承而来。这三类分别是&#xff1a;三维柱状图Q3DBar三维空间散点Q3DScatter三维曲面Q3DSurface 1、相关类的…

窥探向量乘矩阵的存内计算原理—基于向量乘矩阵的存内计算

在当今计算领域中&#xff0c;存内计算技术凭借其出色的向量乘矩阵操作效能引起了广泛关注。本文将深入研究基于向量乘矩阵的存内计算原理&#xff0c;并探讨几个引人注目的代表性工作&#xff0c;如DPE、ISAAC、PRIME等&#xff0c;它们在神经网络和图计算应用中表现出色&…

【笔记】Android 常用编译模块和输出产物路径

模块&产物路径 具体编译到软件的路径要看编译规则的分区&#xff0c;代码中模块编译输出的产物基本对应。 Android 代码模块 编译产物路径设备adb路径Comment 模块device/mediatek/system/common/ 资源overlay/telephony/frameworks/base/core 文件举例res/res/values-m…

Java项目:基于SSM框架实现的教务管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm813基于SSM框架实现的教务管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#x…

增加Vscode引用路径

增加Vscode引用路径 增加Vscode引用路径问题说明解决思路1在Vscode中进行配置缺点 解决思路2 增加Vscode引用路径 问题说明 在嵌入式开发中需要经常用到库函数(SPL), Vscode需要配置引用路径才能对函数名或变量进行跳转 解决思路1 与Keil5 MDK类似, 在配置C/C的json文件中添…