Whamcloud - gitweb
LU-9658 ptlrpc: Add QoS for uid and gid in NRS-TBF
[fs/lustre-release.git] / lustre / tests / sanityn.sh
index f6affcf..88e89a2 100755 (executable)
@@ -3547,6 +3547,57 @@ test_77j() {
 }
 run_test 77j "check TBF-OPCode NRS policy"
 
+test_id() {
+       local idstr="${1}id"
+       local policy="${idstr}={$2}"
+       local rate="rate=$3"
+
+       do_nodes $(comma_list $(osts_nodes)) \
+               lctl set_param jobid_var=procname_uid \
+                       ost.OSS.ost_io.nrs_policies="tbf\ ${idstr}" \
+                       ost.OSS.ost_io.nrs_tbf_rule="start\ ost_${idstr}\ ${policy}\ ${rate}"
+       [ $? -ne 0 ] && error "failed to set tbf ${idstr} policy"
+
+       nrs_write_read "runas $4"
+       tbf_verify $3 $3 "runas $4"
+
+       do_nodes $(comma_list $(osts_nodes)) \
+               lctl set_param ost.OSS.ost_io.nrs_tbf_rule="stop\ ost_${idstr}" \
+                       ost.OSS.ost_io.nrs_policies="fifo"
+
+       # sleep 3 seconds to wait the tbf policy stop completely,
+       # or the next test case is possible get -eagain when
+       # setting the tbf policy
+       sleep 3
+}
+
+test_77ja(){
+       if [ $(lustre_version_code ost1) -lt $(version_code 2.10.58) ]; then
+               skip "need ost version at least 2.10.58"
+               return 0
+       fi
+       test_id "u" "500" "5" "-u 500"
+       test_id "g" "500" "5" "-u 500 -g 500"
+}
+run_test 77ja "check TBF-UID/GID NRS policy"
+
+cleanup_77k()
+{
+       local rule_lists=$1
+       local old_nrs=$2
+
+       trap 0
+       for rule in $rule_lists; do
+               do_nodes $(comma_list $(osts_nodes)) \
+                       lctl set_param ost.OSS.ost_io.nrs_tbf_rule="stop\ $rule"
+       done
+
+       do_nodes $(comma_list $(osts_nodes)) \
+               lctl set_param ost.OSS.ost_io.nrs_policies="$old_nrs"
+
+       sleep 3
+}
+
 test_77k() {
        [[ $(lustre_version_code ost1) -ge $(version_code 2.9.53) ]] ||
                { skip "Need OST version at least 2.9.53"; return 0; }
@@ -3589,14 +3640,37 @@ test_77k() {
        tbf_verify 10 10 "$RUNAS"
        tbf_verify 20 10
 
+       trap "cleanup_77k \"ext_a ext_b\" \"fifo\"" EXIT
+
+       [[ $(lustre_version_code ost1) -ge $(version_code 2.10.58) ]] ||
+               { skip "Need OST version at least 2.10.58"; return 0; }
+
        do_nodes $(comma_list $(osts_nodes)) \
                lctl set_param ost.OSS.ost_io.nrs_tbf_rule="stop\ ext_a" \
                        ost.OSS.ost_io.nrs_tbf_rule="stop\ ext_b" \
-                       ost.OSS.ost_io.nrs_policies="fifo"
+                       ost.OSS.ost_io.nrs_tbf_rule="start\ ext_ug\ uid={500}\&gid={1000}\ rate=5"
+       nrs_write_read "runas -u 500 -g 1000"
+       tbf_verify 5 5 "runas -u 500 -g 1000"
 
-       sleep 3
-}
-run_test 77k "check the extended TBF policy with NID/JobID/OPCode expression"
+       do_nodes $(comma_list $(osts_nodes)) \
+               lctl set_param ost.OSS.ost_io.nrs_tbf_rule="stop\ ext_ug" \
+                       ost.OSS.ost_io.nrs_tbf_rule="start\ ext_uw\ uid={500}\&opcode={ost_write}\ rate=20" \
+                       ost.OSS.ost_io.nrs_tbf_rule="start\ ext_ur\ uid={500}\&opcode={ost_read}\ rate=10"
+
+       nrs_write_read "runas -u 500"
+       tbf_verify 20 10 "runas -u 500"
+
+       do_nodes $(comma_list $(osts_nodes)) \
+               lctl set_param ost.OSS.ost_io.nrs_tbf_rule="stop\ ext_uw" \
+                       ost.OSS.ost_io.nrs_tbf_rule="stop\ ext_ur" \
+                       ost.OSS.ost_io.nrs_tbf_rule="start\ ext_a\ uid={500},opcode={ost_write}\ rate=20" \
+                       ost.OSS.ost_io.nrs_tbf_rule="start\ ext_b\ uid={500},opcode={ost_read}\ rate=10"
+       nrs_write_read "runas -u 500"
+       tbf_verify 10 10 "runas -u 500"
+       tbf_verify 20 10 "runas -u 500"
+       cleanup_77k "ext_a ext_b" "fifo"
+}
+run_test 77k "check TBF policy with NID/JobID/OPCode expression"
 
 test_77l() {
        [[ $(lustre_version_code ost1) -ge $(version_code 2.10.56) ]] ||