Whamcloud - gitweb
LU-15366 nrs: increase maximum rate for tbf rule 38/45838/3
authorEtienne AUJAMES <etienne.aujames@cea.fr>
Mon, 13 Dec 2021 15:30:35 +0000 (16:30 +0100)
committerOleg Drokin <green@whamcloud.com>
Wed, 26 Jan 2022 05:16:17 +0000 (05:16 +0000)
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 <eaujames@ddn.com>
Change-Id: I91fd416b9d91bbb5d5674c66ec8ceb0d77a9f7e0
Reviewed-on: https://review.whamcloud.com/45838
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Yingjin Qian <qian@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/include/lustre_nrs_tbf.h
lustre/ptlrpc/nrs_tbf.c

index 32f959a..feffa4e 100644 (file)
@@ -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. */
index 2b819e7..50b983e 100644 (file)
@@ -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)