From 6556d96c92e397442bccf9d5117ce68a1defddcc Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Thu, 22 Apr 2021 16:43:59 +0300 Subject: [PATCH] EX-2853 lamigo: initial supoprt for DoM if src-dom option is specified, then lamigo will recognize files with DoM component as files stored on "fast" storage and consider them for replication. Test-Parameters: testlist=hot-pools Signed-off-by: Alex Zhuravlev Change-Id: I471c3eb82d133c1d967772cf959bed84cab63ff4 Reviewed-on: https://review.whamcloud.com/43407 Reviewed-by: Andreas Dilger Tested-by: jenkins Tested-by: Maloo Reviewed-by: John L. Hammond --- lipe/src/lamigo.c | 18 ++++++++++++++++-- lipe/src/lamigo.h | 1 + lustre/tests/hot-pools.sh | 29 +++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lipe/src/lamigo.c b/lipe/src/lamigo.c index 90fc2e2..9f50a1a 100644 --- a/lipe/src/lamigo.c +++ b/lipe/src/lamigo.c @@ -219,6 +219,7 @@ struct options opt = { .o_alr_ofd_interval = 0, .o_alr_hot_fraction = DEF_HOT_FRACTION, .o_alr_hot_after_idle = DEF_HOT_AFTER_IDLE, + .o_src_dom = 0, }; struct history { @@ -468,14 +469,15 @@ void lamigo_usr1_handle(int sig) " hot_fraction: %d\n" " hot_after_idle: %d\n" " src_free: %d\n" - " tgt_free: %d\n", + " tgt_free: %d\n" + " src_dom: %d\n", opt.o_tgt_pool, opt.o_min_age, opt.o_cache_size, opt.o_rescan, opt.o_num_threads, opt.o_pool_refresh, opt.o_progress_interval, opt.o_alr_periods, opt.o_alr_period_time, opt.o_alr_warmup_k, opt.o_alr_cooldown_k, opt.o_alr_ofd_interval, opt.o_alr_hot_fraction, opt.o_alr_hot_after_idle, - opt.o_src_free, opt.o_tgt_free); + opt.o_src_free, opt.o_tgt_free, opt.o_src_dom); for (pl = src_pools; pl != NULL; pl = pl->pl_next, i++) fprintf(f, "pool %s:\n" " osts: %d\n" @@ -956,6 +958,13 @@ static int lamigo_striping_is_in_sync(struct lov_user_md *lum, /* do not reset onsrc as any object matters */ } + if (opt.o_src_dom && v3->lmm_pattern == LOV_PATTERN_MDT) { + llapi_printf(LLAPI_MSG_DEBUG, + "DoM component"); + onsrc++; + continue; + } + rc = lamigo_get_objects(v3, &objects, &stripes); if (rc) { stats.s_skip_unknown++; @@ -1829,6 +1838,7 @@ static void lamigo_add_agent(const char *host, const char *mnt, char *jobs) #define LAMIGO_OPT_SRC_FREE 16 #define LAMIGO_OPT_TGT_FREE 17 #define LAMIGO_OPT_VERSION 18 +#define LAMIGO_OPT_SRC_DOM 19 static struct option options[] = { { "ignore-reads", no_argument, NULL, LAMIGO_OPT_IGNORE_READS}, @@ -1860,6 +1870,7 @@ static struct option options[] = { LAMIGO_OPT_PROGRESS_INTV }, { "rescan", no_argument, NULL, 'r'}, { "src", required_argument, NULL, 's'}, + { "src-dom", no_argument, NULL, LAMIGO_OPT_SRC_DOM}, { "src-free", required_argument, NULL, LAMIGO_OPT_SRC_FREE}, { "tgt-free", required_argument, NULL, LAMIGO_OPT_TGT_FREE}, { "statfs-refresh", required_argument, NULL, LAMIGO_OPT_STATFS_REFRESH }, @@ -2145,6 +2156,9 @@ void lamigo_process_opt(int c, char *optarg) exit(1); } break; + case LAMIGO_OPT_SRC_DOM: + opt.o_src_dom = 1; + break; case LAMIGO_OPT_TGT_FREE: opt.o_tgt_free = atoi(optarg); if (opt.o_tgt_free < 1 || opt.o_tgt_free > 99) { diff --git a/lipe/src/lamigo.h b/lipe/src/lamigo.h index bb7421e..87db237 100644 --- a/lipe/src/lamigo.h +++ b/lipe/src/lamigo.h @@ -99,6 +99,7 @@ struct options { int o_alr_large_io; int o_alr_ignore_reads; int o_alr_ignore_writes; + int o_src_dom; char *o_heat_file; }; extern struct options opt; diff --git a/lustre/tests/hot-pools.sh b/lustre/tests/hot-pools.sh index baea0a5..348abdb 100644 --- a/lustre/tests/hot-pools.sh +++ b/lustre/tests/hot-pools.sh @@ -247,6 +247,8 @@ start_one_lamigo_cmd() { ! $LAMIGO_RESCAN || cmd+=" -r" ! $LAMIGO_VERBOSE || cmd+=" -v" + cmd+=" $LAMIGO_EXTRA_OPT" + echo "Start lamigo on MDS $(facet_active_host $facet): $cmd" do_facet $facet "$cmd &> $(lamigo_logfile $facet)" & sleep 2 @@ -1748,6 +1750,33 @@ test_56() { } run_test 56 "lamigo and lpurge: replicate and purge" +test_58() { + local tf=$DIR/$tfile + + init_hot_pools_env + + # start lamigo + LAMIGO_EXTRA_OPT="--src-dom" start_lamigo_cmd + check_lamigo_is_started || error "failed to start lamigo" + stack_trap stop_lamigo_cmd + + stack_trap "rm -f $tf" + $LFS setstripe -E 1024K -L mdt -E EOF $tf + dd if=/dev/zero of=$tf bs=1M count=1 || error "can't dd" + cancel_lru_locks mdc + + sleep $((LAMIGO_AGE+10)) + for i in $(seq $MDSCOUNT); do + local facet=mds$i + local log_file=$(lamigo_logfile $facet) + echo "==== logfile for $facet ====" + do_facet $facet "cat $log_file" + + done + verify_mirror_count $tf 2 +} +run_test 58 "replicaste DoM files" + complete $SECONDS check_and_cleanup_lustre exit_status -- 1.8.3.1