Skip to content

Commit 7d58853

Browse files
committed
crimson/os/seastore/cache: report rewrite stats
Signed-off-by: Yingxin Cheng <[email protected]>
1 parent 46ccac4 commit 7d58853

File tree

4 files changed

+69
-14
lines changed

4 files changed

+69
-14
lines changed

src/crimson/os/seastore/cache.cc

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ void Cache::register_metrics()
148148
stats = {};
149149
last_dirty_io = {};
150150
last_dirty_io_by_src_ext = {};
151+
last_trim_rewrites = {};
152+
last_reclaim_rewrites = {};
151153

152154
namespace sm = seastar::metrics;
153155
using src_t = Transaction::src_t;
@@ -705,22 +707,26 @@ void Cache::register_metrics()
705707
{
706708
sm::make_counter(
707709
"version_count_dirty",
708-
stats.trim_rewrites.num,
710+
[this] {
711+
return stats.trim_rewrites.get_num_rewrites();
712+
},
709713
sm::description("total number of rewrite-dirty extents")
710714
),
711715
sm::make_counter(
712716
"version_sum_dirty",
713-
stats.trim_rewrites.version,
717+
stats.trim_rewrites.dirty_version,
714718
sm::description("sum of the version from rewrite-dirty extents")
715719
),
716720
sm::make_counter(
717721
"version_count_reclaim",
718-
stats.reclaim_rewrites.num,
722+
[this] {
723+
return stats.reclaim_rewrites.get_num_rewrites();
724+
},
719725
sm::description("total number of rewrite-reclaim extents")
720726
),
721727
sm::make_counter(
722728
"version_sum_reclaim",
723-
stats.reclaim_rewrites.version,
729+
stats.reclaim_rewrites.dirty_version,
724730
sm::description("sum of the version from rewrite-reclaim extents")
725731
),
726732
}
@@ -2333,9 +2339,29 @@ cache_stats_t Cache::get_stats(
23332339
<< dirty_io_stats_printer_t{seconds, phys_io};
23342340
}
23352341

2342+
constexpr const char* dfmt = "{:.2f}";
2343+
rewrite_stats_t _trim_rewrites = stats.trim_rewrites;
2344+
_trim_rewrites.minus(last_trim_rewrites);
2345+
rewrite_stats_t _reclaim_rewrites = stats.reclaim_rewrites;
2346+
_reclaim_rewrites.minus(last_reclaim_rewrites);
2347+
oss << "\nrewrite trim ndirty="
2348+
<< fmt::format(dfmt, _trim_rewrites.num_n_dirty/seconds)
2349+
<< "ps, dirty="
2350+
<< fmt::format(dfmt, _trim_rewrites.num_dirty/seconds)
2351+
<< "ps, dversion="
2352+
<< fmt::format(dfmt, _trim_rewrites.get_avg_version())
2353+
<< "; reclaim ndirty="
2354+
<< fmt::format(dfmt, _reclaim_rewrites.num_n_dirty/seconds)
2355+
<< "ps, dirty="
2356+
<< fmt::format(dfmt, _reclaim_rewrites.num_dirty/seconds)
2357+
<< "ps, dversion="
2358+
<< fmt::format(dfmt, _reclaim_rewrites.get_avg_version());
2359+
23362360
INFO("{}", oss.str());
23372361

23382362
last_dirty_io_by_src_ext = stats.dirty_io_by_src_ext;
2363+
last_trim_rewrites = stats.trim_rewrites;
2364+
last_reclaim_rewrites = stats.reclaim_rewrites;
23392365
}
23402366

23412367
last_dirty_io = stats.dirty_io;

src/crimson/os/seastore/cache.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,6 +1638,8 @@ class Cache {
16381638
mutable dirty_io_stats_t last_dirty_io;
16391639
mutable counter_by_src_t<counter_by_extent_t<dirty_io_stats_t> >
16401640
last_dirty_io_by_src_ext;
1641+
mutable rewrite_stats_t last_trim_rewrites;
1642+
mutable rewrite_stats_t last_reclaim_rewrites;
16411643

16421644
void account_conflict(Transaction::src_t src1, Transaction::src_t src2) {
16431645
assert(src1 < Transaction::src_t::MAX);

src/crimson/os/seastore/transaction.h

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,41 @@ inline std::ostream& operator<<(std::ostream& out, const io_stat_t& stat) {
4242
}
4343

4444
struct rewrite_stats_t {
45-
uint64_t num = 0;
46-
uint64_t version = 0;
45+
uint64_t num_n_dirty = 0;
46+
uint64_t num_dirty = 0;
47+
uint64_t dirty_version = 0;
4748

4849
bool is_clear() const {
49-
return num == 0;
50+
return (num_n_dirty == 0 && num_dirty == 0);
5051
}
5152

52-
void account(extent_version_t v) {
53-
++num;
54-
version += v;
53+
uint64_t get_num_rewrites() const {
54+
return num_n_dirty + num_dirty;
55+
}
56+
57+
double get_avg_version() const {
58+
return static_cast<double>(dirty_version)/num_dirty;
59+
}
60+
61+
void account_n_dirty() {
62+
++num_n_dirty;
63+
}
64+
65+
void account_dirty(extent_version_t v) {
66+
++num_dirty;
67+
dirty_version += v;
5568
}
5669

5770
void add(const rewrite_stats_t& o) {
58-
num += o.num;
59-
version += o.version;
71+
num_n_dirty += o.num_n_dirty;
72+
num_dirty += o.num_dirty;
73+
dirty_version += o.dirty_version;
74+
}
75+
76+
void minus(const rewrite_stats_t& o) {
77+
num_n_dirty -= o.num_n_dirty;
78+
num_dirty -= o.num_dirty;
79+
dirty_version -= o.dirty_version;
6080
}
6181
};
6282

src/crimson/os/seastore/transaction_manager.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,13 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent(
639639
assert(extent->is_valid() && !extent->is_initial_pending());
640640
if (extent->is_dirty()) {
641641
assert(extent->get_version() > 0);
642+
if (is_root_type(extent->get_type())) {
643+
// pass
644+
} else if (extent->get_version() == 1 && extent->is_mutation_pending()) {
645+
t.get_rewrite_stats().account_n_dirty();
646+
} else {
647+
t.get_rewrite_stats().account_dirty(extent->get_version());
648+
}
642649
if (epm->can_inplace_rewrite(t, extent)) {
643650
DEBUGT("delta overwriting extent -- {}", t, *extent);
644651
t.add_inplace_rewrite_extent(extent);
@@ -647,14 +654,14 @@ TransactionManager::rewrite_extent_ret TransactionManager::rewrite_extent(
647654
}
648655
extent->set_target_rewrite_generation(INIT_GENERATION);
649656
} else {
657+
assert(!is_root_type(extent->get_type()));
650658
extent->set_target_rewrite_generation(target_generation);
651659
ceph_assert(modify_time != NULL_TIME);
652660
extent->set_modify_time(modify_time);
653661
assert(extent->get_version() == 0);
662+
t.get_rewrite_stats().account_n_dirty();
654663
}
655664

656-
t.get_rewrite_stats().account(extent->get_version());
657-
658665
if (is_backref_node(extent->get_type())) {
659666
DEBUGT("rewriting backref extent -- {}", t, *extent);
660667
return backref_manager->rewrite_extent(t, extent);

0 commit comments

Comments
 (0)