Whamcloud - gitweb
LU-15011 lod: count all spilling events 47/44947/4
authorAndreas Dilger <adilger@whamcloud.com>
Wed, 15 Sep 2021 23:30:23 +0000 (17:30 -0600)
committerAndreas Dilger <adilger@whamcloud.com>
Sat, 18 Sep 2021 06:34:48 +0000 (06:34 +0000)
when target pool is used to as the original has no enough space.
lctl lod.*.pool.<poolname>.spill_hit can be used to get the counter.

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: I6d54a2b910705da182b5f4118e535d196cdab004

lustre/lod/lod_internal.h
lustre/lod/lod_pool.c
lustre/lod/lproc_lod.c
lustre/tests/ost-pools.sh

index bd050bd..fe421bb 100644 (file)
@@ -67,6 +67,7 @@ struct pool_desc {
        struct proc_dir_entry   *pool_spill_proc_entry;
        bool                     pool_spill_is_active;
        unsigned int             pool_spill_threshold_pct;
+       atomic_t                 pool_spill_hit;
        char                     pool_spill_target[LOV_MAXPOOLNAME + 1];
 };
 
index 18bb313..18cde74 100644 (file)
@@ -410,6 +410,7 @@ int lod_pool_new(struct obd_device *obd, char *poolname)
        new_pool->pool_spill_is_active = false;
        new_pool->pool_spill_threshold_pct = 0;
        new_pool->pool_spill_target[0] = '\0';
+       atomic_set(&new_pool->pool_spill_hit, 0);
        new_pool->pool_lobd = obd;
        atomic_set(&new_pool->pool_refcount, 1);
        rc = lu_tgt_pool_init(&new_pool->pool_obds, 0);
@@ -798,6 +799,7 @@ repeat:
                              lod2obd(lod)->obd_name, LOD_SPILL_MAX,
                              *poolname, pool->pool_spill_target);
                lod_set_pool(poolname, pool->pool_spill_target);
+               atomic_inc(&pool->pool_spill_hit);
                lod_pool_putref(pool);
                if (replaced >= LOD_SPILL_MAX)
                        return;
index 6949eb9..77d066b 100644 (file)
@@ -1145,6 +1145,16 @@ static int lod_spill_is_active_seq_show(struct seq_file *m, void *v)
 }
 LPROC_SEQ_FOPS_RO(lod_spill_is_active);
 
+static int lod_spill_hit_seq_show(struct seq_file *m, void *v)
+{
+       struct pool_desc  *pool = m->private;
+
+       LASSERT(pool != NULL);
+       seq_printf(m, "%d\n", atomic_read(&pool->pool_spill_hit));
+       return 0;
+}
+LPROC_SEQ_FOPS_RO(lod_spill_hit);
+
 struct lprocfs_vars lprocfs_lod_spill_vars[] = {
        { .name =       "spill_threshold_pct",
          .fops =       &lod_spill_threshold_pct_fops },
@@ -1152,6 +1162,8 @@ struct lprocfs_vars lprocfs_lod_spill_vars[] = {
          .fops =       &lod_spill_target_fops },
        { .name =       "spill_is_active",
          .fops =       &lod_spill_is_active_fops },
+       { .name =       "spill_hit",
+         .fops =       &lod_spill_hit_fops },
        { NULL }
 };
 
index 5c910e3..00204d9 100755 (executable)
@@ -1612,17 +1612,18 @@ function fill_ost_pool() {
 test_29() {
        local pool1=${TESTNAME}-1
        local pool2=${TESTNAME}-2
-       local mdts=$(comma_list $(mdts_nodes))
        local threshold=10
-       local prefix="lod.$FSNAME-MDT*.pool.$pool1"
+       local prefix="lod.$FSNAME-MDT0000*.pool.$pool1"
        local cmd="$LCTL get_param -n $prefix"
+       local before
+       local after
 
        (( $MDS1_VERSION >= $(version_code 2.14.53) )) ||
                skip "Need MDS version at least 2.14.53"
        (( $OSTCOUNT >= 4 )) || skip "needs >= 4 OSTs"
        check_set_fallocate_or_skip
 
-       mkdir -p $DIR/$tdir
+       mkdir_on_mdt0 $DIR/$tdir
        stack_trap "rm -rf $DIR/$tdir"
 
        pool_add $pool1 || error "Pool creation failed"
@@ -1631,14 +1632,15 @@ test_29() {
        pool_add $pool2 || error "Pool creation failed"
        pool_add_targets $pool2 2 3 || error "pool_add_targets failed"
 
-       do_nodes $mdts $LCTL set_param $prefix.spill_target=$pool2
-       do_nodes $mdts $LCTL set_param $prefix.spill_threshold_pct=$threshold
-       stack_trap "do_nodes $mdts $LCTL set_param $prefix.spill_threshold_pct=0"
+       do_facet mds1 $LCTL set_param $prefix.spill_target=$pool2
+       do_facet mds1 $LCTL set_param $prefix.spill_threshold_pct=$threshold
+       stack_trap "do_facet mds1 $LCTL set_param $prefix.spill_threshold_pct=0"
 
-       [[ $(do_facet mds1 "$cmd.spill_target" | uniq) == "$pool2" ]] ||
+       [[ $(do_facet mds1 "$cmd.spill_target") == "$pool2" ]] ||
                error "spill target wasn't set"
-       [[ $(do_facet mds1 "$cmd.spill_threshold_pct" | uniq) == "$threshold" ]] ||
+       [[ $(do_facet mds1 "$cmd.spill_threshold_pct") == "$threshold" ]] ||
                error "spill threshold wasn't set"
+       before=$(do_facet mds1 "$cmd.spill_hit")
        lfs_df -p $pool1 | grep summary
        fill_ost_pool $pool1 $threshold
        cancel_lru_locks osc
@@ -1654,6 +1656,9 @@ test_29() {
                $LFS getstripe $DIR/$tdir/$tfile-2
                error "old pool on $tfile-2"
        }
+       after=$(do_facet mds1 "$cmd.spill_hit")
+       (( after == before + 1 )) || error "after $after != before $before + 1"
+
        # when striping is specified explicitly
        $LFS setstripe -p $pool1 $DIR/$tdir/$tfile-3 || error "can't setstripe"
        touch $DIR/$tdir/$tfile-3
@@ -1661,9 +1666,11 @@ test_29() {
                $LFS getstripe $DIR/$tdir/$tfile-2
                error "old pool on $tfile-3"
        }
+       after=$(do_facet mds1 "$cmd.spill_hit")
+       (( after == before + 2 )) || error "after $after != before $before + 2"
 
        # spill is revalidated at object creation
-       wait_update_facet mds1 "$cmd.spill_is_active | uniq" "1" ||
+       wait_update_facet mds1 "$cmd.spill_is_active" "1" ||
                error "spilling is still inactive"
 
        rm -f $DIR/$tdir/$tfile* || error "can't rm $DIR/$tfile*"
@@ -1677,11 +1684,11 @@ test_29() {
                error "new pool != $pool1"
        }
        # spill is revaluated at object creation
-       wait_update_facet mds1 "$cmd.spill_is_active | uniq" "0" ||
+       wait_update_facet mds1 "$cmd.spill_is_active" "0" ||
                error "spilling is still active"
 
-       do_nodes $mdts $LCTL set_param $prefix.spill_threshold_pct=0
-       [[ $(do_facet mds1 "$cmd.spill_threshold_pct" | uniq) == "0" ]] ||
+       do_facet mds1 "$LCTL set_param $prefix.spill_threshold_pct=0"
+       [[ $(do_facet mds1 "$cmd.spill_threshold_pct") == "0" ]] ||
                error "spill threshold wasn't reset"
 }
 run_test 29 "check OST pool spilling"