[ovs-discuss] Group table with different split weight

Ben Pfaff blp at ovn.org
Mon Jan 25 16:52:11 UTC 2016

On Sat, Jan 23, 2016 at 06:25:35PM -0800, Jiaqi Zheng wrote:
> In my experiments, it seems like something wrong.
> In my experiments, H1 is the source, another three hosts H2, H3 and H4 are
> destination. The source host H1 send packets to other three hosts at the
> same time. I set group table bucket with three out ports , the split weight
> is two for each. In theory, the packets send to H2, H3 and H4 should be
> routed to different port as defined in group table (It's said that split is
> based on Destination MAC address, is it right ?)

### Q: How does OVS divide flows among buckets in an OpenFlow "select" group?

A: In Open vSwitch 2.3 and earlier, Open vSwitch used the destination
   Ethernet address to choose a bucket in a select group.

   Open vSwitch 2.4 and later by default hashes the source and
   destination Ethernet address, VLAN ID, Ethernet type, IPv4/v6
   source and destination address and protocol, and for TCP and SCTP
   only, the source and destination ports.  The hash is "symmetric",
   meaning that exchanging source and destination addresses does not
   change the bucket selection.

   Select groups in Open vSwitch 2.4 and later can be configured to
   use a different hash function, using a Netronome extension to the
   OpenFlow 1.5+ group_mod message.  For more information, see
   Documentation/group-selection-method-property.txt in the Open
   vSwitch source tree.  (OpenFlow 1.5 support in Open vSwitch is still

> But port 1 has no packet (the split weight for port 1, port 2 and port 3
> are all 1 respectively). The dump info is below:
> mininet> sh ovs-ofctl dump-groups s1 -O Openflow13
> OFPST_GROUP_DESC reply (OF1.3) (xid=0x2):
>  group_id=2,type=select,bucket=weight:2,actions=push_vlan:0x8100,set_field:4608->vlan_vid,output:2,bucket=weight:2,actions=push_vlan:0x8100,set_field:4609->vlan_vid,output:3,bucket=weight:2,actions=push_vlan:0x8100,set_field:4610->vlan_vid,output:1
> mininet>
> If I set port 2 and port 3 's weight to zero and set port 1's weight to
> two.  Packets are routed in port 1.
> Why I set all split weight to two and no packets are routed to port 1?
> Thanks for you help.

How diverse are the packets you are sending?  You can't expect to send a
few packets and have them evenly spread.  You need to send packets that
belong to a large number of different microflows if you expect to see
even division.

More information about the discuss mailing list