vpp使用kni

vpp使用kni

先将vpp_arm64.tar.gz复制到目标机器上进行解压,解压后的目录结构如下:

root@localhost-Technical-B:~/vpp/vpp# ls
bin  dpaa2  vpp_readme  include  install.sh  kmod  lib  share  startup.conf  usertools  vpp_papi-1.6.2-py2.7.egg

首先阅读vpp_readme,可根据该文档进行安装。

安装时需要运行install.sh脚本,该脚本主要把该目录下的文件拷贝到目的安装路径,并设置环境变量。使用如下命令进行安装:

chmod +x install.sh
./install.sh /mnt/

环境准备

绑定dpdk网口

dynamic_dpl.sh dpmac.4
export DPRC=dprc.2

驱动模块加载

  • 若需要开启kni功能,则需要加载rte_kni.ko模块,使用如下命令加载:

    insmod rte_kni.ko carrier=on
    

    需要注意的是carrier=on在dpdk18.05版本后不能省略,因为dpdk18.05版本后carrier默认为off。

  • 若不需要开启kni功能,则需要确保rte_kni.ko模块已经被卸载

    使用如下命令查看rte_kni.ko是否存在

    lsmod | grep rte_kni
    

    若存在则使用如下命令进行卸载:

    rmmod rte_kni
    

vpp配置文件

vpp配置文件与vpp配置一致,可直接参考vpp startup.conf相关配置(包括kni)。

  • 线程参数

    cpu {
            main-core 4
            corelist-workers 5
    }
    

    一般使用一个main线程和一个worker线程。

  • dpdk参数

    dpdk {
            ## Change default settings for all intefaces
            huge-dir /mnt/hugepages
            no-pci
            num-mem-channels 1
            # kni count
            #kni 1
             dev default {
                    ## Number of receive queues, enables RSS
                    ## Default is 1
                    num-rx-queues 1
                    num-rx-desc 40960
                    #num-rx-desc 65536
                    rss { ipv4 }
    
                    ## Number of transmit queues, Default is equal
                    ## to number of worker threads or 1 if no workers treads
                    num-tx-queues 1
            }
            proc-type primary
            log-level 7
    }
    
    

    其中需要特别留意的是num-rx-desc,该值是dpdk的环形收包缓冲区大小,若设置过小会导致dpdk丢包。按当前测试结果来看40960为最优值,若大流量时出现大量rx-errors可适当增大该值。

    另外若需要启用kni功能,直接在dpdk配置中添加

    kni count
    

    即可,其中count是要支持kni的网口个数。kni网口个数依赖于实际的物理网口个数,kni个数无法超过实际物理网口个数。即kni是与物理网口一一对应的。

  • 插件参数

    plugins {
            ## Adjusting the plugin path depending on where the VPP plugins are
            path /path/lib/vpp_plugins
            vat-path /path/lib/vpp_api_test_plugins
    
            plugin default { enable }
            plugin gtpu_plugin.so { disable }
    }
    

    插件配置中需指明vpp_plugins的路径,另外需将原生的gtpu插件禁用。

kni配置和使用

  • 配置

    当启用kni功能时,对于一个物理网口来说,除vpp本身进行数据包处理外,还会在操作系统中虚拟出一个网口,一般命名为vEth0,其中0跟随kni个数增加。

    对于虚拟出来的网口可使用linux下的ifconfig、ethtool工具对其进行配置。可以将其当作正常的物理网口来使用。

  • 查看

    查看kni统计信息,可直接使用vppctl工具。

    vpp# show int
                  Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count
    TenGigabitEthernet0               1      up          1500/0/0/0
    local0                            0     down          0/0/0/0
    ----------------------------------------------------------------------------------------------------
    vEth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9216
            inet 121.168.1.12  netmask 255.255.255.0  broadcast 121.168.1.255
            inet6 fe80::b0c4:a3ff:feba:2ddf  prefixlen 64  scopeid 0x20<link>
            ether b2:c4:a3:ba:2d:df  txqueuelen 1000  (Ethernet)
            RX packets 8  bytes 708 (708.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 16  bytes 1364 (1.3 KB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    vpp# show int addr
    TenGigabitEthernet0 (up):
      L3 192.168.8.25/16
    local0 (dn):
    ----------------------------------------------------------------------------------------------------
    vEth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9216
            inet 121.168.1.12  netmask 255.255.255.0  broadcast 121.168.1.255
            inet6 fe80::b0c4:a3ff:feba:2ddf  prefixlen 64  scopeid 0x20<link>
            ether b2:c4:a3:ba:2d:df  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 10  bytes 796 (796.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
  • 分流

    分流是指需要决定一个报文是该送往kni经内核协议栈处理,还是该送往vpp由用户态协议栈处理。当前默认分流原则为GTPU报文送往用户态协议栈,非GTPU报文送往内核协议栈。因当前无其他分流策略,暂时不支持分流策略配置,均采用默认分流策略。

需要特别注意的是,当前kni和vpp可以配置相同的ip,也可以配置不同的ip。但kni和vpp的网口物理地址必须相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

growdu_real

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值