@@ -365,3 +365,852 @@ auth-op="generate"
auth-key-sz=16
auth-iv-sz=16
digest-sz=4
+
+# Marvell Cn10K configs
+[test_perf_mrvl_aes_cbc]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_gcm_encrypt]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="aead"
+aead-algo="aes-gcm"
+aead-op="encrypt"
+aead-key-sz="16"
+aead-iv-sz="12"
+aead-aad-sz="16"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_cbc_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_sha2_256_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha2-256"
+auth-op="generate"
+auth-key-sz="0"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eia3_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_gmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="aes-gmac"
+auth-op="generate"
+auth-key-sz="32"
+auth-iv-sz="12"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_null_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="null"
+cipher-op="encrypt"
+cipher-key-sz="0"
+cipher-iv-sz="0"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_kasumi_f8_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="kasumi-f8"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="8"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uia2_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_kasumi_f9_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="kasumi-f9"
+auth-op="generate"
+auth-key-sz="16"
+aead-aad-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha1"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_3des_cbc_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="3des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="24"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="3des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="24"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_224_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-224-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="28"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_256_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_384_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-384-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="48"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+aead-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_snow_3g_uia2_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_zuc_eia3_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_snow3g_uia2_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_zuc_eia3_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_snow3g_uia2_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_zuc_eia3_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_md5_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="md5-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_3des_cbc_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="3des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="24"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_224_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-224-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="28"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_256_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_384_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-384-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="48"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_512_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-512-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="64"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_xts__cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-xts"
+cipher-op="encrypt"
+cipher-key-sz="64"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_des_cbc_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="8"
+cipher-iv-sz="8"
+csv-friendly="True"
+
+[test_perf_mrvl_md5_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="md5"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_sha512_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-512"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="64"
+csv-friendly="True"
+
+[test_perf_mrvl_sha384_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-384"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="48"
+csv-friendly="True"
+
+[test_perf_mrvl_sha256_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-256"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_sha224_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-224"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="28"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_snow3g_uia2]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_buffer]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+buffer-sz="[64,128,256,512,1024,1280,2048,4096,8192,16384]"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_chacha20_poly1305_aead]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="aead"
+aead-algo="chacha20-poly1305"
+aead-op="encrypt"
+aead-key-sz="32"
+aead-iv-sz="12"
+aead-aad-sz="32"
+digest-sz="16"
+csv-friendly="True"
+
+[test_mrvl_crypto_sha2_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_devtype]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_mrvl_crypto_sha1_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_ptest]
+silent="True"
+ptest=["throughput","latency","pmd-cyclecount"]
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_burst]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz=["16", "24", "32"]
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
@@ -374,15 +374,15 @@ class Crb(object):
pass
for i in range(len(match)):
- # check if device is cavium and check its linkspeed, append only if it is 10G
+ # for cavium supported link speed specfied under linkspeeds
if "177d:" in match[i][1]:
- linkspeed = "10000"
+ linkspeeds = ["40000", "10000", "25000", "50000", "100000"]
nic_linkspeed = self.send_expect(
"cat /sys/bus/pci/devices/%s/net/*/speed" % match[i][0],
"# ",
alt_session=True,
)
- if nic_linkspeed.split()[0] == linkspeed:
+ if nic_linkspeed.split()[0] in linkspeeds:
self.pci_devices_info.append((match[i][0], match[i][1]))
else:
self.pci_devices_info.append((match[i][0], match[i][1]))
@@ -166,8 +166,8 @@ DRIVERS = {
"cavium_a034": "thunder-nicvf",
"cavium_0011": "thunder-nicvf",
"IXGBE_10G-X550EM_X_SFP": "ixgbe",
- "cavium_a063": "octeontx2-nicpf",
- "cavium_a064": "octeontx2-nicvf",
+ "cavium_a063": "rvu_nicpf",
+ "cavium_a064": "rvu_nicvf",
"ICE_100G-E810C_QSFP": "ice",
"ICE_25G-E810C_SFP": "ice",
"ICE_25G-E823C_QSFP": "ice",
@@ -186,7 +186,7 @@ class SSHPexpect:
def get_output_all(self):
output = self.session.before
- output.replace("[PEXPECT]", "")
+ output = output.replace("[PEXPECT]#", "")
return output
def close(self, force=False):
@@ -43,6 +43,7 @@ class NetDevice(object):
if not isinstance(crb, Crb):
raise Exception(" Please input the instance of Crb!!!")
self.crb = crb
+ self.__send_expect = self.crb.send_expect
self.domain_id = domain_id
self.bus_id = bus_id
self.devfun_id = devfun_id
@@ -727,6 +728,8 @@ class NetDevice(object):
"/sys/bus/pci/devices/%s:%s:%s" % (domain_id, bus_id, devfun_id),
vf_reg_file,
)
+ self.__send_expect("echo 0 > %s" %
+ (vf_reg_path), "# ")
self.__send_expect("echo %d > %s" % (int(vf_num), vf_reg_path), "# ")
def generate_sriov_vfs_linux_igb_uio(self, domain_id, bus_id, devfun_id, vf_num):
@@ -59,14 +59,74 @@ class TestCryptoPerfCryptodevPerf(TestCase):
"# ",
5,
)
-
- cc.bind_qat_device(self, "vfio-pci")
+ if self.nic == "cavium_a063":
+ count = len(self.get_suite_cfg().get('l').split(",")) - 1
+ cc.bind_qat_device(self, "vfio-pci", generate_vfs=True, vf_count=count)
+ else:
+ cc.bind_qat_device(self, "vfio-pci")
src_files = ["dep/test_aes_cbc.data", "dep/test_aes_gcm.data"]
self.dut_file_dir = "/tmp"
for file in src_files:
self.dut.session.copy_file_to(file, self.dut_file_dir)
def tear_down_all(self):
+ if self.nic == "cavium_a063":
+ cc.bind_qat_device(self, "vfio-pci", generate_vfs=True,
+ vf_count=2)
+ import pandas as pd
+ tuples = [('TestCase',), ('performance', 'failed_enq'),
+ ('performance', 'failed_deq'),
+ ('performance', 'throughput_mops'),
+ ('performance', 'cycle_buf'),
+ ('performance', 'throughput', 'value'),
+ ('performance', 'throughput', 'delta'),
+ ('parameters', 'core_num/thread_num'),
+ ('parameters', 'frame_size'),
+ ('parameters', 'burst_size'),
+ ('parameters', 'total_ops'), ('status',)]
+ mindex = pd.MultiIndex.from_tuples(tuples)
+ index = 0
+ df = pd.DataFrame([], columns=mindex)
+ for tname, data in self._perf_result.items():
+ for dt in data:
+ for key, value in dt.items():
+ df.loc[index, 'TestCase'] = tname
+ if key == 'status':
+ df.loc[index, (key)] = value
+ continue
+ for item in value:
+ if item['name'] == 'throughput':
+ df.loc[index, (key, item['name'], 'value')] = item['value']
+ df.loc[index, (key, item['name'], 'delta')] = item['delta']
+ else:
+ df.loc[index, (key, item['name'])] = item['value']
+ index += 1
+ perf_xl = self.logger.log_path + "/" + "perf_cryptodev_result.xls"
+ writer = pd.ExcelWriter(perf_xl, engine='xlsxwriter')
+ wb = writer.book
+ df.to_excel(writer, sheet_name='Sheet1')
+ ws = writer.sheets["Sheet1"]
+ merge_format = wb.add_format({"bold": 1,"border": 1,"align": "center",
+ "valign": "vcenter"})
+ ws.merge_range('B1:B3', "TestCase", merge_format)
+ ws.merge_range('C2:C3', "failed_enq", merge_format)
+ ws.merge_range('D2:D3', "failed_deq", merge_format)
+ ws.merge_range('E2:E3', "throughput_mops", merge_format)
+ ws.merge_range('F2:F3', "throughput_mops", merge_format)
+ ws.merge_range('I2:I3', "core_num/thread_num", merge_format)
+ ws.merge_range('J2:J3', "frame_size", merge_format)
+ ws.merge_range('K2:K3', "burst_size", merge_format)
+ ws.merge_range('L2:L3', "total_ops", merge_format)
+ ws.merge_range('M1:M3', "status", merge_format)
+
+ format1 = wb.add_format({"bg_color": "#C6EFCE", "font_color": "#006100", "border": 1})
+ format2 = wb.add_format({"bg_color": "#FFC7CE", "font_color": "#9C0006"})
+ ws.conditional_format("B1:M3", {"type": "cell", "criteria": ">=", "value": 0 , 'format': format2})
+ condition = 'B5:M%s'%(5+len(df)-1)
+ ws.conditional_format(condition, {'type': 'no_blanks', 'format':format1})
+ ws.autofit()
+
+ wb.close()
if self._perf_result:
with open(
self.logger.log_path + "/" + "perf_cryptodev_result.json", "a"
@@ -175,12 +235,197 @@ class TestCryptoPerfCryptodevPerf(TestCase):
def test_scheduler_zuc(self):
self._run_crypto_perf_throughput()
+ # Marvell CN10K Testcases
+ def _crypto_func_cn10k(self):
+ """Functional tests Helper
+ Returns:
+ None
+ """
+ self._run_crypto_func()
+
+ def _crypto_perf_cn10k(self):
+ """Perf tests Helper function
+ Returns:
+ None
+ """
+ self._run_crypto_perf_throughput(expected="# ",
+ trim_whitespace=False)
+ def test_perf_mrvl_aes_cbc(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_gcm_encrypt(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_cbc_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_sha2_256_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_zuc_eea3_cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_zuc_eia3_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_gmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_null_cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_snow3g_uea2_cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_kasumi_f8_cipher_only(self):
+ self._crypto_perf_cn10k() #F
+
+ def test_perf_mrvl_snow3g_uia2_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_kasumi_f9_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha1_hmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha1_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_ctr_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_ctr_snow_3g_uia2_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_cmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_3des_cbc_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha1_hmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_224_hmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_256_hmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_384_hmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_ctr_snow_3g_uia2_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_ctr_zuc_eia3_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_ctr_aes_cmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_zuc_eea3_snow3g_uia2_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_zuc_eea3_zuc_eia3_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_zuc_eea3_aes_cmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_snow3g_uea2_snow3g_uia2_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_snow3g_uea2_zuc_eia3_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_snow3g_uea2_aes_cmac_cipher_then_auth(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_md5_hmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_ctr_cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_3des_cbc_cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_224_hmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_256_hmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_384_hmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_512_hmac_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_aes_xts__cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_des_cbc_cipher_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_md5_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha512_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha384_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha256_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha224_auth_only(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_snow3g_uea2_snow3g_uia2(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha1_hmac_armv8(self):
+ self._crypto_perf_cn10k()
+
+ def test_perf_mrvl_sha2_hmac_armv8(self):
+ self._crypto_perf_cn10k()
+
+ def test_mrvl_ptest(self):
+ self._crypto_func_cn10k()
+
+ def test_mrvl_burst(self):
+ self._crypto_func_cn10k()
+
+ def test_mrvl_devtype(self):
+ self._crypto_func_cn10k()
+
+ def test_mrvl_crypto_sha1_hmac_armv8(self):
+ self._crypto_func_cn10k()
+
+ def test_mrvl_chacha20_poly1305_aead(self):
+ self._crypto_func_cn10k()
+
+ def test_mrvl_crypto_sha2_hmac_armv8(self):
+ self._crypto_func_cn10k()
+
+ def test_mrvl_buffer(self):
+ self._crypto_func_cn10k()
+
# Private functions
def _run_crypto_func(self):
+ """ Runs Crypto functional test.
+ Returns:
+ None
+ """
+
if cc.is_test_skip(self):
return
-
- cores = ",".join(self.dut.get_core_list("1S/2C/1T"))
+ core_list = self.get_suite_cfg().get('core_list',"1S/2C/1T")
+ cores = ",".join(self.dut.get_core_list(core_list))
config = {"l": cores}
devices = self._get_crypto_device(1)
if not devices:
@@ -206,12 +451,22 @@ class TestCryptoPerfCryptodevPerf(TestCase):
out = self.dut.send_command(
"cat %s/%s.txt" % (self.dut_file_dir, self.running_case), 30
- )
-
+ ).strip()
self.verify("Error" not in out, "Test function failed")
self.verify("failed" not in out, "Test function failed")
-
- def _run_crypto_perf(self):
+ assert (out != ""), "No output"
+
+ def _run_crypto_perf(self, **kwargs):
+ """ Runs Crypto Performance test.
+ Args:
+ **kwargs:
+ expected: send_expect match prompt
+ trim_whitespace: trime whitespace from command output
+ Returns:
+ None
+ """
+ expected = kwargs.get("expected", "#")
+ trim_whitespace = kwargs.get("trim_whitespace", True)
if cc.is_test_skip(self):
return "skip"
@@ -222,13 +477,14 @@ class TestCryptoPerfCryptodevPerf(TestCase):
return "skip"
eal_opt_str = cc.get_eal_opt_str(self, devices)
- crypto_perf_opt_str = self._get_crypto_perf_opt_str()
+ crypto_perf_opt_str = self._get_crypto_perf_opt_str(**kwargs)
cmd_str = cc.get_dpdk_app_cmd_str(
self._app_path, eal_opt_str, crypto_perf_opt_str
)
try:
- out = self.dut.send_expect(cmd_str, "#", 600)
+ out = self.dut.send_expect(cmd_str, expected, 600,
+ trim_whitespace=trim_whitespace)
except Exception as ex:
self.logger.error(ex)
raise ex
@@ -237,25 +493,44 @@ class TestCryptoPerfCryptodevPerf(TestCase):
return results
- def _get_crypto_perf_opt_str(self, override_crypto_perf_opts={}):
+ def _get_crypto_perf_opt_str(self, **kwargs):
+ """get crypto perf app option string
+ args:
+ **kwargs:
+ override_crypto_perf_opts- Suite/Case specfic perf
+ app config to overwrite defaults
+ Returns:
+ crypto perf option string
+ """
+ override_crypto_perf_opts = kwargs.get("override_crypto_perf_opts", {})
return cc.get_opt_str(
self, self._default_crypto_perf_opts, override_crypto_perf_opts
)
def _parse_output(self, output):
try:
+ dtype = self.get_case_cfg().get('devtype')
+ match_str = r" lcore id|#lcore id"
lines = output.split("\r\n")
line_nb = len(lines)
self.logger.debug("Total output lines: " + str(line_nb))
for line_index in range(line_nb):
- if lines[line_index].startswith(" lcore id"):
+ if re.match(match_str, lines[line_index]):
self.logger.debug("data output line from: " + str(line_index))
break
- data_line = line_index - 1
+ if dtype == 'crypto_cn10k':
+ data_line = line_index + 2
+ else:
+ data_line = line_index - 1
+
+ if len(lines[data_line].split(","))>1:
+ pattern = re.compile(r',')
+ else:
+ pattern = re.compile(r'\s+')
results = []
- pattern = re.compile(r"\s+")
+
for line in lines[data_line:-1]:
print(line)
result = {}
@@ -334,9 +609,15 @@ class TestCryptoPerfCryptodevPerf(TestCase):
cpu_info[key] = value.strip()
core, thread = 0, 0
lcores = self.get_case_cfg()["l"].split(",")
+ if 'Core(s) per cluster' in out:
+ cl_soc1 = 'Core(s) per cluster'
+ cl_soc2 = 'Cluster(s)'
+ else:
+ cl_soc1 = 'Core(s) per socket'
+ cl_soc2 = 'Socket(s)'
for lcore in lcores[1:]:
- if int(lcore.strip()) < int(cpu_info["Core(s) per socket"]) * int(
- cpu_info["Socket(s)"]
+ if int(lcore.strip()) < int(cpu_info[cl_soc1]) * int(
+ cpu_info[cl_soc2]
):
core += 1
thread += 1
@@ -362,6 +643,11 @@ class TestCryptoPerfCryptodevPerf(TestCase):
dev = "crypto_snow3g"
elif self.get_case_cfg()["devtype"] == "crypto_zuc":
dev = "crypto_zuc"
+ elif self.get_case_cfg()["devtype"] == "crypto_cn10k":
+ dev = "crypto_cn10k"
+ vf = cc.get_qat_devices(self, cpm_num=1, num=num)
+ device["a"] = ' -a '.join(vf)
+ device["vdev"] = None
elif self.get_case_cfg()["devtype"] == "crypto_scheduler":
dev = "crypto_scheduler"
w = cc.get_qat_devices(self, cpm_num=3, num=num * 3)
@@ -388,8 +674,8 @@ class TestCryptoPerfCryptodevPerf(TestCase):
return device
- def _run_crypto_perf_throughput(self):
- results = self._run_crypto_perf()
+ def _run_crypto_perf_throughput(self, **kwargs):
+ results = self._run_crypto_perf(**kwargs)
if results == "skip":
return
self.verify(results, "test results is none, Test Failed")
@@ -8,7 +8,9 @@ from nics.net_device import GetNicObj
conf = SuiteConf("cryptodev_sample")
-def bind_qat_device(test_case, driver="igb_uio"):
+def bind_qat_device(test_case, driver="igb_uio", generate_vfs=False,
+ vf_count=2, drvr_type='generic'):
+
if driver == "vfio-pci":
test_case.dut.send_expect("modprobe vfio", "#", 10)
test_case.dut.send_expect("modprobe vfio-pci", "#", 10)
@@ -38,6 +40,8 @@ def bind_qat_device(test_case, driver="igb_uio"):
devfun_id = addr_array[2]
pf_port = GetNicObj(test_case.dut, domain_id, bus_id, devfun_id)
+ if generate_vfs:
+ pf_port.generate_sriov_vfs_linux(domain_id, bus_id, devfun_id, vf_count, drvr_type)
sriov_vfs_pci = pf_port.get_sriov_vfs_pci()
if not sriov_vfs_pci:
raise Exception("can not get vf pci")
@@ -51,6 +55,11 @@ def bind_qat_device(test_case, driver="igb_uio"):
test_case.dev = dev
+def bind_mrvl_devices(test_case, driver='vfio-pci', **kwargs):
+ pci_list = kwargs.get("pci_list").split()
+ for pci in pci_list:
+ test_case.dut.bind_eventdev_port(driver, pci)
+ return pci_list
def get_qat_devices(test_case, cpm_num=None, num=1):
if not cpm_num: