Spdk/test
paul luse e58e9fbda8 lib/idxd: add low level idxd library
Module, etc., will follow. Notes:

* IDXD is an Intel silicon feature available in future Intel CPUs.
Initial development is being done on a simulator. Once HW is
available and the code fully tested the experimental label will be
lifted. Spec can be found here: https://software.intel.com/en-us/download/intel-data-streaming-accelerator-preliminary-architecture-specification

* The current implementation will only work with VFIO.

* DSA has a number of engines that can be grouped based on application
need such as type of memory being served or QoS. Engines are processing
units and are assigned to groups. Work queues are on device structures
that act as front-end groups for queueing descriptors. Full details on
what is configurable & how will come in later doc patches.

* There is a finite number of work queue slots that are divided amongst
the number of desired work queues in some fashion (ie evenly).

* SW (outside of the idxd lib) is required to manage flow control, to not
over-run the work queues.This is provided in the accel plug-in module.
The upper layers use public API to manage this.

* Work queue submissions are done with a 64 byte atomic instruction

* The design here creates a set of descriptor rings per channel that match
the size of the work queues. Then, an spdk_bit_array is used to make sure
we don't overrun a queue.  If there are not slots available, the operation
is put on a linked list to be retried later from the poller.

* As we need to support any number of channels (we can't limit ourselves
to the number of work queues) we need to dynamically size/resize our
per channel descriptor rings based on the number of current channels. This
is done from upper layers via public API into the lib.

* As channels are created, the total number of work queue slots is divided
across the channels evenly. Same thing when they are destroyed, remaining
channels with see the ring sizes increase. This is done from upper layers
via public API into the lib.

* The sim has 64 total work queue entries (WQE) that get dolled out to the
work queues (WQ) evenly.

Signed-off-by: paul luse <paul.e.luse@intel.com>
Change-Id: I899bbeda3cef3db05bea4197b8757e89dddb579d
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1809
Community-CI: Mellanox Build Bot
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Vitaliy Mysak <vitaliy.mysak@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2020-04-23 15:48:32 +00:00
..
app lib/iscsi: Remove the "spdk_" prefix from internal APIs declared in iscsi.h 2020-04-20 07:38:29 +00:00
bdev bdevperf: Release job resources on master thread 2020-04-17 07:40:47 +00:00
blobfs test/blobfs: rocksdb building error with gcc9 2020-04-06 07:48:25 +00:00
blobstore examples/blob: skip '\0' when dump xattr's value 2020-04-09 08:08:07 +00:00
common lib/idxd: add low level idxd library 2020-04-23 15:48:32 +00:00
compress test/compress: enable multi-thread on single compress bdev 2020-03-31 07:56:28 +00:00
config_converter test/config_converter: Declare $rootdir, $testdir paths 2020-02-20 09:54:15 +00:00
cpp_headers queue_extras: use SPDK_CONTAINEROF 2019-10-07 15:06:01 +00:00
dpdk_memory_utility test: add test to validate dpdk mem utility 2020-01-24 05:46:43 +00:00
env lib/env_dpdk: remove spdk prefix from internal functions. 2020-04-22 09:21:55 +00:00
event lib/thread: Use function name as poller name by using macro SPDK_POLLER_REGISTER 2020-04-15 07:23:09 +00:00
external_code test/autobuild: verify external code can link to libs 2020-04-15 22:10:08 +00:00
ftl test/ftl: Drop .ini config in favor of json 2020-04-10 07:08:43 +00:00
fuzz test: add autotest of fuzz_iscsi 2020-03-31 07:59:03 +00:00
ioat test: move report_test_completion into run_test 2020-01-14 07:49:08 +00:00
iscsi_tgt bdev/rbd: add ceph rbd resize function. 2020-04-23 07:28:10 +00:00
json_config test/json_config: Fix string notify_get_types is compared with 2020-04-22 09:23:02 +00:00
lvol test/lvol: [jq] replace -S with sort() 2020-04-23 07:28:37 +00:00
make lib/ftl: Add a map file. 2020-04-22 09:21:55 +00:00
nvme test/cuse: move cuse specific tests outside of nvme-cli 2020-04-23 07:27:36 +00:00
nvmf test/nvmf: Drop .ini config in favor of json 2020-04-20 14:28:56 +00:00
ocf test/ocf: Don't depend on gen_nvme.sh while detecting nvme ctrls 2020-04-20 14:28:56 +00:00
openstack test/openstack: Change http to https for cirros server. 2020-04-15 07:37:25 +00:00
pmem script: update pmem test script 2020-02-12 12:07:30 +00:00
rpc scripts/rpc.py: add daemon mode 2020-03-11 11:35:03 +00:00
rpc_client lib/event: fix printing non-null-terminated strings 2020-04-06 07:48:37 +00:00
spdkcli test/spdkcli/tcp: use socat for listening for RPC on a TCP port 2020-04-06 07:48:43 +00:00
unit lib/nvme: switch poll group to use connect/disconnect semantics. 2020-04-22 19:06:26 +00:00
vhost test/vhost_perf: allow multiple fio config files 2020-04-21 08:00:24 +00:00
vmd fio: Remove hardcoded path to fio repo 2020-03-17 14:44:20 +00:00
Makefile build: add option to disable building unit tests 2020-03-10 09:12:21 +00:00
spdk_cunit.h test: remove leftover spdk_cunit declaration 2018-07-06 22:47:56 +00:00