mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
bcachefs: Improve bucket_alloc_fail tracepoint
We should be printing the number of free buckets, not just the number of available buckets. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
f501ad2b81
commit
8ef9831399
3 changed files with 38 additions and 7 deletions
|
@ -26,6 +26,7 @@
|
|||
#include "error.h"
|
||||
#include "io.h"
|
||||
#include "journal.h"
|
||||
#include "movinggc.h"
|
||||
#include "trace.h"
|
||||
|
||||
#include <linux/math64.h>
|
||||
|
@ -526,7 +527,7 @@ static struct open_bucket *bch2_bucket_alloc_trans(struct btree_trans *trans,
|
|||
bool waiting = false;
|
||||
again:
|
||||
usage = bch2_dev_usage_read(ca);
|
||||
avail = dev_buckets_free(ca, usage,reserve);
|
||||
avail = dev_buckets_free(ca, usage, reserve);
|
||||
|
||||
if (usage.d[BCH_DATA_need_discard].buckets > avail)
|
||||
bch2_do_discards(c);
|
||||
|
@ -581,14 +582,22 @@ static struct open_bucket *bch2_bucket_alloc_trans(struct btree_trans *trans,
|
|||
ob = ERR_PTR(-FREELIST_EMPTY);
|
||||
|
||||
if (!IS_ERR(ob)) {
|
||||
trace_bucket_alloc(ca, bch2_alloc_reserves[reserve], avail,
|
||||
trace_bucket_alloc(ca, bch2_alloc_reserves[reserve],
|
||||
usage.d[BCH_DATA_free].buckets,
|
||||
avail,
|
||||
bch2_copygc_wait_amount(c),
|
||||
c->copygc_wait - atomic64_read(&c->io_clock[WRITE].now),
|
||||
buckets_seen,
|
||||
skipped_open,
|
||||
skipped_need_journal_commit,
|
||||
skipped_nouse,
|
||||
cl == NULL, PTR_ERR_OR_ZERO(ob));
|
||||
} else {
|
||||
trace_bucket_alloc_fail(ca, bch2_alloc_reserves[reserve], avail,
|
||||
trace_bucket_alloc_fail(ca, bch2_alloc_reserves[reserve],
|
||||
usage.d[BCH_DATA_free].buckets,
|
||||
avail,
|
||||
bch2_copygc_wait_amount(c),
|
||||
c->copygc_wait - atomic64_read(&c->io_clock[WRITE].now),
|
||||
buckets_seen,
|
||||
skipped_open,
|
||||
skipped_need_journal_commit,
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#ifndef _BCACHEFS_MOVINGGC_H
|
||||
#define _BCACHEFS_MOVINGGC_H
|
||||
|
||||
unsigned long bch2_copygc_wait_amount(struct bch_fs *);
|
||||
void bch2_copygc_stop(struct bch_fs *);
|
||||
int bch2_copygc_start(struct bch_fs *);
|
||||
void bch2_fs_copygc_init(struct bch_fs *);
|
||||
|
|
|
@ -440,19 +440,26 @@ DEFINE_EVENT(bch_fs, gc_gens_end,
|
|||
|
||||
DECLARE_EVENT_CLASS(bucket_alloc,
|
||||
TP_PROTO(struct bch_dev *ca, const char *alloc_reserve,
|
||||
u64 free,
|
||||
u64 avail,
|
||||
u64 copygc_wait_amount,
|
||||
s64 copygc_waiting_for,
|
||||
u64 seen,
|
||||
u64 open,
|
||||
u64 need_journal_commit,
|
||||
u64 nouse,
|
||||
bool nonblocking,
|
||||
int ret),
|
||||
TP_ARGS(ca, alloc_reserve, avail, seen, open, need_journal_commit, nouse, nonblocking, ret),
|
||||
TP_ARGS(ca, alloc_reserve, free, avail, copygc_wait_amount, copygc_waiting_for,
|
||||
seen, open, need_journal_commit, nouse, nonblocking, ret),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev )
|
||||
__array(char, reserve, 16 )
|
||||
__field(u64, free )
|
||||
__field(u64, avail )
|
||||
__field(u64, copygc_wait_amount )
|
||||
__field(s64, copygc_waiting_for )
|
||||
__field(u64, seen )
|
||||
__field(u64, open )
|
||||
__field(u64, need_journal_commit )
|
||||
|
@ -464,7 +471,10 @@ DECLARE_EVENT_CLASS(bucket_alloc,
|
|||
TP_fast_assign(
|
||||
__entry->dev = ca->dev;
|
||||
strlcpy(__entry->reserve, alloc_reserve, sizeof(__entry->reserve));
|
||||
__entry->free = free;
|
||||
__entry->avail = avail;
|
||||
__entry->copygc_wait_amount = copygc_wait_amount;
|
||||
__entry->copygc_waiting_for = copygc_waiting_for;
|
||||
__entry->seen = seen;
|
||||
__entry->open = open;
|
||||
__entry->need_journal_commit = need_journal_commit;
|
||||
|
@ -473,10 +483,13 @@ DECLARE_EVENT_CLASS(bucket_alloc,
|
|||
__entry->ret = ret;
|
||||
),
|
||||
|
||||
TP_printk("%d,%d reserve %s avail %llu seen %llu open %llu need_journal_commit %llu nouse %llu nonblocking %u ret %i",
|
||||
TP_printk("%d,%d reserve %s free %llu avail %llu copygc_wait %llu/%lli seen %llu open %llu need_journal_commit %llu nouse %llu nonblocking %u ret %i",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
__entry->reserve,
|
||||
__entry->free,
|
||||
__entry->avail,
|
||||
__entry->copygc_wait_amount,
|
||||
__entry->copygc_waiting_for,
|
||||
__entry->seen,
|
||||
__entry->open,
|
||||
__entry->need_journal_commit,
|
||||
|
@ -487,26 +500,34 @@ DECLARE_EVENT_CLASS(bucket_alloc,
|
|||
|
||||
DEFINE_EVENT(bucket_alloc, bucket_alloc,
|
||||
TP_PROTO(struct bch_dev *ca, const char *alloc_reserve,
|
||||
u64 free,
|
||||
u64 avail,
|
||||
u64 copygc_wait_amount,
|
||||
s64 copygc_waiting_for,
|
||||
u64 seen,
|
||||
u64 open,
|
||||
u64 need_journal_commit,
|
||||
u64 nouse,
|
||||
bool nonblocking,
|
||||
int ret),
|
||||
TP_ARGS(ca, alloc_reserve, avail, seen, open, need_journal_commit, nouse, nonblocking, ret)
|
||||
TP_ARGS(ca, alloc_reserve, free, avail, copygc_wait_amount, copygc_waiting_for,
|
||||
seen, open, need_journal_commit, nouse, nonblocking, ret)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(bucket_alloc, bucket_alloc_fail,
|
||||
TP_PROTO(struct bch_dev *ca, const char *alloc_reserve,
|
||||
u64 free,
|
||||
u64 avail,
|
||||
u64 copygc_wait_amount,
|
||||
s64 copygc_waiting_for,
|
||||
u64 seen,
|
||||
u64 open,
|
||||
u64 need_journal_commit,
|
||||
u64 nouse,
|
||||
bool nonblocking,
|
||||
int ret),
|
||||
TP_ARGS(ca, alloc_reserve, avail, seen, open, need_journal_commit, nouse, nonblocking, ret)
|
||||
TP_ARGS(ca, alloc_reserve, free, avail, copygc_wait_amount, copygc_waiting_for,
|
||||
seen, open, need_journal_commit, nouse, nonblocking, ret)
|
||||
);
|
||||
|
||||
TRACE_EVENT(discard_buckets,
|
||||
|
|
Loading…
Reference in a new issue