From patchwork Tue Nov 3 15:00:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mike A. Polehn" X-Patchwork-Id: 8595 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id EE0148E8A; Tue, 3 Nov 2015 16:00:19 +0100 (CET) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 5A65F8E7A for ; Tue, 3 Nov 2015 16:00:18 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 03 Nov 2015 07:00:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,239,1444719600"; d="scan'208";a="593230625" Received: from orsmsx107.amr.corp.intel.com ([10.22.240.5]) by FMSMGA003.fm.intel.com with ESMTP; 03 Nov 2015 07:00:17 -0800 Received: from orsmsx102.amr.corp.intel.com ([169.254.1.29]) by ORSMSX107.amr.corp.intel.com ([169.254.1.104]) with mapi id 14.03.0248.002; Tue, 3 Nov 2015 07:00:16 -0800 From: "Polehn, Mike A" To: "dev@dpdk.org" Thread-Topic: [Patch v2] Eth driver optimization: Prefetch variable structure Thread-Index: AdEWSEkkyiSN/GJuT0SSHiOx81KjtA== Date: Tue, 3 Nov 2015 15:00:15 +0000 Message-ID: <745DB4B8861F8E4B9849C970520ABBF149750763@ORSMSX102.amr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsIiwiaWQiOiJkMGFlZjU1Mi00NWU1LTQ5NDQtYTQ3OS0xZTVhODM2MTRjMjEiLCJwcm9wcyI6W3sibiI6IkludGVsRGF0YUNsYXNzaWZpY2F0aW9uIiwidmFscyI6W3sidmFsdWUiOiJDVFBfSUMifV19XX0sIlN1YmplY3RMYWJlbHMiOltdLCJUTUNWZXJzaW9uIjoiMTUuNC4xMC4xOSIsIlRydXN0ZWRMYWJlbEhhc2giOiJIZkFYODZHNzRcL3lwZE03MThleXNXb0xtT1wvWjhEZ1wvYXBGdmE3dk1NeDZJPSJ9 x-inteldataclassification: CTP_IC x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Subject: [dpdk-dev] [Patch v2] Eth driver optimization: Prefetch variable structure X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Adds Eth driver prefetch variable structure to CPU cache 0 while calling into tx or rx device driver operation. RFC 2544 test of NIC task test measurement points show improvement of lower latency and/or better packet throughput indicating clock cycles saved. Signed-off-by: Mike A. Polehn diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 8a8c82b..09f1069 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -2357,11 +2357,15 @@ rte_eth_rx_burst(uint8_t port_id, uint16_t queue_id, struct rte_mbuf **rx_pkts, const uint16_t nb_pkts) { struct rte_eth_dev *dev; + void *rxq; dev = &rte_eth_devices[port_id]; - int16_t nb_rx = (*dev->rx_pkt_burst)(dev->data->rx_queues[queue_id], - rx_pkts, nb_pkts); + /* rxq is going to be immediately used, prefetch it */ + rxq = dev->data->rx_queues[queue_id]; + rte_prefetch0(rxq); + + int16_t nb_rx = (*dev->rx_pkt_burst)(rxq, rx_pkts, nb_pkts); #ifdef RTE_ETHDEV_RXTX_CALLBACKS struct rte_eth_rxtx_callback *cb = dev->post_rx_burst_cbs[queue_id]; @@ -2499,6 +2503,7 @@ rte_eth_tx_burst(uint8_t port_id, uint16_t queue_id, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct rte_eth_dev *dev; + void *txq; dev = &rte_eth_devices[port_id]; @@ -2514,7 +2519,11 @@ rte_eth_tx_burst(uint8_t port_id, uint16_t queue_id, } #endif - return (*dev->tx_pkt_burst)(dev->data->tx_queues[queue_id], tx_pkts, nb_pkts); + /* txq is going to be immediately used, prefetch it */ + txq = dev->data->tx_queues[queue_id]; + rte_prefetch0(txq); + + return (*dev->tx_pkt_burst)(txq, tx_pkts, nb_pkts); } #endif