From c61e14be6c8aa43424b52b83b153497026e6477f Mon Sep 17 00:00:00 2001 From: Maciej Wawryk Date: Wed, 11 Sep 2019 12:32:34 +0200 Subject: [PATCH] RPC: rename set_bdev_qos_limit to bdev_set_qos_limit Signed-off-by: Maciej Wawryk Change-Id: Ia22b0043307e92222541b6e7278e3d1485b61987 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/468084 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Reviewed-by: Paul Luse --- doc/bdev.md | 4 ++-- doc/jsonrpc.md | 6 +++--- lib/bdev/bdev.c | 2 +- module/bdev/rpc/bdev_rpc.c | 33 +++++++++++++++++---------------- scripts/rpc.py | 9 +++++---- scripts/rpc/bdev.py | 5 +++-- test/iscsi_tgt/qos/qos.sh | 12 ++++++------ 7 files changed, 37 insertions(+), 34 deletions(-) diff --git a/doc/bdev.md b/doc/bdev.md index b995edece..24d8d00bf 100644 --- a/doc/bdev.md +++ b/doc/bdev.md @@ -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 diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index 153d70665..3e37bd948 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -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 diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 193b3dc5f..970437249 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -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); diff --git a/module/bdev/rpc/bdev_rpc.c b/module/bdev/rpc/bdev_rpc.c index 53692d6a8..1d36cd96e 100644 --- a/module/bdev/rpc/bdev_rpc.c +++ b/module/bdev/rpc/bdev_rpc.c @@ -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 */ diff --git a/scripts/rpc.py b/scripts/rpc.py index 27af4c898..a28c3f59b 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -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, diff --git a/scripts/rpc/bdev.py b/scripts/rpc/bdev.py index 4b2883364..62c8c49cd 100644 --- a/scripts/rpc/bdev.py +++ b/scripts/rpc/bdev.py @@ -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') diff --git a/test/iscsi_tgt/qos/qos.sh b/test/iscsi_tgt/qos/qos.sh index ad4691421..816c6cac6 100755 --- a/test/iscsi_tgt/qos/qos.sh +++ b/test/iscsi_tgt/qos/qos.sh @@ -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