raw/ioat: fix termination descriptor for batch

Message ID 20210716135027.30855-1-konstantin.ananyev@intel.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers
Series raw/ioat: fix termination descriptor for batch |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/github-robot success github build: passed
ci/Intel-compilation success Compilation OK
ci/iol-abi-testing success Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-testing fail Testing issues
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance fail Performance Testing issues

Commit Message

Ananyev, Konstantin July 16, 2021, 1:50 p.m. UTC
  When batch_size == 1, idxd has to add a dummy termination descriptor
to satisfy HW requirements.
Right now it uses NOP descriptor with FENCE flag.
This is excessive and fencing can slowdown things quite significantly.
The patch removes FENCE flag from termination dummy descriptor.
That helps to improve performance for no-burst scenarios.

Fixes: 245efe544d8e ("raw/ioat: report status of completed jobs")

Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 drivers/raw/ioat/rte_idxd_rawdev_fns.h | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
  

Comments

Bruce Richardson July 16, 2021, 2:27 p.m. UTC | #1
On Fri, Jul 16, 2021 at 02:50:27PM +0100, Konstantin Ananyev wrote:
> When batch_size == 1, idxd has to add a dummy termination descriptor
> to satisfy HW requirements.
> Right now it uses NOP descriptor with FENCE flag.
> This is excessive and fencing can slowdown things quite significantly.
> The patch removes FENCE flag from termination dummy descriptor.
> That helps to improve performance for no-burst scenarios.
> 
> Fixes: 245efe544d8e ("raw/ioat: report status of completed jobs")
> 
> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

Thanks for patch.
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  
David Marchand July 20, 2021, 1:51 p.m. UTC | #2
On Fri, Jul 16, 2021 at 4:28 PM Bruce Richardson
<bruce.richardson@intel.com> wrote:
>
> On Fri, Jul 16, 2021 at 02:50:27PM +0100, Konstantin Ananyev wrote:
> > When batch_size == 1, idxd has to add a dummy termination descriptor
> > to satisfy HW requirements.
> > Right now it uses NOP descriptor with FENCE flag.
> > This is excessive and fencing can slowdown things quite significantly.
> > The patch removes FENCE flag from termination dummy descriptor.
> > That helps to improve performance for no-burst scenarios.
> >
> > Fixes: 245efe544d8e ("raw/ioat: report status of completed jobs")
> >
> > Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Applied, thanks.
  

Patch

diff --git a/drivers/raw/ioat/rte_idxd_rawdev_fns.h b/drivers/raw/ioat/rte_idxd_rawdev_fns.h
index 57548609e3..3ea25f6ca9 100644
--- a/drivers/raw/ioat/rte_idxd_rawdev_fns.h
+++ b/drivers/raw/ioat/rte_idxd_rawdev_fns.h
@@ -231,6 +231,14 @@  __idxd_enqueue_copy(int dev_id, rte_iova_t src, rte_iova_t dst,
 			src, dst, length, &hdl);
 }
 
+static __rte_always_inline int
+__idxd_enqueue_nop(int dev_id)
+{
+	/* only op field needs filling - zero src, dst and length */
+	return __idxd_write_desc(dev_id, idxd_op_nop << IDXD_CMD_OP_SHIFT,
+			0, 0, 0, NULL);
+}
+
 static __rte_always_inline int
 __idxd_fence(int dev_id)
 {
@@ -260,8 +268,8 @@  __idxd_perform_ops(int dev_id)
 		return 0;
 
 	if (idxd->batch_size == 1)
-		/* use a fence as a null descriptor, so batch_size >= 2 */
-		if (__idxd_fence(dev_id) != 1)
+		/* use a NOP as a null descriptor, so batch_size >= 2 */
+		if (__idxd_enqueue_nop(dev_id) != 1)
 			return -1;
 
 	/* write completion beyond last desc in the batch */