mbox series

[ovs-dev,v3,0/6] offload Linux LAG devices to the TC datapath

Message ID 1530201787-7071-1-git-send-email-john.hurley@netronome.com
Headers show
Series offload Linux LAG devices to the TC datapath | expand

Message

John Hurley June 28, 2018, 4:03 p.m. UTC
This patchset extends OvS TC and the linux-netdev implementation to
support the offloading of Linux Link Aggregation devices (LAG) and their
slaves. TC blocks are used to provide this offload. Blocks, in TC, group
together a series of qdiscs. If a filter is added to one of these qdiscs
then it is applied to all. Similarly, if a packet is matched on one of the
grouped qdiscs then the stats for the entire block are increased. The
basis of the LAG offload is that the LAG master (attached to the OvS
bridge) and slaves that may exist outside of OvS are all added to the same
TC block. OvS can then control the filters and collect the stats on the
slaves via its interaction with the LAG master.

The TC API is extended within OvS to allow the addition of a block id to
ingress qdisc adds. Block ids are then assigned to each LAG master that is
attached to the OvS bridge. The linux netdev netlink socket is used to
monitor slave devices. If a LAG slave is found whose master is on the bridge
then it is added to the same block as its master. If the underlying slaves
belong to an offloadable device then the Linux LAG device can be offloaded
to hardware.

v2->v3:
- patch 6
 - ensure lag update is only applied to link related messages. Without
   this the slave pointer may be accessed without being explicitly set to
   the Netlink attribute or NULL (fixes further bug reported by Roi Dayan)

v1->v2:
- patch 6
 - add check for non-null ifname before calling lag update function (fixes
   namespace bug reported by Roi Dayan)

John Hurley (6):
  tc: allow offloading of block ids
  netdev-provider: add class op to get block_id
  rtnetlink: extend parser to include kind of master and slave
  netdev-linux: indicate if netdev is a LAG master
  netdev-linux: assign LAG devs to tc blocks
  netdev-linux: monitor and offload LAG slaves to TC

 lib/netdev-bsd.c         |   3 +-
 lib/netdev-dpdk.c        |   3 +-
 lib/netdev-dummy.c       |   3 +-
 lib/netdev-linux.c       | 132 ++++++++++++++++++++++++++++++++++++++++++++---
 lib/netdev-provider.h    |   4 ++
 lib/netdev-tc-offloads.c |  82 +++++++++++++++++++++++------
 lib/netdev-vport.c       |   3 +-
 lib/netdev.c             |  10 ++++
 lib/netdev.h             |   1 +
 lib/rtnetlink.c          |  43 +++++++++++++++
 lib/rtnetlink.h          |   4 ++
 lib/tc.c                 |  60 +++++++++++++++------
 lib/tc.h                 |  12 ++---
 13 files changed, 309 insertions(+), 51 deletions(-)
 mode change 100644 => 100755 lib/rtnetlink.h

Comments

Simon Horman June 29, 2018, 12:59 p.m. UTC | #1
On Thu, Jun 28, 2018 at 05:03:01PM +0100, John Hurley wrote:
> This patchset extends OvS TC and the linux-netdev implementation to
> support the offloading of Linux Link Aggregation devices (LAG) and their
> slaves. TC blocks are used to provide this offload. Blocks, in TC, group
> together a series of qdiscs. If a filter is added to one of these qdiscs
> then it is applied to all. Similarly, if a packet is matched on one of the
> grouped qdiscs then the stats for the entire block are increased. The
> basis of the LAG offload is that the LAG master (attached to the OvS
> bridge) and slaves that may exist outside of OvS are all added to the same
> TC block. OvS can then control the filters and collect the stats on the
> slaves via its interaction with the LAG master.
> 
> The TC API is extended within OvS to allow the addition of a block id to
> ingress qdisc adds. Block ids are then assigned to each LAG master that is
> attached to the OvS bridge. The linux netdev netlink socket is used to
> monitor slave devices. If a LAG slave is found whose master is on the bridge
> then it is added to the same block as its master. If the underlying slaves
> belong to an offloadable device then the Linux LAG device can be offloaded
> to hardware.

Thanks John,

Applied.