-----Original Message----- > Date: Tue, 20 Feb 2018 18:55:09 +0000 > From: "Vangati, Narender" <narender.vang...@intel.com> > To: Jerin Jacob <jerin.ja...@caviumnetworks.com>, "Gujjar, Abhinandan S" > <abhinandan.guj...@intel.com> > CC: "dev@dpdk.org" <dev@dpdk.org>, "Rao, Nikhil" <nikhil....@intel.com>, > "Eads, Gage" <gage.e...@intel.com>, "hemant.agra...@nxp.com" > <hemant.agra...@nxp.com>, "akhil.go...@nxp.com" <akhil.go...@nxp.com>, > "narayanaprasad.athr...@cavium.com" <narayanaprasad.athr...@cavium.com>, > "nidadavolu.mur...@cavium.com" <nidadavolu.mur...@cavium.com>, > "nithin.dabilpu...@cavium.com" <nithin.dabilpu...@cavium.com> > Subject: RE: [RFC v2, 2/2] eventdev: add crypto adapter API header >
Hi Narender, > Jerin, > I see the "ENQ" part of the adapter a little differently. I think there is > value to offloading cryptodev_enqueue to an adapter service, even when the > h/w natively supports DEQ. But there is no element of _offload_ here. Right? meaning, We can express the ENQ-DEQ mode with existing cryptodev+eventdev normative API. I think, Pushing to adapter will result in running ENQ-DEQ only on "service lcore" instead of "worker lcore". How about making "ENQ-DEQ" scheme as set of helper C functions. This will enable, 1) To run the ENQ-DEQ logic in "service" or "worker" lcores 2) Remove the capability in adapter code. ie. If application wants to use ENQ-DEQ scheme as a helper function it will work for both cases(HW and SW) > When the same queue pair is being used by the workers to enqueue requests > (this could be where the pre crypto stage was ordered scheduled and the > cryptodev enqueues need to be ordered), you would need some synchronization. > Going thru eventdev to an adapter which enqueues on worker behalf provides > that synchronization and ordering. Makes sense. Only question is that, do we need to expose as service function or generic helper C function?. IMO, service functions makes sense when SW does something when there is no HW support and to get the job done like schedule() function. > > In that sense, the ENQ-DEQ mode is an application choice and defines its > programming model. Based on that, a service would be created that does ENQ. > For the DEQ part, perhaps the adapter can tell whether the h/w supports DEQ > natively or needs to be done in s/w - that way you can have a single adapter. > > Application model for DEQ mode - call cryptodev_enqueue directly. DEQ is h/w > or s/w based on capability > Application model for ENQ-DEQ mode - use event_enqueue to offload > cryptodev_enqueue to adapter. DEQ is h/w or s/w based on capability > > > vnr > --- > > -----Original Message----- > From: Jerin Jacob [mailto:jerin.ja...@caviumnetworks.com] > Sent: Tuesday, February 20, 2018 7:59 AM > To: Gujjar, Abhinandan S <abhinandan.guj...@intel.com> > Cc: dev@dpdk.org; Vangati, Narender <narender.vang...@intel.com>; Rao, Nikhil > <nikhil....@intel.com>; Eads, Gage <gage.e...@intel.com>; > hemant.agra...@nxp.com; akhil.go...@nxp.com; > narayanaprasad.athr...@cavium.com; nidadavolu.mur...@cavium.com; > nithin.dabilpu...@cavium.com > Subject: Re: [RFC v2, 2/2] eventdev: add crypto adapter API header > > -----Original Message----- > > Date: Mon, 19 Feb 2018 10:55:58 +0000 > > From: "Gujjar, Abhinandan S" <abhinandan.guj...@intel.com> > > To: Jerin Jacob <jerin.ja...@caviumnetworks.com> > > CC: "dev@dpdk.org" <dev@dpdk.org>, "Vangati, Narender" > > <narender.vang...@intel.com>, "Rao, Nikhil" <nikhil....@intel.com>, > > "Eads, Gage" <gage.e...@intel.com>, "hemant.agra...@nxp.com" > > <hemant.agra...@nxp.com>, "akhil.go...@nxp.com" > > <akhil.go...@nxp.com>, "narayanaprasad.athr...@cavium.com" > > <narayanaprasad.athr...@cavium.com>, > > "nidadavolu.mur...@cavium.com" <nidadavolu.mur...@cavium.com>, > > "nithin.dabilpu...@cavium.com" <nithin.dabilpu...@cavium.com> > > Subject: RE: [RFC v2, 2/2] eventdev: add crypto adapter API header > > > > Hi Jerin, > > Hi Abhinandan, > > > > > Thanks for the review. Please find few comments inline. > > > > > -----Original Message----- > > > From: Jerin Jacob [mailto:jerin.ja...@caviumnetworks.com] > > > Sent: Saturday, February 17, 2018 1:04 AM > > > To: Gujjar, Abhinandan S <abhinandan.guj...@intel.com> > > > Cc: dev@dpdk.org; Vangati, Narender <narender.vang...@intel.com>; > > > Rao, Nikhil <nikhil....@intel.com>; Eads, Gage > > > <gage.e...@intel.com>; hemant.agra...@nxp.com; akhil.go...@nxp.com; > > > narayanaprasad.athr...@cavium.com; nidadavolu.mur...@cavium.com; > > > nithin.dabilpu...@cavium.com > > > Subject: Re: [RFC v2, 2/2] eventdev: add crypto adapter API header > > > > > > -----Original Message----- > > > > Date: Mon, 15 Jan 2018 16:23:50 +0530 > > > > From: Abhinandan Gujjar <abhinandan.guj...@intel.com> > > > > To: jerin.ja...@caviumnetworks.com > > > > CC: dev@dpdk.org, narender.vang...@intel.com, Abhinandan Gujjar > > > > <abhinandan.guj...@intel.com>, Nikhil Rao <nikhil....@intel.com>, > > > > Gage Eads <gage.e...@intel.com> > > > > Subject: [RFC v2, 2/2] eventdev: add crypto adapter API header > > > > X-Mailer: git-send-email 1.9.1 > > > > > > > > + > > > > +/** > > > > + * This adapter adds support to enqueue crypto completions to event > > > > device. > > > > + * The packet flow from cryptodev to the event device can be > > > > +accomplished > > > > + * using both SW and HW based transfer mechanisms. > > > > + * The adapter uses a EAL service core function for SW based > > > > +packet transfer > > > > + * and uses the eventdev PMD functions to configure HW based > > > > +packet transfer > > > > + * between the cryptodev and the event device. > > > > + * > > > > + * In the case of SW based transfers, application can choose to > > > > +submit a > > > > > > I think, we can remove "In the case of SW based transfers" as it > > > should be applicable for HW case too > > Ok. In that case, adapter will detect the presence of HW connection > > between cryptodev & eventdev and will not dequeue crypto completions. > > I would say presence of "specific capability" instead of HW. > > > > > > > > > > + * crypto operation directly to cryptodev or send it to the > > > > + cryptodev > > > > + * adapter via eventdev, the cryptodev adapter then submits the > > > > + crypto > > > > + * operation to the crypto device. The first mode is known as the > > > > > > The first mode (DEQ) is very clear. In the second mode(ENQ_DEQ), > > > - How does "worker" submits the crypto work through crypto-adapter? > > > If I understand it correctly, "workers" always deals with only > > > cryptodev's > > > rte_cryptodev_enqueue_burst() API and "service" function in crypto > > > adapter would be responsible for dequeue() from cryptodev and enqueue to > > > eventdev? > > > > > > I understand the need for OP_NEW vs OP_FWD mode difference in both modes. > > > Other than that, What makes ENQ_DEQ different? Could you share the > > > flow for ENQ_DEQ mode with APIs. > > > > /* > > Application changes for ENQ_DEQ mode: > > ------------------------------------------------- > > /* In ENQ_DEQ mode, to enqueue to adapter app > > * has to fill out following details. > > */ > > struct rte_event_crypto_request *req; > > struct rte_crypto_op *op = rte_crypto_op_alloc(); > > > > /* fill request info */ > > req = (void *)((char *)op + op.private_data_offset); > > req->cdev_id = 1; > > req->queue_pair_id = 1; > > > > /* fill response info */ > > ... > > > > /* send event to crypto adapter */ > > ev->event_ptr = op; > > ev->queue_id = dst_event_qid; > > ev->priority = dst_priority; > > ev->sched_type = dst_sched_type; > > ev->event_type = RTE_EVENT_TYPE_CRYPTODEV; > > ev->sub_event_type = sub_event_type; > > ev->flow_id = dst_flow_id; > > ret = rte_event_enqueue_burst(event_dev_id, event_port_id, ev, 1); > > > > > > Adapter in ENQ_DEQ mode, submitting crypto ops to cryptodev: > > ----------------------------------------------------------------------------- > > n = rte_event_dequeue_burst(event_dev_id, event_port_id, ev, > > BATCH_SIZE, time_out); > > struct rte_crypto_op *op = ev->event_ptr; > > struct rte_event_crypto_request *req = (void *)op + > > op.private_data_offset; > > cdev_id = req->cdev_id; > > qp_id = req->queue_pair_id > > > > ret = rte_cryptodev_enqueue_burst(cdev_id, qp_id, op, 1); > > This mode wont work for the HW implementations that I know. As in HW > implementations, The Adapter is embedded in HW. > The DEQ mode works. But, This would call for to have two separate application > logic for DEQ and ENQ_DEQ mode. > I think, it is unavoidable as SW scheme has better performance with ENQ_DEQ > MODE. > > If you think, there is no option other than introducing a capability in > adapter then please create capability in Rx adapter to inform the adapter > capability to the application. > > Do we think, it possible to have scheme with ENQ_DEQ mode, Where application > still enqueue to cryptodev like DEQ mode but using cryptodev. ie. Adapter > patches the cryptodev dev->enqueue_burst() to "eventdev enqueue burst" > followed by "exiting dev->enqueue_burst". > Something like exiting ethdev rx_burst callback scheme. > This will enable application to have unified flow IMO. > > Any thoughts from NXP folks? > > > */ > > > > > > > + * dequeue only (DEQ) mode and the second as the enqueue - > > > > + dequeue > > > > > > extra space between "mode" and "and" > > Ok > > > > > > > + * (ENQ_DEQ) mode. The choice of mode can be specified when > > > > + creating > > > > + * the adapter. > > > > + * In the latter choice, the cryptodev adapter is able to use > > > > + * RTE_OP_FORWARD as the event dev enqueue type, this has a > > > > + performance > > > > + * advantage in "closed system" eventdevs like the eventdev SW > > > > + PMD and > > >