public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: "Chopra, Manish" <Manish.Chopra@cavium.com>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"thomas.lendacky@amd.com" <thomas.lendacky@amd.com>,
	"f.fainelli@gmail.com" <f.fainelli@gmail.com>,
	"Elior, Ariel" <Ariel.Elior@cavium.com>,
	"michael.chan@broadcom.com" <michael.chan@broadcom.com>,
	"santosh@chelsio.com" <santosh@chelsio.com>,
	"madalin.bucur@nxp.com" <madalin.bucur@nxp.com>,
	"yisen.zhuang@huawei.com" <yisen.zhuang@huawei.com>,
	"salil.mehta@huawei.com" <salil.mehta@huawei.com>,
	"jeffrey.t.kirsher@intel.com" <jeffrey.t.kirsher@intel.com>,
	"tariqt@mellanox.com" <tariqt@mellanox.com>,
	"saeedm@mellanox.com" <saeedm@mellanox.com>,
	"jiri@mellanox.com" <jiri@mellanox.com>,
	"idosch@mellanox.com" <idosch@mellanox.com>,
Subject: Re: [PATCH 00/10] add flow_rule infrastructure
Date: Mon, 19 Nov 2018 10:57:58 +0100	[thread overview]
Message-ID: <20181119095758.GA2110@nanopsycho> (raw)
In-Reply-To: <CY1PR0701MB1163A0CE191993A9D3B946DD89D80@CY1PR0701MB1163.namprd07.prod.outlook.com>

Mon, Nov 19, 2018 at 10:19:28AM CET, Manish.Chopra@cavium.com wrote:
>> -----Original Message-----
>> From: netdev-owner@vger.kernel.org <netdev-owner@vger.kernel.org> On
>> Behalf Of Pablo Neira Ayuso
>> Sent: Friday, November 16, 2018 7:11 AM
>> To: netdev@vger.kernel.org
>> Cc: davem@davemloft.net; thomas.lendacky@amd.com;
>> f.fainelli@gmail.com; Elior, Ariel <Ariel.Elior@cavium.com>;
>> michael.chan@broadcom.com; santosh@chelsio.com;
>> madalin.bucur@nxp.com; yisen.zhuang@huawei.com;
>> salil.mehta@huawei.com; jeffrey.t.kirsher@intel.com; tariqt@mellanox.com;
>> saeedm@mellanox.com; jiri@mellanox.com; idosch@mellanox.com;
>> jakub.kicinski@netronome.com; peppe.cavallaro@st.com;
>> grygorii.strashko@ti.com; andrew@lunn.ch;
>> vivien.didelot@savoirfairelinux.com; alexandre.torgue@st.com;
>> joabreu@synopsys.com; linux-net-drivers@solarflare.com;
>> ganeshgr@chelsio.com
>> Subject: [PATCH 00/10] add flow_rule infrastructure
>> 
>> External Email
>> 
>> This patchset introduces a kernel intermediate representation (IR) to express
>> ACL hardware offloads, this is heavily based on the existing flow dissector
>> infrastructure and the TC actions. This IR can be used by different frontend
>> ACL interfaces such as ethtool_rxnfc and tc to represent ACL hardware
>> offloads. Main goal is to simplify the development of ACL hardware offloads
>> for the existing frontend interfaces, the idea is that driver developers do not
>> need to add one specific parser for each ACL frontend, instead each frontend
>> can just generate this flow_rule IR and pass it to drivers to populate the
>> hardware IR.
>> 
>>                 .   ethtool_rxnfc   tc
>>                |       (ioctl)    (netlink)
>>                |          |         |     translate native
>>       Frontend |          |         |  interface representation
>>                |          |         |      to flow_rule IR
>>                |          |         |
>>                 .         \/        \/
>>                 .         flow_rule IR
>>                |                |
>>        Drivers |                | parsing of flow_rule IR
>>                |                |  to populate hardware IR
>>                |               \/
>>                 .      hardware IR (driver)
>> 
>> For design and implementation details, please have a look at:
>> 
>>         https://lwn.net/Articles/766695/
>> 
>> As an example, with this patchset, it should be possible to simplify the
>> existing net/qede driver which already has two parsers to populate the
>> hardware IR, one for ethtool_rxnfc interface and another for tc.
>> 
>> This batch is composed of 10 patches:
>> 
>> Patch #1 adds the flow_match structure, this includes the
>>          flow_rule_match_key() interface to check for existing selectors
>>          that are in used in the rule and the flow_rule_match_*()
>>          functions to fetch the selector value and the mask. This
>>          also introduces the initial flow_rule structure skeleton to
>>          avoid a follow up patch that would update the same LoCs.
>> 
>> Patch #2 makes changes to packet edit parser of mlx5e driver, to prepare
>>          introduction of the new flow_action to mangle packets.
>> 
>> Patch #3 Introduce flow_action infrastructure. This infrastructure is
>>          based on the TC actions. Patch #8 extends it so it also
>>          supports two new actions that are only available through the
>>          ethtool_rxnfc interface.
>> 
>> Patch #4 Add function to translate TC action to flow_action from
>>          cls_flower.
>> 
>> Patch #5 Add infrastructure to fetch statistics into container structure
>>          and synchronize them to TC actions from cls_flower. Another
>>          preparation patch before patch #7, so we can stop exposing the
>>          TC action native layout to the drivers.
>> 
>> Patch #6 Use flow_action infrastructure from drivers.
>> 
>> Patch #7 Do not expose TC actions to drivers anymore, now that drivers
>>          have been converted to use the flow_action infrastructure after
>>          patch #5.
>> 
>> Patch #8 Support to wake-up-on-lan and queue actions for the flow_action
>>          infrastructure, two actions supported by NICs. This is used by
>>          the ethtool_rx_flow interface.
>> 
>> Patch #9 Add a function to translate from ethtool_rx_flow_spec structure
>>          to the flow_action structure. This is a simple enough for its
>>          first client: the ethtool_rxnfc interface in the bcm_sf2 driver.
>> 
>> Patch #10 Update bcm_sf2 to use this new translator function and
>>           update codebase to configure hardware IR using the
>>           flow_action representation. This will allow later development
>>           of cls_flower using the same codebase from the driver.
>> 
>> This patchset has passed here functional tests of the codepath that generates
>> the flow_rule structure and the functions to implement the parsers that
>> populate the hardware IR.
>> 
>> Thanks.
>> 
>> Pablo Neira Ayuso (10):
>>   flow_dissector: add flow_rule and flow_match structures and use them
>>   net/mlx5e: support for two independent packet edit actions
>>   flow_dissector: add flow action infrastructure
>>   cls_api: add translator to flow_action representation
>>   cls_flower: add statistics retrieval infrastructure and use it
>>   drivers: net: use flow action infrastructure
>>   cls_flower: don't expose TC actions to drivers anymore
>>   flow_dissector: add wake-up-on-lan and queue to flow_action
>>   flow_dissector: add basic ethtool_rx_flow_spec to flow_rule structure
>> translator
>>   dsa: bcm_sf2: use flow_rule infrastructure
>> 
>>  drivers/net/dsa/bcm_sf2_cfp.c                      | 103 ++-
>>  drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c       | 252 +++----
>>  .../net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c   | 450 ++++++-------
>>  drivers/net/ethernet/intel/i40e/i40e_main.c        | 178 ++---
>>  drivers/net/ethernet/intel/iavf/iavf_main.c        | 195 +++---
>>  drivers/net/ethernet/intel/igb/igb_main.c          |  64 +-
>>  drivers/net/ethernet/mellanox/mlx5/core/en_tc.c    | 743 ++++++++++--------
>> ---
>>  drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c |   2 +-
>>  .../net/ethernet/mellanox/mlxsw/spectrum_flower.c  | 259 ++++---
>> drivers/net/ethernet/netronome/nfp/flower/action.c | 196 +++---
>> drivers/net/ethernet/netronome/nfp/flower/match.c  | 416 ++++++------
>>  .../net/ethernet/netronome/nfp/flower/offload.c    | 151 ++---
>>  drivers/net/ethernet/qlogic/qede/qede_filter.c     |  93 ++-
>>  include/net/flow_dissector.h                       | 185 +++++
>>  include/net/pkt_cls.h                              |  23 +-
>>  net/core/flow_dissector.c                          | 341 ++++++++++
>>  net/sched/cls_api.c                                | 113 ++++
>>  net/sched/cls_flower.c                             |  42 +-
>>  18 files changed, 2120 insertions(+), 1686 deletions(-)
>> 
>> --
>> 2.11.0
>
>Today, we have different kernel interfaces(aRFS/ethtool/tc) to do flow offloading.
>One big question arises in my mind that why we need these all different interfaces to do flow offloading and
>why can't they just be combined into a single kernel interface somehow.
>Having these flow offloading done through various hooks makes driver implementation really complex.
>
>Specially when looking at ethtool/tc flows most of the use cases seems common to me -
>
>1.  Drop action can be done on tuples from both tc/ethtool flows.
>2.  Flow redirection is done from both ethtool/tc
>     (May be with just slight difference ? as Ethtool does steering on PF and VF/VF-queues
>      but tc doesn't have redirection on queues which can be extended over tc)
>3.  Could be more such common cases which could be the reason to combine them through single interface ?

Sure you can make one interface feature complete. But that does not mean
you can remove the others. At least not easily. You woul break UAPI.

>
>Thanks !!
>
>
>

  reply	other threads:[~2018-11-19 20:27 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-16  1:41 [PATCH 00/10] add flow_rule infrastructure Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 01/10] flow_dissector: add flow_rule and flow_match structures and use them Pablo Neira Ayuso
2018-11-18  4:32   ` David Miller
2018-11-16  1:41 ` [PATCH 02/10] net/mlx5e: support for two independent packet edit actions Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 03/10] flow_dissector: add flow action infrastructure Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 04/10] cls_api: add translator to flow_action representation Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 05/10] cls_flower: add statistics retrieval infrastructure and use it Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 06/10] drivers: net: use flow action infrastructure Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 07/10] cls_flower: don't expose TC actions to drivers anymore Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 08/10] flow_dissector: add wake-up-on-lan and queue to flow_action Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 09/10] flow_dissector: add basic ethtool_rx_flow_spec to flow_rule structure translator Pablo Neira Ayuso
2018-11-16  1:41 ` [PATCH 10/10] dsa: bcm_sf2: use flow_rule infrastructure Pablo Neira Ayuso
2018-11-18  4:32   ` David Miller
2018-11-16 10:29 ` [PATCH 00/10] add " Or Gerlitz
2018-11-18  5:14   ` David Miller
2018-11-19  9:19 ` Chopra, Manish
2018-11-19  9:57   ` Jiri Pirko [this message]
2018-11-19 19:04     ` Florian Fainelli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181119095758.GA2110@nanopsycho \
    --to=jiri@resnulli.us \
    --cc=Ariel.Elior@cavium.com \
    --cc=Manish.Chopra@cavium.com \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=idosch@mellanox.com \
    --cc=jeffrey.t.kirsher@intel.com \
    --cc=jiri@mellanox.com \
    --cc=madalin.bucur@nxp.com \
    --cc=michael.chan@broadcom.com \
    --cc=netdev@vger.kernel.org \
    --cc=pablo@netfilter.org \
    --cc=saeedm@mellanox.com \
    --cc=salil.mehta@huawei.com \
    --cc=santosh@chelsio.com \
    --cc=tariqt@mellanox.com \
    --cc=thomas.lendacky@amd.com \
    --cc=yisen.zhuang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox