access: Pass SMDB pointer into ssa_pr_reinit_context

Signed-off-by: Sasha Kotchubievsky <sashakot@mellanox.com>
Signed-off-by: Hal Rosenstock <hal@mellanox.com>
ssa_path_record.c: Rebuild rather than destroy indexes in reinit context

Signed-off-by: Sasha Kotchubievsky <sashakot@mellanox.com>
Signed-off-by: Hal Rosenstock <hal@mellanox.com>
ssa.c: Obtain number of available cores in the system

get_nprocs function is used to determine number of available cores.
Number of cores is logged.

Signed-off-by: Sasha Kotchubievsky <sashakot@mellanox.com>
Signed-off-by: Hal Rosenstock <hal@mellanox.com>
access/ssa_path_record_data.c: Change epoch logging from decimal to hex for consistency with SSA framework

in ssa_pr_rebuild_indexes

Signed-off-by: Hal Rosenstock <hal@mellanox.com>
ssa.c: Move update queue out of access context structure

It's not really per access context structure.

Signed-off-by: Hal Rosenstock <hal@mellanox.com>
ssa.c: Implement multithreaded PR computation.

 1. Current implementation is based on Glib's thread pool.
 2. Each PRDB calculation is a separate task
 3. Multithreaded calculation is used only during SMDB update
 4. Number of AL workers is number of available cores - 3.
    (upstream, downstream, access). It doesn't mean that
    that there is no context switch during PR computation.
    Also, probably, upstream, downstream, access are waiting
    for IO and doesn't spend actually CPU. The formula could
    be changed in future.
ssa.c: Store number of al workers in access context
ssa.c: Push a access task to thread pool only if number of workers > 1.

 Else, use access thread for the computation.
ssa.c: Print an error in case of g_thread_pool_push failure