From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 1FCC6374D for ; Thu, 10 Mar 2016 17:05:22 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP; 10 Mar 2016 08:04:03 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,316,1455004800"; d="scan'208";a="667115219" Received: from irsmsx110.ger.corp.intel.com ([163.33.3.25]) by FMSMGA003.fm.intel.com with ESMTP; 10 Mar 2016 08:04:01 -0800 Received: from irsmsx109.ger.corp.intel.com ([169.254.13.174]) by irsmsx110.ger.corp.intel.com ([169.254.15.10]) with mapi id 14.03.0248.002; Thu, 10 Mar 2016 16:01:09 +0000 From: "Jastrzebski, MichalX K" To: Thomas Monjalon Thread-Topic: [dpdk-dev] [PATCH v3 0/2] add support for buffered tx to ethdev Thread-Index: AQHRervmrgjQZHu/ZEeHj3E1Z2MRfJ9Si12AgABJSQA= Date: Thu, 10 Mar 2016 16:01:09 +0000 Message-ID: <60ABE07DBB3A454EB7FAD707B4BB158213A3B277@IRSMSX109.ger.corp.intel.com> References: <1456333729-3804-1-git-send-email-tomaszx.kulasek@intel.com> <1457607478-2184-1-git-send-email-tomaszx.kulasek@intel.com> <2601191342CEEE43887BDE71AB97725836B1ADC1@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB97725836B1ADC1@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v3 0/2] add support for buffered tx to ethdev 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: , X-List-Received-Date: Thu, 10 Mar 2016 16:05:23 -0000 > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Ananyev, > Konstantin > Sent: Thursday, March 10, 2016 12:32 PM > To: Kulasek, TomaszX ; dev@dpdk.org > Subject: Re: [dpdk-dev] [PATCH v3 0/2] add support for buffered tx to > ethdev >=20 > > Many sample apps include internal buffering for single-packet-at-a-time > > operation. Since this is such a common paradigm, this functionality is > > better suited to being implemented in the ethdev API. > > > > The new APIs in the ethdev library are: > > * rte_eth_tx_buffer_init - initialize buffer > > * rte_eth_tx_buffer - buffer up a single packet for future transmission > > * rte_eth_tx_buffer_flush - flush any unsent buffered packets > > * rte_eth_tx_buffer_set_err_callback - set up a callback to be called i= n > > case transmitting a buffered burst fails. By default, we just free th= e > > unsent packets. > > > > As well as these, an additional reference callbacks are provided, which > > frees the packets: > > > > * rte_eth_tx_buffer_drop_callback - silently drop packets (default > > behavior) > > * rte_eth_tx_buffer_count_callback - drop and update user-provided > counter > > to track the number of dropped packets > > > > Due to the feedback from mailing list, that buffer management facilitie= s > > in the user application are more preferable than API simplicity, we > decided > > to move internal buffer table, as well as callback functions and user d= ata, > > from rte_eth_dev/rte_eth_dev_data to the application space. > > It prevents ABI breakage and gives some more flexibility in the buffer'= s > > management such as allocation, dynamical size change, reuse buffers on > many > > ports or after fail, and so on. > > > > > > The following steps illustrate how tx buffers can be used in applicatio= n: > > > > 1) Initialization > > > > a) Allocate memory for a buffer > > > > struct rte_eth_dev_tx_buffer *buffer =3D rte_zmalloc_socket("tx_buff= er", > > RTE_ETH_TX_BUFFER_SIZE(MAX_PKT_BURST), 0, socket_id); > > > > RTE_ETH_TX_BUFFER_SIZE(size) macro computes memory required to > store > > "size" packets in buffer. > > > > b) Initialize allocated memory and set up default values. Threshold lev= el > > must be lower than or equal to the MAX_PKT_BURST from 1a) > > > > rte_eth_tx_buffer_init(buffer, threshold); > > > > > > c) Set error callback (optional) > > > > rte_eth_tx_buffer_set_err_callback(buffer, callback_fn, userdata); > > > > > > 2) Store packet "pkt" in buffer and send them all to the queue_id on > > port_id when number of packets reaches threshold level set up in 1b) > > > > rte_eth_tx_buffer(port_id, queue_id, buffer, pkt); > > > > > > 3) Send all stored packets to the queue_id on port_id > > > > rte_eth_tx_buffer_flush(port_id, queue_id, buffer); > > > > > > 4) Flush buffer and free memory > > > > rte_eth_tx_buffer_flush(port_id, queue_id, buffer); > > ... > > rte_free(buffer); > > > > v3 changes: > > - error counter removed from tx buffer structure, now default behavior= is > > silent drop of unsent packets > > - some names was changed in tx buffer structure to be more descriptive > > - two default calbacks are provided: rte_eth_tx_buffer_drop_callback a= nd > > rte_eth_tx_buffer_count_callback > > > > v2 changes: > > - reworked to use new buffer model > > - buffer data and callbacks are removed from > rte_eth_dev/rte_eth_dev_data, > > so this patch doesn't brake an ABI anymore > > - introduced RTE_ETH_TX_BUFFER macro and rte_eth_tx_buffer_init > > - buffers are not attached to the port-queue > > - buffers can be allocated dynamically during application work > > - size of buffer can be changed without port restart > > > > Tomasz Kulasek (2): > > ethdev: add buffered tx api > > examples: rework to use buffered tx > > > > examples/l2fwd-jobstats/main.c | 104 ++++------ > > examples/l2fwd-keepalive/main.c | 100 ++++------ > > examples/l2fwd/main.c | 104 ++++------ > > examples/l3fwd-acl/main.c | 92 ++++----- > > examples/l3fwd-power/main.c | 89 ++++----- > > examples/link_status_interrupt/main.c | 107 ++++------ > > .../client_server_mp/mp_client/client.c | 101 ++++++---- > > examples/multi_process/l2fwd_fork/main.c | 97 ++++----- > > examples/packet_ordering/main.c | 122 ++++++++---- > > examples/qos_meter/main.c | 61 ++---- > > lib/librte_ether/rte_ethdev.c | 46 +++++ > > lib/librte_ether/rte_ethdev.h | 205 ++++++++++++= +++++++- > > lib/librte_ether/rte_ether_version.map | 10 + > > 13 files changed, 696 insertions(+), 542 deletions(-) > > > > -- >=20 > Acked-by: Konstantin Ananyev >=20 > > 1.7.9.5 Hi Thomas, Could You write please does this patch meet Your requirements and=20 does it have a green light to be applied?