From 5663a852321f2a7a1439fa0e0d4e7d1cd4199498 Mon Sep 17 00:00:00 2001 From: Etienne AUJAMES Date: Mon, 13 Dec 2021 16:30:35 +0100 Subject: [PATCH] LU-15366 nrs: increase maximum rate for tbf rule The maximum rpc rate for a tbf rule is 65535. This value could be problematic for cluster with a large number of clients. This patch uniformizes the usage of __u64 to store a rpc rate. And changes the maximum rate for a tbf rule to 1000000 (1 rpc/us) Signed-off-by: Etienne AUJAMES Change-Id: I91fd416b9d91bbb5d5674c66ec8ceb0d77a9f7e0 Reviewed-on: https://review.whamcloud.com/45838 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Yingjin Qian Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/include/lustre_nrs_tbf.h | 4 ++-- lustre/ptlrpc/nrs_tbf.c | 22 ++++++++++------------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/lustre/include/lustre_nrs_tbf.h b/lustre/include/lustre_nrs_tbf.h index 32f959a..feffa4e 100644 --- a/lustre/include/lustre_nrs_tbf.h +++ b/lustre/include/lustre_nrs_tbf.h @@ -102,7 +102,7 @@ struct nrs_tbf_client { /** Generation of the rule matched. */ __u64 tc_rule_generation; /** Limit of RPC rate. */ - u32 tc_rpc_rate; + __u64 tc_rpc_rate; /** Time to wait for next token. */ __u64 tc_nsecs; /** RPC token number. */ @@ -169,7 +169,7 @@ struct nrs_tbf_rule { /** Generic condition string of the rule. */ char *tr_conds_str; /** RPC/s limit. */ - u32 tr_rpc_rate; + __u64 tr_rpc_rate; /** Time to wait for next token. */ u64 tr_nsecs_per_rpc; /** Token bucket depth. */ diff --git a/lustre/ptlrpc/nrs_tbf.c b/lustre/ptlrpc/nrs_tbf.c index 2b819e7..50b983e 100644 --- a/lustre/ptlrpc/nrs_tbf.c +++ b/lustre/ptlrpc/nrs_tbf.c @@ -347,7 +347,7 @@ nrs_tbf_rule_start(struct ptlrpc_nrs_policy *policy, head->th_rule = rule; } - CDEBUG(D_RPCTRACE, "TBF starts rule@%p rate %u gen %llu\n", + CDEBUG(D_RPCTRACE, "TBF starts rule@%p rate %llu gen %llu\n", rule, rule->tr_rpc_rate, rule->tr_generation); return 0; @@ -999,7 +999,7 @@ static int nrs_tbf_jobid_rule_init(struct ptlrpc_nrs_policy *policy, static int nrs_tbf_jobid_rule_dump(struct nrs_tbf_rule *rule, struct seq_file *m) { - seq_printf(m, "%s {%s} %u, ref %d\n", rule->tr_name, + seq_printf(m, "%s {%s} %llu, ref %d\n", rule->tr_name, rule->tr_jobids_str, rule->tr_rpc_rate, atomic_read(&rule->tr_ref) - 1); return 0; @@ -1204,7 +1204,7 @@ static int nrs_tbf_nid_rule_init(struct ptlrpc_nrs_policy *policy, static int nrs_tbf_nid_rule_dump(struct nrs_tbf_rule *rule, struct seq_file *m) { - seq_printf(m, "%s {%s} %u, ref %d\n", rule->tr_name, + seq_printf(m, "%s {%s} %llu, ref %d\n", rule->tr_name, rule->tr_nids_str, rule->tr_rpc_rate, atomic_read(&rule->tr_ref) - 1); return 0; @@ -2058,7 +2058,7 @@ nrs_tbf_rule_init(struct ptlrpc_nrs_policy *policy, static int nrs_tbf_generic_rule_dump(struct nrs_tbf_rule *rule, struct seq_file *m) { - seq_printf(m, "%s %s %u, ref %d\n", rule->tr_name, + seq_printf(m, "%s %s %llu, ref %d\n", rule->tr_name, rule->tr_conds_str, rule->tr_rpc_rate, atomic_read(&rule->tr_ref) - 1); return 0; @@ -2348,7 +2348,7 @@ static int nrs_tbf_opcode_rule_init(struct ptlrpc_nrs_policy *policy, static int nrs_tbf_opcode_rule_dump(struct nrs_tbf_rule *rule, struct seq_file *m) { - seq_printf(m, "%s {%s} %u, ref %d\n", rule->tr_name, + seq_printf(m, "%s {%s} %llu, ref %d\n", rule->tr_name, rule->tr_opcodes_str, rule->tr_rpc_rate, atomic_read(&rule->tr_ref) - 1); return 0; @@ -2663,7 +2663,7 @@ nrs_tbf_id_rule_init(struct ptlrpc_nrs_policy *policy, static int nrs_tbf_id_rule_dump(struct nrs_tbf_rule *rule, struct seq_file *m) { - seq_printf(m, "%s {%s} %u, ref %d\n", rule->tr_name, + seq_printf(m, "%s {%s} %llu, ref %d\n", rule->tr_name, rule->tr_ids_str, rule->tr_rpc_rate, atomic_read(&rule->tr_ref) - 1); return 0; @@ -2954,7 +2954,7 @@ static int nrs_tbf_res_get(struct ptlrpc_nrs_policy *policy, struct nrs_tbf_rule *rule; CDEBUG(D_RPCTRACE, - "TBF class@%p rate %u sequence %d, " + "TBF class@%p rate %llu sequence %d, " "rule flags %d, head sequence %d\n", cli, cli->tc_rpc_rate, cli->tc_rule_sequence, @@ -3110,8 +3110,7 @@ struct ptlrpc_nrs_request *nrs_tbf_req_get(struct ptlrpc_nrs_policy *policy, &cli->tc_node); } CDEBUG(D_RPCTRACE, - "TBF dequeues: class@%p rate %u gen %llu " - "token %llu, rule@%p rate %u gen %llu\n", + "TBF dequeues: class@%p rate %llu gen %llu token %llu, rule@%p rate %llu gen %llu\n", cli, cli->tc_rpc_rate, cli->tc_rule_generation, cli->tc_ntoken, cli->tc_rule, cli->tc_rule->tr_rpc_rate, @@ -3193,8 +3192,7 @@ static int nrs_tbf_req_add(struct ptlrpc_nrs_policy *policy, if (rc == 0) CDEBUG(D_RPCTRACE, - "TBF enqueues: class@%p rate %u gen %llu " - "token %llu, rule@%p rate %u gen %llu\n", + "TBF enqueues: class@%p rate %llu gen %llu token %llu, rule@%p rate %llu gen %llu\n", cli, cli->tc_rpc_rate, cli->tc_rule_generation, cli->tc_ntoken, cli->tc_rule, cli->tc_rule->tr_rpc_rate, @@ -3264,7 +3262,7 @@ static void nrs_tbf_req_stop(struct ptlrpc_nrs_policy *policy, /** * The maximum RPC rate. */ -#define LPROCFS_NRS_RATE_MAX 65535 +#define LPROCFS_NRS_RATE_MAX 1000000ULL /* 1rpc/us */ static int ptlrpc_lprocfs_nrs_tbf_rule_seq_show(struct seq_file *m, void *data) -- 1.8.3.1