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.
@alg: The algorithm users wanted.
@sched_type: Scheduling type the user wants to use.
@task_tp: Reserved.
@wd_ctx_params: op_type_num and ctx_set_num means 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. The bitmask provided by libnuma. Users can use this parameter
to control requesting ctxs devices in the bind NUMA scenario.
This parameter is mainly convenient for users to use in the binding
cpu scenario. It can avoid resource waste or initialization failure
caused by insufficient resources. Libnuma provides a complete operation
interface which can be found in numa.h.
Changelog:
v5->v6:
- Update a limit between wd_comp_init() and wd_comp_init2_(). If the
wd_comp_init2_() is called after wd_comp_init(), some ctx resources
may be leak until called wd_comp_uninit2().
v4->v5:
- Update wd_comp_init2() and wd_comp_init2_() parameters.
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 | 159 ++++++++++++++++++++++++
docs/wd_design.md | 5 +-
include/wd.h | 54 ++++++++-
include/wd_alg_common.h | 27 +++++
include/wd_comp.h | 30 +++++
include/wd_util.h | 66 ++++++++++
wd.c | 97 ++++++++++++---
wd_aead.c | 33 +++--
wd_cipher.c | 35 ++++--
wd_comp.c | 129 ++++++++++++++++++--
wd_dh.c | 34 ++++--
wd_digest.c | 33 +++--
wd_ecc.c | 33 +++--
wd_rsa.c | 33 +++--
wd_util.c | 260 +++++++++++++++++++++++++++++++++++++++-
16 files changed, 926 insertions(+), 106 deletions(-)
create mode 100644 docs/wd_alg_init2.md
--
2.24.0