The current uadk initialization process is:
1.Call wd_request_ctx() to request ctxs from devices.
2.Call wd_sched_rr_alloc() to create a sched(or some other scheduler alloc
function if exits).
3.Initialize the sched.
4.Call wd_<alg>_init() with ctx_config and sched.
Logic is reasonable. But in practice, the step of `wd_ request_ Ctx() `
and `wd_ sched_ rr_alloc() ` are very tedious. This makes it difficult
for users to use the interface. One of the main reasons for this is
that uadk has made a lot of configurations in the scheduler in order
to provide users with better performance. Based on this consideration,
the current uadk requires the user to arrange the division of hardware
resources according to the device topology during initialization.
Therefore, as a high-level interface, this scheme can provide customized
scheme configuration for users with deep needs.
All algorithm initialization interfaces have the same input parameters
and behavioral logic. The pre-processing of the wd_<alg>_init is actually
the configuration of `struct wd_ctx_config` and `struct wd_sched`.
Therefore, the next thing to be done is to use limited and easy-to-use
input parameters to describe users' requirements on the two input
parameters, ensuring that the functions of the new interface init2
are the same as those of init. For ease of description, v1 is used
to refer to the existing interface, and v2 is used to refer to the layer
of encapsulation.
At present, at least 4 parameters are required to meet the user
configuration requirements with the V1 interface function remains
unchanged.
@device_list: The available uacce device list. Users can get it by
wd_get_accel_list().
@numa_bitmask: The bitmask provided by libnuma. Users can use this
parameter to control requesting ctxs devices in the bind NUMA scenario.
@ctx_nums: The requested ctx number for each numa node. Due to users
may have different requirements for different types of ctx numbers,
needs a two-dimensional array as input.
@sched_type: Scheduling type the user wants to use.
What's more, some users want uadk to provide the default value about
input parameters for some performance insensitive scenes. C code has
no way to.
Changelog:
v3->v4:
- Resume the wd_comp_init2() parameters and rename it to wd_comp_init2_().
Then add a macro named wd_comp_init2() which has a simpler parameters.
v2->v3:
- Update the wd_comp_init2() parameters.
v1->v2:
- Update the desdescription about wd_<alg>_init in wd_design.md.
Yang Shen (6):
uadk - support algorithms initialization reentry protect
uadk/doc - update wd_alg_init support reentrancy
uadk - support return error number as pointer
uadk - mv some function to header file
uadk/comp - add wd_comp_init2
uadk/docs - support a simple interface for initialization
Makefile.am | 4 +-
docs/wd_alg_init2.md | 154 ++++++++++++++++++++++++
docs/wd_design.md | 5 +-
include/wd.h | 54 ++++++++-
include/wd_alg_common.h | 24 ++++
include/wd_comp.h | 27 +++++
include/wd_util.h | 57 +++++++++
wd.c | 97 ++++++++++++---
wd_aead.c | 33 +++--
wd_cipher.c | 35 ++++--
wd_comp.c | 121 +++++++++++++++++--
wd_dh.c | 34 ++++--
wd_digest.c | 33 +++--
wd_ecc.c | 33 +++--
wd_rsa.c | 33 +++--
wd_util.c | 260 +++++++++++++++++++++++++++++++++++++++-
16 files changed, 898 insertions(+), 106 deletions(-)
create mode 100644 docs/wd_alg_init2.md
--
2.24.0