From: Patrick Donnelly Date: Sat, 16 Feb 2019 22:33:20 +0000 (-0800) Subject: mds: drive log flush and cache trim during recall X-Git-Tag: v12.2.13~224^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=720bf868029d5592d9ed04d16fd453be757a369a;p=ceph.git mds: drive log flush and cache trim during recall While waiting for clients to release caps, get to work flushing the journal and trimming the cache during free time. Both are throttled so it's good to get to work on this ASAP. Signed-off-by: Patrick Donnelly (cherry picked from commit 57e413e87a85aceff78a1f69b6c0396fc524d98e) Conflicts: src/mds/MDSRank.cc --- diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 62518ae83dc..dbc5a7ad861 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -316,6 +316,17 @@ private: Context *timer_task = nullptr; }; + std::pair do_trim() { + auto p = mdcache->trim(UINT64_MAX); + auto& throttled = p.first; + auto& count = p.second; + dout(10) << __func__ + << (throttled ? " (throttled)" : "") + << " trimmed " << count << " caps" << dendl; + dentries_trimmed += count; + return std::make_pair(throttled, count); + } + void recall_client_state() { dout(20) << __func__ << dendl; auto now = mono_clock::now(); @@ -338,6 +349,8 @@ private: ctx->start_timer(); gather->set_finisher(new MDSInternalContextWrapper(mds, ctx)); gather->activate(); + mdlog->flush(); /* use down-time to incrementally flush log */ + do_trim(); /* use down-time to incrementally trim cache */ } else { if (!gather->has_subs()) { delete gather; @@ -406,13 +419,9 @@ private: void trim_cache() { dout(20) << __func__ << dendl; - auto p = mdcache->trim(UINT64_MAX); + auto p = do_trim(); auto& throttled = p.first; auto& count = p.second; - dout(10) << __func__ - << (throttled ? " (throttled)" : "") - << " trimmed " << count << " caps" << dendl; - dentries_trimmed += count; if (throttled && count > 0) { auto timer = new FunctionContext([this](int _) { trim_cache();