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学习-startup.conf配置文件_第1张图片

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

配置文件

        配置文件信息示例如下:

VPP学习-startup.conf配置文件_第2张图片

        由文件内容可知,通过配置文件可以配置多种参数;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所指示的字符串,示例:cli-prompt vpp-2

        runtime-dir

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

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

dpdk

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

        常用选项参数包括:

        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设备列入白名单时,还可指定其他参数,有效选项包括:

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

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

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

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

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

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

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

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

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

cpu

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

        自动固定:

        workers :创建n个工作线程

        io :创建n个 线程

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

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

        手动固定:

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

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

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

高级参数

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

acl-plugin

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

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

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

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

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

buffers

        控制缓冲区管理

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

ip

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

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

plugins

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

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

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

你可能感兴趣的:(学习,网络)