[ovs-git] [openvswitch/ovs] e0fe15: dpdk: Use DPDK 17.11.3 release.

GitHub noreply at github.com
Fri Jul 6 21:02:21 UTC 2018


  Branch: refs/heads/master
  Home:   https://github.com/openvswitch/ovs
  Commit: e0fe1594aa80416d581e0eda8c95c5c06f9c0cc3
      https://github.com/openvswitch/ovs/commit/e0fe1594aa80416d581e0eda8c95c5c06f9c0cc3
  Author: Ian Stokes <ian.stokes at intel.com>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M .travis/linux-build.sh
    M Documentation/faq/releases.rst
    M Documentation/intro/install/dpdk.rst
    M Documentation/topics/dpdk/vhost-user.rst

  Log Message:
  -----------
  dpdk: Use DPDK 17.11.3 release.

Modify travis linux build script to use the latest
DPDK stable release 17.11.3. Update docs for latest
DPDK stable releases.

Signed-off-by: Ian Stokes <ian.stokes at intel.com>
Acked-by: Shahaf Shuler <shahafs at mellanox.com>
Acked-by: Flavio Leitner <fbl at sysclose.org>


  Commit: 241bad15d99a422dce71a6ec6116a2d7b9c31796
      https://github.com/openvswitch/ovs/commit/241bad15d99a422dce71a6ec6116a2d7b9c31796
  Author: Yuanhan Liu <yliu at fridaylinux.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M lib/dpif-netdev.c
    M lib/netdev.h

  Log Message:
  -----------
  dpif-netdev: associate flow with a mark id

Most modern NICs have the ability to bind a flow with a mark, so that
every packet matches such flow will have that mark present in its
descriptor.

The basic idea of doing that is, when we receives packets later, we could
directly get the flow from the mark. That could avoid some very costly
CPU operations, including (but not limiting to) miniflow_extract, emc
lookup, dpcls lookup, etc. Thus, performance could be greatly improved.

Thus, the major work of this patch is to associate a flow with a mark
id (an uint32_t number). The association in netdev datapath is done
by CMAP, while in hardware it's done by the rte_flow MARK action.

One tricky thing in OVS-DPDK is, the flow tables is per-PMD. For the
case there is only one phys port but with 2 queues, there could be 2
PMDs. In other words, even for a single mega flow (i.e. udp,tp_src=1000),
there could be 2 different dp_netdev flows, one for each PMD. That could
results to the same mega flow being offloaded twice in the hardware,
worse, we may get 2 different marks and only the last one will work.

To avoid that, a megaflow_to_mark CMAP is created. An entry will be
added for the first PMD that wants to offload a flow. For later PMDs,
it will see such megaflow is already offloaded, then the flow will not
be offloaded to HW twice.

Meanwhile, the mark to flow mapping becomes to 1:N mapping. That is
what the mark_to_flow CMAP is for. When the first PMD wants to offload
a flow, it allocates a new mark and performs the flow offload by reusing
the ->flow_put method. When it succeeds, a "mark to flow" entry will be
added. For later PMDs, it will get the corresponding mark by above
megaflow_to_mark CMAP. Then, another "mark to flow" entry will be added.

Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Co-authored-by: Finn Christensen <fc at napatech.com>
Signed-off-by: Finn Christensen <fc at napatech.com>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: 62b0859dd89d07a1019a71b06ab2a6d579073479
      https://github.com/openvswitch/ovs/commit/62b0859dd89d07a1019a71b06ab2a6d579073479
  Author: Yuanhan Liu <yliu at fridaylinux.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M lib/flow.c

  Log Message:
  -----------
  flow: Introduce IP packet sanity checks

Those checks were part of the miniflow extractor. Moving them out to
act as a general helpers for packet validation.

Co-authored-by: Finn Christensen <fc at napatech.com>
Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Signed-off-by: Finn Christensen <fc at napatech.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: aab96ec4d81e001f94d3ed65e0e352788ab94c0f
      https://github.com/openvswitch/ovs/commit/aab96ec4d81e001f94d3ed65e0e352788ab94c0f
  Author: Yuanhan Liu <yliu at fridaylinux.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M lib/dp-packet.h
    M lib/dpif-netdev.c
    M lib/flow.c
    M lib/flow.h

  Log Message:
  -----------
  dpif-netdev: retrieve flow directly from the flow mark

So that we could skip some very costly CPU operations, including but
not limiting to miniflow_extract, emc lookup, dpcls lookup, etc. Thus,
performance could be greatly improved.

A PHY-PHY forwarding with 1000 mega flows (udp,tp_src=1000-1999) and
1 million streams (tp_src=1000-1999, tp_dst=2000-2999) show more that
260% performance boost.

Note that though the heavy miniflow_extract is skipped, we still have
to do per packet checking, due to we have to check the tcp_flags.

Co-authored-by: Finn Christensen <fc at napatech.com>
Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Signed-off-by: Finn Christensen <fc at napatech.com>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: e8a2b5bf92bbe2fdf721e6e9b0d13917516d5c27
      https://github.com/openvswitch/ovs/commit/e8a2b5bf92bbe2fdf721e6e9b0d13917516d5c27
  Author: Finn Christensen <fc at napatech.com>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M lib/netdev-dpdk.c

  Log Message:
  -----------
  netdev-dpdk: implement flow offload with rte flow

The basic yet the major part of this patch is to translate the "match"
to rte flow patterns. And then, we create a rte flow with MARK + RSS
actions. Afterwards, all packets match the flow will have the mark id in
the mbuf.

The reason RSS is needed is, for most NICs, a MARK only action is not
allowed. It has to be used together with some other actions, such as
QUEUE, RSS, etc. However, QUEUE action can specify one queue only, which
may break the rss. Likely, RSS action is currently the best we could
now. Thus, RSS action is choosen.

For any unsupported flows, such as MPLS, -1 is returned, meaning the
flow offload is failed and then skipped.

Co-authored-by: Yuanhan Liu <yliu at fridaylinux.org>
Signed-off-by: Finn Christensen <fc at napatech.com>
Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: daf90186e2915d4e4cb3c2e095d0d6207a8eeca7
      https://github.com/openvswitch/ovs/commit/daf90186e2915d4e4cb3c2e095d0d6207a8eeca7
  Author: Yuanhan Liu <yliu at fridaylinux.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M lib/netdev-dpdk.c

  Log Message:
  -----------
  netdev-dpdk: add debug for rte flow patterns

For debug purpose.

Co-authored-by: Finn Christensen <fc at napatech.com>
Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Signed-off-by: Finn Christensen <fc at napatech.com>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: 02bb2824e51d195e894975a8d8da0708f9a6f367
      https://github.com/openvswitch/ovs/commit/02bb2824e51d195e894975a8d8da0708f9a6f367
  Author: Yuanhan Liu <yliu at fridaylinux.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M lib/dpif-netdev.c

  Log Message:
  -----------
  dpif-netdev: do hw flow offload in a thread

Currently, the major trigger for hw flow offload is at upcall handling,
which is actually in the datapath. Moreover, the hw offload installation
and modification is not that lightweight. Meaning, if there are so many
flows being added or modified frequently, it could stall the datapath,
which could result to packet loss.

To diminish that, all those flow operations will be recorded and appended
to a list. A thread is then introduced to process this list (to do the
real flow offloading put/del operations). This could leave the datapath
as lightweight as possible.

Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: c3c722d2c7ee3a315d3520da7e83644fd05a942e
      https://github.com/openvswitch/ovs/commit/c3c722d2c7ee3a315d3520da7e83644fd05a942e
  Author: Yuanhan Liu <yliu at fridaylinux.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M Documentation/howto/dpdk.rst
    M NEWS

  Log Message:
  -----------
  Documentation: document ovs-dpdk flow offload

Add details in the DPDK howto guide on the way to enable the offload along
with the supported NICs and flow types.

The flow offload is marked as experimental.

Signed-off-by: Yuanhan Liu <yliu at fridaylinux.org>
Co-authored-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
Signed-off-by: Ian Stokes <ian.stokes at intel.com>


  Commit: 43307ad0e2543c9c8443f3ab1150ab03f4eb551c
      https://github.com/openvswitch/ovs/commit/43307ad0e2543c9c8443f3ab1150ab03f4eb551c
  Author: Ian Stokes <ian.stokes at intel.com>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M Documentation/automake.mk
    M Documentation/intro/install/dpdk.rst
    M Documentation/topics/dpdk/index.rst
    A Documentation/topics/dpdk/memory.rst
    M NEWS
    M lib/dpdk-stub.c
    M lib/dpdk.c
    M lib/dpdk.h
    M lib/netdev-dpdk.c
    M vswitchd/vswitch.xml

  Log Message:
  -----------
  dpdk: Support both shared and per port mempools.

This commit re-introduces the concept of shared mempools as the default
memory model for DPDK devices. Per port mempools are still available but
must be enabled explicitly by a user.

OVS previously used a shared mempool model for ports with the same MTU
and socket configuration. This was replaced by a per port mempool model
to address issues flagged by users such as:

https://mail.openvswitch.org/pipermail/ovs-discuss/2016-September/042560.html

However the per port model potentially requires an increase in memory
resource requirements to support the same number of ports and configuration
as the shared port model.

This is considered a blocking factor for current deployments of OVS
when upgrading to future OVS releases as a user may have to redimension
memory for the same deployment configuration. This may not be possible for
users.

This commit resolves the issue by re-introducing shared mempools as
the default memory behaviour in OVS DPDK but also refactors the memory
configuration code to allow for per port mempools.

This patch adds a new global config option, per-port-memory, that
controls the enablement of per port mempools for DPDK devices.

    ovs-vsctl set Open_vSwitch . other_config:per-port-memory=true

This value defaults to false; to enable per port memory support,
this field should be set to true when setting other global parameters
on init (such as "dpdk-socket-mem", for example). Changing the value at
runtime is not supported, and requires restarting the vswitch
daemon.

The mempool sweep functionality is also replaced with the
sweep functionality from OVS 2.9 found in commits

c77f692 (netdev-dpdk: Free mempool only when no in-use mbufs.)
a7fb0a4 (netdev-dpdk: Add mempool reuse/free debug.)

A new document to discuss the specifics of the memory models and example
memory requirement calculations is also added.

Signed-off-by: Ian Stokes <ian.stokes at intel.com>
Acked-by: Kevin Traynor <ktraynor at redhat.com>
Acked-by: Tiago Lam <tiago.lam at intel.com>
Tested-by: Tiago Lam <tiago.lam at intel.com>


  Commit: b3ed0e1e058cba8eadebaf7fab10d0a6e1219175
      https://github.com/openvswitch/ovs/commit/b3ed0e1e058cba8eadebaf7fab10d0a6e1219175
  Author: Ben Pfaff <blp at ovn.org>
  Date:   2018-07-06 (Fri, 06 Jul 2018)

  Changed paths:
    M .travis/linux-build.sh
    M Documentation/automake.mk
    M Documentation/faq/releases.rst
    M Documentation/howto/dpdk.rst
    M Documentation/intro/install/dpdk.rst
    M Documentation/topics/dpdk/index.rst
    A Documentation/topics/dpdk/memory.rst
    M Documentation/topics/dpdk/vhost-user.rst
    M NEWS
    M lib/dp-packet.h
    M lib/dpdk-stub.c
    M lib/dpdk.c
    M lib/dpdk.h
    M lib/dpif-netdev.c
    M lib/flow.c
    M lib/flow.h
    M lib/netdev-dpdk.c
    M lib/netdev.h
    M vswitchd/vswitch.xml

  Log Message:
  -----------
  Merge branch 'dpdk_merge' of https://github.com/istokes/ovs into HEAD


Compare: https://github.com/openvswitch/ovs/compare/771680d96fb6...b3ed0e1e058c
      **NOTE:** This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

      Functionality will be removed from GitHub.com on January 31st, 2019.


More information about the git mailing list