xref: /dpdk/doc/guides/cryptodevs/scheduler.rst (revision a0e805ee086a87b2a787a4deb139775a01790c7c)
1d58a3f31SFan Zhang..  BSD LICENSE
2d58a3f31SFan Zhang    Copyright(c) 2017 Intel Corporation. All rights reserved.
3d58a3f31SFan Zhang    All rights reserved.
4d58a3f31SFan Zhang
5d58a3f31SFan Zhang    Redistribution and use in source and binary forms, with or without
6d58a3f31SFan Zhang    modification, are permitted provided that the following conditions
7d58a3f31SFan Zhang    are met:
8d58a3f31SFan Zhang
9d58a3f31SFan Zhang    * Redistributions of source code must retain the above copyright
10d58a3f31SFan Zhang    notice, this list of conditions and the following disclaimer.
11d58a3f31SFan Zhang    * Redistributions in binary form must reproduce the above copyright
12d58a3f31SFan Zhang    notice, this list of conditions and the following disclaimer in
13d58a3f31SFan Zhang    the documentation and/or other materials provided with the
14d58a3f31SFan Zhang    distribution.
15d58a3f31SFan Zhang    * Neither the name of Intel Corporation nor the names of its
16d58a3f31SFan Zhang    contributors may be used to endorse or promote products derived
17d58a3f31SFan Zhang    from this software without specific prior written permission.
18d58a3f31SFan Zhang
19d58a3f31SFan Zhang    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20d58a3f31SFan Zhang    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21d58a3f31SFan Zhang    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22d58a3f31SFan Zhang    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23d58a3f31SFan Zhang    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24d58a3f31SFan Zhang    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25d58a3f31SFan Zhang    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26d58a3f31SFan Zhang    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27d58a3f31SFan Zhang    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28d58a3f31SFan Zhang    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29d58a3f31SFan Zhang    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30d58a3f31SFan Zhang
31d58a3f31SFan ZhangCryptodev Scheduler Poll Mode Driver Library
32d58a3f31SFan Zhang============================================
33d58a3f31SFan Zhang
34d58a3f31SFan ZhangScheduler PMD is a software crypto PMD, which has the capabilities of
35d58a3f31SFan Zhangattaching hardware and/or software cryptodevs, and distributes ingress
36d58a3f31SFan Zhangcrypto ops among them in a certain manner.
37d58a3f31SFan Zhang
38d58a3f31SFan Zhang.. figure:: img/scheduler-overview.*
39d58a3f31SFan Zhang
40d58a3f31SFan Zhang   Cryptodev Scheduler Overview
41d58a3f31SFan Zhang
42d58a3f31SFan Zhang
43d58a3f31SFan ZhangThe Cryptodev Scheduler PMD library (**librte_pmd_crypto_scheduler**) acts as
44d58a3f31SFan Zhanga software crypto PMD and shares the same API provided by librte_cryptodev.
45d58a3f31SFan ZhangThe PMD supports attaching multiple crypto PMDs, software or hardware, as
46d58a3f31SFan Zhangslaves, and distributes the crypto workload to them with certain behavior.
47d58a3f31SFan ZhangThe behaviors are categorizes as different "modes". Basically, a scheduling
48d58a3f31SFan Zhangmode defines certain actions for scheduling crypto ops to its slaves.
49d58a3f31SFan Zhang
50d58a3f31SFan ZhangThe librte_pmd_crypto_scheduler library exports a C API which provides an API
51d58a3f31SFan Zhangfor attaching/detaching slaves, set/get scheduling modes, and enable/disable
52d58a3f31SFan Zhangcrypto ops reordering.
53d58a3f31SFan Zhang
54d58a3f31SFan ZhangLimitations
55d58a3f31SFan Zhang-----------
56d58a3f31SFan Zhang
57d58a3f31SFan Zhang* Sessionless crypto operation is not supported
58d58a3f31SFan Zhang* OOP crypto operation is not supported when the crypto op reordering feature
59d58a3f31SFan Zhang  is enabled.
60d58a3f31SFan Zhang
61d58a3f31SFan Zhang
62d58a3f31SFan ZhangInstallation
63d58a3f31SFan Zhang------------
64d58a3f31SFan Zhang
65d58a3f31SFan ZhangTo build DPDK with CRYTPO_SCHEDULER_PMD the user is required to set
66d58a3f31SFan ZhangCONFIG_RTE_LIBRTE_PMD_CRYPTO_SCHEDULER=y in config/common_base, and
67d58a3f31SFan Zhangrecompile DPDK
68d58a3f31SFan Zhang
69d58a3f31SFan Zhang
70d58a3f31SFan ZhangInitialization
71d58a3f31SFan Zhang--------------
72d58a3f31SFan Zhang
73d58a3f31SFan ZhangTo use the PMD in an application, user must:
74d58a3f31SFan Zhang
75d58a3f31SFan Zhang* Call rte_eal_vdev_init("crpyto_scheduler") within the application.
76d58a3f31SFan Zhang
77d58a3f31SFan Zhang* Use --vdev="crpyto_scheduler" in the EAL options, which will call
78d58a3f31SFan Zhang  rte_eal_vdev_init() internally.
79d58a3f31SFan Zhang
80d58a3f31SFan Zhang
81d58a3f31SFan ZhangThe following parameters (all optional) can be provided in the previous
82d58a3f31SFan Zhangtwo calls:
83d58a3f31SFan Zhang
84d58a3f31SFan Zhang* socket_id: Specify the socket where the memory for the device is going
85d58a3f31SFan Zhang  to be allocated (by default, socket_id will be the socket where the core
86d58a3f31SFan Zhang  that is creating the PMD is running on).
87d58a3f31SFan Zhang
88d58a3f31SFan Zhang* max_nb_sessions: Specify the maximum number of sessions that can be
89d58a3f31SFan Zhang  created. This value may be overwritten internally if there are too
90d58a3f31SFan Zhang  many devices are attached.
91d58a3f31SFan Zhang
92d58a3f31SFan Zhang* slave: If a cryptodev has been initialized with specific name, it can be
93d58a3f31SFan Zhang  attached to the scheduler using this parameter, simply filling the name
94d58a3f31SFan Zhang  here. Multiple cryptodevs can be attached initially by presenting this
95d58a3f31SFan Zhang  parameter multiple times.
96d58a3f31SFan Zhang
97*a0e805eeSFan Zhang* mode: Specify the scheduling mode of the PMD. The supported scheduling
98*a0e805eeSFan Zhang  mode parameter values are specified in the "Cryptodev Scheduler Modes
99*a0e805eeSFan Zhang  Overview" section.
100*a0e805eeSFan Zhang
101*a0e805eeSFan Zhang* ordering: Specify the status of the crypto operations ordering feature.
102*a0e805eeSFan Zhang  The value of this parameter can be "enable" or "disable". This feature
103*a0e805eeSFan Zhang  is disabled by default.
104*a0e805eeSFan Zhang
105d58a3f31SFan ZhangExample:
106d58a3f31SFan Zhang
107d58a3f31SFan Zhang.. code-block:: console
108d58a3f31SFan Zhang
109d58a3f31SFan Zhang    ... --vdev "crypto_aesni_mb_pmd,name=aesni_mb_1" --vdev "crypto_aesni_mb_pmd,name=aesni_mb_2" --vdev "crypto_scheduler_pmd,slave=aesni_mb_1,slave=aesni_mb_2" ...
110d58a3f31SFan Zhang
111d58a3f31SFan Zhang.. note::
112d58a3f31SFan Zhang
113d58a3f31SFan Zhang    * The scheduler cryptodev cannot be started unless the scheduling mode
114d58a3f31SFan Zhang      is set and at least one slave is attached. Also, to configure the
115d58a3f31SFan Zhang      scheduler in the run-time, like attach/detach slave(s), change
116d58a3f31SFan Zhang      scheduling mode, or enable/disable crypto op ordering, one should stop
117d58a3f31SFan Zhang      the scheduler first, otherwise an error will be returned.
118d58a3f31SFan Zhang
119d58a3f31SFan Zhang    * The crypto op reordering feature requires using the userdata field of
120d58a3f31SFan Zhang      every mbuf to be processed to store temporary data. By the end of
121d58a3f31SFan Zhang      processing, the field is set to pointing to NULL, any previously
122d58a3f31SFan Zhang      stored value of this field will be lost.
123d58a3f31SFan Zhang
124d58a3f31SFan Zhang
125d58a3f31SFan ZhangCryptodev Scheduler Modes Overview
126d58a3f31SFan Zhang----------------------------------
127d58a3f31SFan Zhang
128d58a3f31SFan ZhangCurrently the Crypto Scheduler PMD library supports following modes of
129d58a3f31SFan Zhangoperation:
130d58a3f31SFan Zhang
131d58a3f31SFan Zhang*   **CDEV_SCHED_MODE_ROUNDROBIN:**
132d58a3f31SFan Zhang
133*a0e805eeSFan Zhang   *Initialization mode parameter*: **round-robin**
134*a0e805eeSFan Zhang
135d58a3f31SFan Zhang   Round-robin mode, which distributes the enqueued burst of crypto ops
136d58a3f31SFan Zhang   among its slaves in a round-robin manner. This mode may help to fill
137d58a3f31SFan Zhang   the throughput gap between the physical core and the existing cryptodevs
138d58a3f31SFan Zhang   to increase the overall performance.
139a783aa63SFan Zhang
140a783aa63SFan Zhang*   **CDEV_SCHED_MODE_PKT_SIZE_DISTR:**
141a783aa63SFan Zhang
142*a0e805eeSFan Zhang   *Initialization mode parameter*: **packet-size-distr**
143*a0e805eeSFan Zhang
144a783aa63SFan Zhang   Packet-size based distribution mode, which works with 2 slaves, the primary
145a783aa63SFan Zhang   slave and the secondary slave, and distributes the enqueued crypto
146a783aa63SFan Zhang   operations to them based on their data lengths. A crypto operation will be
147a783aa63SFan Zhang   distributed to the primary slave if its data length is equal to or bigger
148a783aa63SFan Zhang   than the designated threshold, otherwise it will be handled by the secondary
149a783aa63SFan Zhang   slave.
150a783aa63SFan Zhang
151a783aa63SFan Zhang   A typical usecase in this mode is with the QAT cryptodev as the primary and
152a783aa63SFan Zhang   a software cryptodev as the secondary slave. This may help applications to
153a783aa63SFan Zhang   process additional crypto workload than what the QAT cryptodev can handle on
154a783aa63SFan Zhang   its own, by making use of the available CPU cycles to deal with smaller
155a783aa63SFan Zhang   crypto workloads.
15637f075daSFan Zhang
15737f075daSFan Zhang*   **CDEV_SCHED_MODE_FAILOVER:**
15837f075daSFan Zhang
159*a0e805eeSFan Zhang   *Initialization mode parameter*: **fail-over**
160*a0e805eeSFan Zhang
16137f075daSFan Zhang   Fail-over mode, which works with 2 slaves, the primary slave and the
16237f075daSFan Zhang   secondary slave. In this mode, the scheduler will enqueue the incoming
16337f075daSFan Zhang   crypto operation burst to the primary slave. When one or more crypto
16437f075daSFan Zhang   operations fail to be enqueued, then they will be enqueued to the secondary
16537f075daSFan Zhang   slave.
166