Cisco vpp(6) 工作模式

3 篇文章 0 订阅
2 篇文章 0 订阅

还在初学阶段,如果有误,希望多批评指正。


VPP 四种模式:
  • 单线程(单线程做所有的事情,管理、IO和worker)
  • 只有worker线程多线程(主线程做管理,worker多线程做IO和worker)
  • IO和worker线程都是多线程(主线程做管理,IO多线程做IO,worker多线程做worker)
  • mode 4, 不知道怎么翻译(主线程做管理和IO,worker多线程做worker)

单线程

主线程做了包处理和其他的管理功能(CLI、API、统计)。这是默认设置,不需要特殊的启动配置。

只有worker多线程

主线程负责管理功能 (CLI、API、统计),一个或者多个worker线程接收数据包,处理并发送。每一个worker线程都是从接口的输入队列轮询接收。
RSS使多个线程可以从同一个物理网口上接收数据。(NIC上的RSS功能把流量分给不同的队列)

IO和worker都是多线程

主线程负责管理功能 (CLI、API、统计),一个或者多个IO线程接收数据包分给worker线程。每一个IO线程都是 都是从接口的输入队列轮询接收。
通常这种情况不使用RSS。一个或者多个worker线程从IO线程接收数据包、处理并且发送。

mode 4

和IO、worker多线程类似,区别在于主线程还需要处理输入函数。也就是main线程做管理功能和接收数据包,分派给worker多线程,处理并且发送。

注:以上所说的IO线程只做输入不做输出,可以理解为分派线程。

线程位置

在启动配置文件的cpu{...}部分。VPP平台可以将线程设置为手动或者自动。自动如下:
  • 设置了"skip-cores X",则前X个核都不会用
  • 设置了"main-core x",则主线程运行在x核上,否则运行在第一个可以用的核上
  • 设置了"main-core-io",激活第四种模式
  • 设置了"io N",激活第三种模式,并且前N个可以用的核将运行IO线程
  • 设置了"worker N",激活第2、3或者4种模式,并且前N个可以用的核将运行worker线程
  • 设置了"corelist-workers A,B1-Bn,C1-Cn",激活第2、3或者4种模式,并且将指出的核运行worker线程。
  • 设置了"corelist-io A,B1-Bn,C1-Cn",激活模式3,指定的核运行IO线程


也可以运行命令查看show threads:

vpd# show threads
ID Name Type LWP lcore Core Socket State
0 vpe_main 59723 2 2 0 wait
1 vpe_wk_0 workers 59755 4 4 0 running
2 vpe_wk_1 workers 59756 5 5 0 running
3 vpe_wk_2 workers 59757 6 0 1 running
4 vpe_wk_3 workers 59758 7 1 1 running
5 vpe_io_0 io 59759 8 2 1 running
6 vpe_io_1 io 59760 9 3 1 running
7 stats 59775
vpd#

上面的例子显示主线程运行在核心2上,worker线程运行在4-7上,IO线程运行在8、9上。

配置示例

手动

将主线程放置在核1上,IO线程放在3和19上,worker线程放在4,5,20,21上
cpu {
main-core 1
corelist-io 3,19
corelist-workers 4-5,20-21
}

自动

主线程核1,worker线程核2,3,4
cpu {
skip-cores 1
workers 3
}

内存申请

VPP平台可以感知NUMA,可以在不同的CPU上申请内存。配置文件的的dpdk{...}部分配置socket-mem A[,B][,c]。
dpdk {
socket-mem 1024,1024
}
以上配置从NUMA0和NUMA1分别申请了1G内存,每个工作线程都可以使用本地buffer。
内存从hugepages分配。如果1G大页可以使用,更倾向于使用1G大页。vpp负责hugepages文件系统的mount和umount,所以不用手动管理。

多线程设置的接口

启动时,VPP平台指定接口(或者开了RSS时的queue)到不同的worker线程,轮询接收数据包。
下面的示例显示和修改接口布局:
vpd# sh dpdk interface placement
Thread 1 (vpp_wk_0 at lcore 5):
TenGigabitEthernet2/0/0 queue 0
TenGigabitEthernet2/0/1 queue 0
Thread 2 (vpp_wk_1 at lcore 6):
TenGigabitEthernet2/0/0 queue 1
TenGigabitEthernet2/0/1 queue 1


下面的例子是TenGigabitEthernet2/0/0的队列1移动到第一个worker线程的操作
vpd# set dpdk interface placement TenGigabitEthernet2/0/1 queue 1 thread 1 
DBGvpd# sh dpdk interface placement
Thread 1 (vpp_wk_0 at lcore 5):
TenGigabitEthernet2/0/0 queue 0
TenGigabitEthernet2/0/1 queue 0
TenGigabitEthernet2/0/1 queue 1
Thread 2 (vpp_wk_1 at lcore 6):
TenGigabitEthernet2/0/0 queue 1


只有在模式2下可以做接口的布局工作


资料来源:https://fd.io/


欢迎加入VPP讨论群:417538415
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值