mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-03-10 00:00:04 +03:00
Better default bucket size
This commit is contained in:
parent
e13d21ade7
commit
da1fff8700
@ -58,9 +58,7 @@ static size_t nr_backing_devices = 0, nr_cache_devices = 0;
|
|||||||
static char *label = NULL;
|
static char *label = NULL;
|
||||||
|
|
||||||
/* All in units of 512 byte sectors */
|
/* All in units of 512 byte sectors */
|
||||||
static unsigned block_size;
|
static unsigned block_size, bucket_size, btree_node_size;
|
||||||
static unsigned bucket_size = 2048;
|
|
||||||
static unsigned btree_node_size;
|
|
||||||
static uint64_t filesystem_size;
|
static uint64_t filesystem_size;
|
||||||
static unsigned tier, replacement_policy;
|
static unsigned tier, replacement_policy;
|
||||||
|
|
||||||
@ -76,6 +74,7 @@ static unsigned cache_mode = CACHE_MODE_WRITEBACK;
|
|||||||
static int set_cache(NihOption *option, const char *arg)
|
static int set_cache(NihOption *option, const char *arg)
|
||||||
{
|
{
|
||||||
cache_devices[nr_cache_devices++] = (struct cache_opts) {
|
cache_devices[nr_cache_devices++] = (struct cache_opts) {
|
||||||
|
.fd = dev_open(arg),
|
||||||
.dev = strdup(arg),
|
.dev = strdup(arg),
|
||||||
.bucket_size = bucket_size,
|
.bucket_size = bucket_size,
|
||||||
.tier = tier,
|
.tier = tier,
|
||||||
@ -89,6 +88,7 @@ static int set_cache(NihOption *option, const char *arg)
|
|||||||
static int set_bdev(NihOption *option, const char *arg)
|
static int set_bdev(NihOption *option, const char *arg)
|
||||||
{
|
{
|
||||||
backing_devices[nr_backing_devices++] = (struct backingdev_opts) {
|
backing_devices[nr_backing_devices++] = (struct backingdev_opts) {
|
||||||
|
.fd = dev_open(arg),
|
||||||
.dev = strdup(arg),
|
.dev = strdup(arg),
|
||||||
.label = strdup(label),
|
.label = strdup(label),
|
||||||
};
|
};
|
||||||
@ -235,6 +235,30 @@ NihOption bcacheadm_format_options[] = {
|
|||||||
NIH_OPTION_LAST
|
NIH_OPTION_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static unsigned rounddown_pow_of_two(unsigned n)
|
||||||
|
{
|
||||||
|
unsigned ret;
|
||||||
|
|
||||||
|
do {
|
||||||
|
ret = n;
|
||||||
|
n &= n - 1;
|
||||||
|
} while (n);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned ilog2(uint64_t n)
|
||||||
|
{
|
||||||
|
unsigned ret = 0;
|
||||||
|
|
||||||
|
while (n) {
|
||||||
|
ret++;
|
||||||
|
n >>= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int bcacheadm_format(NihCommand *command, char *const *args)
|
int bcacheadm_format(NihCommand *command, char *const *args)
|
||||||
{
|
{
|
||||||
struct cache_sb *cache_set_sb;
|
struct cache_sb *cache_set_sb;
|
||||||
@ -242,16 +266,6 @@ int bcacheadm_format(NihCommand *command, char *const *args)
|
|||||||
if (!nr_cache_devices && !nr_backing_devices)
|
if (!nr_cache_devices && !nr_backing_devices)
|
||||||
die("Please supply a device");
|
die("Please supply a device");
|
||||||
|
|
||||||
for (struct cache_opts *i = cache_devices;
|
|
||||||
i < cache_devices + nr_cache_devices;
|
|
||||||
i++)
|
|
||||||
i->fd = dev_open(i->dev);
|
|
||||||
|
|
||||||
for (struct backingdev_opts *i = backing_devices;
|
|
||||||
i < backing_devices + nr_backing_devices;
|
|
||||||
i++)
|
|
||||||
i->fd = dev_open(i->dev);
|
|
||||||
|
|
||||||
if (!block_size) {
|
if (!block_size) {
|
||||||
for (struct cache_opts *i = cache_devices;
|
for (struct cache_opts *i = cache_devices;
|
||||||
i < cache_devices + nr_cache_devices;
|
i < cache_devices + nr_cache_devices;
|
||||||
@ -264,7 +278,22 @@ int bcacheadm_format(NihCommand *command, char *const *args)
|
|||||||
block_size = max(block_size, get_blocksize(i->dev, i->fd));
|
block_size = max(block_size, get_blocksize(i->dev, i->fd));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (struct cache_opts *i = cache_devices;
|
||||||
|
i < cache_devices + nr_cache_devices;
|
||||||
|
i++)
|
||||||
|
if (!i->bucket_size) {
|
||||||
|
uint64_t size = (i->filesystem_size ?:
|
||||||
|
getblocks(i->fd)) << 9;
|
||||||
|
|
||||||
|
if (size < 1 << 20) /* 1M device - 256 4k buckets*/
|
||||||
|
i->bucket_size = rounddown_pow_of_two(size >> 17);
|
||||||
|
else
|
||||||
|
/* Max 1M bucket at around 256G */
|
||||||
|
i->bucket_size = 8 << min((ilog2(size >> 20) / 2), 9U);
|
||||||
|
}
|
||||||
|
|
||||||
if (!btree_node_size) {
|
if (!btree_node_size) {
|
||||||
|
/* 256k default btree node size */
|
||||||
btree_node_size = 512;
|
btree_node_size = 512;
|
||||||
|
|
||||||
for (struct cache_opts *i = cache_devices;
|
for (struct cache_opts *i = cache_devices;
|
||||||
|
Loading…
Reference in New Issue
Block a user