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 8D597A04C8; Sat, 19 Sep 2020 00:49:39 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 121E61DB16; Sat, 19 Sep 2020 00:49:38 +0200 (CEST) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60045.outbound.protection.outlook.com [40.107.6.45]) by dpdk.org (Postfix) with ESMTP id AAA9A1DB0A for ; Sat, 19 Sep 2020 00:49:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xzDjkr2PYd9X/WKvwonuzqxomSUESyi7WA3XhG8kWng=; b=ewTiOvzhdkBKIH6oHSINPUp4PdDTKBvsEAAR8wTdSxpJdYKNjRavVgpVLrvbQagSkkA5EfEMMlNW8H+fVkTr8OLJM85d5Fnweq9V4Jh7krrHD/sglMhscr2YsoGn3Ts1GxzgcNz9Bnqg2k72rjLatXbec9OokZHzpZ/42LI5pco= Received: from AM5P194CA0002.EURP194.PROD.OUTLOOK.COM (2603:10a6:203:8f::12) by DB6PR0802MB2504.eurprd08.prod.outlook.com (2603:10a6:4:a1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.17; Fri, 18 Sep 2020 22:49:35 +0000 Received: from VE1EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:203:8f:cafe::da) by AM5P194CA0002.outlook.office365.com (2603:10a6:203:8f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11 via Frontend Transport; Fri, 18 Sep 2020 22:49:35 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dpdk.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dpdk.org; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by VE1EUR03FT056.mail.protection.outlook.com (10.152.19.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.15 via Frontend Transport; Fri, 18 Sep 2020 22:49:34 +0000 Received: ("Tessian outbound 7161e0c2a082:v64"); Fri, 18 Sep 2020 22:49:34 +0000 X-CR-MTA-TID: 64aa7808 Received: from a507e7eda3fe.3 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 51650006-0558-48C7-A587-0177D7F15A7F.1; Fri, 18 Sep 2020 22:49:29 +0000 Received: from EUR03-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id a507e7eda3fe.3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 18 Sep 2020 22:49:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KBIboFDBS03rvlRH80sBYljbx5h/DkTvqp9fQtxNmQxJufyopxR23zcQV2bTlsXXLyGYx9iY2S4pxZFSN1ozbQ+3OFiOGMeJpkCWvER/DWVri6mR814omYrIJj7vwy52/GGwK9uwMERDOErnkr65ELsTlNKNwbDEcLaLC1GH4K9OOBIxV6SkCNKDADwIqIDlNIIAKPcPoLlxUJbDtkUykwEAIL9ZTfk2cjxjIq4Kvv2mll8wkinEW2NfSLThbXtfkKNj+sAobG+o9Ij6ZZaK4bHL0whZMJpg2G3diqTwkjJpYgKRQhnsAo29vO+Gt0h4Qc129e7x9X3d+b3uQp6Tmg== 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=xzDjkr2PYd9X/WKvwonuzqxomSUESyi7WA3XhG8kWng=; b=SiNQXnCyhGfKiW+2SJHRzMXGTDjoX8du7zJpAcKuWlExR7TA5adozLt5aa+hZA0Q5lUTrskPI5C0GIJKnpfLMACxxyqsdccuJeCH2EsuRPortiEwkXt3BFPH1CN1ut+pbSgwkdCV/Fr3IqQS6GW/MojTWBiCfP1PQPkk3PFM9qXxUhwXDnvPIJ3t63xv1Fh1DbBVwyvfmQ+5B+RghvS8otvfERdc3kDHpIz7tcqurD+fDUheqoGK5VNpsv+ckFwtBp1gztVX+2wf//lSLWJ/dZ64V3G0k7FREnaHq/7X5S3BgMFBIWmsthoy2HCUzBtzdM++Ul6RY2xhDSDKxVkxOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xzDjkr2PYd9X/WKvwonuzqxomSUESyi7WA3XhG8kWng=; b=ewTiOvzhdkBKIH6oHSINPUp4PdDTKBvsEAAR8wTdSxpJdYKNjRavVgpVLrvbQagSkkA5EfEMMlNW8H+fVkTr8OLJM85d5Fnweq9V4Jh7krrHD/sglMhscr2YsoGn3Ts1GxzgcNz9Bnqg2k72rjLatXbec9OokZHzpZ/42LI5pco= Received: from DBAPR08MB5814.eurprd08.prod.outlook.com (2603:10a6:10:1b1::6) by DB8PR08MB5242.eurprd08.prod.outlook.com (2603:10a6:10:e8::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11; Fri, 18 Sep 2020 22:49:27 +0000 Received: from DBAPR08MB5814.eurprd08.prod.outlook.com ([fe80::408a:40fb:7402:c805]) by DBAPR08MB5814.eurprd08.prod.outlook.com ([fe80::408a:40fb:7402:c805%6]) with mapi id 15.20.3391.013; Fri, 18 Sep 2020 22:49:27 +0000 From: Honnappa Nagarahalli To: Phil Yang , "jgrajcia@cisco.com" , "dev@dpdk.org" CC: Ruifeng Wang , nd , Honnappa Nagarahalli , nd Thread-Topic: [PATCH] net/memif: relax barrier for zero copy path Thread-Index: AQHWh/3IeDLcy7ejgU2qzU3V0Erpralu/WvA Date: Fri, 18 Sep 2020 22:49:27 +0000 Message-ID: References: <1599802699-20876-1-git-send-email-phil.yang@arm.com> In-Reply-To: <1599802699-20876-1-git-send-email-phil.yang@arm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 4ECDBCFFE7E98E4685EAB293B1D367F2.0 x-checkrecipientchecked: true Authentication-Results-Original: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; x-originating-ip: [107.77.219.229] x-ms-publictraffictype: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: c879c180-6c14-49c3-8773-08d85c251d63 x-ms-traffictypediagnostic: DB8PR08MB5242:|DB6PR0802MB2504: x-ms-exchange-transport-forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true nodisclaimer: true x-ms-oob-tlc-oobclassifiers: OLM:3826;OLM:3826; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: eX25tvwHQ7+kQqIsIdEuF1/6Xvy0UfNmss8D22akspTRkQ4KErNynPaSxSOvDzBDSMK4+4nDy7WCVzfegCsrH4qSFoxSW6svi4MbRcQw7NjiXhZSHQ7oe8ujdgGqpWwnK+/okRbEYuZuyws2tDrA7N9+rq6jwtJNjrfJT8kdH/8CwKJSxmQdtyZu6B+nRn9Ss0MHAmAIQKhDaVkUE14NS9WMP9o+iZM6Yr5fgxCY8ZT8KN0/EeK6PIQs+M91wh6CLDEsEfuSK/gNcnDM/BXz9Ydyj9w1VyFDTRNqaOBtyW5AK5mdNr8kpNHI2ve+uD4wKhf1kl6j4vMxWyGAJnJs5w== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DBAPR08MB5814.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(39860400002)(396003)(366004)(346002)(376002)(8676002)(52536014)(186003)(86362001)(83380400001)(7696005)(110136005)(33656002)(54906003)(2906002)(478600001)(71200400001)(66446008)(76116006)(66946007)(64756008)(66556008)(316002)(66476007)(9686003)(55016002)(8936002)(53546011)(5660300002)(6506007)(4326008)(26005); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: dw9vOWAg5sImD23WxqRanNW27OhfTJxmYewDNY5TnnPdT3TN8ZtkKxRvOBwPr0UU7Um6TocG1VgQbFx5VPzoUBs01fiR3UDXgqgyrQw9Ynws76ytTAGf0lWKGDhKWSB74R88IND786IK9/qX7UoM2lulozhZw6caDpp2bIIx4/mqouoyqfro0qzcq++onPOOu+YDaGU3czqOteyRUQ0AvPQdH7x2+nLsPqVqPsGK9NJcff3eu5cTUo444oUztr8K1c9T2zJ4qqz+9v4+wVnPbdlfvzCmqxahIWHr6ztRtSRIOwArxUwcYmQIyYCtQ6BdhDkkjrMinVwik4sg0CcDdhxx6iLjE/1J5Tp1O5bhgkEl50lIa2FvxDsgDV+gaxKEwVnFIHR961zyjDmI0tB50D1FwwzLvxBHNPdfgg8Ut4ntKFv8LpHhYrXe9wtmZY5dn1zlHSOEpMGFacW5ElO+zzvHLPz1B+HslUZMNlMf8xbImcdF3/C+CHLY8oWZwoH9Rw9FDg9Imn7RTYbIqcgaMzcoZrS1TBghXXOpzcW/IJBLBVaT46OvJAKSHgoYVR8IBtmfZHoDZYQ0trL6fRcnEXh9FFyf6d8u7Zk4KpTra3Dpzf37H5sCSUbGJepOm4bs5K8hm8CWbhSlzHfccwYMcA== Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5242 Original-Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 1acfb5e1-6a80-4d46-8068-08d85c2518d6 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: OCG6lupUsgTjPNoMa/ckSzeUcid5ye5zuojVWnz2CgKsjKzDM3JFmjzcAAAixWGqfco4+FmK6AQmUnqnpxsAWsNsgLkRQEE/nfo9m4yW2NNFXXHWjwdfSd8EnZ2ZfvFkf8PMRzv7LajdhKCKfBwvhoc1eGpZiRX2w42OF0sLjkd6Ebz+vgqA0vbCYa6KZBkD/jIAcr4Qms6EfmtE7ZoHFg3Wnn4SQt/BKlMyWB4sb/zauqGoYAa+woyQGXgxntF9rlTh9OXKBMX3OTv14sxVCO0KAMNB4EzWfVNb6/fB5FiudUKIbo611N4+bXoZWxN+pCWb/YVZABtBHge6mNdXx4qjlar8vjzvE8Q6pfSGw/m6qAnY9EoZwsDdeolYTFEcFj+OgWn1pjEnuw5LyriTpA== X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(4636009)(39860400002)(346002)(376002)(396003)(136003)(46966005)(81166007)(82310400003)(316002)(83380400001)(186003)(336012)(47076004)(356005)(82740400003)(33656002)(36906005)(8936002)(5660300002)(52536014)(9686003)(8676002)(6506007)(55016002)(2906002)(478600001)(26005)(4326008)(7696005)(53546011)(70206006)(70586007)(110136005)(54906003)(86362001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Sep 2020 22:49:34.8423 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c879c180-6c14-49c3-8773-08d85c251d63 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: VE1EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2504 Subject: Re: [dpdk-dev] [PATCH] net/memif: relax barrier for zero copy path 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 Jakub, I am trying to review this patch. I am having difficulty in understanding = the implementation for the queue/ring, appreciate if you could help me unde= rstand the logic. 1) The S2M queues - are used to send packets from slave to master. My under= standing is that, the slave thread would call 'eth_memif_tx_zc' and the mas= ter thread would call 'eth_memif_rx_zc'. Is this correct? 2) The M2S queues - are used to send packets from master to slave. Here the= slave thread would call 'eth_memif_rx_zc' and the master thread would call= 'eth_memif_tx_zc'. Is this correct? Thank you, Honnappa > -----Original Message----- > From: Phil Yang > Sent: Friday, September 11, 2020 12:38 AM > To: jgrajcia@cisco.com; dev@dpdk.org > Cc: Honnappa Nagarahalli ; Ruifeng Wang > ; nd > Subject: [PATCH] net/memif: relax barrier for zero copy path >=20 > Using 'rte_mb' to synchronize the shared ring head/tail between producer > and consumer will stall the pipeline and damage performance on the weak > memory model platforms, such like aarch64. >=20 > Relax the expensive barrier with c11 atomic with explicit memory ordering > can improve 3.6% performance on throughput. >=20 > Signed-off-by: Phil Yang > Reviewed-by: Ruifeng Wang > --- > drivers/net/memif/rte_eth_memif.c | 35 +++++++++++++++++++++++++------ > ---- > 1 file changed, 25 insertions(+), 10 deletions(-) >=20 > diff --git a/drivers/net/memif/rte_eth_memif.c > b/drivers/net/memif/rte_eth_memif.c > index c1c7e9f..a19c0f3 100644 > --- a/drivers/net/memif/rte_eth_memif.c > +++ b/drivers/net/memif/rte_eth_memif.c > @@ -253,7 +253,12 @@ memif_free_stored_mbufs(struct > pmd_process_private *proc_private, struct memif_q > memif_ring_t *ring =3D memif_get_ring_from_queue(proc_private, > mq); >=20 > /* FIXME: improve performance */ > - while (mq->last_tail !=3D ring->tail) { > + /* The ring->tail acts as a guard variable between Tx and Rx > + * threads, so using load-acquire pairs with store-release > + * to synchronize it between threads. > + */ > + while (mq->last_tail !=3D __atomic_load_n(&ring->tail, > + __ATOMIC_ACQUIRE)) { > RTE_MBUF_PREFETCH_TO_FREE(mq->buffers[(mq->last_tail > + 1) & mask]); > /* Decrement refcnt and free mbuf. (current segment) */ > rte_mbuf_refcnt_update(mq->buffers[mq->last_tail & mask], > -1); @@ -455,7 +460,11 @@ eth_memif_rx_zc(void *queue, struct rte_mbuf > **bufs, uint16_t nb_pkts) > mask =3D ring_size - 1; >=20 > cur_slot =3D mq->last_tail; > - last_slot =3D ring->tail; > + /* The ring->tail acts as a guard variable between Tx and Rx > + * threads, so using load-acquire pairs with store-release > + * to synchronize it between threads. > + */ > + last_slot =3D __atomic_load_n(&ring->tail, __ATOMIC_ACQUIRE); > if (cur_slot =3D=3D last_slot) > goto refill; > n_slots =3D last_slot - cur_slot; > @@ -501,7 +510,11 @@ eth_memif_rx_zc(void *queue, struct rte_mbuf > **bufs, uint16_t nb_pkts) >=20 > /* Supply master with new buffers */ > refill: > - head =3D ring->head; > + /* The ring->head acts as a guard variable between Tx and Rx > + * threads, so using load-acquire pairs with store-release > + * to synchronize it between threads. > + */ > + head =3D __atomic_load_n(&ring->head, __ATOMIC_ACQUIRE); > n_slots =3D ring_size - head + mq->last_tail; >=20 > if (n_slots < 32) > @@ -526,8 +539,7 @@ eth_memif_rx_zc(void *queue, struct rte_mbuf > **bufs, uint16_t nb_pkts) > (uint8_t *)proc_private->regions[d0->region]->addr; > } > no_free_mbufs: > - rte_mb(); > - ring->head =3D head; > + __atomic_store_n(&ring->head, head, __ATOMIC_RELEASE); >=20 > mq->n_pkts +=3D n_rx_pkts; >=20 > @@ -723,8 +735,12 @@ eth_memif_tx_zc(void *queue, struct rte_mbuf > **bufs, uint16_t nb_pkts) > memif_free_stored_mbufs(proc_private, mq); >=20 > /* ring type always MEMIF_RING_S2M */ > - slot =3D ring->head; > - n_free =3D ring_size - ring->head + mq->last_tail; > + /* The ring->head acts as a guard variable between Tx and Rx > + * threads, so using load-acquire pairs with store-release > + * to synchronize it between threads. > + */ > + slot =3D __atomic_load_n(&ring->head, __ATOMIC_ACQUIRE); > + n_free =3D ring_size - slot + mq->last_tail; >=20 > int used_slots; >=20 > @@ -778,12 +794,11 @@ eth_memif_tx_zc(void *queue, struct rte_mbuf > **bufs, uint16_t nb_pkts) > } >=20 > no_free_slots: > - rte_mb(); > /* update ring pointers */ > if (type =3D=3D MEMIF_RING_S2M) > - ring->head =3D slot; > + __atomic_store_n(&ring->head, slot, __ATOMIC_RELEASE); > else > - ring->tail =3D slot; > + __atomic_store_n(&ring->tail, slot, __ATOMIC_RELEASE); >=20 > /* Send interrupt, if enabled. */ > if ((ring->flags & MEMIF_RING_FLAG_MASK_INT) =3D=3D 0) { > -- > 2.7.4