RPC: rename set_bdev_qos_limit to bdev_set_qos_limit
Signed-off-by: Maciej Wawryk <maciejx.wawryk@intel.com> Change-Id: Ia22b0043307e92222541b6e7278e3d1485b61987 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468084 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com>
This commit is contained in:
parent
a96afb8b0a
commit
c61e14be6c
@ -70,9 +70,9 @@ Example response
|
||||
}
|
||||
~~~
|
||||
|
||||
## set_bdev_qos_limit {#set_bdev_qos_limit}
|
||||
## bdev_set_qos_limit {#bdev_set_qos_limit}
|
||||
|
||||
Users can use the `set_bdev_qos_limit` RPC command to enable, adjust, and disable
|
||||
Users can use the `bdev_set_qos_limit` RPC command to enable, adjust, and disable
|
||||
rate limits on an existing bdev. Two types of rate limits are supported:
|
||||
IOPS and bandwidth. The rate limits can be enabled, adjusted, and disabled at any
|
||||
time for the specified bdev. The bdev name is a required parameter for this
|
||||
|
@ -272,7 +272,7 @@ Example response:
|
||||
"iscsi_get_initiator_groups",
|
||||
"set_iscsi_options",
|
||||
"set_bdev_options",
|
||||
"set_bdev_qos_limit",
|
||||
"bdev_set_qos_limit",
|
||||
"bdev_get_bdevs",
|
||||
"bdev_get_iostat",
|
||||
"get_subsystem_config",
|
||||
@ -773,7 +773,7 @@ Note that histogram field is trimmed, actual encoded histogram length is ~80kb.
|
||||
}
|
||||
~~~
|
||||
|
||||
## set_bdev_qos_limit {#rpc_set_bdev_qos_limit}
|
||||
## bdev_set_qos_limit {#rpc_bdev_set_qos_limit}
|
||||
|
||||
Set the quality of service rate limit on a bdev.
|
||||
|
||||
@ -795,7 +795,7 @@ Example request:
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"id": 1,
|
||||
"method": "set_bdev_qos_limit",
|
||||
"method": "bdev_set_qos_limit",
|
||||
"params": {
|
||||
"name": "Malloc0"
|
||||
"rw_ios_per_sec": 20000
|
||||
|
@ -759,7 +759,7 @@ spdk_bdev_qos_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w)
|
||||
spdk_bdev_get_qos_rate_limits(bdev, limits);
|
||||
|
||||
spdk_json_write_object_begin(w);
|
||||
spdk_json_write_named_string(w, "method", "set_bdev_qos_limit");
|
||||
spdk_json_write_named_string(w, "method", "bdev_set_qos_limit");
|
||||
|
||||
spdk_json_write_named_object_begin(w, "params");
|
||||
spdk_json_write_named_string(w, "name", bdev->name);
|
||||
|
@ -410,43 +410,43 @@ SPDK_RPC_REGISTER("bdev_set_qd_sampling_period",
|
||||
SPDK_RPC_REGISTER_ALIAS_DEPRECATED(bdev_set_qd_sampling_period,
|
||||
set_bdev_qd_sampling_period)
|
||||
|
||||
struct rpc_set_bdev_qos_limit {
|
||||
struct rpc_bdev_set_qos_limit {
|
||||
char *name;
|
||||
uint64_t limits[SPDK_BDEV_QOS_NUM_RATE_LIMIT_TYPES];
|
||||
};
|
||||
|
||||
static void
|
||||
free_rpc_set_bdev_qos_limit(struct rpc_set_bdev_qos_limit *r)
|
||||
free_rpc_bdev_set_qos_limit(struct rpc_bdev_set_qos_limit *r)
|
||||
{
|
||||
free(r->name);
|
||||
}
|
||||
|
||||
static const struct spdk_json_object_decoder rpc_set_bdev_qos_limit_decoders[] = {
|
||||
{"name", offsetof(struct rpc_set_bdev_qos_limit, name), spdk_json_decode_string},
|
||||
static const struct spdk_json_object_decoder rpc_bdev_set_qos_limit_decoders[] = {
|
||||
{"name", offsetof(struct rpc_bdev_set_qos_limit, name), spdk_json_decode_string},
|
||||
{
|
||||
"rw_ios_per_sec", offsetof(struct rpc_set_bdev_qos_limit,
|
||||
"rw_ios_per_sec", offsetof(struct rpc_bdev_set_qos_limit,
|
||||
limits[SPDK_BDEV_QOS_RW_IOPS_RATE_LIMIT]),
|
||||
spdk_json_decode_uint64, true
|
||||
},
|
||||
{
|
||||
"rw_mbytes_per_sec", offsetof(struct rpc_set_bdev_qos_limit,
|
||||
"rw_mbytes_per_sec", offsetof(struct rpc_bdev_set_qos_limit,
|
||||
limits[SPDK_BDEV_QOS_RW_BPS_RATE_LIMIT]),
|
||||
spdk_json_decode_uint64, true
|
||||
},
|
||||
{
|
||||
"r_mbytes_per_sec", offsetof(struct rpc_set_bdev_qos_limit,
|
||||
"r_mbytes_per_sec", offsetof(struct rpc_bdev_set_qos_limit,
|
||||
limits[SPDK_BDEV_QOS_R_BPS_RATE_LIMIT]),
|
||||
spdk_json_decode_uint64, true
|
||||
},
|
||||
{
|
||||
"w_mbytes_per_sec", offsetof(struct rpc_set_bdev_qos_limit,
|
||||
"w_mbytes_per_sec", offsetof(struct rpc_bdev_set_qos_limit,
|
||||
limits[SPDK_BDEV_QOS_W_BPS_RATE_LIMIT]),
|
||||
spdk_json_decode_uint64, true
|
||||
},
|
||||
};
|
||||
|
||||
static void
|
||||
spdk_rpc_set_bdev_qos_limit_complete(void *cb_arg, int status)
|
||||
spdk_rpc_bdev_set_qos_limit_complete(void *cb_arg, int status)
|
||||
{
|
||||
struct spdk_jsonrpc_request *request = cb_arg;
|
||||
struct spdk_json_write_ctx *w;
|
||||
@ -464,15 +464,15 @@ spdk_rpc_set_bdev_qos_limit_complete(void *cb_arg, int status)
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_rpc_set_bdev_qos_limit(struct spdk_jsonrpc_request *request,
|
||||
spdk_rpc_bdev_set_qos_limit(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_set_bdev_qos_limit req = {NULL, {UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX}};
|
||||
struct rpc_bdev_set_qos_limit req = {NULL, {UINT64_MAX, UINT64_MAX, UINT64_MAX, UINT64_MAX}};
|
||||
struct spdk_bdev *bdev;
|
||||
int i;
|
||||
|
||||
if (spdk_json_decode_object(params, rpc_set_bdev_qos_limit_decoders,
|
||||
SPDK_COUNTOF(rpc_set_bdev_qos_limit_decoders),
|
||||
if (spdk_json_decode_object(params, rpc_bdev_set_qos_limit_decoders,
|
||||
SPDK_COUNTOF(rpc_bdev_set_qos_limit_decoders),
|
||||
&req)) {
|
||||
SPDK_ERRLOG("spdk_json_decode_object failed\n");
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,
|
||||
@ -498,13 +498,14 @@ spdk_rpc_set_bdev_qos_limit(struct spdk_jsonrpc_request *request,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
spdk_bdev_set_qos_rate_limits(bdev, req.limits, spdk_rpc_set_bdev_qos_limit_complete, request);
|
||||
spdk_bdev_set_qos_rate_limits(bdev, req.limits, spdk_rpc_bdev_set_qos_limit_complete, request);
|
||||
|
||||
cleanup:
|
||||
free_rpc_set_bdev_qos_limit(&req);
|
||||
free_rpc_bdev_set_qos_limit(&req);
|
||||
}
|
||||
|
||||
SPDK_RPC_REGISTER("set_bdev_qos_limit", spdk_rpc_set_bdev_qos_limit, SPDK_RPC_RUNTIME)
|
||||
SPDK_RPC_REGISTER("bdev_set_qos_limit", spdk_rpc_bdev_set_qos_limit, SPDK_RPC_RUNTIME)
|
||||
SPDK_RPC_REGISTER_ALIAS_DEPRECATED(bdev_set_qos_limit, set_bdev_qos_limit)
|
||||
|
||||
/* SPDK_RPC_ENABLE_BDEV_HISTOGRAM */
|
||||
|
||||
|
@ -617,15 +617,16 @@ if __name__ == "__main__":
|
||||
type=int)
|
||||
p.set_defaults(func=bdev_set_qd_sampling_period)
|
||||
|
||||
def set_bdev_qos_limit(args):
|
||||
rpc.bdev.set_bdev_qos_limit(args.client,
|
||||
def bdev_set_qos_limit(args):
|
||||
rpc.bdev.bdev_set_qos_limit(args.client,
|
||||
name=args.name,
|
||||
rw_ios_per_sec=args.rw_ios_per_sec,
|
||||
rw_mbytes_per_sec=args.rw_mbytes_per_sec,
|
||||
r_mbytes_per_sec=args.r_mbytes_per_sec,
|
||||
w_mbytes_per_sec=args.w_mbytes_per_sec)
|
||||
|
||||
p = subparsers.add_parser('set_bdev_qos_limit', help='Set QoS rate limit on a blockdev')
|
||||
p = subparsers.add_parser('bdev_set_qos_limit', aliases=['set_bdev_qos_limit'],
|
||||
help='Set QoS rate limit on a blockdev')
|
||||
p.add_argument('name', help='Blockdev name to set QoS. Example: Malloc0')
|
||||
p.add_argument('--rw_ios_per_sec',
|
||||
help='R/W IOs per second limit (>=10000, example: 20000). 0 means unlimited.',
|
||||
@ -639,7 +640,7 @@ if __name__ == "__main__":
|
||||
p.add_argument('--w_mbytes_per_sec',
|
||||
help="Write megabytes per second limit (>=10, example: 100). 0 means unlimited.",
|
||||
type=int, required=False)
|
||||
p.set_defaults(func=set_bdev_qos_limit)
|
||||
p.set_defaults(func=bdev_set_qos_limit)
|
||||
|
||||
def bdev_error_inject_error(args):
|
||||
rpc.bdev.bdev_error_inject_error(args.client,
|
||||
|
@ -790,7 +790,8 @@ def bdev_set_qd_sampling_period(client, name, period):
|
||||
return client.call('bdev_set_qd_sampling_period', params)
|
||||
|
||||
|
||||
def set_bdev_qos_limit(
|
||||
@deprecated_alias('set_bdev_qos_limit')
|
||||
def bdev_set_qos_limit(
|
||||
client,
|
||||
name,
|
||||
rw_ios_per_sec=None,
|
||||
@ -816,7 +817,7 @@ def set_bdev_qos_limit(
|
||||
params['r_mbytes_per_sec'] = r_mbytes_per_sec
|
||||
if w_mbytes_per_sec is not None:
|
||||
params['w_mbytes_per_sec'] = w_mbytes_per_sec
|
||||
return client.call('set_bdev_qos_limit', params)
|
||||
return client.call('bdev_set_qos_limit', params)
|
||||
|
||||
|
||||
@deprecated_alias('apply_firmware')
|
||||
|
@ -99,34 +99,34 @@ READ_BANDWIDTH_LIMIT_MB=$(($READ_BANDWIDTH_LIMIT/1024/1024))
|
||||
READ_BANDWIDTH_LIMIT=$(($READ_BANDWIDTH_LIMIT_MB*1024*1024))
|
||||
|
||||
# Limit the I/O rate by RPC, then confirm the observed rate matches.
|
||||
$rpc_py set_bdev_qos_limit Malloc0 --rw_ios_per_sec $IOPS_LIMIT
|
||||
$rpc_py bdev_set_qos_limit Malloc0 --rw_ios_per_sec $IOPS_LIMIT
|
||||
run_fio Malloc0
|
||||
verify_qos_limits $IOPS_RESULT $IOPS_LIMIT
|
||||
|
||||
# Now disable the rate limiting, and confirm the observed rate is not limited anymore.
|
||||
$rpc_py set_bdev_qos_limit Malloc0 --rw_ios_per_sec 0
|
||||
$rpc_py bdev_set_qos_limit Malloc0 --rw_ios_per_sec 0
|
||||
run_fio Malloc0
|
||||
[ "$IOPS_RESULT" -gt "$IOPS_LIMIT" ]
|
||||
|
||||
# Limit the I/O rate again.
|
||||
$rpc_py set_bdev_qos_limit Malloc0 --rw_ios_per_sec $IOPS_LIMIT
|
||||
$rpc_py bdev_set_qos_limit Malloc0 --rw_ios_per_sec $IOPS_LIMIT
|
||||
run_fio Malloc0
|
||||
verify_qos_limits $IOPS_RESULT $IOPS_LIMIT
|
||||
|
||||
echo "I/O rate limiting tests successful"
|
||||
|
||||
# Limit the I/O bandwidth rate by RPC, then confirm the observed rate matches.
|
||||
$rpc_py set_bdev_qos_limit Malloc0 --rw_ios_per_sec 0 --rw_mbytes_per_sec $BANDWIDTH_LIMIT_MB
|
||||
$rpc_py bdev_set_qos_limit Malloc0 --rw_ios_per_sec 0 --rw_mbytes_per_sec $BANDWIDTH_LIMIT_MB
|
||||
run_fio Malloc0
|
||||
verify_qos_limits $BANDWIDTH_RESULT $BANDWIDTH_LIMIT
|
||||
|
||||
# Now disable the bandwidth rate limiting, and confirm the observed rate is not limited anymore.
|
||||
$rpc_py set_bdev_qos_limit Malloc0 --rw_mbytes_per_sec 0
|
||||
$rpc_py bdev_set_qos_limit Malloc0 --rw_mbytes_per_sec 0
|
||||
run_fio Malloc0
|
||||
[ "$BANDWIDTH_RESULT" -gt "$BANDWIDTH_LIMIT" ]
|
||||
|
||||
# Limit the I/O bandwidth rate again with both read/write and read/only.
|
||||
$rpc_py set_bdev_qos_limit Malloc0 --rw_mbytes_per_sec $BANDWIDTH_LIMIT_MB --r_mbytes_per_sec $READ_BANDWIDTH_LIMIT_MB
|
||||
$rpc_py bdev_set_qos_limit Malloc0 --rw_mbytes_per_sec $BANDWIDTH_LIMIT_MB --r_mbytes_per_sec $READ_BANDWIDTH_LIMIT_MB
|
||||
run_fio Malloc0
|
||||
verify_qos_limits $BANDWIDTH_RESULT $READ_BANDWIDTH_LIMIT
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user