default: true
see_also:
- seastore_device_size
-- name: seastore_init_rewrite_segments_num_per_device
+- name: seastore_init_write_segments_num_per_device
type: uint
level: dev
- desc: Initial number of segments for rewriting extents per device
+ desc: Initial number of segments for writing new extents per device
default: 6
- name: seastore_journal_batch_capacity
type: uint
return make_interruptible(
::crimson::repeat(
[action=std::move(action),
- interrupt_condition=interrupt_cond<InterruptCond>.interrupt_cond] {
+ interrupt_condition=interrupt_cond<InterruptCond>.interrupt_cond]() mutable {
return call_with_interruption(
interrupt_condition,
std::move(action)).to_future();
SegmentedAllocator::SegmentedAllocator(
SegmentProvider& sp,
SegmentManager& sm)
+ : rewriter(sp, sm)
{
std::generate_n(
std::back_inserter(writers),
crimson::common::get_conf<uint64_t>(
- "seastore_init_rewrite_segments_num_per_device"),
+ "seastore_init_write_segments_num_per_device"),
[&] {
return Writer{sp, sm};
}
SegmentManager& sm);
Writer &get_writer(placement_hint_t hint) {
- return writers[std::rand() % writers.size()];
+ if (hint == placement_hint_t::REWRITE) {
+ return rewriter;
+ } else {
+ return writers[std::rand() % writers.size()];
+ }
}
alloc_paddr_iertr::future<> alloc_ool_extents_paddr(
});
}
private:
+ Writer rewriter;
std::vector<Writer> writers;
};
block_size_by_segment_manager[id.device_id()]);
}
+void SpaceTrackerSimple::dump_usage(segment_id_t id) const
+{
+ logger().info(
+ "SpaceTrackerSimple::dump_usage id: {}, live_bytes: {}",
+ id,
+ live_bytes_by_segment[id].live_bytes);
+}
+
SegmentCleaner::SegmentCleaner(
config_t config,
ExtentReaderRef&& scr,
return (double)seg_bytes.live_bytes / (double)seg_bytes.total_bytes;
}
- void dump_usage(segment_id_t) const final {}
+ void dump_usage(segment_id_t) const final;
void reset() final {
for (auto &i : live_bytes_by_segment) {