auto bentry = cache.get_cached_backref_entry(key);
if (bentry) {
assert(bentry->paddr == key);
+ INFOT("found in cache: {} {}", t, bentry->paddr, bentry->laddr);
}
if (bentry && bentry->laddr == L_ADDR_NULL) {
INFOT("{} is removed", t, bentry->paddr);
continue;
}
+ DEBUGT("backref_entry alloc existing {}~0x{:x}",
+ t,
+ i->get_paddr(),
+ i->get_length());
// Note: commit extents and backref allocations in the same place
// Note: remapping is split into 2 steps, retire and alloc, they must be
// committed atomically together
}
void add_extent(CachedExtent &extent) {
+ LOG_PREFIX(ExtentPromoter::add_extent);
assert(!extent.is_linked_to_list());
assert(extent.is_stable_clean());
extent.set_pin_state(extent_pin_state_t::PendingPromote);
current_contents += extent.get_length();
intrusive_ptr_add_ref(&extent);
while (current_contents > promotion_size) {
+ INFO("removing front {}", list.front());
remove_extent(list.front(), extent_pin_state_t::Fresh);
}
if (should_run_promote()) {
}
void remove_extent(CachedExtent &extent, extent_pin_state_t new_state) {
+ LOG_PREFIX(ExtentPromoter::remove_extent);
+ INFO("{} {}", extent, new_state);
assert(extent.is_linked_to_list());
assert(extent.get_pin_state() == extent_pin_state_t::PendingPromote);
assert(current_contents >= extent.get_length());
if (cold_cleaner) {
dynamic_max_rewrite_generation = hot_tier_generations + cold_tier_generations - 1;
}
- DEBUG("dynamic_max_rewrite_generation: {}, "
+ INFO("dynamic_max_rewrite_generation: {}, "
"hot_tier_generations{} , cold_tier_generations {}",
dynamic_max_rewrite_generation, hot_tier_generations,
cold_tier_generations);
rewrite_gen_t gen,
write_policy_t policy,
bool is_tracked) {
+ LOG_PREFIX(ExtentPlacementManager::adjust_generation);
assert(is_real_type(type));
if (is_root_type(type)) {
gen = INLINE_GENERATION;
if (is_tracked && gen >= hot_tier_generations &&
hint != placement_hint_t::REWRITE) {
gen = hot_tier_generations - 1;
+ SUBINFO(seastore_epm, "setting gen to {}", gen);
}
if (gen > dynamic_max_rewrite_generation) {
}
seastar::future<> wait_background() {
+ LOG_PREFIX(BackgroundProcess::wait_background);
+ SUBINFO(seastore_epm, "");
if (!blocking_io) {
blocking_io = seastar::promise<>();
}
#endif
struct eviction_state_t {
- enum class eviction_mode_t {
+ enum class eviction_mode_t : uint8_t {
STOP, // generation greater than or equal to MIN_COLD_GENERATION
// will be set to MIN_COLD_GENERATION - 1, which means
// no extents will be evicted.
rewrite_gen_t adjust_generation_with_eviction(rewrite_gen_t gen) {
rewrite_gen_t ret = gen;
+ LOG_PREFIX(eviction_state_t::adjust_generation_with_eviction);
+ SUBINFO(seastore_epm, "gen={} mode={}", gen, (uint8_t)eviction_mode);
switch(eviction_mode) {
case eviction_mode_t::STOP:
if (gen == hot_tier_generations) {
#ifdef CRIMSON_TEST_WORKLOAD
void force_fast_evict() {
+ LOG_PREFIX(eviction_state_t::force_fast_evict);
+ SUBINFO(seastore_epm, "");
eviction_mode = eviction_mode_t::FAST;
}
#endif
assert(laddr == laddr.get_object_prefix());
auto iter = index.find(laddr);
if (iter != index.end()) {
- TRACE("remove bucket: {}", laddr);
+ INFO("remove bucket: {}", laddr);
lru.erase(iter->second);
index.erase(iter);
}
co_await ecb->submit_transaction_direct(t);
- DEBUGT("finish demoting {} buckets with {} bytes evicted and {} bytes demoted",
+ INFOT("finish demoting {} buckets with {} bytes evicted and {} bytes demoted",
t, completed_buckets.size(), evicted_size, demoted_size);
stat.demoted_bucket_count += completed_buckets.size();
stat.demoted_size += demoted_size;
}
nextent->rewrite(t, *extent, 0);
- DEBUGT("rewriting meta -- {} to {}", t, *extent, *nextent);
+ INFOT("rewriting meta -- {} to {}", t, *extent, *nextent);
#ifndef NDEBUG
if (get_checksum_needed(extent->get_paddr())) {
bool first_extent = (off == 0);
ceph_assert(left >= nextent->get_length());
nextent->rewrite(t, *extent, off);
- DEBUGT("rewriting data -- {} to {}", t, *extent, *nextent);
+ INFOT("rewriting data -- {} to {}", t, *extent, *nextent);
/* This update_mapping is, strictly speaking, unnecessary for delayed_alloc
* extents since we're going to do it again once we either do the ool write
{
LOG_PREFIX(TransactionManager::promote_extent);
assert(epm->is_cold_device(extent->get_paddr().get_device_id()));
- DEBUGT("promote extent: {}", t, *extent);
+ INFOT("promote extent: {}", t, *extent);
ceph_assert(extent->is_logical());
std::vector<LogicalChildNodeRef> promoted_extents;
{
LOG_PREFIX(TransactionManager::demote_region);
auto prefix = start.get_object_prefix();
- DEBUGT("start demote {}", t, prefix);
+ INFOT("start demote {}", t, prefix);
auto it = co_await lba_manager->upper_bound_right(
t, start
).handle_error_interruptible(
break;
}
if (it.has_shadow_val()) {
- DEBUGT("demote shadow {}", t, it);
+ INFOT("demote shadow {}", t, it);
auto extent = co_await relocate_shadow_extent(t, it);
ret.demoted_size += extent->get_length();
LBAMapping nit = co_await lba_manager->demote_extent(t, it, *extent);
it = co_await nit.next();
} else if (!it.is_indirect() && !it.is_zero_reserved() &&
!epm->is_cold_device(it.get_val().get_device_id())) {
- DEBUGT("demote hot {}", t, it);
+ INFOT("demote hot {}", t, it);
auto extent = co_await read_cursor_by_type(
t, it.direct_cursor, it.get_extent_type());
ret.evicted_size += extent->get_length();
extents.push_back(extent);
it = co_await it.next();
} else {
- DEBUGT("skip {}", t, it);
+ INFOT("skip {}", t, it);
it = co_await it.next();
}
}