1 local metrics = {"auth.meta_load", "all.meta_load", "req_rate", "queue_len", "cpu_load_avg"}
3 -- Metric for balancing is the workload; also dumps metrics
4 local function mds_load()
5 for rank, mds in pairs(mds) do
6 local s = "MDS"..rank..": < "
7 for _, metric in ipairs(metrics) do
8 s = s..metric.."="..mds[metric].." "
10 mds.load = mds["all.meta_load"]
11 BAL_LOG(5, s.."> load="..mds.load)
15 -- Shed load when you have load and your neighbor doesn't
17 if not mds[whoami+1] then
19 BAL_LOG(5, "when: not migrating! I am the last rank, nothing to spill to.");
22 my_load = mds[whoami]["load"]
23 his_load = mds[whoami+1]["load"]
24 if my_load > 0.01 and his_load < 0.01 then
25 BAL_LOG(5, "when: migrating! my_load="..my_load.." hisload="..his_load)
28 BAL_LOG(5, "when: not migrating! my_load="..my_load.." hisload="..his_load)
32 -- Shed half your load to your neighbor
33 -- neighbor=whoami+2 because Lua tables are indexed starting at 1
34 local function where(targets)
35 targets[whoami+1] = mds[whoami]["load"]/2
40 for rank in pairs(mds) do