前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三个理由告诉你,为什么在TF中必须使用MPLSoUDP

三个理由告诉你,为什么在TF中必须使用MPLSoUDP

原创
作者头像
Tungsten Fabric
修改2020-11-26 18:18:08
7820
修改2020-11-26 18:18:08
举报

Tungsten Fabric大量使用了overlay,它的整个体系结构基于利用overlay来提供L2/L3虚拟化,并使底层IP fabric对虚拟工作负载透明。

Tungsten Fabric支持三种封装类型,分别是:

1. MPLSoGRE

2. MPLSoUDP

3. VXLAN

其中,MPLSoGRE 和 MPLSoUDP用于L3虚拟化,而VXLAN用于L2虚拟化。

如果我们计划实施L2用例,那么没什么可考虑的……VXLAN就对了!

不过,在L3用例中出现了一个问题:选择基于GRE的MPLS?还是基于UDP的MPLS?

正如行业中常见的那样,答案可能是“取决于”某些具体情况。不过,这里的答案却十分明确——必须是MPLSoUDP!

在理解为什么选择MPLSoUDP之前,让我们先来看看何时需要使用MPLSoGRE。

答案同样是不言而喻的,当我们不能使用MPLSoUDP时——这可能是因为我们的SDN GW运行的软件版本不支持MPLSoUDP——我们使用MPLSoGRE。

除了这种情况以外,建议都使用MPLSoUDP!

为了理解为什么MPLSoUDP更好,我们需要回顾一下如何构建MPLSoUDP数据包。

首先将原始raw数据包添加一个mpls标签。该标签表示服务标签,并且是contrail/sdn_gw将数据包与正确的virtual_network/vrf相关联的方式。

接下来,添加UDP (+ IP)标头。UDP标头包括源端口和目标端口。源端口是对内部数据包执行哈希操作的结果。结果是,该字段将会出现很大变化。源端口带来了巨大的熵!

而这种熵就是我们选择MPLSoUDP的原因!

使用MPLSoUDP可以带来不同级别的优势。

第一个好处是在SDN GW上体现的。假设你在SDN GW和计算节点之间有一条MPLSoUDP隧道。在两个端点之间有多个ECMP路径。

选择一个ecmp路径到另一个路径是基于对数据包执行的哈希函数。为了获得更好的分发,我们需要很高的熵,并且正如我们所看到的,MPLSoUDP已经为我们提供好了!

让我们看一个有关SN GW的示例:

我们看到,有2个ecmp数据包流向计算节点。使用MPLSoUDP将使我们能够以更平衡的方式在两个路径之间分配数据包。

如果我们查看从计算节点发送的数据包,则可以看到使用MPLSoUDP的另一个好处。

考虑到接口vhost0是bod接口(将2个物理NIC连接在一起)的设置,那么我要说的就是正确的。

在这种场景下,计算节点被多宿主到了两个叶子节点(运行evpn + vxlan的IP Fabric,使用esi处理多宿主CE)上。结果是,当数据包离开服务器时,将通过绑定的2个链接之一发送数据包。

现在,基于绑定配置,根据哈希在两个链接之间进行选择。同样,使用MPLSoUDP会更好,因为它带来更多的熵,这意味着更好的分发。在所有bond成员之间平均分配流量,可能会导致流量在整个fabric中分配得很好!

最后一条需要关注的MPLSoUDP好处,在于dpdk节点上的性能。要理解这一点,我们至少需要对dpdk vRouter的某些方面如何工作,在一个非常高的层级上有所了解。

为DPDK vRouter分配了一定数量的核心(基于配置参数)。假设为vRouter分配了4个内核。结果就是,通过ethdev,dpdk vRouter会在物理NIC(vif0/0)上对4个队列进行编程。然后,我们就在vRouter核心和NIC队列之间建立了1:1映射。

对于来自服务器外部的数据包(物理网卡接收数据包),vRouter核心充当轮询核心(vRouter核心可以执行其它角色,处理核心;只是在这里我们对dpdk vRouter的详细理解不感兴趣,因此我们以后讨论这个问题)。

这里重要的是,充当轮询核心的每个vRouter核心都会不断检查其分配的物理网卡是否有要轮询的数据包。在进行轮询操作之前,物理网卡首先在线路上接收到数据包,然后将该数据包“发送”到一个队列中。为此,物理NIC在数据包上执行哈希操作。

到这里,事情应该很清楚了。由于涉及哈希,MPLSoUDP确保我们可以在NIC队列上更好地分配流量。在NIC队列上更好地分配数据包,意味着可以在vRouter核心之间更好地分配数据包(请记住,nic队列和vRouter核心之间存在1:1映射关系)。

为什么在转发核心之间尽可能平衡地分配流量很重要?

每个转发核心最多可以处理X个PPS(每秒数据包)。PPS间接意味着吞吐量。通常来说,PPS越高,吞吐量越高。

让我们举个例子。例如每个转发核心最多可处理2M PPS。这意味着vRouter最多可以处理8M PPS。

现在,假设使用MPLSoGRE。这种封装不能保证有效的流量分发。这就意味着,可能会将流量仅发送到4个转发核心中的2个(或者至少大多数流量可能主要落在4个转发核心中的2个上)。如果是这样,vRouter的性能大约为4M PPS(约占总容量的50%)。而如果使用MPLSoUDP,流量将更好地分布在所有4个转发核心上。这意味着vRouter总共可以达到8M PPS。换句话说,性能要好得多!

总结:网关更好平衡,计算节点更好平衡,dpdk vRouter内部更好平衡。除非你的SDN GW仅支持MPLSoGRE,否则没有理由不适用MPLSoUDP,因为它只有好处!


作者:Umberto Manferdini 译者:TF编译组

原文链接:https://iosonounrouter.wordpress.com/2020/09/11/why-we-must-use-mplsoudp-with-contrail/(注:原文为Contrail,在本系列文章中,Tungsten Fabric的功能与Contrail一致)


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档