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 AD988A04DD; Wed, 28 Oct 2020 13:53:50 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3D8FCCA8F; Wed, 28 Oct 2020 13:53:48 +0100 (CET) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id B45F6CA87 for ; Wed, 28 Oct 2020 13:53:46 +0100 (CET) IronPort-SDR: 4x+wlmtt8smZmdbCV2CVg3Vcgyxg5UoNHt+MHJNGC+IdD8N9xMbm4LCqt4zNFZLQvSWehNnfw5 Ubyt1yG8nUUQ== X-IronPort-AV: E=McAfee;i="6000,8403,9787"; a="156026706" X-IronPort-AV: E=Sophos;i="5.77,426,1596524400"; d="scan'208";a="156026706" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Oct 2020 05:53:44 -0700 IronPort-SDR: r7MzGnFqzQHhBJ9fgvFSUNG/CgPN/ZzCRk/SG0M6YdnKuRotSXvRfUS29zmW+2hkh3e+XJrUVT OZsvKuImRK/w== X-IronPort-AV: E=Sophos;i="5.77,426,1596524400"; d="scan'208";a="350985882" Received: from vmedvedk-mobl.ger.corp.intel.com (HELO [10.252.22.178]) ([10.252.22.178]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Oct 2020 05:53:43 -0700 To: Akhil Goyal , "dev@dpdk.org" Cc: Radu Nicolau References: <1603807420-268020-1-git-send-email-vladimir.medvedkin@intel.com> From: "Medvedkin, Vladimir" Message-ID: <9a255269-dcc7-bed3-fddd-cf5c3d348551@intel.com> Date: Wed, 28 Oct 2020 12:53:41 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.3.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH] examples/ipsec-secgw: fix session mempool initialisation 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" Hi Akhil, On 28/10/2020 12:30, Akhil Goyal wrote: > Hi Vladimir, > >> -----Original Message----- >> From: Vladimir Medvedkin >> Sent: Tuesday, October 27, 2020 7:34 PM >> To: dev@dpdk.org >> Cc: Akhil Goyal ; Radu Nicolau >> Subject: [PATCH] examples/ipsec-secgw: fix session mempool initialisation >> >> Creation of a session mempool may fail in the case of a single lcore >> and a low number of SA. >> > > I am not able to understand the reason why the number need to be increased. > Could you please explain? > Sure. Starting ipsec-secgw with 4 configured SA with single lcore fails with: CRYPTODEV: rte_cryptodev_sym_session_pool_create() line 1420: rte_cryptodev_sym_session_pool_create(name=sess_mp_0) failed, rte_errno=22 In case when there is only one lcore and number of configures SA less then (0.5 * CDEV_MP_CACHE_SZ) then creation of the mempool fails with EINVAL. This is because the number of requested items is less than (cache size * 1.5) from rte_mempool_create_empty(): /* asked cache too big */ if (cache_size > RTE_MEMPOOL_CACHE_MAX_SIZE || CALC_CACHE_FLUSHTHRESH(cache_size) > n) { rte_errno = EINVAL; return NULL; } , where n is nb_sess and CALC_CACHE_FLUSHTHRESH(cache_size) is just (1.5 * cache_size). This was mentioned in rte_mempool_create() documentation: @param cache_size ... * This argument must be lower or equal to * RTE_MEMPOOL_CACHE_MAX_SIZE and n / 1.5. ... Before https://patches.dpdk.org/patch/81245/ there was no such a problem due to multiplying nb_sess by 2. >> Fixes: e30b2833c47c ("security: update session create API") >> Cc: akhil.goyal@nxp.com >> >> Signed-off-by: Vladimir Medvedkin >> --- >> examples/ipsec-secgw/ipsec-secgw.c | 5 +++++ >> 1 file changed, 5 insertions(+) >> >> diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec- >> secgw/ipsec-secgw.c >> index 2219148..935829e 100644 >> --- a/examples/ipsec-secgw/ipsec-secgw.c >> +++ b/examples/ipsec-secgw/ipsec-secgw.c >> @@ -65,6 +65,7 @@ volatile bool force_quit; >> #define CDEV_QUEUE_DESC 2048 >> #define CDEV_MAP_ENTRIES 16384 >> #define CDEV_MP_CACHE_SZ 64 >> +#define CDEV_MP_CACHE_MULTIPLIER 1.5 /* from rte_mempool.c */ >> #define MAX_QUEUE_PAIRS 1 >> >> #define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */ >> @@ -2350,6 +2351,8 @@ session_pool_init(struct socket_ctx *ctx, int32_t >> socket_id, size_t sess_sz) >> "sess_mp_%u", socket_id); >> nb_sess = (get_nb_crypto_sessions() + CDEV_MP_CACHE_SZ * >> rte_lcore_count()); >> + nb_sess = RTE_MAX(nb_sess, CDEV_MP_CACHE_SZ * >> + CDEV_MP_CACHE_MULTIPLIER); >> sess_mp = rte_cryptodev_sym_session_pool_create( >> mp_name, nb_sess, sess_sz, CDEV_MP_CACHE_SZ, 0, >> socket_id); >> @@ -2374,6 +2377,8 @@ session_priv_pool_init(struct socket_ctx *ctx, int32_t >> socket_id, >> "sess_mp_priv_%u", socket_id); >> nb_sess = (get_nb_crypto_sessions() + CDEV_MP_CACHE_SZ * >> rte_lcore_count()); >> + nb_sess = RTE_MAX(nb_sess, CDEV_MP_CACHE_SZ * >> + CDEV_MP_CACHE_MULTIPLIER); >> sess_mp = rte_mempool_create(mp_name, >> nb_sess, >> sess_sz, >> -- >> 2.7.4 > -- Regards, Vladimir