From 645f3e9082f7fba26d649e7ecb8ea74a071633a3 Mon Sep 17 00:00:00 2001 From: Jianpeng Ma Date: Fri, 11 Sep 2015 16:02:31 +0800 Subject: [PATCH] mds: For journal, set write iohint flags. For rank, if there is a standby replay rank, we don't use fadvise_dontneed for write ops. Except this case, we use fadvise_dontneed for write ops. Signed-off-by: Jianpeng Ma --- src/mds/MDLog.cc | 5 +++++ src/mds/MDLog.h | 2 +- src/mds/MDSRank.cc | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 696846980f4d1..396170ef7ae50 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -80,6 +80,11 @@ void MDLog::create_logger() g_ceph_context->get_perfcounters_collection()->add(logger); } +void MDLog::set_write_iohint(unsigned iohint_flags) +{ + journaler->set_write_iohint(iohint_flags); +} + class C_MDL_WriteError : public MDSIOContextBase { protected: MDLog *mdlog; diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index c7d42bc999a30..c8f9e70f4c282 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -179,7 +179,7 @@ public: // replay state map > pending_exports; - + void set_write_iohint(unsigned iohint_flags); public: MDLog(MDSRank *m) : mds(m), diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 715bf832ec030..fe4643f6b3bdc 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -1588,6 +1588,25 @@ void MDSRankDispatcher::handle_mds_map( set_osd_epoch_barrier(osd_epoch); } + if (is_active()) { + bool found = false; + MDSMap::mds_info_t info = mdsmap->get_info(whoami); + + for (map::const_iterator p = mdsmap->get_mds_info().begin(); + p != mdsmap->get_mds_info().end(); + ++p) { + if (p->second.state == MDSMap::STATE_STANDBY_REPLAY && + (p->second.standby_for_rank == whoami ||(info.name.length() && p->second.standby_for_name == info.name))) { + found = true; + break; + } + if (found) + mdlog->set_write_iohint(0); + else + mdlog->set_write_iohint(CEPH_OSD_OP_FLAG_FADVISE_DONTNEED); + } + } + mdcache->notify_mdsmap_changed(); } -- 2.39.5