From: Dan van der Ster Date: Fri, 26 Feb 2016 21:28:46 +0000 (+0100) Subject: osd: add mon_reweight_max_change option which limits reweight-by-* X-Git-Tag: v10.1.0~198^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6f0a1fb69da84ee18bdb9b151772cef8f32413c5;p=ceph.git osd: add mon_reweight_max_change option which limits reweight-by-* Add a configurable mon_reweight_max_change which limits be default the reweight-by-* commands to only change an OSDs weight by 0.05. Signed-off-by: Dan van der Ster --- diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 03d4c6abf008..525861bf4193 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -281,6 +281,7 @@ OPTION(mon_daemon_bytes, OPT_U64, 400ul << 20) // mds, osd message memory cap ( OPTION(mon_max_log_entries_per_event, OPT_INT, 4096) OPTION(mon_reweight_min_pgs_per_osd, OPT_U64, 10) // min pgs per osd for reweight-by-pg command OPTION(mon_reweight_min_bytes_per_osd, OPT_U64, 100*1024*1024) // min bytes per osd for reweight-by-utilization command +OPTION(mon_reweight_max_change, OPT_FLOAT, 0.05) // max change to each osd per reweight-by-* command OPTION(mon_health_data_update_interval, OPT_FLOAT, 60.0) OPTION(mon_health_to_clog, OPT_BOOL, true) OPTION(mon_health_to_clog_interval, OPT_INT, 3600) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 997b4aa72143..5d42c1757e5e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -586,6 +586,7 @@ int OSDMonitor::reweight_by_utilization(int oload, std::string& out_str, // to represent e.g. differing storage capacities unsigned weight = osdmap.get_weight(p->first); unsigned new_weight = (unsigned)((average_util / util) * (float)weight); + new_weight = MAX(new_weight, weight - g_conf->mon_reweight_max_change); if (sure) { pending_inc.new_weight[p->first] = new_weight; changed = true; @@ -600,8 +601,9 @@ int OSDMonitor::reweight_by_utilization(int oload, std::string& out_str, // assign a higher weight.. if we can. unsigned weight = osdmap.get_weight(p->first); unsigned new_weight = (unsigned)((average_util / util) * (float)weight); + new_weight = MIN(new_weight, weight + g_conf->mon_reweight_max_change); if (new_weight > 0x10000) - new_weight = 0x10000; + new_weight = 0x10000; if (new_weight > weight) { sep = ", "; if (sure) {