Commit 5ae67abc authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: Enable automatic shrinking for rhashtables

Since the key cache shrinker walks the rhashtable, a mostly empty
rhashtable leads to really nasty reclaim performance issues.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 26447d22
...@@ -91,10 +91,11 @@ static int bch2_btree_cache_cmp_fn(struct rhashtable_compare_arg *arg, ...@@ -91,10 +91,11 @@ static int bch2_btree_cache_cmp_fn(struct rhashtable_compare_arg *arg,
} }
static const struct rhashtable_params bch_btree_cache_params = { static const struct rhashtable_params bch_btree_cache_params = {
.head_offset = offsetof(struct btree, hash), .head_offset = offsetof(struct btree, hash),
.key_offset = offsetof(struct btree, hash_val), .key_offset = offsetof(struct btree, hash_val),
.key_len = sizeof(u64), .key_len = sizeof(u64),
.obj_cmpfn = bch2_btree_cache_cmp_fn, .obj_cmpfn = bch2_btree_cache_cmp_fn,
.automatic_shrinking = true,
}; };
static int btree_node_data_alloc(struct bch_fs *c, struct btree *b, gfp_t gfp) static int btree_node_data_alloc(struct bch_fs *c, struct btree *b, gfp_t gfp)
......
...@@ -32,10 +32,11 @@ static int bch2_btree_key_cache_cmp_fn(struct rhashtable_compare_arg *arg, ...@@ -32,10 +32,11 @@ static int bch2_btree_key_cache_cmp_fn(struct rhashtable_compare_arg *arg,
} }
static const struct rhashtable_params bch2_btree_key_cache_params = { static const struct rhashtable_params bch2_btree_key_cache_params = {
.head_offset = offsetof(struct bkey_cached, hash), .head_offset = offsetof(struct bkey_cached, hash),
.key_offset = offsetof(struct bkey_cached, key), .key_offset = offsetof(struct bkey_cached, key),
.key_len = sizeof(struct bkey_cached_key), .key_len = sizeof(struct bkey_cached_key),
.obj_cmpfn = bch2_btree_key_cache_cmp_fn, .obj_cmpfn = bch2_btree_key_cache_cmp_fn,
.automatic_shrinking = true,
}; };
__flatten __flatten
......
...@@ -84,9 +84,10 @@ struct promote_op { ...@@ -84,9 +84,10 @@ struct promote_op {
}; };
static const struct rhashtable_params bch_promote_params = { static const struct rhashtable_params bch_promote_params = {
.head_offset = offsetof(struct promote_op, hash), .head_offset = offsetof(struct promote_op, hash),
.key_offset = offsetof(struct promote_op, pos), .key_offset = offsetof(struct promote_op, pos),
.key_len = sizeof(struct bpos), .key_len = sizeof(struct bpos),
.automatic_shrinking = true,
}; };
static inline int should_promote(struct bch_fs *c, struct bkey_s_c k, static inline int should_promote(struct bch_fs *c, struct bkey_s_c k,
......
...@@ -35,9 +35,10 @@ struct buckets_in_flight { ...@@ -35,9 +35,10 @@ struct buckets_in_flight {
}; };
static const struct rhashtable_params bch_move_bucket_params = { static const struct rhashtable_params bch_move_bucket_params = {
.head_offset = offsetof(struct move_bucket_in_flight, hash), .head_offset = offsetof(struct move_bucket_in_flight, hash),
.key_offset = offsetof(struct move_bucket_in_flight, bucket.k), .key_offset = offsetof(struct move_bucket_in_flight, bucket.k),
.key_len = sizeof(struct move_bucket_key), .key_len = sizeof(struct move_bucket_key),
.automatic_shrinking = true,
}; };
static struct move_bucket_in_flight * static struct move_bucket_in_flight *
......
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