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 04594A3160 for ; Fri, 11 Oct 2019 16:52:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AC4E01EAED; Fri, 11 Oct 2019 16:52:37 +0200 (CEST) Received: from mail-io1-f66.google.com (mail-io1-f66.google.com [209.85.166.66]) by dpdk.org (Postfix) with ESMTP id 80E541E8EF for ; Fri, 11 Oct 2019 16:52:35 +0200 (CEST) Received: by mail-io1-f66.google.com with SMTP id h144so22042745iof.7 for ; Fri, 11 Oct 2019 07:52:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=U0a358IVOVo7gQm2SW3+FyQ0vXp2SDxhrhvpNA20ptI=; b=lIdNuVVu1LO/xEMHTpDTyFnq/DrGrYKuZOd889Sut3GfRRKNp3VCqhZRuORA+i9byU QR5ngO+QQZT88mmMvKM4LOL96EhSlU+3p6s7wkg9cJIRDoJT0kcd5gAsanlk5Qb8aXgL Td/VaL3XhkBlEuBn/UgWqbgcAvv9urjc+B7c831i3oHJyNROUXZ8bWK1wsKAw/bc40vo R5muxHoOxgeR79jy3zJ4wmxKY6jkJdXMIsrVRbFyeGxUfhz2HL9H23i/S1z46XOKBXZp acJSKR2ZG2ZpO9vKpccu1X75DzXf8B5LEZpJ+fpIyv530NkNmAfsUyFc1OAuNpyu3Xev cJDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=U0a358IVOVo7gQm2SW3+FyQ0vXp2SDxhrhvpNA20ptI=; b=WWJp85RS48EpAzWBS3PQMAP2+wC2+BuyaF8xsAt9xHlbp4aGumCgSG1u6xfclDxh3p Uiyu5h+PX75b6/SYwTPKNuZtz7yBl+13SJHM0vSPwbiWN4Jd8iciF6v5njbt0lLBlEdS au5UtRmwU38qhtr7dwkwcwG3H/tZCg5TF2oH54EffA/hTXkSPpE5jxFrMX2QNTGe4rfc utAATbEvXgCdoCfZsAnwcWE9FOUPugT9g8scfeiMZ1Vd0meA39tl5teMhIREfrYLVs1K QIUWLD/LDbfIMNuCL8BnkG+25Mb3IHJaD1sWlTOMCjQ65R4lkYYdRgEsjbexrtrG5qmM du9w== X-Gm-Message-State: APjAAAVvXijkDfpwkTuBraHizcaBk1EGpAXV6IHRDD7UXq268sAofkrp 2byifICc1cBTIUz+Vvst2FNDMWV1udZjZwmeDsw= X-Google-Smtp-Source: APXvYqwVjgG3PwnEfdbtzAspQ0+C66CCeqMC21HXYeol4/6cxvafNeBhmIVPfEMFCG03eoKjTe6ZkDyvZGdNPpOZc0s= X-Received: by 2002:a6b:740b:: with SMTP id s11mr18655235iog.294.1570805554552; Fri, 11 Oct 2019 07:52:34 -0700 (PDT) MIME-Version: 1.0 References: <20190924094209.3827-1-pbhagavatula@marvell.com> <20191002205754.11746-1-pbhagavatula@marvell.com> <20191002205754.11746-9-pbhagavatula@marvell.com> In-Reply-To: <20191002205754.11746-9-pbhagavatula@marvell.com> From: Jerin Jacob Date: Fri, 11 Oct 2019 20:22:22 +0530 Message-ID: To: Pavan Nikhilesh Cc: Jerin Jacob , "Richardson, Bruce" , Akhil Goyal , Marko Kovacevic , Ori Kam , Radu Nicolau , Tomasz Kantecki , Sunil Kumar Kori , dpdk-dev Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v5 08/10] examples/l2fwd-event: add eventdev main loop 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" On Thu, Oct 3, 2019 at 2:29 AM wrote: > > From: Pavan Nikhilesh > > Add event dev main loop based on enabled l2fwd options and eventdev > capabilities. > > Signed-off-by: Pavan Nikhilesh > --- > examples/l2fwd-event/l2fwd_common.c | 6 + > examples/l2fwd-event/l2fwd_common.h | 2 + > examples/l2fwd-event/l2fwd_event.c | 294 ++++++++++++++++++++++++++++ > examples/l2fwd-event/l2fwd_event.h | 2 + > examples/l2fwd-event/main.c | 6 +- > 5 files changed, 309 insertions(+), 1 deletion(-) > > diff --git a/examples/l2fwd-event/l2fwd_common.c b/examples/l2fwd-event/l2fwd_common.c > index 213652d72..40e933c91 100644 > --- a/examples/l2fwd-event/l2fwd_common.c > +++ b/examples/l2fwd-event/l2fwd_common.c > @@ -65,6 +65,12 @@ l2fwd_event_init_ports(struct l2fwd_resources *l2fwd_rsrc) > uint16_t port_id; > int ret; > > + if (l2fwd_rsrc->event_mode) { > + port_conf.rxmode.mq_mode = ETH_MQ_RX_RSS; > + port_conf.rx_adv_conf.rss_conf.rss_key = NULL; > + port_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP; > + } > + > /* Initialise each port */ > RTE_ETH_FOREACH_DEV(port_id) { > struct rte_eth_conf local_port_conf = port_conf; > diff --git a/examples/l2fwd-event/l2fwd_common.h b/examples/l2fwd-event/l2fwd_common.h > index cdafa52c7..852c6d321 100644 > --- a/examples/l2fwd-event/l2fwd_common.h > +++ b/examples/l2fwd-event/l2fwd_common.h > @@ -114,7 +114,9 @@ l2fwd_get_rsrc(void) > > memset(l2fwd_rsrc, 0, sizeof(struct l2fwd_resources)); > l2fwd_rsrc->mac_updating = true; > + l2fwd_rsrc->event_mode = true; > l2fwd_rsrc->rx_queue_per_lcore = 1; > + l2fwd_rsrc->sched_type = RTE_SCHED_TYPE_ATOMIC; > l2fwd_rsrc->timer_period = 10 * rte_get_timer_hz(); > > return mz->addr; > diff --git a/examples/l2fwd-event/l2fwd_event.c b/examples/l2fwd-event/l2fwd_event.c > index adba40069..df0b56773 100644 > --- a/examples/l2fwd-event/l2fwd_event.c > +++ b/examples/l2fwd-event/l2fwd_event.c > @@ -17,6 +17,12 @@ > > #include "l2fwd_event.h" > > +#define L2FWD_EVENT_SINGLE 0x1 > +#define L2FWD_EVENT_BURST 0x2 > +#define L2FWD_EVENT_TX_DIRECT 0x4 > +#define L2FWD_EVENT_TX_ENQ 0x8 > +#define L2FWD_EVENT_UPDT_MAC 0x10 > + > static inline int > l2fwd_event_service_enable(uint32_t service_id) > { > @@ -128,11 +134,289 @@ l2fwd_event_capability_setup(struct l2fwd_event_resources *event_rsrc) > l2fwd_event_set_internal_port_ops(&event_rsrc->ops); > } > > +static __rte_noinline int > +l2fwd_get_free_event_port(struct l2fwd_event_resources *event_rsrc) > +{ > + static int index; > + int port_id; > + > + rte_spinlock_lock(&event_rsrc->evp.lock); > + if (index >= event_rsrc->evp.nb_ports) { > + printf("No free event port is available\n"); > + return -1; > + } > + > + port_id = event_rsrc->evp.event_p_id[index]; > + index++; > + rte_spinlock_unlock(&event_rsrc->evp.lock); > + > + return port_id; > +} > + > +static __rte_always_inline void > +l2fwd_event_loop_single(struct l2fwd_resources *l2fwd_rsrc, > + const uint32_t flags) > +{ > + const uint8_t is_master = rte_get_master_lcore() == rte_lcore_id(); > + struct l2fwd_event_resources *event_rsrc = l2fwd_rsrc->event_rsrc; > + const int port_id = l2fwd_get_free_event_port(event_rsrc); > + uint64_t prev_tsc = 0, diff_tsc, cur_tsc, timer_tsc = 0; > + const uint64_t timer_period = l2fwd_rsrc->timer_period; > + const uint8_t tx_q_id = event_rsrc->evq.event_q_id[ > + event_rsrc->evq.nb_queues - 1]; See below > + const uint8_t event_d_id = event_rsrc->event_d_id; > + struct rte_mbuf *mbuf; > + uint16_t dst_port; > + struct rte_event ev; > + > + if (port_id < 0) > + return; > + > + printf("%s(): entering eventdev main loop on lcore %u\n", __func__, > + rte_lcore_id()); > + > + while (!l2fwd_rsrc->force_quit) { > + /* if timer is enabled */ > + if (is_master && timer_period > 0) { > + cur_tsc = rte_rdtsc(); > + diff_tsc = cur_tsc - prev_tsc; > + > + /* advance the timer */ > + timer_tsc += diff_tsc; > + > + /* if timer has reached its timeout */ > + if (unlikely(timer_tsc >= timer_period)) { > + print_stats(l2fwd_rsrc); > + /* reset the timer */ > + timer_tsc = 0; > + } > + prev_tsc = cur_tsc; > + } > + > + /* Read packet from eventdev */ > + if (!rte_event_dequeue_burst(event_d_id, port_id, &ev, 1, 0)) > + continue; > + > + > + mbuf = ev.mbuf; > + dst_port = l2fwd_rsrc->dst_ports[mbuf->port]; > + rte_prefetch0(rte_pktmbuf_mtod(mbuf, void *)); > + > + if (timer_period > 0) > + __atomic_fetch_add( > + &l2fwd_rsrc->port_stats[mbuf->port].rx, > + 1, __ATOMIC_RELAXED); > + > + mbuf->port = dst_port; > + if (flags & L2FWD_EVENT_UPDT_MAC) > + l2fwd_mac_updating(mbuf, dst_port, > + &l2fwd_rsrc->eth_addr[dst_port]); See below > + > + if (flags & L2FWD_EVENT_TX_ENQ) { > + ev.queue_id = tx_q_id; > + ev.op = RTE_EVENT_OP_FORWARD; > + while (rte_event_enqueue_burst(event_d_id, port_id, > + &ev, 1) && > + !l2fwd_rsrc->force_quit) > + ; > + } > + > + if (flags & L2FWD_EVENT_TX_DIRECT) { > + rte_event_eth_tx_adapter_txq_set(mbuf, 0); > + while (!rte_event_eth_tx_adapter_enqueue(event_d_id, > + port_id, > + &ev, 1) && See below > + !l2fwd_rsrc->force_quit) > + ; > + } > + > + if (timer_period > 0) > + __atomic_fetch_add( > + &l2fwd_rsrc->port_stats[mbuf->port].tx, > + 1, __ATOMIC_RELAXED); As style comment: # There is a lot of multiline statements in the code, which reduce the readability of the code. Please find below some options to reduce it. Could you please check options to reduce it 1) shorten the structure name like s/event_rsrc/evt_rsrc s/l2fwd_rsrc/ rsrc 2) I think, rte_exit(EXIT_FAILURE can be replaced to rte_panic in the application case 3) Adjusting the newline code starts diff --git a/examples/l2fwd-event/l2fwd_event.c b/examples/l2fwd-event/l2fwd_event.c index df0b56773..49665a102 100644 --- a/examples/l2fwd-event/l2fwd_event.c +++ b/examples/l2fwd-event/l2fwd_event.c @@ -87,8 +87,8 @@ l2fwd_event_service_setup(struct l2fwd_resources *l2fwd_rsrc) &service_id); if (ret != -ESRCH && ret != 0) rte_exit(EXIT_FAILURE, - "Error in starting Rx adapter[%d] service\n", - event_rsrc->rx_adptr.rx_adptr[i]); + "Error in starting Rx adapter[%d] service\n", + event_rsrc->rx_adptr.rx_adptr[i]); l2fwd_event_service_enable(service_id); } 4) Replace code in the nested loop with static inline function so that code gets enough space in new function.