dpdk: device_id sorted order for cryptodev 50/28050/3
authorVladimir Ratnikov <vratnikov@netgate.com>
Thu, 23 Jul 2020 09:11:09 +0000 (05:11 -0400)
committerMatthew Smith <mgsmith@netgate.com>
Thu, 23 Jul 2020 22:24:48 +0000 (22:24 +0000)
By default, VPP automatically assignes for each tunnel
next available QAT device by order dev_id-que-pair.
In most cases we have more than one device and it can
greatly increase ipsec perfomance without any actions
with configuration from user  if we use all the
devices first and first que-pairs

Type: feature

Signed-off-by: Vladimir Ratnikov <vratnikov@netgate.com>
Change-Id: Iac9fe74768775459e22f69bb3706b542090a9375

src/plugins/dpdk/cryptodev/cryptodev.c

index 86cec8a..2ae09ce 100644 (file)
@@ -1181,9 +1181,23 @@ cryptodev_create_device (vlib_main_t *vm, u32 n_queues)
   return 0;
 }
 
+static int
+cryptodev_cmp (void *v1, void *v2)
+{
+  cryptodev_inst_t *a1 = v1;
+  cryptodev_inst_t *a2 = v2;
+
+  if (a1->q_id > a2->q_id)
+    return 1;
+  if (a1->q_id < a2->q_id)
+    return -1;
+  return 0;
+}
+
 static int
 cryptodev_probe (vlib_main_t *vm, u32 n_workers)
 {
+  cryptodev_main_t *cmt = &cryptodev_main;
   u32 n_queues = cryptodev_count_queue (vm->numa_node);
   u32 i;
   int ret;
@@ -1204,6 +1218,8 @@ cryptodev_probe (vlib_main_t *vm, u32 n_workers)
        return ret;
     }
 
+  vec_sort_with_function(cmt->cryptodev_inst, cryptodev_cmp);
+
   return 0;
 }