From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olivier MATZ Subject: Re: [PATCH v2 3/4] examples: example showing use of callbacks. Date: Mon, 16 Feb 2015 15:33:40 +0100 Message-ID: <54E1FFC4.1060605@6wind.com> References: <1419266844-4848-1-git-send-email-bruce.richardson@intel.com> <1423841989-9090-1-git-send-email-john.mcnamara@intel.com> <1423841989-9090-4-git-send-email-john.mcnamara@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit To: John McNamara , dev-VfR2kkLFssw@public.gmane.org Return-path: In-Reply-To: <1423841989-9090-4-git-send-email-john.mcnamara-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" Hi John, On 02/13/2015 04:39 PM, John McNamara wrote: > From: Richardson, Bruce > > Example showing how callbacks can be used to insert a timestamp > into each packet on RX. On TX the timestamp is used to calculate > the packet latency through the app, in cycles. > > Signed-off-by: Bruce Richardson I'm looking at the example and I don't understand what is the advantage of having callbacks in ethdev layer, knowing that the application can do the same job by a standard function call. What is the advantage of having callbacks compared to: for (port = 0; port < nb_ports; port++) { struct rte_mbuf *bufs[BURST_SIZE]; const uint16_t nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE); if (unlikely(nb_rx == 0)) continue; add_timestamp(bufs, nb_rx); const uint16_t nb_tx = rte_eth_tx_burst(port ^ 1, 0, bufs, nb_rx); calc_latency(bufs, nb_tx); if (unlikely(nb_tx < nb_rx)) { uint16_t buf; for (buf = nb_tx; buf < nb_rx; buf++) rte_pktmbuf_free(bufs[buf]); } } To me, doing like the code above has several advantages: - code is more readable: the callback is explicitly invoked, so there is no risk to forget it - code is faster: the functions calls can be inlined by the compiler - easier to handle error cases in the callback function as the error code is accessible to the application - there is no need to add code in ethdev api to do this - if the application does not want to use callbacks (I suppose most applications), it won't have any performance impact Regards, Olivier