rdma: api: prepare support for direct verb
Prepare rdma interface creation API for direct verb support: - add new optional 'mode' parameters to select between ibverb or direct verb backend (optional, default to 'auto') - set default value for rxq_num (1), rxq_size (1024) and txq_size (1024) so they are now optional - bump default create value for rxq_size and txq_size to 1024 if unset (0) so they are coherent with default values above Type: feature Change-Id: Id9eae2b8eb0baaf34a0fcd55da6ad09515f57a93 Signed-off-by: Benoît Ganne <bganne@cisco.com>
This commit is contained in:

committed by
Andrew Yourtchenko

parent
affc5f6d3d
commit
d8c1ef925a
@@ -29,6 +29,21 @@
|
|||||||
|
|
||||||
#include <vlibapi/api_helper_macros.h>
|
#include <vlibapi/api_helper_macros.h>
|
||||||
|
|
||||||
|
static rdma_mode_t
|
||||||
|
rdma_api_mode (vl_api_rdma_mode_t mode)
|
||||||
|
{
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case RDMA_API_MODE_AUTO:
|
||||||
|
return RDMA_MODE_AUTO;
|
||||||
|
case RDMA_API_MODE_IBV:
|
||||||
|
return RDMA_MODE_IBV;
|
||||||
|
case RDMA_API_MODE_DV:
|
||||||
|
return RDMA_MODE_DV;
|
||||||
|
}
|
||||||
|
return RDMA_MODE_AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vl_api_rdma_create_t_handler (vl_api_rdma_create_t * mp)
|
vl_api_rdma_create_t_handler (vl_api_rdma_create_t * mp)
|
||||||
{
|
{
|
||||||
@@ -45,6 +60,7 @@ vl_api_rdma_create_t_handler (vl_api_rdma_create_t * mp)
|
|||||||
args.rxq_num = ntohs (mp->rxq_num);
|
args.rxq_num = ntohs (mp->rxq_num);
|
||||||
args.rxq_size = ntohs (mp->rxq_size);
|
args.rxq_size = ntohs (mp->rxq_size);
|
||||||
args.txq_size = ntohs (mp->txq_size);
|
args.txq_size = ntohs (mp->txq_size);
|
||||||
|
args.mode = rdma_api_mode (mp->mode);
|
||||||
|
|
||||||
rdma_create_if (vm, &args);
|
rdma_create_if (vm, &args);
|
||||||
rv = args.rv;
|
rv = args.rv;
|
||||||
|
@@ -49,7 +49,7 @@ VLIB_CLI_COMMAND (rdma_create_command, static) = {
|
|||||||
.path = "create interface rdma",
|
.path = "create interface rdma",
|
||||||
.short_help = "create interface rdma <host-if ifname> [name <name>]"
|
.short_help = "create interface rdma <host-if ifname> [name <name>]"
|
||||||
" [rx-queue-size <size>] [tx-queue-size <size>]"
|
" [rx-queue-size <size>] [tx-queue-size <size>]"
|
||||||
" [num-rx-queues <size>]",
|
" [num-rx-queues <size>] [mode <auto|ibv|dv]",
|
||||||
.function = rdma_create_command_fn,
|
.function = rdma_create_command_fn,
|
||||||
};
|
};
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
@@ -589,8 +589,8 @@ rdma_create_if (vlib_main_t * vm, rdma_create_if_args_t * args)
|
|||||||
u16 qid;
|
u16 qid;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
args->rxq_size = args->rxq_size ? args->rxq_size : 2 * VLIB_FRAME_SIZE;
|
args->rxq_size = args->rxq_size ? args->rxq_size : 1024;
|
||||||
args->txq_size = args->txq_size ? args->txq_size : 2 * VLIB_FRAME_SIZE;
|
args->txq_size = args->txq_size ? args->txq_size : 1024;
|
||||||
args->rxq_num = args->rxq_num ? args->rxq_num : 1;
|
args->rxq_num = args->rxq_num ? args->rxq_num : 1;
|
||||||
|
|
||||||
if (!is_pow2 (args->rxq_num))
|
if (!is_pow2 (args->rxq_num))
|
||||||
@@ -611,6 +611,19 @@ rdma_create_if (vlib_main_t * vm, rdma_create_if_args_t * args)
|
|||||||
goto err0;
|
goto err0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (args->mode)
|
||||||
|
{
|
||||||
|
case RDMA_MODE_AUTO:
|
||||||
|
break;
|
||||||
|
case RDMA_MODE_IBV:
|
||||||
|
break;
|
||||||
|
case RDMA_MODE_DV:
|
||||||
|
args->rv = VNET_API_ERROR_INVALID_VALUE;
|
||||||
|
args->error = clib_error_return (0, "unsupported mode");
|
||||||
|
goto err0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
dev_list = ibv_get_device_list (&n_devs);
|
dev_list = ibv_get_device_list (&n_devs);
|
||||||
if (n_devs == 0)
|
if (n_devs == 0)
|
||||||
{
|
{
|
||||||
|
@@ -18,14 +18,23 @@
|
|||||||
option version = "1.0.0";
|
option version = "1.0.0";
|
||||||
import "vnet/interface_types.api";
|
import "vnet/interface_types.api";
|
||||||
|
|
||||||
|
enum rdma_mode
|
||||||
|
{
|
||||||
|
RDMA_API_MODE_AUTO = 0,
|
||||||
|
RDMA_API_MODE_IBV = 1,
|
||||||
|
RDMA_API_MODE_DV = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/** \brief
|
/** \brief
|
||||||
@param client_index - opaque cookie to identify the sender
|
@param client_index - opaque cookie to identify the sender
|
||||||
@param context - sender context, to match reply w/ request
|
@param context - sender context, to match reply w/ request
|
||||||
@param host_if - Linux netdev interface name
|
@param host_if - Linux netdev interface name
|
||||||
@param name - new rdma interface name
|
@param name - new rdma interface name
|
||||||
@param rxq_num - number of receive queues
|
@param rxq_num - number of receive queues (optional)
|
||||||
@param rxq_size - receive queue size
|
@param rxq_size - receive queue size (optional)
|
||||||
@param txq_size - transmit queue size
|
@param txq_size - transmit queue size (optional)
|
||||||
|
@param mode - operation mode (optional)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define rdma_create
|
define rdma_create
|
||||||
@@ -35,10 +44,11 @@ define rdma_create
|
|||||||
|
|
||||||
string host_if[64];
|
string host_if[64];
|
||||||
string name[64];
|
string name[64];
|
||||||
u16 rxq_num;
|
u16 rxq_num [default=1];
|
||||||
u16 rxq_size;
|
u16 rxq_size [default=1024];
|
||||||
u16 txq_size;
|
u16 txq_size [default=1024];
|
||||||
option vat_help = "<host-if ifname> [name <name>] [rx-queue-size <size>] [tx-queue-size <size>] [num-rx-queues <size>]";
|
vl_api_rdma_mode_t mode [default=0];
|
||||||
|
option vat_help = "<host-if ifname> [name <name>] [rx-queue-size <size>] [tx-queue-size <size>] [num-rx-queues <size>] [mode <auto|ibv|dv>]";
|
||||||
};
|
};
|
||||||
|
|
||||||
/** \brief
|
/** \brief
|
||||||
|
@@ -102,6 +102,13 @@ typedef struct
|
|||||||
|
|
||||||
extern rdma_main_t rdma_main;
|
extern rdma_main_t rdma_main;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
RDMA_MODE_AUTO = 0,
|
||||||
|
RDMA_MODE_IBV,
|
||||||
|
RDMA_MODE_DV,
|
||||||
|
} rdma_mode_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u8 *ifname;
|
u8 *ifname;
|
||||||
@@ -109,6 +116,7 @@ typedef struct
|
|||||||
u32 rxq_size;
|
u32 rxq_size;
|
||||||
u32 txq_size;
|
u32 txq_size;
|
||||||
u32 rxq_num;
|
u32 rxq_num;
|
||||||
|
rdma_mode_t mode;
|
||||||
|
|
||||||
/* return */
|
/* return */
|
||||||
int rv;
|
int rv;
|
||||||
|
@@ -43,6 +43,21 @@ typedef struct
|
|||||||
|
|
||||||
rdma_test_main_t rdma_test_main;
|
rdma_test_main_t rdma_test_main;
|
||||||
|
|
||||||
|
static vl_api_rdma_mode_t
|
||||||
|
api_rdma_mode (rdma_mode_t mode)
|
||||||
|
{
|
||||||
|
switch (mode)
|
||||||
|
{
|
||||||
|
case RDMA_MODE_AUTO:
|
||||||
|
return RDMA_API_MODE_AUTO;
|
||||||
|
case RDMA_MODE_IBV:
|
||||||
|
return RDMA_API_MODE_IBV;
|
||||||
|
case RDMA_MODE_DV:
|
||||||
|
return RDMA_API_MODE_DV;
|
||||||
|
}
|
||||||
|
return ~0;
|
||||||
|
}
|
||||||
|
|
||||||
/* rdma create API */
|
/* rdma create API */
|
||||||
static int
|
static int
|
||||||
api_rdma_create (vat_main_t * vam)
|
api_rdma_create (vat_main_t * vam)
|
||||||
@@ -64,6 +79,7 @@ api_rdma_create (vat_main_t * vam)
|
|||||||
mp->rxq_num = clib_host_to_net_u16 (args.rxq_num);
|
mp->rxq_num = clib_host_to_net_u16 (args.rxq_num);
|
||||||
mp->rxq_size = clib_host_to_net_u16 (args.rxq_size);
|
mp->rxq_size = clib_host_to_net_u16 (args.rxq_size);
|
||||||
mp->txq_size = clib_host_to_net_u16 (args.txq_size);
|
mp->txq_size = clib_host_to_net_u16 (args.txq_size);
|
||||||
|
mp->mode = api_rdma_mode (args.mode);
|
||||||
|
|
||||||
S (mp);
|
S (mp);
|
||||||
W (ret);
|
W (ret);
|
||||||
|
@@ -42,6 +42,12 @@ unformat_rdma_create_if_args (unformat_input_t * input, va_list * vargs)
|
|||||||
;
|
;
|
||||||
else if (unformat (line_input, "num-rx-queues %u", &args->rxq_num))
|
else if (unformat (line_input, "num-rx-queues %u", &args->rxq_num))
|
||||||
;
|
;
|
||||||
|
else if (unformat (line_input, "mode auto"))
|
||||||
|
args->mode = RDMA_MODE_AUTO;
|
||||||
|
else if (unformat (line_input, "mode ibv"))
|
||||||
|
args->mode = RDMA_MODE_IBV;
|
||||||
|
else if (unformat (line_input, "mode dv"))
|
||||||
|
args->mode = RDMA_MODE_DV;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* return failure on unknown input */
|
/* return failure on unknown input */
|
||||||
|
Reference in New Issue
Block a user