[ovs-dev] MPLS performance question

Ben Pfaff blp at ovn.org
Tue Jul 31 17:01:37 UTC 2018


On Mon, Jul 30, 2018 at 02:02:16PM -0600, Carl Baldwin wrote:
> I recently tried pushing MPLS labels using OVS in a lab.
> 
> Before adding MPLS push to the mix, I had four hosts: two pairs, each
> connected to a different set of TOR switches running VRRP. OVS (using
> kernel datapath) had a flow to write the VRRP mac address and output to a
> bond port. The bond is a Linux LACP bond, not an OVS bond. In this
> scenario, the TORs would route the packets through a default route our
> gateway routers to egress from the DC. This did fine and I was able to push
> something around 42 Gbps using16 iperf2 TCP streams.
> 
>     ovs-ofctl add-flow -OOpenFlow13 br0 "table=25, ip,
> actions=output=${bond_port}"
> 
> My next step was to push an MPLS label onto the packet. The above flow
> became this:
> 
>     ovs-ofctl add-flow -OOpenFlow13 br0 "table=25, ip,
> actions=push_mpls:0x8847,set_field:1048001->mpls_label,output=${bond_port}"
> 
> 1048001 is a static label that I configure on the TORs which sends the
> packet up to the same gateway using MPLS instead of IP routing. So, the
> packets would take the same path out of the network but using an MPLS path.
> With this change, things worked well from a functional perspective but the
> performance fell drastically to around 30-40 Mbps.
> 
> I'm pretty confident in the network fabric because I tried the same
> scenario using LInux MPLS and it performed well. From the network fabric's
> point of view, it was exactly the same (static label through LACP bond to
> VRRP mac).
> 
> I found in the faq [1] under "Does Open vSwitch support MPLS?" that "Open
> vSwitch version 2.4 can match, push, or pop up to 3 MPLS labels and look
> past the MPLS label into the encapsulated packet. It will have kernel
> support for MPLS, yielding improved performance." I looked through the git
> history and I don't see much evidence of this actually getting done for the
> 2.4 release. Is this faq accurate?

It looks like MPLS datapath support was fairly solid by OVS 2.6, at any
rate.  If your kernel module is older than that, I'd recommend
upgrading.


More information about the dev mailing list