From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id EB596324B for ; Fri, 1 Dec 2017 15:48:10 +0100 (CET) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 Dec 2017 06:48:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,344,1508828400"; d="scan'208";a="8428232" Received: from sivswdev02.ir.intel.com (HELO localhost.localdomain) ([10.237.217.46]) by orsmga003.jf.intel.com with ESMTP; 01 Dec 2017 06:48:06 -0800 From: Konstantin Ananyev To: dev@dpdk.org Cc: Konstantin Ananyev Date: Fri, 1 Dec 2017 14:47:59 +0000 Message-Id: <1512139682-11114-1-git-send-email-konstantin.ananyev@intel.com> X-Mailer: git-send-email 1.7.0.7 To: dev@dpdk.org Subject: [dpdk-dev] [RFC PATCH 0/3] *** SUBJECT HERE *** 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: , X-List-Received-Date: Fri, 01 Dec 2017 14:48:11 -0000 The series introduces 2 main changes: 1.Introduce a separate data structure (rte_eth_queue_local) to store local to given process (i.e. no-shareable) information for each configured rx/tx queue. Memory for that structure is allocated/freed dynamically during rte_eth_dev_configure(). Reserve a space for queue specific (rx|tx)_pkt_burst(), tx_pkt_prepare() function pointers inside that structure. Move rx/tx callback related information inside that structure. That introduces a change in current behavior: all callbacks for un-configured queues will be automatically removed. Also as size of struct rte_eth_dev changes that patch is an ABI breakage, so deprecation notice for 18.05 is filled. Further suggestions how to introduce the same functionality without ABI breakage are welcome. 2. Make it safe to remove rx/tx callback at runtime. Right now it is not possible for the application to figure out when it is safe to free removed callback handle and associated with it resources(unless the queue is stopped). That's probably not a big problem if all callbacks are static hange through whole application lifetime) and/or application doesn't allocate any resources for the callback handler. Though if callbacks have to be added/removed dynamically and callback handler would require more resources to operate properly - then it might become an issue. So patch #2 fixes that problem - now as soon as rte_eth_remove_(rx|tx)_callback() completes successfully, application can safely free all associated with the removed callback resources. Performance impact: If application doesn't use RX/TX callbacks, then the tests I run didn't reveal any performance degradation. Though if application do use RX/TX callbacks - patch #2 does introduce some slowdown. To be more specific here, on BDW (E5-2699 v4) 2.2GHz, 4x10Gb (X520-4) with http://dpdk.org/dev/patchwork/patch/31864/ patch installed I got: 1) testpmd ... --latencystats=1 - slowdown < 1% 2) examples//l3fwd ... --parse-ptype - - slowdown < 1% 3) examples/rxtx_callbacks - slowdown ~8% All that in terms of packet throughput (Mpps). Ability to safely remove callbacks at runtime implies some sort of synchronization. Even I tried to make it as light as possible, probably some slowdown is unavoidable. Of course instead of introducing these changes at rte_ethdev layer similar technique could be applied on individual callback basis. In that case it would be up to callback writer/installer to decide does he/she need a removable at runtime callback or not. Though in that case, each installed callback might introduce extra synchronization overhead and slowdown. Konstantin Ananyev (3): ethdev: introduce eth_queue_local ethdev: make it safe to remove rx/tx callback at runtime doc: ethdev ABI change deprecation notice doc/guides/rel_notes/deprecation.rst | 5 + lib/librte_ether/rte_ethdev.c | 390 ++++++++++++++++++++++------------- lib/librte_ether/rte_ethdev.h | 174 ++++++++++++---- 3 files changed, 387 insertions(+), 182 deletions(-) -- 2.13.5