test/crypto-perf: support DOCSIS protocol
[dpdk.git] / doc / guides / tools / cryptoperf.rst
index 6832312..a8df8bc 100644 (file)
@@ -1,32 +1,5 @@
-..  BSD LICENSE
-    Copyright(c) 2016 Intel Corporation. All rights reserved.
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-    * Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in
-    the documentation and/or other materials provided with the
-    distribution.
-    * Neither the name of Intel Corporation nor the names of its
-    contributors may be used to endorse or promote products derived
-    from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2016 Intel Corporation.
 
 dpdk-test-crypto-perf Application
 =================================
@@ -41,6 +14,22 @@ chain mode have to be specified in the command line as application
 parameters. These parameters are checked using device capabilities
 structure.
 
+Limitations
+-----------
+On hardware devices the cycle-count doesn't always represent the actual offload
+cost. The cycle-count only represents the offload cost when the hardware
+accelerator is not fully loaded, when loaded the cpu cycles freed up by the
+offload are still consumed by the test tool and included in the cycle-count.
+These cycles are consumed by retries and inefficient API calls enqueuing and
+dequeuing smaller bursts than specified by the cmdline parameter. This results
+in a larger cycle-count measurement and should not be interpreted as an offload
+cost measurement. Using "pmd-cyclecount" mode will give a better idea of
+actual costs of hardware acceleration.
+
+On hardware devices the throughput measurement is not necessarily the maximum
+possible for the device, e.g. it may be necessary to use multiple cores to keep
+the hardware accelerator fully loaded and so measure maximum throughput.
+
 Compiling the Application
 -------------------------
 
@@ -70,7 +59,7 @@ To set on the linearization options add below definition to the
 **Step 3: Build the application**
 
 Execute the ``dpdk-setup.sh`` script to build the DPDK library together with the
-``dpdk-test-crypto-perf`` applcation.
+``dpdk-test-crypto-perf`` application.
 
 Initially, the user must select a DPDK target to choose the correct target type
 and compiler options to use when building the libraries.
@@ -91,12 +80,13 @@ EAL Options
 ~~~~~~~~~~~
 
 The following are the EAL command-line options that can be used in conjunction
-with the ``dpdk-test-crypto-perf`` applcation.
+with the ``dpdk-test-crypto-perf`` application.
 See the DPDK Getting Started Guides for more information on these options.
 
-*   ``-c <COREMASK>``
+*   ``-c <COREMASK>`` or ``-l <CORELIST>``
 
-        Set the hexadecimal bitmask of the cores to run on.
+        Set the hexadecimal bitmask of the cores to run on. The corelist is a
+        list cores to use.
 
 *   ``-w <PCI>``
 
@@ -106,10 +96,10 @@ See the DPDK Getting Started Guides for more information on these options.
 
         Add a virtual device.
 
-Appication Options
-~~~~~~~~~~~~~~~~~~
+Application Options
+~~~~~~~~~~~~~~~~~~~
 
-The following are the appication command-line options:
+The following are the application command-line options:
 
 * ``--ptest type``
 
@@ -117,6 +107,8 @@ The following are the appication command-line options:
 
            throughput
            latency
+           verify
+           pmd-cyclecount
 
 * ``--silent``
 
@@ -134,13 +126,44 @@ The following are the appication command-line options:
 
         Set the number of packets per burst.
 
+        This can be set as:
+          * Single value (i.e. ``--burst-sz 16``)
+          * Range of values, using the following structure ``min:inc:max``,
+            where ``min`` is minimum size, ``inc`` is the increment size and ``max``
+            is the maximum size (i.e. ``--burst-sz 16:2:32``)
+          * List of values, up to 32 values, separated in commas (i.e. ``--burst-sz 16,24,32``)
+
 * ``--buffer-sz <n>``
 
         Set the size of single packet (plaintext or ciphertext in it).
 
-* ``--segments-nb <n>``
+        This can be set as:
+          * Single value (i.e. ``--buffer-sz 16``)
+          * Range of values, using the following structure ``min:inc:max``,
+            where ``min`` is minimum size, ``inc`` is the increment size and ``max``
+            is the maximum size (i.e. ``--buffer-sz 16:2:32``)
+          * List of values, up to 32 values, separated in commas (i.e. ``--buffer-sz 32,64,128``)
+
+* ``--imix <n>``
+
+        Set the distribution of packet sizes.
+
+        A list of weights must be passed, containing the same number of items than buffer-sz,
+        so each item in this list will be the weight of the packet size on the same position
+        in the buffer-sz parameter (a list have to be passed in that parameter).
 
-        Set the number of segments per packet.
+        Example:
+
+        To test a distribution of 20% packets of 64 bytes, 40% packets of 100 bytes and 40% packets
+        of 256 bytes, the command line would be: ``--buffer-sz 64,100,256 --imix 20,40,40``.
+        Note that the weights do not have to be percentages, so using ``--imix 1,2,2`` would result
+        in the same distribution
+
+* ``--segment-sz <n>``
+
+        Set the size of the segment to use, for Scatter Gather List testing.
+        By default, it is set to the size of the maximum buffer size, including the digest size,
+        so a single segment is created.
 
 * ``--devtype <name>``
 
@@ -154,6 +177,11 @@ The following are the appication command-line options:
            crypto_snow3g
            crypto_kasumi
            crypto_zuc
+           crypto_dpaa_sec
+           crypto_dpaa2_sec
+           crypto_armv8
+           crypto_scheduler
+           crypto_mvsam
 
 * ``--optype <name>``
 
@@ -164,6 +192,10 @@ The following are the appication command-line options:
            cipher-then-auth
            auth-then-cipher
            aead
+           pdcp
+           docsis
+
+        For GCM/CCM algorithms you should use aead flag.
 
 * ``--sessionless``
 
@@ -173,11 +205,6 @@ The following are the appication command-line options:
 
         Enable out-of-place crypto operations mode.
 
-* ``--verify``
-
-        Enable verify that all crypto operations were successful.
-        The verification is done after the performance test.
-
 * ``--test-file <name>``
 
         Set test vector file path. See the Test Vector File chapter.
@@ -194,10 +221,8 @@ The following are the appication command-line options:
            3des-ecb
            3des-ctr
            aes-cbc
-           aes-ccm
            aes-ctr
            aes-ecb
-           aes-gcm
            aes-f8
            aes-xts
            arc4
@@ -228,9 +253,7 @@ The following are the appication command-line options:
 
            3des-cbc
            aes-cbc-mac
-           aes-ccm
            aes-cmac
-           aes-gcm
            aes-gmac
            aes-xcbc-mac
            md5
@@ -261,31 +284,82 @@ The following are the appication command-line options:
 
         Set the size of authentication key.
 
-* ``--auth-digest-sz <n>``
+* ``--auth-iv-sz <n>``
+
+        Set the size of auth iv.
+
+* ``--aead-algo <name>``
+
+        Set AEAD algorithm name, where ``name`` is one
+        of the following::
+
+           aes-ccm
+           aes-gcm
+
+* ``--aead-op <mode>``
+
+        Set AEAD operation mode, where ``mode`` is one of
+        the following::
+
+           encrypt
+           decrypt
+
+* ``--aead-key-sz <n>``
+
+        Set the size of AEAD key.
+
+* ``--aead-iv-sz <n>``
+
+        Set the size of AEAD iv.
+
+* ``--aead-aad-sz <n>``
+
+        Set the size of AEAD aad.
 
-        Set the size of authentication digest.
+* ``--digest-sz <n>``
 
-* ``--auth-aad-sz <n>``
+        Set the size of digest.
 
-        Set the size of authentication aad.
+* ``--desc-nb <n>``
+
+        Set number of descriptors for each crypto device.
+
+* ``--pmd-cyclecount-delay-ms <n>``
+
+        Add a delay (in milliseconds) between enqueue and dequeue in
+        pmd-cyclecount benchmarking mode (useful when benchmarking
+        hardware acceleration).
 
 * ``--csv-friendly``
 
         Enable test result output CSV friendly rather than human friendly.
 
+* ``--pdcp-sn-sz <n>``
+
+        Set PDCP sequence number size(n) in bits. Valid values of n will
+        be 5/7/12/15/18.
+
+* ``--pdcp-domain <control/user>``
+
+        Set PDCP domain to specify Control/user plane.
+
+* ``--docsis-hdr-sz <n>``
+
+        Set DOCSIS header size(n) in bytes.
+
 Test Vector File
 ~~~~~~~~~~~~~~~~
 
 The test vector file is a text file contain information about test vectors.
 The file is made of the sections. The first section doesn't have header.
 It contain global information used in each test variant vectors -
-typicaly information about plaintext, ciphertext, cipher key, aut key,
+typically information about plaintext, ciphertext, cipher key, auth key,
 initial vector. All other sections begin header.
-The sections contain particular information typicaly digest.
+The sections contain particular information typically digest.
 
 **Format of the file:**
 
-Each line beginig with sign '#' contain comment and it is ignored by parser::
+Each line beginning with sign '#' contain comment and it is ignored by parser::
 
    # <comment>
 
@@ -293,16 +367,16 @@ Header line is just name in square bracket::
 
    [<section name>]
 
-Data line contain information tocken then sign '=' and
+Data line contain information token then sign '=' and
 a string of bytes in C byte array format::
 
-   <tocken> = <C byte array>
+   <token> = <C byte array>
 
-**Tockens list:**
+**Tokens list:**
 
 * ``plaintext``
 
-        Original plaintext to be crypted.
+        Original plaintext to be encrypted.
 
 * ``ciphertext``
 
@@ -316,9 +390,13 @@ a string of bytes in C byte array format::
 
         Key used in auth operation.
 
-* ``iv``
+* ``cipher_iv``
+
+        Cipher Initial Vector.
+
+* ``auth_iv``
 
-        Initial vector.
+        Auth Initial Vector.
 
 * ``aad``
 
@@ -333,34 +411,33 @@ Examples
 
 Call application for performance throughput test of single Aesni MB PMD
 for cipher encryption aes-cbc and auth generation sha1-hmac,
-one milion operations, burst size 32, packet size 64::
+one million operations, burst size 32, packet size 64::
 
-   dpdk-test-crypto-perf -c 0xc0 --vdev crypto_aesni_mb_pmd -w 0000:00:00.0 --
+   dpdk-test-crypto-perf -l 6-7 --vdev crypto_aesni_mb -w 0000:00:00.0 --
    --ptest throughput --devtype crypto_aesni_mb --optype cipher-then-auth
    --cipher-algo aes-cbc --cipher-op encrypt --cipher-key-sz 16 --auth-algo
-   sha1-hmac --auth-op generate --auth-key-sz 64 --auth-digest-sz 12
+   sha1-hmac --auth-op generate --auth-key-sz 64 --digest-sz 12
    --total-ops 10000000 --burst-sz 32 --buffer-sz 64
 
 Call application for performance latency test of two Aesni MB PMD executed
 on two cores for cipher encryption aes-cbc, ten operations in silent mode::
 
-   dpdk-test-crypto-perf -c 0xf0 --vdev crypto_aesni_mb_pmd1
-   --vdev crypto_aesni_mb_pmd2 -w 0000:00:00.0 -- --devtype crypto_aesni_mb
+   dpdk-test-crypto-perf -l 4-7 --vdev crypto_aesni_mb1
+   --vdev crypto_aesni_mb2 -w 0000:00:00.0 -- --devtype crypto_aesni_mb
    --cipher-algo aes-cbc --cipher-key-sz 16 --cipher-iv-sz 16
    --cipher-op encrypt --optype cipher-only --silent
    --ptest latency --total-ops 10
 
-Call application for performance latency test of single open ssl PMD
+Call application for verification test of single open ssl PMD
 for cipher encryption aes-gcm and auth generation aes-gcm,ten operations
 in silent mode, test vector provide in file "test_aes_gcm.data"
 with packet verification::
 
-   dpdk-test-crypto-perf -c 0xf0 --vdev crypto_openssl -w 0000:00:00.0 --
-   --devtype crypto_openssl --cipher-algo aes-gcm --cipher-key-sz 16
-   --cipher-iv-sz 16 --cipher-op encrypt --auth-algo aes-gcm --auth-key-sz 16
-   --auth-digest-sz 16 --auth-aad-sz 16 --auth-op generate --optype aead
-   --silent --ptest latency --total-ops 10
-   --test-file test_aes_gcm.data --verify
+   dpdk-test-crypto-perf -l 4-7 --vdev crypto_openssl -w 0000:00:00.0 --
+   --devtype crypto_openssl --aead-algo aes-gcm --aead-key-sz 16
+   --aead-iv-sz 16 --aead-op encrypt --aead-aad-sz 16 --digest-sz 16
+   --optype aead --silent --ptest verify --total-ops 10
+   --test-file test_aes_gcm.data
 
 Test vector file for cipher algorithm aes cbc 256 with authorization sha::
 
@@ -383,7 +460,7 @@ Test vector file for cipher algorithm aes cbc 256 with authorization sha::
    0xf5, 0x0c, 0xe7, 0xa2, 0xa6, 0x23, 0xd5, 0x3d, 0x95, 0xd8, 0xcd, 0x86, 0x79, 0xf5, 0x01, 0x47,
    0x4f, 0xf9, 0x1d, 0x9d, 0x36, 0xf7, 0x68, 0x1a, 0x64, 0x44, 0x58, 0x5d, 0xe5, 0x81, 0x15, 0x2a,
    0x41, 0xe4, 0x0e, 0xaa, 0x1f, 0x04, 0x21, 0xff, 0x2c, 0xf3, 0x73, 0x2b, 0x48, 0x1e, 0xd2, 0xf7
-   iv =
+   cipher_iv =
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
    # Section sha 1 hmac buff 32
    [sha1_hmac_buff_32]