crypto: Add prefetching for src and dst 32/41032/4
authorNiyaz Murshed <[email protected]>
Tue, 4 Jun 2024 02:35:46 +0000 (02:35 +0000)
committerFan Zhang <[email protected]>
Tue, 25 Jun 2024 10:32:55 +0000 (10:32 +0000)
Adding prefetching to openssl plugin improves both sync and async mode
ipsec performance by more than 5% on N1 ampere.

Sync mode (1420b)
core count            old (MPPS)              new (MPPS)  %diff
    1c                  0.972                   1.01            3.90
    2c                  1.91                    2.02            5.87
    3c                  2.86                    3.04            6.03

Async mode (1420b)
core count            old (MPPS)              new (MPPS)        %diff
    1c 1.296                   1.37 5.70
    2c 2.58 2.753 6.70
    3c 3.74 3.9 4.27
    6c 7.52 7.832 4.14

Type: improvement
Change-Id: Ieef22c37e1330ac9f8b7e09a25c24162516b6c26
Signed-off-by: Niyaz Murshed <[email protected]>
src/plugins/crypto_openssl/main.c

index b070cf3..c59b5d3 100644 (file)
@@ -219,6 +219,17 @@ openssl_ops_enc_aead (vlib_main_t *vm, vnet_crypto_op_t *ops[],
       vnet_crypto_op_t *op = ops[i];
       int len = 0;
 
+      if (i + 2 < n_ops)
+       {
+         CLIB_PREFETCH (ops[i + 1]->src, 4 * CLIB_CACHE_PREFETCH_BYTES, LOAD);
+         CLIB_PREFETCH (ops[i + 1]->dst, 4 * CLIB_CACHE_PREFETCH_BYTES,
+                        STORE);
+
+         CLIB_PREFETCH (ops[i + 2]->src, 4 * CLIB_CACHE_PREFETCH_BYTES, LOAD);
+         CLIB_PREFETCH (ops[i + 2]->dst, 4 * CLIB_CACHE_PREFETCH_BYTES,
+                        STORE);
+       }
+
       ctx = ptd->evp_cipher_enc_ctx[op->key_index];
       EVP_EncryptInit_ex (ctx, 0, 0, NULL, op->iv);
       if (op->aad_len)