From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E266EA052F; Wed, 29 Jan 2020 23:22:38 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id E6A341BFF4; Wed, 29 Jan 2020 23:22:36 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 6DE0D1BFEA for ; Wed, 29 Jan 2020 23:22:35 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Jan 2020 14:22:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,379,1574150400"; d="scan'208";a="429826720" Received: from orsmsx110.amr.corp.intel.com ([10.22.240.8]) by fmsmga006.fm.intel.com with ESMTP; 29 Jan 2020 14:22:28 -0800 Received: from orsmsx115.amr.corp.intel.com (10.22.240.11) by ORSMSX110.amr.corp.intel.com (10.22.240.8) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 29 Jan 2020 14:22:29 -0800 Received: from ORSEDG002.ED.cps.intel.com (10.7.248.5) by ORSMSX115.amr.corp.intel.com (10.22.240.11) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 29 Jan 2020 14:22:29 -0800 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.174) by edgegateway.intel.com (134.134.137.101) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 29 Jan 2020 14:22:29 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NEgx9i86bUzxsjUPIUI4yQblK9zJSW2IYPy7ZX/7oQZ7fkadQARZqkPwQfY2J1IR7Njr2CBveJWyvTEXCAQFaSECCczM3U4JjiRaVhbgPiggPCwuGUW9nlOobjQ2zj5ZlWWjlcUcyssKAenZDVOLoWZiXYCS9Ca1Mn77UQcsBsgw+VY6BSz1MWkC9f1ABkvBk4htdtuMSEMAuePFFwR0SMA6xY9CwNkL+FbHyv16+N3VwoOHJmQ7n/yanLKlIqqMwbDKHdlfhktnFoSspRFcmzy+Xbz75p/CmFKTDV1Nh4VM5u28q8dI+ABpfRcKlpdq7mZiN2RYryBsexGUjFoFJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IJqS90SqD1cHBz7L8AAaijMeMgtfuDcJnw3wqUd/ntI=; b=A8TB+Is+/GE78b0XsV00VmH05vX69X2Emi31ITvfp8wOib5QhTc3rHbi3pfGJL0UHaeTQfDTSxzWyHtME/VMtD5tSfgXtoNxJOwDgxznJmS1zGWW7t/nFIQ6H/XQGnEBox5mYTcSReLzE13viqqaNnq7ss61EFlS1Hv6n5igiFT68f2aFM2ciz/g5wry2uNYoHIF7jkVXLIRecyIDISUv/DDk4NoI3f3NY2GY2XGaWhVsxuSsnQ7WcjWrZCUdYDhIHq+lcmJ9AQReTBpGFjIwpG/wIBZesvS3H1h6xXccecMf8Wtj88b5kuqfHbfOUmzh1w8YBIGXBvUW3g8lwbe4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IJqS90SqD1cHBz7L8AAaijMeMgtfuDcJnw3wqUd/ntI=; b=u/2yzQgOd/q6o1kmzop9pwWQQzza4yvw4m2Ks7BV5TYdQohcwlO82alUrUwZW/o/Y4c0A6Dn7JeRCe1P3BGAxbEZ4+yCdkSW6xsv38I4cEhuR3a+XTrAD1Z2MdYdi35FwU896yXsESMDNcF2fq+RHPFQJ7IWH68Tu2czwBh5lsU= Received: from SN6PR11MB2558.namprd11.prod.outlook.com (52.135.94.19) by SN6PR11MB3520.namprd11.prod.outlook.com (52.135.124.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2686.26; Wed, 29 Jan 2020 22:22:28 +0000 Received: from SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::4d86:362a:13c3:8386]) by SN6PR11MB2558.namprd11.prod.outlook.com ([fe80::4d86:362a:13c3:8386%7]) with mapi id 15.20.2665.027; Wed, 29 Jan 2020 22:22:28 +0000 From: "Ananyev, Konstantin" To: Anoob Joseph , Akhil Goyal , "Nicolau, Radu" , Thomas Monjalon CC: Lukasz Bartosik , Jerin Jacob , Narayana Prasad , Ankur Dwivedi , Archana Muniganti , Tejasree Kondoj , Vamsi Attunuru , "dev@dpdk.org" Thread-Topic: [PATCH v2 10/12] examples/ipsec-secgw: add driver mode worker Thread-Index: AQHVz5hjp+i5ApJRBEijZO02HfUgjagCRQ7A Date: Wed, 29 Jan 2020 22:22:27 +0000 Message-ID: References: <1575808249-31135-1-git-send-email-anoobj@marvell.com> <1579527918-360-1-git-send-email-anoobj@marvell.com> <1579527918-360-11-git-send-email-anoobj@marvell.com> In-Reply-To: <1579527918-360-11-git-send-email-anoobj@marvell.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOThmZDJmM2YtOTY0Yi00NWIzLTgxOTUtZmQyOGNjZjIxZTAyIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoid0hVRm12Wlh2Rmp2TGJVeFhldiswdXp6b1dtRm9wN2VOc0ZyV2hJMTlibFVMa2xvd2VTbldCSk5PRFJyV05LbCJ9 dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 x-ctpclassification: CTP_NT authentication-results: spf=none (sender IP is ) smtp.mailfrom=konstantin.ananyev@intel.com; x-originating-ip: [192.198.151.187] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4a50b2f4-6ef8-4606-6fb6-08d7a509b976 x-ms-traffictypediagnostic: SN6PR11MB3520: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 02973C87BC x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(366004)(136003)(346002)(396003)(376002)(39860400002)(199004)(189003)(2906002)(6506007)(86362001)(7416002)(54906003)(110136005)(52536014)(186003)(316002)(66556008)(66946007)(26005)(478600001)(8936002)(81166006)(5660300002)(8676002)(81156014)(9686003)(7696005)(64756008)(76116006)(4326008)(66446008)(55016002)(71200400001)(33656002)(66476007); DIR:OUT; SFP:1102; SCL:1; SRVR:SN6PR11MB3520; H:SN6PR11MB2558.namprd11.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ehSPdYXyJO5wbeGX/Z3PsPxQYNuJ4X/zZCTuU/eE8Y8Aa8aLLlTmfaT1j7EImgcFh3TG9J44LIL85j/4hkBJwtwNvAbN4EqfqGoa57Zf4yNjeQeh8d4RfP9nD5xiXEFCVNPF8L87MHYEGwNVPw7sOP0X3eNjf9i4KuFzCsM7NEFrTcHyK05LnmvtyO6oux6OOhugFMRtV4Ksoq0utN+F43jROs/q6OoO5ID3ZuvOv+i6KgK2uSfF2WWWDfBY0d36GiPWucLFAAqeAR4NrynK8CGufovXBxUCccGH2ZTNR63HFnlI+GQ8VZNJ/xdwjsP/XuuekldavS5XsKrjHFhsxS/WjXFWp0DGW5O5yuaRZEduvYr5tcFWK7URdtCSYoWJM5k6nu1Y2cMHlWO0yBx+NQ3qocv1OXkbIQ4bJNd+7JxMdLpingWCTM+IrUuEuG/M x-ms-exchange-antispam-messagedata: obPWZH5P9ih33LDYL1UizdldLmaGIcNISlIiFdVRz2c3lPjas6jj1YomXCytVEZnf1v/tszYB13WQ+b9xFxae3jkkyhYBXfZ+hrKoBOoNjMLDWtfYhIly8IRUkiasyJ27i6RRh6DFoZQo3T8uwvlCQ== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 4a50b2f4-6ef8-4606-6fb6-08d7a509b976 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jan 2020 22:22:27.9410 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ISYt63YOYA9WjJbDBraPcSRFKV2lGrT36r+5g0qcJpxw6ocB0SHmTY2krOIHyeXbSyB8Otxzq4ElNYjDgChtyugVvAa6RaAb0A+cS9R5Lc0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3520 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v2 10/12] examples/ipsec-secgw: add driver mode worker X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" > Add driver inbound and outbound worker thread for ipsec-secgw. In driver > mode application does as little as possible. It simply forwards packets > back to port from which traffic was received instructing HW to apply > inline security processing using first outbound SA configured for > a given port. If a port does not have SA configured outbound traffic > on that port will be silently dropped. The aim of this mode is to > measure HW capabilities. Driver mode is selected with single-sa option. > The single-sa option accepts SA index however in event mode the SA > index is ignored. >=20 > Example command to run ipsec-secgw in driver mode: > ipsec-secgw -w 0002:02:00.0,ipsec_in_max_spi=3D128 > -w 0002:03:00.0,ipsec_in_max_spi=3D128 -w 0002:0e:00.0 -w 0002:10:00.1 > --log-level=3D8 -c 0x1 -- -P -p 0x3 -u 0x1 --config "(1,0,0),(0,0,0)" > -f aes-gcm.cfg --transfer-mode event --schedule-type parallel > --single-sa 0 >=20 > Signed-off-by: Anoob Joseph > Signed-off-by: Ankur Dwivedi > Signed-off-by: Lukasz Bartosik > --- > examples/ipsec-secgw/Makefile | 1 + > examples/ipsec-secgw/ipsec-secgw.c | 36 +++--- > examples/ipsec-secgw/ipsec-secgw.h | 17 +++ > examples/ipsec-secgw/ipsec.h | 11 ++ > examples/ipsec-secgw/ipsec_worker.c | 240 ++++++++++++++++++++++++++++++= ++++++ > examples/ipsec-secgw/meson.build | 2 +- > 6 files changed, 291 insertions(+), 16 deletions(-) > create mode 100644 examples/ipsec-secgw/ipsec-secgw.h > create mode 100644 examples/ipsec-secgw/ipsec_worker.c >=20 > diff --git a/examples/ipsec-secgw/Makefile b/examples/ipsec-secgw/Makefil= e > index 09e3c5a..f6fd94c 100644 > --- a/examples/ipsec-secgw/Makefile > +++ b/examples/ipsec-secgw/Makefile > @@ -15,6 +15,7 @@ SRCS-y +=3D sa.c > SRCS-y +=3D rt.c > SRCS-y +=3D ipsec_process.c > SRCS-y +=3D ipsec-secgw.c > +SRCS-y +=3D ipsec_worker.c > SRCS-y +=3D event_helper.c >=20 > CFLAGS +=3D -gdwarf-2 > diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ip= sec-secgw.c > index f1cc3fb..86215fb 100644 > --- a/examples/ipsec-secgw/ipsec-secgw.c > +++ b/examples/ipsec-secgw/ipsec-secgw.c > @@ -70,8 +70,6 @@ volatile bool force_quit; >=20 > #define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */ >=20 > -#define NB_SOCKETS 4 > - > /* Configure how many packets ahead to prefetch, when reading packets */ > #define PREFETCH_OFFSET 3 >=20 > @@ -79,8 +77,6 @@ volatile bool force_quit; >=20 > #define MAX_LCORE_PARAMS 1024 >=20 > -#define UNPROTECTED_PORT(port) (unprotected_port_mask & (1 << portid)) > - > /* > * Configurable number of RX/TX ring descriptors > */ > @@ -190,12 +186,10 @@ static const struct option lgopts[] =3D { > /* mask of enabled ports */ > static uint32_t enabled_port_mask; > static uint64_t enabled_cryptodev_mask =3D UINT64_MAX; > -static uint32_t unprotected_port_mask; > static int32_t promiscuous_on =3D 1; > static int32_t numa_on =3D 1; /**< NUMA is enabled by default. */ > static uint32_t nb_lcores; > static uint32_t single_sa; > -static uint32_t single_sa_idx; > static uint32_t schedule_type; >=20 > /* > @@ -279,8 +273,6 @@ static struct rte_eth_conf port_conf =3D { > }, > }; >=20 > -static struct socket_ctx socket_ctx[NB_SOCKETS]; > - > /* > * Determine is multi-segment support required: > * - either frame buffer size is smaller then mtu > @@ -1114,8 +1106,8 @@ drain_outbound_crypto_queues(const struct lcore_con= f *qconf, > } >=20 > /* main processing loop */ > -static int32_t > -main_loop(__attribute__((unused)) void *dummy) > +void > +ipsec_poll_mode_worker(void) > { > struct rte_mbuf *pkts[MAX_PKT_BURST]; > uint32_t lcore_id; > @@ -1157,7 +1149,7 @@ main_loop(__attribute__((unused)) void *dummy) > if (qconf->nb_rx_queue =3D=3D 0) { > RTE_LOG(DEBUG, IPSEC, "lcore %u has nothing to do\n", > lcore_id); > - return 0; > + return; > } >=20 > RTE_LOG(INFO, IPSEC, "entering main loop on lcore %u\n", lcore_id); > @@ -1170,7 +1162,7 @@ main_loop(__attribute__((unused)) void *dummy) > lcore_id, portid, queueid); > } >=20 > - while (1) { > + while (!force_quit) { > cur_tsc =3D rte_rdtsc(); >=20 > /* TX queue buffer drain */ > @@ -1324,8 +1316,10 @@ print_usage(const char *prgname) > " -a enables SA SQN atomic behaviour\n" > " -f CONFIG_FILE: Configuration file\n" > " --config (port,queue,lcore): Rx queue configuration\n" > - " --single-sa SAIDX: Use single SA index for outbound traffic,\n" > - " bypassing the SP\n" > + " --single-sa SAIDX: In poll mode use single SA index for\n" > + " outbound traffic, bypassing the SP\n" > + " In event mode selects driver mode,\n" > + " SA index value is ignored\n" > " --cryptodev_mask MASK: Hexadecimal bitmask of the crypto\n" > " devices to configure\n" > " --transfer-mode MODE\n" > @@ -1980,6 +1974,18 @@ cryptodevs_init(void) > i++; > } >=20 > + /* > + * Set the queue pair to at least the number of ethernet > + * devices for inline outbound. > + */ > + qp =3D RTE_MAX(rte_eth_dev_count_avail(), qp); > + > + /* > + * The requested number of queues should never exceed > + * the max available > + */ > + qp =3D RTE_MIN(qp, max_nb_qps); > + Same comment as for v1: I still don't understand why we have to do it for unconditionally. For poll mode it seems to bring nothing but waste of resources. Konstantin > if (qp =3D=3D 0) > continue; >=20 > @@ -2871,7 +2877,7 @@ main(int32_t argc, char **argv) > check_all_ports_link_status(enabled_port_mask); >=20 > /* launch per-lcore init on every lcore */ > - rte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER); > + rte_eal_mp_remote_launch(ipsec_launch_one_lcore, eh_conf, CALL_MASTER); >=20 > RTE_LCORE_FOREACH_SLAVE(lcore_id) { > if (rte_eal_wait_lcore(lcore_id) < 0) > diff --git a/examples/ipsec-secgw/ipsec-secgw.h b/examples/ipsec-secgw/ip= sec-secgw.h > new file mode 100644 > index 0000000..5b19e29 > --- /dev/null > +++ b/examples/ipsec-secgw/ipsec-secgw.h > @@ -0,0 +1,17 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (C) 2020 Marvell International Ltd. > + */ > +#ifndef _IPSEC_SECGW_H_ > +#define _IPSEC_SECGW_H_ > + > +#define NB_SOCKETS 4 > + > +#define UNPROTECTED_PORT(portid) (unprotected_port_mask & (1 << portid)) > + > +/* Port mask to identify the unprotected ports */ > +uint32_t unprotected_port_mask; > + > +/* Index of SA in single mode */ > +uint32_t single_sa_idx; > + > +#endif /* _IPSEC_SECGW_H_ */ > diff --git a/examples/ipsec-secgw/ipsec.h b/examples/ipsec-secgw/ipsec.h > index 0539aec..65be2ac 100644 > --- a/examples/ipsec-secgw/ipsec.h > +++ b/examples/ipsec-secgw/ipsec.h > @@ -13,6 +13,8 @@ > #include > #include >=20 > +#include "ipsec-secgw.h" > + > #define RTE_LOGTYPE_IPSEC RTE_LOGTYPE_USER1 > #define RTE_LOGTYPE_IPSEC_ESP RTE_LOGTYPE_USER2 > #define RTE_LOGTYPE_IPSEC_IPIP RTE_LOGTYPE_USER3 > @@ -258,6 +260,15 @@ struct ipsec_traffic { > struct traffic_type ip6; > }; >=20 > +/* Socket ctx */ > +struct socket_ctx socket_ctx[NB_SOCKETS]; > + > +void > +ipsec_poll_mode_worker(void); > + > +int > +ipsec_launch_one_lcore(void *args); > + > uint16_t > ipsec_inbound(struct ipsec_ctx *ctx, struct rte_mbuf *pkts[], > uint16_t nb_pkts, uint16_t len);