Option("bluestore_volume_selection_policy", Option::TYPE_STR, Option::LEVEL_DEV)
.set_default("use_some_extra")
- .set_enum_allowed({ "rocksdb_original", "use_some_extra" })
+ .set_enum_allowed({ "rocksdb_original", "use_some_extra", "without_slow_dir" })
.set_description("Determines bluefs volume selection policy")
- .set_long_description("Determines bluefs volume selection policy. 'use_some_extra' policy allows to override RocksDB level granularity and put high level's data to faster device even when the level doesn't completely fit there"),
+ .set_long_description("Determines bluefs volume selection policy. 'use_some_extra' policy allows to override RocksDB level "
+ "granularity and put high level's data to faster device even when the level doesn't completely fit there. "
+ "'without_slow_dir' policy enables using 100% of faster disk capacity and allows the user to turn on "
+ "'level_compaction_dynamic_level_bytes' option in RocksDB options."),
Option("bluestore_volume_selection_reserved_factor", Option::TYPE_FLOAT, Option::LEVEL_ADVANCED)
.set_flag(Option::FLAG_STARTUP)
if (r < 0) {
return r;
}
- RocksDBBlueFSVolumeSelector* vselector = nullptr;
+ BlueFSVolumeSelector* vselector = nullptr;
if (bluefs_layout.shared_bdev == BlueFS::BDEV_SLOW) {
string options = cct->_conf->bluestore_rocksdb_options;
rocksdb::Options rocks_opts;
- int r = RocksDBStore::ParseOptionsFromStringStatic(
+ r = RocksDBStore::ParseOptionsFromStringStatic(
cct,
options,
rocks_opts,
if (r < 0) {
return r;
}
-
- double reserved_factor = cct->_conf->bluestore_volume_selection_reserved_factor;
- vselector =
- new RocksDBBlueFSVolumeSelector(
+ if (cct->_conf->bluestore_volume_selection_policy == "without_slow_dir") {
+ vselector = new WithoutSlowDirVolumeSelector(
bluefs->get_block_device_size(BlueFS::BDEV_WAL) * 95 / 100,
bluefs->get_block_device_size(BlueFS::BDEV_DB) * 95 / 100,
- bluefs->get_block_device_size(BlueFS::BDEV_SLOW) * 95 / 100,
- 1024 * 1024 * 1024, //FIXME: set expected l0 size here
- rocks_opts.max_bytes_for_level_base,
- rocks_opts.max_bytes_for_level_multiplier,
- reserved_factor,
- cct->_conf->bluestore_volume_selection_reserved,
- cct->_conf->bluestore_volume_selection_policy != "rocksdb_original");
+ bluefs->get_block_device_size(BlueFS::BDEV_SLOW) * 95 / 100);
+ } else {
+ double reserved_factor = cct->_conf->bluestore_volume_selection_reserved_factor;
+ vselector =
+ new RocksDBBlueFSVolumeSelector(
+ bluefs->get_block_device_size(BlueFS::BDEV_WAL) * 95 / 100,
+ bluefs->get_block_device_size(BlueFS::BDEV_DB) * 95 / 100,
+ bluefs->get_block_device_size(BlueFS::BDEV_SLOW) * 95 / 100,
+ 1024 * 1024 * 1024, //FIXME: set expected l0 size here
+ rocks_opts.max_bytes_for_level_base,
+ rocks_opts.max_bytes_for_level_multiplier,
+ reserved_factor,
+ cct->_conf->bluestore_volume_selection_reserved,
+ cct->_conf->bluestore_volume_selection_policy == "use_some_extra");
+ }
}
if (create) {
bluefs->mkfs(fsid, bluefs_layout);