Skip to content

Commit 4a1c26b

Browse files
authored
Merge pull request ceph#54872 from amathuria/wip-amat-mclock-adjust-deletion-cost
osd: Change PG Deletion cost for mClock Reviewed-by: Samuel Just <[email protected]> Reviewed-by: Sridhar Seshasayee <[email protected]>
2 parents 80feaec + 56c681c commit 4a1c26b

File tree

5 files changed

+22
-22
lines changed

5 files changed

+22
-22
lines changed

src/osd/OSD.cc

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1879,14 +1879,21 @@ void OSDService::queue_scrub_next_chunk(PG *pg, Scrub::scrub_prio_t with_priorit
18791879
queue_scrub_event_msg<PGScrubGetNextChunk>(pg, with_priority);
18801880
}
18811881

1882-
void OSDService::queue_for_pg_delete(spg_t pgid, epoch_t e)
1882+
void OSDService::queue_for_pg_delete(spg_t pgid, epoch_t e, int64_t num_objects)
18831883
{
18841884
dout(10) << __func__ << " on " << pgid << " e " << e << dendl;
1885+
uint64_t cost_for_queue = [this, num_objects] {
1886+
if (op_queue_type_t::mClockScheduler == osd->osd_op_queue_type()) {
1887+
return num_objects * cct->_conf->osd_pg_delete_cost;
1888+
} else {
1889+
return cct->_conf->osd_pg_delete_cost;
1890+
}
1891+
}();
18851892
enqueue_back(
18861893
OpSchedulerItem(
18871894
unique_ptr<OpSchedulerItem::OpQueueable>(
18881895
new PGDelete(pgid, e)),
1889-
cct->_conf->osd_pg_delete_cost,
1896+
cost_for_queue,
18901897
cct->_conf->osd_pg_delete_priority,
18911898
ceph_clock_now(),
18921899
0,
@@ -4068,7 +4075,6 @@ int OSD::init()
40684075

40694076
// Override a few options if mclock scheduler is enabled.
40704077
maybe_override_sleep_options_for_qos();
4071-
maybe_override_cost_for_qos();
40724078
maybe_override_options_for_qos();
40734079
maybe_override_max_osd_capacity_for_qos();
40744080

@@ -9886,9 +9892,6 @@ void OSD::handle_conf_change(const ConfigProxy& conf,
98869892
changed.count("osd_recovery_sleep_hybrid")) {
98879893
maybe_override_sleep_options_for_qos();
98889894
}
9889-
if (changed.count("osd_pg_delete_cost")) {
9890-
maybe_override_cost_for_qos();
9891-
}
98929895
if (changed.count("osd_min_recovery_priority")) {
98939896
service.local_reserver.set_min_priority(cct->_conf->osd_min_recovery_priority);
98949897
service.remote_reserver.set_min_priority(cct->_conf->osd_min_recovery_priority);
@@ -10225,15 +10228,6 @@ void OSD::maybe_override_sleep_options_for_qos()
1022510228
}
1022610229
}
1022710230

10228-
void OSD::maybe_override_cost_for_qos()
10229-
{
10230-
// If the scheduler enabled is mclock, override the default PG deletion cost
10231-
// so that mclock can meet the QoS goals.
10232-
if (op_queue_type_t::mClockScheduler == osd_op_queue_type()) {
10233-
uint64_t pg_delete_cost = 15728640;
10234-
cct->_conf.set_val("osd_pg_delete_cost", std::to_string(pg_delete_cost));
10235-
}
10236-
}
1023710231

1023810232
/**
1023910233
* A context for receiving status from a background mon command to set

src/osd/OSD.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ class OSDService : public Scrub::ScrubSchedListener {
563563
unsigned int qu_priority,
564564
Scrub::act_token_t act_token);
565565

566-
void queue_for_pg_delete(spg_t pgid, epoch_t e);
566+
void queue_for_pg_delete(spg_t pgid, epoch_t e, int64_t num_objects);
567567
bool try_finish_pg_delete(PG *pg, unsigned old_pg_num);
568568

569569
private:
@@ -1994,7 +1994,6 @@ class OSD : public Dispatcher,
19941994
void maybe_override_sleep_options_for_qos();
19951995
bool maybe_override_options_for_qos(
19961996
const std::set<std::string> *changed = nullptr);
1997-
void maybe_override_cost_for_qos();
19981997
int run_osd_bench_test(int64_t count,
19991998
int64_t bsize,
20001999
int64_t osize,

src/osd/PG.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2665,7 +2665,8 @@ void PG::C_DeleteMore::complete(int r) {
26652665
ceph_assert(r == 0);
26662666
pg->lock();
26672667
if (!pg->pg_has_reset_since(epoch)) {
2668-
pg->osd->queue_for_pg_delete(pg->get_pgid(), epoch);
2668+
pg->osd->queue_for_pg_delete(pg->get_pgid(), epoch,
2669+
num_objects);
26692670
}
26702671
pg->unlock();
26712672
delete this;
@@ -2689,7 +2690,9 @@ std::pair<ghobject_t, bool> PG::do_delete_work(
26892690
std::scoped_lock locker{*this};
26902691
delete_needs_sleep = false;
26912692
if (!pg_has_reset_since(e)) {
2692-
osd->queue_for_pg_delete(get_pgid(), e);
2693+
// We pass 1 for num_objects here as only wpq uses this code path
2694+
// and it will be ignored
2695+
osd->queue_for_pg_delete(get_pgid(), e, 1);
26932696
}
26942697
});
26952698

@@ -2762,7 +2765,7 @@ std::pair<ghobject_t, bool> PG::do_delete_work(
27622765
bool running = true;
27632766
if (num) {
27642767
dout(20) << __func__ << " deleting " << num << " objects" << dendl;
2765-
Context *fin = new C_DeleteMore(this, get_osdmap_epoch());
2768+
Context *fin = new C_DeleteMore(this, get_osdmap_epoch(), num);
27662769
t.register_on_commit(fin);
27672770
} else {
27682771
if (cct->_conf->osd_inject_failure_on_pg_removal) {

src/osd/PG.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,7 +776,9 @@ class PG : public DoutPrefixProvider,
776776
struct C_DeleteMore : public Context {
777777
PGRef pg;
778778
epoch_t epoch;
779-
C_DeleteMore(PG *p, epoch_t e) : pg(p), epoch(e) {}
779+
int64_t num_objects;
780+
C_DeleteMore(PG *p, epoch_t e, int64_t num) : pg(p), epoch(e),
781+
num_objects(num){}
780782
void finish(int r) override {
781783
ceph_abort();
782784
}

src/osd/PrimaryLogPG.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12851,7 +12851,9 @@ void PrimaryLogPG::on_removal(ObjectStore::Transaction &t)
1285112851

1285212852
on_shutdown();
1285312853

12854-
t.register_on_commit(new C_DeleteMore(this, get_osdmap_epoch()));
12854+
// starting PG deletion, num_objects can be 1
12855+
// do_delete_work will update num_objects
12856+
t.register_on_commit(new C_DeleteMore(this, get_osdmap_epoch(), 1));
1285512857
}
1285612858

1285712859
void PrimaryLogPG::clear_async_reads()

0 commit comments

Comments
 (0)