[ovs-dev] MPLS performance question

Carl Baldwin carl at ecbaldwin.net
Mon Jul 30 20:02:16 UTC 2018

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,

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,

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?


[1] http://docs.openvswitch.org/en/latest/faq/openflow/

More information about the dev mailing list