app/crypto-perf: limit number of sessions
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Thu, 5 Jul 2018 02:07:52 +0000 (03:07 +0100)
committerPablo de Lara <pablo.de.lara.guarch@intel.com>
Tue, 10 Jul 2018 22:57:51 +0000 (00:57 +0200)
Instead of creating a fixed number of sessions,
calculate the necessary number based on number of devices
and queue pairs used.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
app/test-crypto-perf/main.c

index 4ae1439..74e2165 100644 (file)
@@ -21,7 +21,6 @@
 #include "cperf_test_verify.h"
 #include "cperf_test_pmd_cyclecount.h"
 
-#define NUM_SESSIONS 2048
 #define SESS_MEMPOOL_CACHE_SIZE 64
 
 const char *cperf_test_type_strs[] = {
@@ -67,6 +66,7 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
                        struct rte_mempool *session_pool_socket[])
 {
        uint8_t enabled_cdev_count = 0, nb_lcores, cdev_id;
+       uint32_t sessions_needed = 0;
        unsigned int i, j;
        int ret;
 
@@ -149,15 +149,43 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
                        .nb_descriptors = opts->nb_descriptors
                };
 
+               uint32_t dev_max_nb_sess = cdev_info.sym.max_nb_sessions;
+               /*
+                * Two sessions objects are required for each session
+                * (one for the header, one for the private data)
+                */
+               if (!strcmp((const char *)opts->device_type,
+                                       "crypto_scheduler")) {
+#ifdef RTE_LIBRTE_PMD_CRYPTO_SCHEDULER
+                       uint32_t nb_slaves =
+                               rte_cryptodev_scheduler_slaves_get(cdev_id,
+                                                               NULL);
+
+                       sessions_needed = 2 * enabled_cdev_count *
+                               opts->nb_qps * nb_slaves;
+#endif
+               } else
+                       sessions_needed = 2 * enabled_cdev_count *
+                                               opts->nb_qps;
+
+               /*
+                * A single session is required per queue pair
+                * in each device
+                */
+               if (dev_max_nb_sess < opts->nb_qps) {
+                       RTE_LOG(ERR, USER1,
+                               "Device does not support at least "
+                               "%u sessions\n", opts->nb_qps);
+                       return -ENOTSUP;
+               }
                if (session_pool_socket[socket_id] == NULL) {
                        char mp_name[RTE_MEMPOOL_NAMESIZE];
                        struct rte_mempool *sess_mp;
 
                        snprintf(mp_name, RTE_MEMPOOL_NAMESIZE,
                                "sess_mp_%u", socket_id);
-
                        sess_mp = rte_mempool_create(mp_name,
-                                               NUM_SESSIONS,
+                                               sessions_needed,
                                                max_sess_size,
                                                SESS_MEMPOOL_CACHE_SIZE,
                                                0, NULL, NULL, NULL,