learning:vpp bond(2)
上一篇文章介绍了vpp bond的特性功能及cli相关的配置,这章节介绍一下bond相关的命令行设置参数及说明。在阅读bond代码前,建议先上网搜索一下bond模式的相关介绍和说明,便于理解代码的实现。
bond cli说明:
1、创建、删除bond接口
创建bond接口时必须设置mode,否则提示报错。vpp目前支持五种常见模式: 1、round-robin:轮训策略模式; 2、active-backup:主备策略模式; 3、broadcast:广播策略模式; 4、xor:平衡策略模式; 5、lacp:动态链路聚合模式; 其中xor lacp模式可以指定hash分担因子,支持三种分担(默认l2模式): 1、l2:smac+dmac; 2、l23:smac+dmac+sip+dip; 3、l34:sip+sport+dip+dport; cli命令如下:
create bond mode {round-robin | active-backup | broadcast | {lacp | xor} [load-balance { l2 | l23 | l34 } [numa-only]]} [hw-addr <mac-address>] [id <if-id>] [gso]
mode :bond模式,不需要设置,其他都是非必须项。 hw-addr:配置bond接口mac地址,未强制指定,若未指定mac地址,则随机生产一个mac地址。 id:bond接口索引,不指定时,默认使用bond接口在pool内存池索引。如设置为2时,生成接口名称BondEthernet2,如果用户设置id已经被其他其他使用,会返回报错。 gso:Generic Segmentation Offload(通用分段延后处理)。指网卡在支持GSO功能时,对于超大数据包(大于MTU值),内核会将分段的工作延迟到交给驱动的前一刻。如果网卡不支持此功能,则内核用软件的方式对数据包进行分片。
删除bond接口:支持通过bond接口名称或接口索引来删除, 如果此时bond接口下还存在成员口,会将成员口信息一起删除。
delete bond {<interface> | sw_if_index <sw_idx>}
2、添加、删除成员口
添加成员口:需要指定待加入的bond接口,成员口只能加入到一个bond接口组中,如果成员口已经加入其他bond接口,会返回错误。
bond add <BondEthernetx> <member-interface> [passive] [long-timeout]
参数说明: 1、BondEthernetx :bond接口; 2、member-interface:成员口; 3、passive:lacp模式使用,表示当前接口是否启动lacp协议交换。 4、long-timeout:lacp模式使用,表示发送lacp报文超时时间,默认是3s,long time是60s。
删除成员口:删除成员口时,只需要输入成员口接口名称就可以了,因为在bond中添加成员口时,会生成相应的引用关系。
bond del <member-interface>
3、查询bond接口信息。
show bond [details]
4、设置成员口权重
在没有阅读代码之前,以为这个功能是在round-robin模式下,设置出接口根据权重来做分担的。看完代码才明白此功能只能用于active-backup主备模式下,使用权重最大的作为主网卡,其他作为备用网卡;当主网卡down后,根据权重最大的作为主网卡。
set interface bond <interface> | sw_if_index <idx> weight <value>
疑问点:
1、转发流程中,报文如何切换到bond接口的?
可以通过命令行show interface rx-placement,来先查询线程绑定网卡绑定关系及收包的node节点。报文首先从bond成员口进入然后切换到bond接口上去。
learning_vpp1# show interface rx-placement
Thread 1 (vpp_wk_0):
node dpdk-input:
GigabitEthernetb/0/0 queue 0 (polling)
GigabitEthernet13/0/0 queue 0 (polling)
GigabitEthernet1b/0/0 queue 0 (polling)
在成员口加入bond组的使用会使能bond-input到device-input feature arc类上,但是如果加入到dpdk-input节点的呢?
bond_add_member()---bond添加成员时,调用下面来使能bond-input
vnet_feature_enable_disable ("device-input", "bond-input",
mif->sw_if_index, 1, 0, 0);
首先可以确认的是dpdk-input节点是device-input节点的兄弟节点。兄弟节点的子节点是一样的。也就是往device-input节点下挂载节点,同时也挂载到dpdk-input节点下。device-input节点是device-input feature arc类的起始节点,往arc类使能bond-input时,也就会使能到dpdk-input节点上。
##1、device-input arc 起始节点是device-input,
VNET_FEATURE_ARC_INIT (device_input, static) =
{
.arc_name = "device-input",
.start_nodes = VNET_FEATURES ("device-input"),
.last_in_arc = "ethernet-input",
.arc_index_ptr = &feature_main.device_input_feature_arc_index,
};
##通过show features可以查询device-input arc 类节点情况,
device-input:
srv6-as2-rewrite
srv6-ad2-rewrite
pppoe-input
nsim
mactime
adl-input
pg-input-mac-filter
sr-pl-rewrite-encaps-l2
bond-input
policer-input
stats-collect-rx
p2p-ethernet-input
span-input
worker-handoff
l2-patch
ethernet-input ##ethernet-input结束节点,最终都要送到这个节点。
总结就是下面的流程图:
2、bond转发无锁化实现
bond全局管理结构为每个线程创建一个线程数据缓存区,每个线程数据缓存区根据bond成员口数量来创建报文临时缓存区。具体管理结果如下:
3、bond会增加路由器或交换机的连接带宽吗?
许多人可能认为“链路聚合”会增加带宽。比如三个网卡,每个网卡线速大小1Gbps。将三个网卡设置在一个bond组中,是否就能达到3Gbps大小?个人认为在RR模式可能是这样的,但是xor或lacp模式下,传输一个大文件时,最大速率可能只能达到1Gbps。同一条流只能选择一个接口的。这种情况下,链路聚合可能不会增加连接带宽。
4、bond最直接的效果是给用户带来负载平衡和容错。
负载均衡—发送流量根据目的地址在可用的物理网卡之间自动负载均衡。传入的流量由交换机控制,将流量路由到服务器,而主机/服务器没有控制物理网卡流量的能力。 容错——如果底层物理网卡之一损坏或线缆被拔出,主机/服务器将检测到故障情况,自动将流量转移到bond中的另一个网卡,从而避免了整体网络连接因单点故障而中断的情况。
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023