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 27BF7A00C5; Thu, 30 Apr 2020 16:43:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 98E1C1DB8C; Thu, 30 Apr 2020 16:43:31 +0200 (CEST) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id CF6CA1DB8A for ; Thu, 30 Apr 2020 16:43:29 +0200 (CEST) IronPort-SDR: Z8zmPjpwYVr2eTk5e2i4wJtmWrOzLAWookT+W5M36baBvqKlY4lV5i3S6Ix7nYh2kj1cAwrLYk QtsEHM0FvvQQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Apr 2020 07:43:28 -0700 IronPort-SDR: eDHURI1es82g9eDJLeUe1ZOmBuKOXfa4Kh27KNrNjxAuetk+AsYztrzLmh0bHi2q+f4aBnP+Dt I4jgg5IMx1Nw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,336,1583222400"; d="scan'208";a="247209830" Received: from orsmsx108.amr.corp.intel.com ([10.22.240.6]) by orsmga007.jf.intel.com with ESMTP; 30 Apr 2020 07:43:28 -0700 Received: from orsmsx161.amr.corp.intel.com (10.22.240.84) by ORSMSX108.amr.corp.intel.com (10.22.240.6) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Apr 2020 07:43:28 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX161.amr.corp.intel.com (10.22.240.84) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Apr 2020 07:43:28 -0700 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (104.47.38.55) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Apr 2020 07:43:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ekRnBxhoZh1vsQg5ucb4nkKqRjxWR/8xbvAtHLIaWXUzfr3ZjFDIhzPJvc6vjcevUl6GV7wlMPKYWUnfp2hFdqxbDTaLFr6I87qkH7x7Bgb7wWnayWtZmoT4wro7eccuIGoCuAxndie+yUu3PIDgMWUpWJmqfBtUkX9eS11azd/L/I3SG+Y2BpSoyAfUzu2JkNOELd9SgAgR0/LHepBbhONdPpVrApNT3zpdQ5qQuaAeh8mELloPeM6JJf39oGE5CNFcgt/v7mfItsJSS7UE4tjE2jzJKkawNag1VpR9+qxtaO8mDqAjGO5RMia8CymFqHu/jqezHM674rElsU0LWQ== 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=IDDDkuE/ouH9fZrQZjIDaPQqEyzCI9Nb31Ji4Jubr4M=; b=UnUlPJNOrtyplQ18ZiTKhjnCXa4/62qKyVWGDVHdZhPjxc4s6Rey/lRJtuv56x9UE5POlVphXrDtdl8QzwjC1NbZU6e6JiKqTiIhGGK+sFva8YmFSEs5ozPfKcKtVY+6sB5kk2TMTI7nBjtrnTasVFwN+nMqReqNFE/EGqucBy2fPu9qJ8G8P35cv1aGxtrP/djCmfNrWciBlCZuMAbdgUqMzE51qjQjYhorDWHX1nvm6u+vGNSCDeKSHfkrCPN8ipoXbxlibAsEz8m4jBHzvPJVBTdJop1qT/Qbwf2M+C3TI//2y2xVLiM8OBU3aew2H/L/DxjoQnQvT6uz5quufA== 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=IDDDkuE/ouH9fZrQZjIDaPQqEyzCI9Nb31Ji4Jubr4M=; b=rsVE4wzGisZmV4KXYdCTFg/6MFrobPjOArCiW4w3xpUBxvXaWSAfHIoV0ZYiStclOkej3+IUuL6nvg6bXzh8+AxhN/y+z1WB7iVJRvpiOoKls16CC9S4cwwayGywW16CuRZ+KD6AOyWseH7G7iFDCjnTlmtuluiNDpKKtK1veSM= Received: from BYAPR11MB3301.namprd11.prod.outlook.com (2603:10b6:a03:7f::26) by BYAPR11MB2773.namprd11.prod.outlook.com (2603:10b6:a02:c6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.13; Thu, 30 Apr 2020 14:43:25 +0000 Received: from BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::f8cb:58cd:e958:fff4]) by BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::f8cb:58cd:e958:fff4%6]) with mapi id 15.20.2937.028; Thu, 30 Apr 2020 14:43:25 +0000 From: "Ananyev, Konstantin" To: Honnappa Nagarahalli , "dev@dpdk.org" CC: "aconole@redhat.com" , nd , nd Thread-Topic: [PATCH] test/ring: code rework to reduce compilation time Thread-Index: AQHWHk+83qvZh/D4lkSDqayxys8lo6iQ6NuAgAC+FfA= Date: Thu, 30 Apr 2020 14:43:25 +0000 Message-ID: References: <20200429175714.31141-1-konstantin.ananyev@intel.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.151.189] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: aeef8b9e-7f98-49af-7468-08d7ed14d6e8 x-ms-traffictypediagnostic: BYAPR11MB2773: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 0389EDA07F x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR11MB3301.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(366004)(136003)(376002)(39860400002)(396003)(346002)(53546011)(6506007)(8676002)(8936002)(26005)(55016002)(9686003)(4326008)(966005)(186003)(478600001)(54906003)(110136005)(316002)(33656002)(7696005)(76116006)(64756008)(2906002)(66476007)(66946007)(66446008)(5660300002)(86362001)(30864003)(52536014)(71200400001)(66556008)(579004); DIR:OUT; SFP:1102; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: OpU4YnochWkUExnR0CV/ayEQfXY2vSG9EsHq1dgcL6JAslSbh8hDyYaDiRkvHTmcV/eAh7rp1WAmH+LWqj+WPSv2BQdgkJ2Qf5+RwfCame3B2i5GqNCP22JHo9Rx/7U0FXHikyilL3jUxv9aOE8WRdQnJP2g5bziE2WsC1vM/QmaX2ZH9FdzXoZvZmNiwOWheWj/ae0D04zypXMzx472pwaeU36rmIEBLPzRKLcOKjGhBGsi8Gx4hN7nA+La8vt9NydsrrFe26O5ZkiL3yfppFz5reGnwZjdfD7tZxprvaijNpk8pNzKZftwRAT2AWzUtdCnLT1T/SUxH1JZhALGMYeNI5KPBpm8p775j7+XyvQLWt1clPBWhqg4zJ/vSc5qM+sd5SiaWQORM5jriVPFDLb7GY4WQIK6qB2Erk+gcZ4jgNzitC/kwAuaB0n1tOoc6UEaJKOKlJUAVnsquforFTanXIGW4faaTZk9imQyTwUrkhE9Dm0J3hJCBdhG+GPp4Y/DATXbT/zxVWtCVkgobg== x-ms-exchange-antispam-messagedata: l9nZ0A41+Nr1zUTTqn7gdU4U1OSMcTzVJLv8T9TnEss33aszdoN4RlAgeNOLIJjYDOHQDTpAotYSi3pz79PLeTNYtaOZjOQ4HlUPaJgqaW1WPO3bTf1chY2rbEAMRz0QiXOvNx62b3jt0r+F6UqlWPe9x0GuK8O8UhPvbAGaysbMjWAKUEoSFYDXutzK3Iza9/FWYLZaMzlPxLYxkNCIUfE2I5hkRAHNT71ip0ib0WyJxdtl9+3gE8kZhMpYno+j9WcEoPT9Z/cwMMtiJdmVQOLCjS/Cf0bGa+uHqZEdbSDkWTp3ukz36NBi0EfbGE4dnIhzOHZDJ4ya+zaWuFcvcvDZy3m/7sNGSzFcGfpey8FLmXta7D99INanm3xhIRUt2/jCsMB8MXL39jr1ooaLwdUzmf8FVPO2ewBlwPq7Cyxl1YbcHBO7hJKIZM8Fv9fRoMDZTBB63cd/33HUglhe+cr7vPqFhBkzG1827s+6XkSM2MqrC8L7itTwRjQ4KCdpwshWIMLo/sUzetKCvPjD5OVubQDMVfUaGnBLmsLxObjsOgQTwFJZzI5YUu8uAYWU3uNdOS8M/j6LkimpcybGehCS05tJjlaT4Vi3TdmyCI1LRmxxNzvXWOAFpg0o7HLtFqpN3VcoGe4bHp+LIQ6Hf+8/aqx0v9HtDgDbuBpA0smm+xKmErHQKtOO622D/Uyg5ndCLM5ncVQkQeC7WbyOcDNMc0ywtUXlA1gK1UgDxirvrz9mrIoSGnBN5srwsxLVRAt+lgajhvEtY/ZEKNrugwuHRp8pHpTtCQygGutgN9bhTVODQmRS1eVMHUqPkXwF x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: aeef8b9e-7f98-49af-7468-08d7ed14d6e8 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Apr 2020 14:43:25.5142 (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: oXY0pyFxtu3DoCMMrnKYoAhwFAC2hIMfciozefsO04HPQojBsAw+p+Sc7Ph0duZekCxZkg/8nw8pW2zv8IFlo4F4H9BUWM4M4jg6RmoEZAo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB2773 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH] test/ring: code rework to reduce compilation time 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" Hi Honnappa, =20 > Hi Konstantin, > I like the way the tests are organized and it looks good. >=20 > I am just wondering about the way it is being tested here. The intent to = write the test cases the way they are currently is to mimic how the > APIs would be used mostly. IMO, the APIs would be used with a constant va= lue for element size so that the compiler will throw away the > unwanted code (in the functions where the actual copy is being done). >=20 > With your method here, it looks to me like all the branches in the copy f= unctions are kept and the branch decisions are done at run time. > Is my understanding correct? You mean branching on esize[] values? Actually from what I've seen that happens for both cases: before and after the patch (gcc 7.3 -O3). Main intention in my changes was to avoid using test_ring_enqueue/test_ring= _dequeue, as it seems too many branches here and it takes compiler a lot of effort to= resolve all of them at compile time. So I replaced it with array of function pointers (test_enqdeq_impl[]) and = iterating over it. That way compiler knows straightway which function to use. =20 > Can you please check this? https://patches.dpdk.org/patch/69567/ As I can see your approach reduces number of test-cases by factor of 5: now each of test_ring_burst_bulk_tests[1-4] is executed only with just one esize value, correct? In term of compilation speed - it helps. On my box with (gcc 7.3 -O3) compiling test_ring.c takes: orig code: ~100s with 69567 (your patch): < 20s with 69559 (my patch): < 10s Konstantin =20 >=20 > > -----Original Message----- > > From: Konstantin Ananyev > > Sent: Wednesday, April 29, 2020 12:57 PM > > To: dev@dpdk.org > > Cc: aconole@redhat.com; Honnappa Nagarahalli > > ; Konstantin Ananyev > > > > Subject: [PATCH] test/ring: code rework to reduce compilation time > > > > Rework test code to reduce code complexity for the compiler and bring d= own > > compilation time and memory consumption. > > > > Signed-off-by: Konstantin Ananyev > > --- > > app/test/test_ring.c | 373 +++++++++++++++++++++++++++++-------------- > > 1 file changed, 249 insertions(+), 124 deletions(-) > > > > diff --git a/app/test/test_ring.c b/app/test/test_ring.c index > > e21557cd9..0ae97d341 100644 > > --- a/app/test/test_ring.c > > +++ b/app/test/test_ring.c > > @@ -58,6 +58,181 @@ > > > > static const int esize[] =3D {-1, 4, 8, 16, 20}; > > > > +static const struct { > > + const char *desc; > > + uint32_t api_type; > > + uint32_t create_flags; > > + struct { > > + unsigned int (*flegacy)(struct rte_ring *r, > > + void * const *obj_table, unsigned int n, > > + unsigned int *free_space); > > + unsigned int (*felem)(struct rte_ring *r, const void *obj_table, > > + unsigned int esize, unsigned int n, > > + unsigned int *free_space); > > + } enq; > > + struct { > > + unsigned int (*flegacy)(struct rte_ring *r, > > + void **obj_table, unsigned int n, > > + unsigned int *available); > > + unsigned int (*felem)(struct rte_ring *r, void *obj_table, > > + unsigned int esize, unsigned int n, > > + unsigned int *available); > > + } deq; > > +} test_enqdeq_impl[] =3D { > > + { > > + .desc =3D "MP/MC sync mode", > Details about the tests are already printed by the function 'test_ring_pr= int_test_string'. This string should be 'Test standard ring'. >=20 > > + .api_type =3D TEST_RING_ELEM_BULK | > > TEST_RING_THREAD_DEF, > > + .create_flags =3D 0, > > + .enq =3D { > > + .flegacy =3D rte_ring_enqueue_bulk, > > + .felem =3D rte_ring_enqueue_bulk_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_dequeue_bulk, > > + .felem =3D rte_ring_dequeue_bulk_elem, > > + }, > > + }, > > + { > > + .desc =3D "SP/SC sync mode", > > + .api_type =3D TEST_RING_ELEM_BULK | > > TEST_RING_THREAD_SPSC, > > + .create_flags =3D RING_F_SP_ENQ | RING_F_SC_DEQ, > > + .enq =3D { > > + .flegacy =3D rte_ring_sp_enqueue_bulk, > > + .felem =3D rte_ring_sp_enqueue_bulk_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_sc_dequeue_bulk, > > + .felem =3D rte_ring_sc_dequeue_bulk_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP/MC sync mode", > > + .api_type =3D TEST_RING_ELEM_BULK | > > TEST_RING_THREAD_MPMC, > > + .create_flags =3D 0, > > + .enq =3D { > > + .flegacy =3D rte_ring_mp_enqueue_bulk, > > + .felem =3D rte_ring_mp_enqueue_bulk_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_mc_dequeue_bulk, > > + .felem =3D rte_ring_mc_dequeue_bulk_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP_RTS/MC_RTS sync mode", > > + .api_type =3D TEST_RING_ELEM_BULK | > > TEST_RING_THREAD_DEF, > > + .create_flags =3D RING_F_MP_RTS_ENQ | > > RING_F_MC_RTS_DEQ, > > + .enq =3D { > > + .flegacy =3D rte_ring_enqueue_bulk, > > + .felem =3D rte_ring_enqueue_bulk_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_dequeue_bulk, > > + .felem =3D rte_ring_dequeue_bulk_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP_HTS/MC_HTS sync mode", > > + .api_type =3D TEST_RING_ELEM_BULK | > > TEST_RING_THREAD_DEF, > > + .create_flags =3D RING_F_MP_HTS_ENQ | > > RING_F_MC_HTS_DEQ, > > + .enq =3D { > > + .flegacy =3D rte_ring_enqueue_bulk, > > + .felem =3D rte_ring_enqueue_bulk_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_dequeue_bulk, > > + .felem =3D rte_ring_dequeue_bulk_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP/MC sync mode", > > + .api_type =3D TEST_RING_ELEM_BURST | > > TEST_RING_THREAD_DEF, > > + .create_flags =3D 0, > > + .enq =3D { > > + .flegacy =3D rte_ring_enqueue_burst, > > + .felem =3D rte_ring_enqueue_burst_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_dequeue_burst, > > + .felem =3D rte_ring_dequeue_burst_elem, > > + }, > > + }, > > + { > > + .desc =3D "SP/SC sync mode", > > + .api_type =3D TEST_RING_ELEM_BURST | > > TEST_RING_THREAD_SPSC, > > + .create_flags =3D RING_F_SP_ENQ | RING_F_SC_DEQ, > > + .enq =3D { > > + .flegacy =3D rte_ring_sp_enqueue_burst, > > + .felem =3D rte_ring_sp_enqueue_burst_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_sc_dequeue_burst, > > + .felem =3D rte_ring_sc_dequeue_burst_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP/MC sync mode", > > + .api_type =3D TEST_RING_ELEM_BURST | > > TEST_RING_THREAD_MPMC, > > + .create_flags =3D 0, > > + .enq =3D { > > + .flegacy =3D rte_ring_mp_enqueue_burst, > > + .felem =3D rte_ring_mp_enqueue_burst_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_mc_dequeue_burst, > > + .felem =3D rte_ring_mc_dequeue_burst_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP_RTS/MC_RTS sync mode", > > + .api_type =3D TEST_RING_ELEM_BURST | > > TEST_RING_THREAD_DEF, > > + .create_flags =3D RING_F_MP_RTS_ENQ | > > RING_F_MC_RTS_DEQ, > > + .enq =3D { > > + .flegacy =3D rte_ring_enqueue_burst, > > + .felem =3D rte_ring_enqueue_burst_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_dequeue_burst, > > + .felem =3D rte_ring_dequeue_burst_elem, > > + }, > > + }, > > + { > > + .desc =3D "MP_HTS/MC_HTS sync mode", > > + .api_type =3D TEST_RING_ELEM_BURST | > > TEST_RING_THREAD_DEF, > > + .create_flags =3D RING_F_MP_HTS_ENQ | > > RING_F_MC_HTS_DEQ, > > + .enq =3D { > > + .flegacy =3D rte_ring_enqueue_burst, > > + .felem =3D rte_ring_enqueue_burst_elem, > > + }, > > + .deq =3D { > > + .flegacy =3D rte_ring_dequeue_burst, > > + .felem =3D rte_ring_dequeue_burst_elem, > > + }, > > + }, > > +}; > > + > > +static unsigned int > > +test_ring_enq_impl(struct rte_ring *r, void **obj, int esize, unsigned= int n, > > + unsigned int test_idx) > > +{ > > + if (esize =3D=3D -1) > > + return test_enqdeq_impl[test_idx].enq.flegacy(r, obj, n, NULL); > > + else > > + return test_enqdeq_impl[test_idx].enq.felem(r, obj, esize, n, > > + NULL); > > +} > > + > > +static unsigned int > > +test_ring_deq_impl(struct rte_ring *r, void **obj, int esize, unsigned= int n, > > + unsigned int test_idx) > > +{ > > + if (esize =3D=3D -1) > > + return test_enqdeq_impl[test_idx].deq.flegacy(r, obj, n, NULL); > > + else > > + return test_enqdeq_impl[test_idx].deq.felem(r, obj, esize, n, > > + NULL); > > +} > > + > > static void** > > test_ring_inc_ptr(void **obj, int esize, unsigned int n) { @@ -203,8 = +378,7 > > @@ test_ring_negative_tests(void) > > * Random number of elements are enqueued and dequeued. > > */ > > static int > > -test_ring_burst_bulk_tests1(unsigned int api_type, unsigned int create= _flags, > > - const char *tname) > > +test_ring_burst_bulk_tests1(unsigned int test_idx) > > { > > struct rte_ring *r; > > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst = =3D NULL; > > @@ -214,11 +388,13 @@ test_ring_burst_bulk_tests1(unsigned int api_type= , > > unsigned int create_flags, > > const unsigned int rsz =3D RING_SIZE - 1; > > > > for (i =3D 0; i < RTE_DIM(esize); i++) { > > - test_ring_print_test_string(tname, api_type, esize[i]); > > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > > + test_enqdeq_impl[test_idx].api_type, esize[i]); > > > > /* Create the ring */ > > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > > - RING_SIZE, SOCKET_ID_ANY, > > create_flags); > > + RING_SIZE, SOCKET_ID_ANY, > > + test_enqdeq_impl[test_idx].create_flags); > > > > /* alloc dummy object pointers */ > > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -240,17 > > +416,17 @@ test_ring_burst_bulk_tests1(unsigned int api_type, unsigned = int > > create_flags, > > rand =3D RTE_MAX(rte_rand() % RING_SIZE, 1UL); > > printf("%s: iteration %u, random shift: %u;\n", > > __func__, i, rand); > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], rand, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], rand, > > + test_idx); > > TEST_RING_VERIFY(ret !=3D 0); > > > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], rand, > > - api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], rand, > > + test_idx); > > TEST_RING_VERIFY(ret =3D=3D rand); > > > > /* fill the ring */ > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], rsz, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], rsz, > > + test_idx); > > TEST_RING_VERIFY(ret !=3D 0); > > > > TEST_RING_VERIFY(rte_ring_free_count(r) =3D=3D 0); @@ > > -259,8 +435,8 @@ test_ring_burst_bulk_tests1(unsigned int api_type, > > unsigned int create_flags, > > TEST_RING_VERIFY(rte_ring_empty(r) =3D=3D 0); > > > > /* empty the ring */ > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], rsz, > > - api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], rsz, > > + test_idx); > > TEST_RING_VERIFY(ret =3D=3D (int)rsz); > > TEST_RING_VERIFY(rsz =3D=3D rte_ring_free_count(r)); > > TEST_RING_VERIFY(rte_ring_count(r) =3D=3D 0); @@ - > > 294,8 +470,7 @@ test_ring_burst_bulk_tests1(unsigned int api_type, > > unsigned int create_flags, > > * dequeued data. > > */ > > static int > > -test_ring_burst_bulk_tests2(unsigned int api_type, unsigned int create= _flags, > > - const char *tname) > > +test_ring_burst_bulk_tests2(unsigned int test_idx) > > { > > struct rte_ring *r; > > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst = =3D NULL; > > @@ -303,11 +478,13 @@ test_ring_burst_bulk_tests2(unsigned int api_type= , > > unsigned int create_flags, > > unsigned int i; > > > > for (i =3D 0; i < RTE_DIM(esize); i++) { > > - test_ring_print_test_string(tname, api_type, esize[i]); > > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > > + test_enqdeq_impl[test_idx].api_type, esize[i]); > > > > /* Create the ring */ > > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > > - RING_SIZE, SOCKET_ID_ANY, > > create_flags); > > + RING_SIZE, SOCKET_ID_ANY, > > + test_enqdeq_impl[test_idx].create_flags); > > > > /* alloc dummy object pointers */ > > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -323,39 > > +500,39 @@ test_ring_burst_bulk_tests2(unsigned int api_type, unsigned = int > > create_flags, > > cur_dst =3D dst; > > > > printf("enqueue 1 obj\n"); > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], 1, api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], 1, test_idx); > > if (ret !=3D 1) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], 1); > > > > printf("enqueue 2 objs\n"); > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], 2, api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], 2, test_idx); > > if (ret !=3D 2) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], 2); > > > > printf("enqueue MAX_BULK objs\n"); > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], MAX_BULK, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, > > + test_idx); > > if (ret !=3D MAX_BULK) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], MAX_BULK); > > > > printf("dequeue 1 obj\n"); > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], 1, api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], 1, test_idx); > > if (ret !=3D 1) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], 1); > > > > printf("dequeue 2 objs\n"); > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], 2, api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], 2, test_idx); > > if (ret !=3D 2) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], 2); > > > > printf("dequeue MAX_BULK objs\n"); > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], MAX_BULK, > > - api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], MAX_BULK, > > + test_idx); > > if (ret !=3D MAX_BULK) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK); @@ > > -390,8 +567,7 @@ test_ring_burst_bulk_tests2(unsigned int api_type, > > unsigned int create_flags, > > * Enqueue and dequeue to cover the entire ring length. > > */ > > static int > > -test_ring_burst_bulk_tests3(unsigned int api_type, unsigned int create= _flags, > > - const char *tname) > > +test_ring_burst_bulk_tests3(unsigned int test_idx) > > { > > struct rte_ring *r; > > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst = =3D NULL; > > @@ -399,11 +575,13 @@ test_ring_burst_bulk_tests3(unsigned int api_type= , > > unsigned int create_flags, > > unsigned int i, j; > > > > for (i =3D 0; i < RTE_DIM(esize); i++) { > > - test_ring_print_test_string(tname, api_type, esize[i]); > > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > > + test_enqdeq_impl[test_idx].api_type, esize[i]); > > > > /* Create the ring */ > > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > > - RING_SIZE, SOCKET_ID_ANY, > > create_flags); > > + RING_SIZE, SOCKET_ID_ANY, > > + test_enqdeq_impl[test_idx].create_flags); > > > > /* alloc dummy object pointers */ > > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -420,15 > > +598,15 @@ test_ring_burst_bulk_tests3(unsigned int api_type, unsigned = int > > create_flags, > > > > printf("fill and empty the ring\n"); > > for (j =3D 0; j < RING_SIZE / MAX_BULK; j++) { > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], > > MAX_BULK, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], > > MAX_BULK, > > + test_idx); > > if (ret !=3D MAX_BULK) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], > > MAX_BULK); > > > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], > > MAX_BULK, > > - api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], > > MAX_BULK, > > + test_idx); > > if (ret !=3D MAX_BULK) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], @@ - > > 465,21 +643,24 @@ test_ring_burst_bulk_tests3(unsigned int api_type, > > unsigned int create_flags, > > * Enqueue till the ring is full and dequeue till the ring becomes emp= ty. > > */ > > static int > > -test_ring_burst_bulk_tests4(unsigned int api_type, unsigned int create= _flags, > > - const char *tname) > > +test_ring_burst_bulk_tests4(unsigned int test_idx) > > { > > struct rte_ring *r; > > void **src =3D NULL, **cur_src =3D NULL, **dst =3D NULL, **cur_dst = =3D NULL; > > int ret; > > unsigned int i, j; > > - unsigned int num_elems; > > + unsigned int api_type, num_elems; > > + > > + api_type =3D test_enqdeq_impl[test_idx].api_type; > > > > for (i =3D 0; i < RTE_DIM(esize); i++) { > > - test_ring_print_test_string(tname, api_type, esize[i]); > > + test_ring_print_test_string(test_enqdeq_impl[test_idx].desc, > > + test_enqdeq_impl[test_idx].api_type, esize[i]); > > > > /* Create the ring */ > > r =3D test_ring_create("test_ring_burst_bulk_tests", esize[i], > > - RING_SIZE, SOCKET_ID_ANY, > > create_flags); > > + RING_SIZE, SOCKET_ID_ANY, > > + test_enqdeq_impl[test_idx].create_flags); > > > > /* alloc dummy object pointers */ > > src =3D test_ring_calloc(RING_SIZE * 2, esize[i]); @@ -496,8 > > +677,8 @@ test_ring_burst_bulk_tests4(unsigned int api_type, unsigned i= nt > > create_flags, > > > > printf("Test enqueue without enough memory space\n"); > > for (j =3D 0; j < (RING_SIZE/MAX_BULK - 1); j++) { > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], > > MAX_BULK, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], > > MAX_BULK, > > + test_idx); > > if (ret !=3D MAX_BULK) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], @@ - > > 505,7 +686,7 @@ test_ring_burst_bulk_tests4(unsigned int api_type, > > unsigned int create_flags, > > } > > > > printf("Enqueue 2 objects, free entries =3D MAX_BULK - 2\n"); > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], 2, api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], 2, test_idx); > > if (ret !=3D 2) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], 2); @@ -517,8 > > +698,8 @@ test_ring_burst_bulk_tests4(unsigned int api_type, unsigned i= nt > > create_flags, > > else > > num_elems =3D MAX_BULK; > > /* Always one free entry left */ > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], num_elems, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], num_elems, > > + test_idx); > > if (ret !=3D MAX_BULK - 3) > > goto fail; > > cur_src =3D test_ring_inc_ptr(cur_src, esize[i], MAX_BULK - 3); > > @@ -528,15 +709,15 @@ test_ring_burst_bulk_tests4(unsigned int api_type= , > > unsigned int create_flags, > > goto fail; > > > > printf("Test enqueue for a full entry\n"); > > - ret =3D test_ring_enqueue(r, cur_src, esize[i], MAX_BULK, > > - api_type); > > + ret =3D test_ring_enq_impl(r, cur_src, esize[i], MAX_BULK, > > + test_idx); > > if (ret !=3D 0) > > goto fail; > > > > printf("Test dequeue without enough objects\n"); > > for (j =3D 0; j < RING_SIZE / MAX_BULK - 1; j++) { > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], > > MAX_BULK, > > - api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], > > MAX_BULK, > > + test_idx); > > if (ret !=3D MAX_BULK) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], @@ - > > 544,7 +725,7 @@ test_ring_burst_bulk_tests4(unsigned int api_type, > > unsigned int create_flags, > > } > > > > /* Available memory space for the exact MAX_BULK entries > > */ > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], 2, api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], 2, test_idx); > > if (ret !=3D 2) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], 2); @@ -554,8 > > +735,8 @@ test_ring_burst_bulk_tests4(unsigned int api_type, unsigned i= nt > > create_flags, > > num_elems =3D MAX_BULK - 3; > > else > > num_elems =3D MAX_BULK; > > - ret =3D test_ring_dequeue(r, cur_dst, esize[i], num_elems, > > - api_type); > > + ret =3D test_ring_deq_impl(r, cur_dst, esize[i], num_elems, > > + test_idx); > > if (ret !=3D MAX_BULK - 3) > > goto fail; > > cur_dst =3D test_ring_inc_ptr(cur_dst, esize[i], MAX_BULK - 3); > > @@ -816,22 +997,7 @@ static int > > test_ring(void) > > { > > int32_t rc; > > - unsigned int i, j; > > - const char *tname; > > - > > - static const struct { > > - uint32_t create_flags; > > - const char *name; > > - } test_sync_modes[] =3D { > > - { > > - RING_F_MP_RTS_ENQ | RING_F_MC_RTS_DEQ, > > - "Test MT_RTS ring", > > - }, > > - { > > - RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ, > > - "Test MT_HTS ring", > > - }, > > - }; > > + unsigned int i; > > > > /* Negative test cases */ > > if (test_ring_negative_tests() < 0) > > @@ -848,65 +1014,24 @@ test_ring(void) > > * The test cases are split into smaller test cases to > > * help clang compile faster. > > */ > > - tname =3D "Test standard ring"; > > - > > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D = 1) > > - for (i =3D TEST_RING_THREAD_DEF; > > - i <=3D TEST_RING_THREAD_MPMC; i > > <<=3D 1) > > - if (test_ring_burst_bulk_tests1(i | j, 0, tname) < 0) > > - goto test_fail; > > - > > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D = 1) > > - for (i =3D TEST_RING_THREAD_DEF; > > - i <=3D TEST_RING_THREAD_MPMC; i > > <<=3D 1) > > - if (test_ring_burst_bulk_tests2(i | j, 0, tname) < 0) > > - goto test_fail; > > - > > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D = 1) > > - for (i =3D TEST_RING_THREAD_DEF; > > - i <=3D TEST_RING_THREAD_MPMC; i > > <<=3D 1) > > - if (test_ring_burst_bulk_tests3(i | j, 0, tname) < 0) > > - goto test_fail; > > - > > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; j <<=3D = 1) > > - for (i =3D TEST_RING_THREAD_DEF; > > - i <=3D TEST_RING_THREAD_MPMC; i > > <<=3D 1) > > - if (test_ring_burst_bulk_tests4(i | j, 0, tname) < 0) > > - goto test_fail; > > - > > - /* Burst and bulk operations with MT_RTS and MT_HTS sync modes > > */ > > - for (i =3D 0; i !=3D RTE_DIM(test_sync_modes); i++) { > > - for (j =3D TEST_RING_ELEM_BULK; j <=3D TEST_RING_ELEM_BURST; > > - j <<=3D 1) { > > - > > - rc =3D test_ring_burst_bulk_tests1( > > - TEST_RING_THREAD_DEF | j, > > - test_sync_modes[i].create_flags, > > - test_sync_modes[i].name); > > - if (rc < 0) > > - goto test_fail; > > - > > - rc =3D test_ring_burst_bulk_tests2( > > - TEST_RING_THREAD_DEF | j, > > - test_sync_modes[i].create_flags, > > - test_sync_modes[i].name); > > - if (rc < 0) > > - goto test_fail; > > - > > - rc =3D test_ring_burst_bulk_tests3( > > - TEST_RING_THREAD_DEF | j, > > - test_sync_modes[i].create_flags, > > - test_sync_modes[i].name); > > - if (rc < 0) > > - goto test_fail; > > - > > - rc =3D test_ring_burst_bulk_tests3( > > - TEST_RING_THREAD_DEF | j, > > - test_sync_modes[i].create_flags, > > - test_sync_modes[i].name); > > - if (rc < 0) > > - goto test_fail; > > - } > > + for (i =3D 0; i !=3D RTE_DIM(test_enqdeq_impl); i++) { > > + > > + > > + rc =3D test_ring_burst_bulk_tests1(i); > > + if (rc < 0) > > + goto test_fail; > > + > > + rc =3D test_ring_burst_bulk_tests2(i); > > + if (rc < 0) > > + goto test_fail; > > + > > + rc =3D test_ring_burst_bulk_tests3(i); > > + if (rc < 0) > > + goto test_fail; > > + > > + rc =3D test_ring_burst_bulk_tests4(i); > > + if (rc < 0) > > + goto test_fail; > > } > > > > /* dump the ring status */ > > -- > > 2.17.1