From: Jianpeng Ma Date: Sat, 28 Apr 2018 02:46:55 +0000 (+0800) Subject: osd: combine recovery/scrub/snap sleep timer into one. X-Git-Tag: v13.2.5~144^2~15^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=97410ca9c6815f55393a95aa9dc7145857ab58e8;p=ceph.git osd: combine recovery/scrub/snap sleep timer into one. One SafeTime on thread. And those events if timer don't take long time. Signed-off-by: Jianpeng Ma (cherry picked from commit 610d5196c0132739e1ae133db0c7d896063470ad) --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 71bf48820edf6..182f0e4314cc4 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -245,20 +245,14 @@ OSDService::OSDService(OSD *osd) : next_notif_id(0), recovery_request_lock("OSDService::recovery_request_lock"), recovery_request_timer(cct, recovery_request_lock, false), - recovery_sleep_lock("OSDService::recovery_sleep_lock"), - recovery_sleep_timer(cct, recovery_sleep_lock, false), + sleep_lock("OSDService::sleep_lock"), + sleep_timer(cct, sleep_lock, false), reserver_finisher(cct), local_reserver(cct, &reserver_finisher, cct->_conf->osd_max_backfills, cct->_conf->osd_min_recovery_priority), remote_reserver(cct, &reserver_finisher, cct->_conf->osd_max_backfills, cct->_conf->osd_min_recovery_priority), pg_temp_lock("OSDService::pg_temp_lock"), - snap_sleep_lock("OSDService::snap_sleep_lock"), - snap_sleep_timer( - osd->client_messenger->cct, snap_sleep_lock, false /* relax locking */), - scrub_sleep_lock("OSDService::scrub_sleep_lock"), - scrub_sleep_timer( - osd->client_messenger->cct, scrub_sleep_lock, false /* relax locking */), snap_reserver(cct, &reserver_finisher, cct->_conf->osd_max_trimming_pgs), recovery_lock("OSDService::recovery_lock"), @@ -377,8 +371,8 @@ void OSDService::start_shutdown() } { - Mutex::Locker l(recovery_sleep_lock); - recovery_sleep_timer.shutdown(); + Mutex::Locker l(sleep_lock); + sleep_timer.shutdown(); } } @@ -406,16 +400,6 @@ void OSDService::shutdown() recovery_request_timer.shutdown(); } - { - Mutex::Locker l(snap_sleep_lock); - snap_sleep_timer.shutdown(); - } - - { - Mutex::Locker l(scrub_sleep_lock); - scrub_sleep_timer.shutdown(); - } - osdmap = OSDMapRef(); next_osdmap = OSDMapRef(); } @@ -433,8 +417,6 @@ void OSDService::init() watch_timer.init(); agent_timer.init(); - snap_sleep_timer.init(); - scrub_sleep_timer.init(); agent_thread.create("osd_srv_agent"); @@ -2410,7 +2392,7 @@ int OSD::init() tick_timer.init(); tick_timer_without_osd_lock.init(); service.recovery_request_timer.init(); - service.recovery_sleep_timer.init(); + service.sleep_timer.init(); // mount. dout(2) << "init " << dev_path @@ -8697,14 +8679,14 @@ void OSD::do_recovery( */ float recovery_sleep = get_osd_recovery_sleep(); { - Mutex::Locker l(service.recovery_sleep_lock); + Mutex::Locker l(service.sleep_lock); if (recovery_sleep > 0 && service.recovery_needs_sleep) { PGRef pgref(pg); auto recovery_requeue_callback = new FunctionContext([this, pgref, queued, reserved_pushes](int r) { dout(20) << "do_recovery wake up at " << ceph_clock_now() << ", re-queuing recovery" << dendl; - Mutex::Locker l(service.recovery_sleep_lock); + Mutex::Locker l(service.sleep_lock); service.recovery_needs_sleep = false; service.queue_recovery_after_sleep(pgref.get(), queued, reserved_pushes); }); @@ -8716,7 +8698,7 @@ void OSD::do_recovery( service.recovery_schedule_time = ceph_clock_now(); } service.recovery_schedule_time += recovery_sleep; - service.recovery_sleep_timer.add_event_at(service.recovery_schedule_time, + service.sleep_timer.add_event_at(service.recovery_schedule_time, recovery_requeue_callback); dout(20) << "Recovery event scheduled at " << service.recovery_schedule_time << dendl; @@ -8726,7 +8708,7 @@ void OSD::do_recovery( { { - Mutex::Locker l(service.recovery_sleep_lock); + Mutex::Locker l(service.sleep_lock); service.recovery_needs_sleep = true; } diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 8b4aa0dba00f7..5e5a1d3be1e8e 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -700,8 +700,9 @@ public: bool recovery_needs_sleep = true; utime_t recovery_schedule_time = utime_t(); - Mutex recovery_sleep_lock; - SafeTimer recovery_sleep_timer; + // For recovery & scrub & snap + Mutex sleep_lock; + SafeTimer sleep_timer; // -- tids -- // for ops i issue @@ -735,12 +736,6 @@ public: void send_pg_created(pg_t pgid); - Mutex snap_sleep_lock; - SafeTimer snap_sleep_timer; - - Mutex scrub_sleep_lock; - SafeTimer scrub_sleep_timer; - AsyncReserver snap_reserver; void queue_recovery_context(PG *pg, GenContext *c); void queue_for_snap_trim(PG *pg); diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 1c765d3336761..65367dbe2816f 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -4734,8 +4734,8 @@ void PG::scrub(epoch_t queued, ThreadPool::TPHandle &handle) pg->scrubber.sleep_start = utime_t(); pg->unlock(); }); - Mutex::Locker l(osd->scrub_sleep_lock); - osd->scrub_sleep_timer.add_event_after(cct->_conf->osd_scrub_sleep, + Mutex::Locker l(osd->sleep_lock); + osd->sleep_timer.add_event_after(cct->_conf->osd_scrub_sleep, scrub_requeue_callback); scrubber.sleeping = true; scrubber.sleep_start = ceph_clock_now(); diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index 1d3737dfb56f9..615b23d612913 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1607,8 +1607,8 @@ private: }; auto *pg = context< SnapTrimmer >().pg; if (pg->cct->_conf->osd_snap_trim_sleep > 0) { - Mutex::Locker l(pg->osd->snap_sleep_lock); - wakeup = pg->osd->snap_sleep_timer.add_event_after( + Mutex::Locker l(pg->osd->sleep_lock); + wakeup = pg->osd->sleep_timer.add_event_after( pg->cct->_conf->osd_snap_trim_sleep, new OnTimer{pg, pg->get_osdmap()->get_epoch()}); } else { @@ -1619,8 +1619,8 @@ private: context< SnapTrimmer >().log_exit(state_name, enter_time); auto *pg = context< SnapTrimmer >().pg; if (wakeup) { - Mutex::Locker l(pg->osd->snap_sleep_lock); - pg->osd->snap_sleep_timer.cancel_event(wakeup); + Mutex::Locker l(pg->osd->sleep_lock); + pg->osd->sleep_timer.cancel_event(wakeup); wakeup = nullptr; } }