Skip to content

Commit

Permalink
os/bluestore: precondition rocksdb on mkfs
Browse files Browse the repository at this point in the history
Write N bytes of garbage to the kv store on startup.  With rocksdb,
this ensures that our log files are preallocated.

This option needs to match up with the

Signed-off-by: Sage Weil <sage@redhat.com>
  • Loading branch information
liewegas committed Aug 24, 2016
1 parent 1a23c2e commit 2546619
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/common/config_opts.h
Original file line number Diff line number Diff line change
Expand Up @@ -959,6 +959,8 @@ OPTION(bluestore_block_wal_path, OPT_STR, "")
OPTION(bluestore_block_wal_size, OPT_U64, 96 * 1024*1024) // rocksdb wal
OPTION(bluestore_block_wal_create, OPT_BOOL, false)
OPTION(bluestore_block_preallocate_file, OPT_BOOL, false) //whether preallocate space if block/db_path/wal_path is file rather that block device.
OPTION(bluestore_precondition_bluefs, OPT_U64, 48*1024*1024) // write this much data at mkfs
OPTION(bluestore_precondition_bluefs_block, OPT_U64, 1048576)
OPTION(bluestore_csum, OPT_BOOL, true)
OPTION(bluestore_csum_type, OPT_STR, "crc32c")
OPTION(bluestore_min_csum_block, OPT_U32, 4096)
Expand Down
30 changes: 30 additions & 0 deletions src/os/bluestore/BlueStore.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2738,6 +2738,36 @@ int BlueStore::mkfs()
goto out_close_alloc;
dout(10) << __func__ << " success" << dendl;

if (bluefs &&
g_conf->bluestore_precondition_bluefs > 0) {
dout(10) << __func__ << " preconditioning with "
<< pretty_si_t(g_conf->bluestore_precondition_bluefs)
<< " in blocks of "
<< pretty_si_t(g_conf->bluestore_precondition_bluefs_block)
<< dendl;
unsigned n = g_conf->bluestore_precondition_bluefs /
g_conf->bluestore_precondition_bluefs_block;
bufferlist bl;
bufferptr bp(g_conf->bluestore_precondition_bluefs_block);
for (unsigned i=0; i < g_conf->bluestore_precondition_bluefs_block; ++i) {
bp[i] = rand();
}
bl.append(bp);
string key1("a");
string key2("b");
for (unsigned i=0; i < n; ++i) {
KeyValueDB::Transaction t = db->get_transaction();
t->set(PREFIX_SUPER, (i & 1) ? key1 : key2, bl);
t->rmkey(PREFIX_SUPER, (i & 1) ? key2 : key1);
db->submit_transaction_sync(t);
}
KeyValueDB::Transaction t = db->get_transaction();
t->rmkey(PREFIX_SUPER, key1);
t->rmkey(PREFIX_SUPER, key2);
db->submit_transaction_sync(t);
dout(10) << __func__ << " done preconditioning" << dendl;
}

out_close_alloc:
_close_alloc();
out_close_fm:
Expand Down

0 comments on commit 2546619

Please sign in to comment.