Commit e5d5b3eb authored by Ziye Yang's avatar Ziye Yang Committed by Ben Walker
Browse files

idxd/rpc: Revise the rpc function to use kernel or user driver



This patch is used to add the support for users to configure
use kernel or userspace idxd library.

Change-Id: Ie159b897bc9595894ad8f333168efaea6c2a3d78
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7332


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent 2ed914f8
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -95,6 +95,9 @@ Rados Cluster names.
Revised a parameter `--stripe-size_kb` to `--stripe-size-kb` of `bdev_raid_create` method
provided in `scripts/rpc.py` for consistency.

An new optional parameter `config_kernel_mode` was added to the RPC `idxd_scan_accel_engine`,
and this is used to enable using the kernel mode IDXD driver.

### bdev

Removed ZCOPY emulation: The bdev module can be checked to see if it supports ZCOPY
+3 −1
Original line number Diff line number Diff line
@@ -1407,6 +1407,7 @@ This feature is considered as experimental.
Name                    | Optional | Type        | Description
----------------------- | -------- | ----------- | -----------
config_number           | Required | number      | Pre-defined config # to use (ie 0, 1). See [docs.](https://spdk.io/doc/idxd.html)
config_kernel_mode      | Optional | Boolean     | If set, will use kernel idxd driver.

### Example

@@ -1415,7 +1416,8 @@ Example request:
~~~
{
  "params": {
    "config_number": 0
    "config_number": 0,
    "config_kernel_mode": false
  },
  "jsonrpc": "2.0",
  "method": "idxd_scan_accel_engine",
+2 −1
Original line number Diff line number Diff line
@@ -117,8 +117,9 @@ void spdk_idxd_detach(struct spdk_idxd_device *idxd);
 * Sets the IDXD configuration.
 *
 * \param config_number the configuration number for a valid IDXD config.
 * \param kernel_mode true if using kernel driver.
  */
void spdk_idxd_set_config(uint32_t config_number);
void spdk_idxd_set_config(uint32_t config_number, bool kernel_mode);

/**
 * Return the max number of descriptors per batch for IDXD.
+7 −2
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@

#define ALIGN_4K 0x1000
#define USERSPACE_DRIVER_NAME "user"
#define KERNEL_DRIVER_NAME "kernel"
#define CHAN_PER_DEVICE(total_wq_size) ((total_wq_size >= 128) ? 8 : 4)
/*
 * Need to limit how many completions we reap in one poller to avoid starving
@@ -257,9 +258,13 @@ idxd_get_impl_by_name(const char *impl_name)

/* Called via RPC to select a pre-defined configuration. */
void
spdk_idxd_set_config(uint32_t config_num)
spdk_idxd_set_config(uint32_t config_num, bool kernel_mode)
{
	if (kernel_mode) {
		g_idxd_impl = idxd_get_impl_by_name(KERNEL_DRIVER_NAME);
	} else {
		g_idxd_impl = idxd_get_impl_by_name(USERSPACE_DRIVER_NAME);
	}

	if (g_idxd_impl == NULL) {
		SPDK_ERRLOG("Cannot set the idxd implementation");
+5 −2
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include "spdk/json.h"

static bool g_idxd_enable = false;
static bool g_kernel_mode = false;
uint32_t g_config_number;
static uint32_t g_batch_max;

@@ -345,7 +346,7 @@ attach_cb(void *cb_ctx, struct spdk_idxd_device *idxd)
}

void
accel_engine_idxd_enable_probe(uint32_t config_number)
accel_engine_idxd_enable_probe(uint32_t config_number, bool kernel_mode)
{
	if (config_number > IDXD_MAX_CONFIG_NUM) {
		SPDK_ERRLOG("Invalid config number, using default of 0\n");
@@ -353,8 +354,9 @@ accel_engine_idxd_enable_probe(uint32_t config_number)
	}

	g_config_number = config_number;
	g_kernel_mode = kernel_mode;
	g_idxd_enable = true;
	spdk_idxd_set_config(g_config_number);
	spdk_idxd_set_config(g_config_number, g_kernel_mode);
}

static int
@@ -410,6 +412,7 @@ accel_engine_idxd_write_config_json(struct spdk_json_write_ctx *w)
		spdk_json_write_named_string(w, "method", "idxd_scan_accel_engine");
		spdk_json_write_named_object_begin(w, "params");
		spdk_json_write_named_uint32(w, "config_number", g_config_number);
		spdk_json_write_named_uint32(w, "config_kernel_mode", g_kernel_mode);
		spdk_json_write_object_end(w);
		spdk_json_write_object_end(w);
	}
Loading