Commit 374153c2 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: More open buckets

We need a larger open bucket reserve now that the btree interior update
path holds onto open bucket references; filesystems with many high
through devices may need more open buckets now.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent e38821f3
...@@ -46,16 +46,22 @@ enum alloc_reserve { ...@@ -46,16 +46,22 @@ enum alloc_reserve {
typedef FIFO(long) alloc_fifo; typedef FIFO(long) alloc_fifo;
/* Enough for 16 cache devices, 2 tiers and some left over for pipelining */ #define OPEN_BUCKETS_COUNT 1024
#define OPEN_BUCKETS_COUNT 256
#define WRITE_POINT_HASH_NR 32 #define WRITE_POINT_HASH_NR 32
#define WRITE_POINT_MAX 32 #define WRITE_POINT_MAX 32
typedef u16 open_bucket_idx_t;
struct open_bucket { struct open_bucket {
spinlock_t lock; spinlock_t lock;
atomic_t pin; atomic_t pin;
u8 freelist; open_bucket_idx_t freelist;
/*
* When an open bucket has an ec_stripe attached, this is the index of
* the block in the stripe this open_bucket corresponds to:
*/
u8 ec_idx; u8 ec_idx;
u8 type; u8 type;
unsigned valid:1; unsigned valid:1;
...@@ -68,8 +74,8 @@ struct open_bucket { ...@@ -68,8 +74,8 @@ struct open_bucket {
#define OPEN_BUCKET_LIST_MAX 15 #define OPEN_BUCKET_LIST_MAX 15
struct open_buckets { struct open_buckets {
u8 nr; open_bucket_idx_t nr;
u8 v[OPEN_BUCKET_LIST_MAX]; open_bucket_idx_t v[OPEN_BUCKET_LIST_MAX];
}; };
struct dev_stripe_state { struct dev_stripe_state {
......
...@@ -428,8 +428,8 @@ struct bch_dev { ...@@ -428,8 +428,8 @@ struct bch_dev {
alloc_fifo free[RESERVE_NR]; alloc_fifo free[RESERVE_NR];
alloc_fifo free_inc; alloc_fifo free_inc;
u8 open_buckets_partial[OPEN_BUCKETS_COUNT]; open_bucket_idx_t open_buckets_partial[OPEN_BUCKETS_COUNT];
unsigned open_buckets_partial_nr; open_bucket_idx_t open_buckets_partial_nr;
size_t fifo_last_bucket; size_t fifo_last_bucket;
...@@ -690,8 +690,8 @@ struct bch_fs { ...@@ -690,8 +690,8 @@ struct bch_fs {
struct closure_waitlist freelist_wait; struct closure_waitlist freelist_wait;
u64 blocked_allocate; u64 blocked_allocate;
u64 blocked_allocate_open_bucket; u64 blocked_allocate_open_bucket;
u8 open_buckets_freelist; open_bucket_idx_t open_buckets_freelist;
u8 open_buckets_nr_free; open_bucket_idx_t open_buckets_nr_free;
struct closure_waitlist open_buckets_wait; struct closure_waitlist open_buckets_wait;
struct open_bucket open_buckets[OPEN_BUCKETS_COUNT]; struct open_bucket open_buckets[OPEN_BUCKETS_COUNT];
......
...@@ -92,9 +92,9 @@ struct btree_update { ...@@ -92,9 +92,9 @@ struct btree_update {
struct btree *new_nodes[BTREE_UPDATE_NODES_MAX]; struct btree *new_nodes[BTREE_UPDATE_NODES_MAX];
unsigned nr_new_nodes; unsigned nr_new_nodes;
u8 open_buckets[BTREE_UPDATE_NODES_MAX * open_bucket_idx_t open_buckets[BTREE_UPDATE_NODES_MAX *
BCH_REPLICAS_MAX]; BCH_REPLICAS_MAX];
u8 nr_open_buckets; open_bucket_idx_t nr_open_buckets;
unsigned journal_u64s; unsigned journal_u64s;
u64 journal_entries[BTREE_UPDATE_JOURNAL_RES]; u64 journal_entries[BTREE_UPDATE_JOURNAL_RES];
......
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