Skip to content

Commit 34bed3e

Browse files
committed
osd: Change PG Deletion cost for mClock
With the osd_delete_sleep_ssd and osd_delete_sleep_hdd options disabled with mClock, it was noticed that PG deletion was completing much faster with mClock scheduler. In order to give mClock a more accurate cost of the PG Deletion operation, we calculate it by taking into consideration how many objects are being deleted. Signed-off-by: Aishwarya Mathuria <[email protected]>
1 parent 000188f commit 34bed3e

File tree

5 files changed

+23
-9
lines changed

5 files changed

+23
-9
lines changed

src/osd/OSD.cc

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1875,14 +1875,21 @@ void OSDService::queue_scrub_next_chunk(PG *pg, Scrub::scrub_prio_t with_priorit
18751875
queue_scrub_event_msg<PGScrubGetNextChunk>(pg, with_priority);
18761876
}
18771877

1878-
void OSDService::queue_for_pg_delete(spg_t pgid, epoch_t e)
1878+
void OSDService::queue_for_pg_delete(spg_t pgid, epoch_t e, int64_t num_objects)
18791879
{
18801880
dout(10) << __func__ << " on " << pgid << " e " << e << dendl;
1881+
uint64_t cost_for_queue = [this, num_objects] {
1882+
if (op_queue_type_t::mClockScheduler == osd->osd_op_queue_type()) {
1883+
return num_objects * cct->_conf->osd_pg_delete_cost;
1884+
} else {
1885+
return cct->_conf->osd_pg_delete_cost;
1886+
}
1887+
}();
18811888
enqueue_back(
18821889
OpSchedulerItem(
18831890
unique_ptr<OpSchedulerItem::OpQueueable>(
18841891
new PGDelete(pgid, e)),
1885-
cct->_conf->osd_pg_delete_cost,
1892+
cost_for_queue,
18861893
cct->_conf->osd_pg_delete_priority,
18871894
ceph_clock_now(),
18881895
0,
@@ -10220,7 +10227,7 @@ void OSD::maybe_override_cost_for_qos()
1022010227
// If the scheduler enabled is mclock, override the default PG deletion cost
1022110228
// so that mclock can meet the QoS goals.
1022210229
if (op_queue_type_t::mClockScheduler == osd_op_queue_type()) {
10223-
uint64_t pg_delete_cost = 15728640;
10230+
uint64_t pg_delete_cost = 1048576;
1022410231
cct->_conf.set_val("osd_pg_delete_cost", std::to_string(pg_delete_cost));
1022510232
}
1022610233
}

src/osd/OSD.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ class OSDService : public Scrub::ScrubSchedListener {
553553
unsigned int qu_priority,
554554
Scrub::act_token_t act_token);
555555

556-
void queue_for_pg_delete(spg_t pgid, epoch_t e);
556+
void queue_for_pg_delete(spg_t pgid, epoch_t e, int64_t num_objects);
557557
bool try_finish_pg_delete(PG *pg, unsigned old_pg_num);
558558

559559
private:

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
@@ -12849,7 +12849,9 @@ void PrimaryLogPG::on_removal(ObjectStore::Transaction &t)
1284912849

1285012850
on_shutdown();
1285112851

12852-
t.register_on_commit(new C_DeleteMore(this, get_osdmap_epoch()));
12852+
// starting PG deletion, num_objects can be 1
12853+
// do_delete_work will update num_objects
12854+
t.register_on_commit(new C_DeleteMore(this, get_osdmap_epoch(), 1));
1285312855
}
1285412856

1285512857
void PrimaryLogPG::clear_async_reads()

0 commit comments

Comments
 (0)