From: Mohit Agrawal Date: Mon, 28 Jul 2025 13:19:14 +0000 (+0530) Subject: crimson/background_recovery: switch to unified SchedulerClass and introduce get_avera... X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0395f84eb64a7f01458716c5fb1ee50dff3e476b;p=ceph.git crimson/background_recovery: switch to unified SchedulerClass and introduce get_average_object_size for pg 1) Replace usage of crimson::osd::scheduler::scheduler_class_t with unified SchedulerClass 2) Add priority to scheduler params structure 3) Introduce get_average_object_size for pg Signed-off-by: Mohit Agrawal --- diff --git a/src/crimson/osd/osd_operations/background_recovery.cc b/src/crimson/osd/osd_operations/background_recovery.cc index d835e540fa2..8d5f3a67787 100644 --- a/src/crimson/osd/osd_operations/background_recovery.cc +++ b/src/crimson/osd/osd_operations/background_recovery.cc @@ -37,7 +37,7 @@ BackgroundRecoveryT::BackgroundRecoveryT( Ref pg, ShardServices &ss, epoch_t epoch_started, - crimson::osd::scheduler::scheduler_class_t scheduler_class, + SchedulerClass scheduler_class, float delay) : pg(pg), epoch_started(epoch_started), @@ -94,7 +94,7 @@ UrgentRecovery::UrgentRecovery( ShardServices& ss, epoch_t epoch_started) : BackgroundRecoveryT{pg, ss, epoch_started, - crimson::osd::scheduler::scheduler_class_t::immediate}, + SchedulerClass::immediate}, soid{soid}, need(need) { } @@ -147,7 +147,7 @@ PglogBasedRecovery::PglogBasedRecovery( std::move(pg), ss, epoch_started, - crimson::osd::scheduler::scheduler_class_t::background_recovery, + SchedulerClass::background_recovery, delay) {} diff --git a/src/crimson/osd/osd_operations/background_recovery.h b/src/crimson/osd/osd_operations/background_recovery.h index edfa11b660c..fb624ca69d0 100644 --- a/src/crimson/osd/osd_operations/background_recovery.h +++ b/src/crimson/osd/osd_operations/background_recovery.h @@ -25,7 +25,7 @@ public: Ref pg, ShardServices &ss, epoch_t epoch_started, - crimson::osd::scheduler::scheduler_class_t scheduler_class, float delay = 0); + SchedulerClass scheduler_class, float delay = 0); virtual void print(std::ostream &) const; seastar::future<> start(); @@ -38,8 +38,12 @@ protected: private: virtual void dump_detail(Formatter *f) const; crimson::osd::scheduler::params_t get_scheduler_params() const { + int cost = static_cast(std::max(1, pg->get_average_object_size())); + unsigned priority = pg->get_recovery_op_priority(); + return { - 1, // cost + cost, // cost + priority, // priority 0, // owner scheduler_class }; @@ -47,7 +51,7 @@ private: using do_recovery_ret_t = typename PhasedOperationT::template interruptible_future; virtual do_recovery_ret_t do_recovery() = 0; ShardServices &ss; - const crimson::osd::scheduler::scheduler_class_t scheduler_class; + const SchedulerClass scheduler_class; }; /// represent a recovery initiated for serving a client request diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index b13299f94a1..c840648975d 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -936,9 +936,17 @@ public: int *return_code, std::vector *op_returns) const; int get_recovery_op_priority() const { - int64_t pri = 0; - get_pgpool().info.opts.get(pool_opts_t::RECOVERY_OP_PRIORITY, &pri); - return pri > 0 ? pri : crimson::common::local_conf()->osd_recovery_op_priority; + return peering_state.get_recovery_op_priority(); + } + int64_t get_average_object_size() { + const auto& stats = get_info().stats.stats.sum; + auto num_objects = stats.num_objects; + auto num_bytes = stats.num_bytes; + + if (num_objects <= 0) + return 0; + + return num_bytes / num_objects; } seastar::future<> mark_unfound_lost(int) { // TODO: see PrimaryLogPG::mark_all_unfound_lost() diff --git a/src/crimson/osd/pg_recovery.cc b/src/crimson/osd/pg_recovery.cc index eb120c9588d..48d12d6c92e 100644 --- a/src/crimson/osd/pg_recovery.cc +++ b/src/crimson/osd/pg_recovery.cc @@ -519,7 +519,7 @@ PGRecovery::recover_object_with_throttle( auto releaser = co_await interruptor::make_interruptible( pg->get_shard_services().get_throttle( crimson::osd::scheduler::params_t{ - 1, 0, crimson::osd::scheduler::scheduler_class_t::background_best_effort + 1, 0, 0, SchedulerClass::background_best_effort })); DEBUGDPP("got throttle: {} {}", pg->get_dpp(), soid, need); co_await pg->get_recovery_backend()->recover_object(soid, need);