1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2016 Intel Corporation. 3 4dpdk-test-crypto-perf Application 5================================= 6 7The ``dpdk-test-crypto-perf`` tool is a Data Plane Development Kit (DPDK) 8utility that allows measuring performance parameters of PMDs available in the 9crypto tree. There are available two measurement types: throughput and latency. 10User can use multiply cores to run tests on but only 11one type of crypto PMD can be measured during single application 12execution. Cipher parameters, type of device, type of operation and 13chain mode have to be specified in the command line as application 14parameters. These parameters are checked using device capabilities 15structure. 16 17Limitations 18----------- 19On hardware devices the cycle-count doesn't always represent the actual offload 20cost. The cycle-count only represents the offload cost when the hardware 21accelerator is not fully loaded, when loaded the cpu cycles freed up by the 22offload are still consumed by the test tool and included in the cycle-count. 23These cycles are consumed by retries and inefficient API calls enqueuing and 24dequeuing smaller bursts than specified by the cmdline parameter. This results 25in a larger cycle-count measurement and should not be interpreted as an offload 26cost measurement. Using "pmd-cyclecount" mode will give a better idea of 27actual costs of hardware acceleration. 28 29On hardware devices the throughput measurement is not necessarily the maximum 30possible for the device, e.g. it may be necessary to use multiple cores to keep 31the hardware accelerator fully loaded and so measure maximum throughput. 32 33Compiling the Application 34------------------------- 35 36**Step 1: PMD setting** 37 38The ``dpdk-test-crypto-perf`` tool depends on crypto device drivers PMD which 39are disabled by default in the build configuration file ``common_base``. 40The crypto device drivers PMD which should be tested can be enabled by setting:: 41 42 CONFIG_RTE_LIBRTE_PMD_<name>=y 43 44Setting example for open ssl PMD:: 45 46 CONFIG_RTE_LIBRTE_PMD_OPENSSL=y 47 48**Step 2: Linearization setting** 49 50It is possible linearized input segmented packets just before crypto operation 51for devices which doesn't support scatter-gather, and allows to measure 52performance also for this use case. 53 54To set on the linearization options add below definition to the 55``cperf_ops.h`` file:: 56 57 #define CPERF_LINEARIZATION_ENABLE 58 59**Step 3: Build the application** 60 61Execute the ``dpdk-setup.sh`` script to build the DPDK library together with the 62``dpdk-test-crypto-perf`` application. 63 64Initially, the user must select a DPDK target to choose the correct target type 65and compiler options to use when building the libraries. 66The user must have all libraries, modules, updates and compilers installed 67in the system prior to this, 68as described in the earlier chapters in this Getting Started Guide. 69 70Running the Application 71----------------------- 72 73The tool application has a number of command line options: 74 75.. code-block:: console 76 77 dpdk-test-crypto-perf [EAL Options] -- [Application Options] 78 79EAL Options 80~~~~~~~~~~~ 81 82The following are the EAL command-line options that can be used in conjunction 83with the ``dpdk-test-crypto-perf`` application. 84See the DPDK Getting Started Guides for more information on these options. 85 86* ``-c <COREMASK>`` or ``-l <CORELIST>`` 87 88 Set the hexadecimal bitmask of the cores to run on. The corelist is a 89 list cores to use. 90 91* ``-w <PCI>`` 92 93 Add a PCI device in white list. 94 95* ``--vdev <driver><id>`` 96 97 Add a virtual device. 98 99Application Options 100~~~~~~~~~~~~~~~~~~~ 101 102The following are the application command-line options: 103 104* ``--ptest type`` 105 106 Set test type, where ``type`` is one of the following:: 107 108 throughput 109 latency 110 verify 111 pmd-cyclecount 112 113* ``--silent`` 114 115 Disable options dump. 116 117* ``--pool-sz <n>`` 118 119 Set the number of mbufs to be allocated in the mbuf pool. 120 121* ``--total-ops <n>`` 122 123 Set the number of total operations performed. 124 125* ``--burst-sz <n>`` 126 127 Set the number of packets per burst. 128 129 This can be set as: 130 * Single value (i.e. ``--burst-sz 16``) 131 * Range of values, using the following structure ``min:inc:max``, 132 where ``min`` is minimum size, ``inc`` is the increment size and ``max`` 133 is the maximum size (i.e. ``--burst-sz 16:2:32``) 134 * List of values, up to 32 values, separated in commas (i.e. ``--burst-sz 16,24,32``) 135 136* ``--buffer-sz <n>`` 137 138 Set the size of single packet (plaintext or ciphertext in it). 139 140 This can be set as: 141 * Single value (i.e. ``--buffer-sz 16``) 142 * Range of values, using the following structure ``min:inc:max``, 143 where ``min`` is minimum size, ``inc`` is the increment size and ``max`` 144 is the maximum size (i.e. ``--buffer-sz 16:2:32``) 145 * List of values, up to 32 values, separated in commas (i.e. ``--buffer-sz 32,64,128``) 146 147* ``--imix <n>`` 148 149 Set the distribution of packet sizes. 150 151 A list of weights must be passed, containing the same number of items than buffer-sz, 152 so each item in this list will be the weight of the packet size on the same position 153 in the buffer-sz parameter (a list have to be passed in that parameter). 154 155 Example: 156 157 To test a distribution of 20% packets of 64 bytes, 40% packets of 100 bytes and 40% packets 158 of 256 bytes, the command line would be: ``--buffer-sz 64,100,256 --imix 20,40,40``. 159 Note that the weights do not have to be percentages, so using ``--imix 1,2,2`` would result 160 in the same distribution 161 162* ``--segment-sz <n>`` 163 164 Set the size of the segment to use, for Scatter Gather List testing. 165 By default, it is set to the size of the maximum buffer size, including the digest size, 166 so a single segment is created. 167 168* ``--devtype <name>`` 169 170 Set device type, where ``name`` is one of the following:: 171 172 crypto_null 173 crypto_aesni_mb 174 crypto_aesni_gcm 175 crypto_openssl 176 crypto_qat 177 crypto_snow3g 178 crypto_kasumi 179 crypto_zuc 180 crypto_dpaa_sec 181 crypto_dpaa2_sec 182 crypto_armv8 183 crypto_scheduler 184 crypto_mvsam 185 186* ``--optype <name>`` 187 188 Set operation type, where ``name`` is one of the following:: 189 190 cipher-only 191 auth-only 192 cipher-then-auth 193 auth-then-cipher 194 aead 195 pdcp 196 docsis 197 198 For GCM/CCM algorithms you should use aead flag. 199 200* ``--sessionless`` 201 202 Enable session-less crypto operations mode. 203 204* ``--out-of-place`` 205 206 Enable out-of-place crypto operations mode. 207 208* ``--test-file <name>`` 209 210 Set test vector file path. See the Test Vector File chapter. 211 212* ``--test-name <name>`` 213 214 Set specific test name section in the test vector file. 215 216* ``--cipher-algo <name>`` 217 218 Set cipher algorithm name, where ``name`` is one of the following:: 219 220 3des-cbc 221 3des-ecb 222 3des-ctr 223 aes-cbc 224 aes-ctr 225 aes-ecb 226 aes-f8 227 aes-xts 228 arc4 229 null 230 kasumi-f8 231 snow3g-uea2 232 zuc-eea3 233 234* ``--cipher-op <mode>`` 235 236 Set cipher operation mode, where ``mode`` is one of the following:: 237 238 encrypt 239 decrypt 240 241* ``--cipher-key-sz <n>`` 242 243 Set the size of cipher key. 244 245* ``--cipher-iv-sz <n>`` 246 247 Set the size of cipher iv. 248 249* ``--auth-algo <name>`` 250 251 Set authentication algorithm name, where ``name`` is one 252 of the following:: 253 254 3des-cbc 255 aes-cbc-mac 256 aes-cmac 257 aes-gmac 258 aes-xcbc-mac 259 md5 260 md5-hmac 261 sha1 262 sha1-hmac 263 sha2-224 264 sha2-224-hmac 265 sha2-256 266 sha2-256-hmac 267 sha2-384 268 sha2-384-hmac 269 sha2-512 270 sha2-512-hmac 271 kasumi-f9 272 snow3g-uia2 273 zuc-eia3 274 275* ``--auth-op <mode>`` 276 277 Set authentication operation mode, where ``mode`` is one of 278 the following:: 279 280 verify 281 generate 282 283* ``--auth-key-sz <n>`` 284 285 Set the size of authentication key. 286 287* ``--auth-iv-sz <n>`` 288 289 Set the size of auth iv. 290 291* ``--aead-algo <name>`` 292 293 Set AEAD algorithm name, where ``name`` is one 294 of the following:: 295 296 aes-ccm 297 aes-gcm 298 299* ``--aead-op <mode>`` 300 301 Set AEAD operation mode, where ``mode`` is one of 302 the following:: 303 304 encrypt 305 decrypt 306 307* ``--aead-key-sz <n>`` 308 309 Set the size of AEAD key. 310 311* ``--aead-iv-sz <n>`` 312 313 Set the size of AEAD iv. 314 315* ``--aead-aad-sz <n>`` 316 317 Set the size of AEAD aad. 318 319* ``--digest-sz <n>`` 320 321 Set the size of digest. 322 323* ``--desc-nb <n>`` 324 325 Set number of descriptors for each crypto device. 326 327* ``--pmd-cyclecount-delay-ms <n>`` 328 329 Add a delay (in milliseconds) between enqueue and dequeue in 330 pmd-cyclecount benchmarking mode (useful when benchmarking 331 hardware acceleration). 332 333* ``--csv-friendly`` 334 335 Enable test result output CSV friendly rather than human friendly. 336 337* ``--pdcp-sn-sz <n>`` 338 339 Set PDCP sequence number size(n) in bits. Valid values of n will 340 be 5/7/12/15/18. 341 342* ``--pdcp-domain <control/user>`` 343 344 Set PDCP domain to specify Control/user plane. 345 346* ``--docsis-hdr-sz <n>`` 347 348 Set DOCSIS header size(n) in bytes. 349 350* ``--pdcp-ses-hfn-en`` 351 352 Enable fixed session based HFN instead of per packet HFN. 353 354Test Vector File 355~~~~~~~~~~~~~~~~ 356 357The test vector file is a text file contain information about test vectors. 358The file is made of the sections. The first section doesn't have header. 359It contain global information used in each test variant vectors - 360typically information about plaintext, ciphertext, cipher key, auth key, 361initial vector. All other sections begin header. 362The sections contain particular information typically digest. 363 364**Format of the file:** 365 366Each line beginning with sign '#' contain comment and it is ignored by parser:: 367 368 # <comment> 369 370Header line is just name in square bracket:: 371 372 [<section name>] 373 374Data line contain information token then sign '=' and 375a string of bytes in C byte array format:: 376 377 <token> = <C byte array> 378 379**Tokens list:** 380 381* ``plaintext`` 382 383 Original plaintext to be encrypted. 384 385* ``ciphertext`` 386 387 Encrypted plaintext string. 388 389* ``cipher_key`` 390 391 Key used in cipher operation. 392 393* ``auth_key`` 394 395 Key used in auth operation. 396 397* ``cipher_iv`` 398 399 Cipher Initial Vector. 400 401* ``auth_iv`` 402 403 Auth Initial Vector. 404 405* ``aad`` 406 407 Additional data. 408 409* ``digest`` 410 411 Digest string. 412 413Examples 414-------- 415 416Call application for performance throughput test of single Aesni MB PMD 417for cipher encryption aes-cbc and auth generation sha1-hmac, 418one million operations, burst size 32, packet size 64:: 419 420 dpdk-test-crypto-perf -l 6-7 --vdev crypto_aesni_mb -w 0000:00:00.0 -- 421 --ptest throughput --devtype crypto_aesni_mb --optype cipher-then-auth 422 --cipher-algo aes-cbc --cipher-op encrypt --cipher-key-sz 16 --auth-algo 423 sha1-hmac --auth-op generate --auth-key-sz 64 --digest-sz 12 424 --total-ops 10000000 --burst-sz 32 --buffer-sz 64 425 426Call application for performance latency test of two Aesni MB PMD executed 427on two cores for cipher encryption aes-cbc, ten operations in silent mode:: 428 429 dpdk-test-crypto-perf -l 4-7 --vdev crypto_aesni_mb1 430 --vdev crypto_aesni_mb2 -w 0000:00:00.0 -- --devtype crypto_aesni_mb 431 --cipher-algo aes-cbc --cipher-key-sz 16 --cipher-iv-sz 16 432 --cipher-op encrypt --optype cipher-only --silent 433 --ptest latency --total-ops 10 434 435Call application for verification test of single open ssl PMD 436for cipher encryption aes-gcm and auth generation aes-gcm,ten operations 437in silent mode, test vector provide in file "test_aes_gcm.data" 438with packet verification:: 439 440 dpdk-test-crypto-perf -l 4-7 --vdev crypto_openssl -w 0000:00:00.0 -- 441 --devtype crypto_openssl --aead-algo aes-gcm --aead-key-sz 16 442 --aead-iv-sz 16 --aead-op encrypt --aead-aad-sz 16 --digest-sz 16 443 --optype aead --silent --ptest verify --total-ops 10 444 --test-file test_aes_gcm.data 445 446Test vector file for cipher algorithm aes cbc 256 with authorization sha:: 447 448 # Global Section 449 plaintext = 450 0xff, 0xca, 0xfb, 0xf1, 0x38, 0x20, 0x2f, 0x7b, 0x24, 0x98, 0x26, 0x7d, 0x1d, 0x9f, 0xb3, 0x93, 451 0xd9, 0xef, 0xbd, 0xad, 0x4e, 0x40, 0xbd, 0x60, 0xe9, 0x48, 0x59, 0x90, 0x67, 0xd7, 0x2b, 0x7b, 452 0x8a, 0xe0, 0x4d, 0xb0, 0x70, 0x38, 0xcc, 0x48, 0x61, 0x7d, 0xee, 0xd6, 0x35, 0x49, 0xae, 0xb4, 453 0xaf, 0x6b, 0xdd, 0xe6, 0x21, 0xc0, 0x60, 0xce, 0x0a, 0xf4, 0x1c, 0x2e, 0x1c, 0x8d, 0xe8, 0x7b 454 ciphertext = 455 0x77, 0xF9, 0xF7, 0x7A, 0xA3, 0xCB, 0x68, 0x1A, 0x11, 0x70, 0xD8, 0x7A, 0xB6, 0xE2, 0x37, 0x7E, 456 0xD1, 0x57, 0x1C, 0x8E, 0x85, 0xD8, 0x08, 0xBF, 0x57, 0x1F, 0x21, 0x6C, 0xAD, 0xAD, 0x47, 0x1E, 457 0x0D, 0x6B, 0x79, 0x39, 0x15, 0x4E, 0x5B, 0x59, 0x2D, 0x76, 0x87, 0xA6, 0xD6, 0x47, 0x8F, 0x82, 458 0xB8, 0x51, 0x91, 0x32, 0x60, 0xCB, 0x97, 0xDE, 0xBE, 0xF0, 0xAD, 0xFC, 0x23, 0x2E, 0x22, 0x02 459 cipher_key = 460 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2, 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A, 461 0xd0, 0xe7, 0x4b, 0xfb, 0x5d, 0xe5, 0x0c, 0xe7, 0x6f, 0x21, 0xb5, 0x52, 0x2a, 0xbb, 0xc7, 0xf7 462 auth_key = 463 0xaf, 0x96, 0x42, 0xf1, 0x8c, 0x50, 0xdc, 0x67, 0x1a, 0x43, 0x47, 0x62, 0xc7, 0x04, 0xab, 0x05, 464 0xf5, 0x0c, 0xe7, 0xa2, 0xa6, 0x23, 0xd5, 0x3d, 0x95, 0xd8, 0xcd, 0x86, 0x79, 0xf5, 0x01, 0x47, 465 0x4f, 0xf9, 0x1d, 0x9d, 0x36, 0xf7, 0x68, 0x1a, 0x64, 0x44, 0x58, 0x5d, 0xe5, 0x81, 0x15, 0x2a, 466 0x41, 0xe4, 0x0e, 0xaa, 0x1f, 0x04, 0x21, 0xff, 0x2c, 0xf3, 0x73, 0x2b, 0x48, 0x1e, 0xd2, 0xf7 467 cipher_iv = 468 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 469 # Section sha 1 hmac buff 32 470 [sha1_hmac_buff_32] 471 digest = 472 0x36, 0xCA, 0x49, 0x6A, 0xE3, 0x54, 0xD8, 0x4F, 0x0B, 0x76, 0xD8, 0xAA, 0x78, 0xEB, 0x9D, 0x65, 473 0x2C, 0xCA, 0x1F, 0x97 474 # Section sha 256 hmac buff 32 475 [sha256_hmac_buff_32] 476 digest = 477 0x1C, 0xB2, 0x3D, 0xD1, 0xF9, 0xC7, 0x6C, 0x49, 0x2E, 0xDA, 0x94, 0x8B, 0xF1, 0xCF, 0x96, 0x43, 478 0x67, 0x50, 0x39, 0x76, 0xB5, 0xA1, 0xCE, 0xA1, 0xD7, 0x77, 0x10, 0x07, 0x43, 0x37, 0x05, 0xB4 479