Commit 0fb11e08 authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: Improved copygc wait debugging

This just adds a line for how long copygc has been waiting to sysfs
copygc_wait, helpful for debugging why copygc isn't running.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 11f11737
...@@ -943,6 +943,7 @@ struct bch_fs { ...@@ -943,6 +943,7 @@ struct bch_fs {
/* COPYGC */ /* COPYGC */
struct task_struct *copygc_thread; struct task_struct *copygc_thread;
struct write_point copygc_write_point; struct write_point copygc_write_point;
s64 copygc_wait_at;
s64 copygc_wait; s64 copygc_wait;
bool copygc_running; bool copygc_running;
wait_queue_head_t copygc_running_wq; wait_queue_head_t copygc_running_wq;
......
...@@ -269,6 +269,12 @@ void bch2_copygc_wait_to_text(struct printbuf *out, struct bch_fs *c) ...@@ -269,6 +269,12 @@ void bch2_copygc_wait_to_text(struct printbuf *out, struct bch_fs *c)
atomic64_read(&c->io_clock[WRITE].now)) << 9); atomic64_read(&c->io_clock[WRITE].now)) << 9);
prt_newline(out); prt_newline(out);
prt_printf(out, "Currently waiting since: ");
prt_human_readable_u64(out, max(0LL,
atomic64_read(&c->io_clock[WRITE].now) -
c->copygc_wait_at) << 9);
prt_newline(out);
prt_printf(out, "Currently calculated wait: "); prt_printf(out, "Currently calculated wait: ");
prt_human_readable_u64(out, bch2_copygc_wait_amount(c)); prt_human_readable_u64(out, bch2_copygc_wait_amount(c));
prt_newline(out); prt_newline(out);
...@@ -317,9 +323,11 @@ static int bch2_copygc_thread(void *arg) ...@@ -317,9 +323,11 @@ static int bch2_copygc_thread(void *arg)
wait = bch2_copygc_wait_amount(c); wait = bch2_copygc_wait_amount(c);
if (wait > clock->max_slop) { if (wait > clock->max_slop) {
c->copygc_wait_at = last;
c->copygc_wait = last + wait;
move_buckets_wait(&trans, &ctxt, &move_buckets, 0, true); move_buckets_wait(&trans, &ctxt, &move_buckets, 0, true);
trace_and_count(c, copygc_wait, c, wait, last + wait); trace_and_count(c, copygc_wait, c, wait, last + wait);
c->copygc_wait = last + wait;
bch2_kthread_io_clock_wait(clock, last + wait, bch2_kthread_io_clock_wait(clock, last + wait,
MAX_SCHEDULE_TIMEOUT); MAX_SCHEDULE_TIMEOUT);
continue; continue;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment