SDSTOR-22783: priority scheduling with dual watermarks and cross-scan quota#436
Conversation
xiaoxichen
commented
Jun 17, 2026
- Sort eligible chunks by garbage ratio (desc) before submission so the most garbage-heavy chunks are always GC'd first
- Add gc_garbage_rate_threshold_low (default 30%) as a low watermark; chunks between the two watermarks consume at most half the quota
- Track m_pending_normal_gc_task_count in pdev_gc_actor to reflect tasks queued or running in m_gc_executor across scan cycles; previous code only capped submissions per scan, allowing unbounded queue growth
- scan_chunks_for_gc now skips a pdev entirely when already at quota, and derives low_tier_cap proportionally from remaining_capacity
- Add ADR docs/adr/gc-priority-scheduling.md
|
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## stable/v4.x #436 +/- ##
==============================================
Coverage ? 54.41%
==============================================
Files ? 36
Lines ? 5419
Branches ? 685
==============================================
Hits ? 2949
Misses ? 2164
Partials ? 306 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
| eligible.push_back({chunk_id, ratio_pct}); | ||
| } | ||
|
|
||
| // Sort eligible chunks by garbage ratio descending so the most garbage-heavy chunks are GC'd first. |
There was a problem hiding this comment.
this is a topK problem.
suggest to use a heap with a capacity of remaining_capacity (priority_queue), so that we can hold at most remaining_capacity ChunkGCInfo in memory. and for any new ChunkGCInfo, we only need to compare it with the top of the heap.
There was a problem hiding this comment.
IMO It doesnt worth those lines of code , considering the maximum chunk is 32K.
There was a problem hiding this comment.
better to have it since it is not complicated and will also make code more simple, for example, the loop on the entire chunk collection will not be involved.
|
@JacksonYao287 addressed |
Sort eligible chunks by garbage ratio using a bounded top-K min-heap (O(K) per pdev) so the most garbage-heavy chunks GC first. Add gc_garbage_rate_threshold_low (default 30%) as a low watermark; chunks between the two watermarks consume at most half the quota. Track m_pending_normal_gc_task_count across scan cycles to cap queued+running tasks (not just per-scan submissions); skip pdevs already at quota. Fix counter underflow by incrementing before m_gc_executor->add(), and fix quota leak by decrementing on the early-return path in process_gc_task. Add ADR docs/adr/gc-priority-scheduling.md. Signed-off-by: Xiaoxi Chen <xiaoxchen@ebay.com>