Skip to content

Commit 3442025

Browse files
committed
crimson/os/cache: simplify lru stats data structures
Signed-off-by: Yingxin Cheng <[email protected]>
1 parent c068b63 commit 3442025

File tree

5 files changed

+51
-96
lines changed

5 files changed

+51
-96
lines changed

src/crimson/os/seastore/cache.cc

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,15 +2355,10 @@ void Cache::LRU::get_stats(
23552355
stats.lru_io.minus(last_overall_io);
23562356

23572357
if (report_detail && seconds != 0) {
2358-
cache_io_stats_t _trans_io = trans_io;
2359-
_trans_io.minus(last_trans_io);
2360-
2361-
cache_io_stats_t other_io = stats.lru_io;
2362-
other_io.minus(_trans_io);
2363-
23642358
counter_by_src_t<counter_by_extent_t<cache_io_stats_t> >
23652359
_trans_io_by_src_ext = trans_io_by_src_ext;
23662360
counter_by_src_t<cache_io_stats_t> trans_io_by_src;
2361+
cache_io_stats_t trans_io;
23672362
for (uint8_t _src=0; _src<TRANSACTION_TYPE_MAX; ++_src) {
23682363
auto src = static_cast<transaction_type_t>(_src);
23692364
auto& io_by_ext = get_by_src(_trans_io_by_src_ext, src);
@@ -2376,7 +2371,10 @@ void Cache::LRU::get_stats(
23762371
extent_io.minus(last_extent_io);
23772372
trans_io_per_src.add(extent_io);
23782373
}
2374+
trans_io.add(trans_io_per_src);
23792375
}
2376+
cache_io_stats_t other_io = stats.lru_io;
2377+
other_io.minus(trans_io);
23802378

23812379
std::ostringstream oss;
23822380
oss << "\nlru total" << stats.lru_sizes;
@@ -2385,7 +2383,7 @@ void Cache::LRU::get_stats(
23852383
cache_size_stats_t phys_sizes;
23862384
for (uint8_t _ext=0; _ext<EXTENT_TYPES_MAX; ++_ext) {
23872385
auto ext = static_cast<extent_types_t>(_ext);
2388-
const auto extent_sizes = get_by_ext(sizes_by_ext, ext);
2386+
const auto& extent_sizes = get_by_ext(sizes_by_ext, ext);
23892387
if (is_data_type(ext)) {
23902388
data_sizes.add(extent_sizes);
23912389
} else if (is_logical_metadata_type(ext)) {
@@ -2399,7 +2397,7 @@ void Cache::LRU::get_stats(
23992397
<< "\n phys" << phys_sizes;
24002398

24012399
oss << "\nlru io: trans-"
2402-
<< cache_io_stats_printer_t{seconds, _trans_io}
2400+
<< cache_io_stats_printer_t{seconds, trans_io}
24032401
<< "; other-"
24042402
<< cache_io_stats_printer_t{seconds, other_io};
24052403
for (uint8_t _src=0; _src<TRANSACTION_TYPE_MAX; ++_src) {
@@ -2434,11 +2432,11 @@ void Cache::LRU::get_stats(
24342432
}
24352433

24362434
INFO("{}", oss.str());
2435+
2436+
last_trans_io_by_src_ext = trans_io_by_src_ext;
24372437
}
24382438

24392439
last_overall_io = overall_io;
2440-
last_trans_io = trans_io;
2441-
last_trans_io_by_src_ext = trans_io_by_src_ext;
24422440
}
24432441

24442442
}

src/crimson/os/seastore/cache.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,6 @@ class Cache {
14361436

14371437
counter_by_extent_t<cache_size_stats_t> sizes_by_ext;
14381438
cache_io_stats_t overall_io;
1439-
cache_io_stats_t trans_io;
14401439
counter_by_src_t<counter_by_extent_t<cache_io_stats_t> >
14411440
trans_io_by_src_ext;
14421441

@@ -1459,12 +1458,12 @@ class Cache {
14591458
lru.erase(lru.s_iterator_to(extent));
14601459
current_size -= extent_length;
14611460
get_by_ext(sizes_by_ext, extent.get_type()).account_out(extent_length);
1462-
overall_io.account_out(extent_length);
1461+
overall_io.out_sizes.account_in(extent_length);
14631462
if (p_src) {
1464-
trans_io.account_out(extent_length);
14651463
get_by_ext(
14661464
get_by_src(trans_io_by_src_ext, *p_src),
1467-
extent.get_type()).account_out(extent_length);
1465+
extent.get_type()
1466+
).out_sizes.account_in(extent_length);
14681467
}
14691468
intrusive_ptr_release(&extent);
14701469
}
@@ -1513,12 +1512,12 @@ class Cache {
15131512
// absent, add to top (back)
15141513
current_size += extent_length;
15151514
get_by_ext(sizes_by_ext, extent.get_type()).account_in(extent_length);
1516-
overall_io.account_in(extent_length);
1515+
overall_io.in_sizes.account_in(extent_length);
15171516
if (p_src) {
1518-
trans_io.account_in(extent_length);
15191517
get_by_ext(
15201518
get_by_src(trans_io_by_src_ext, *p_src),
1521-
extent.get_type()).account_in(extent_length);
1519+
extent.get_type()
1520+
).in_sizes.account_in(extent_length);
15221521
}
15231522
intrusive_ptr_add_ref(&extent);
15241523
lru.push_back(extent);

src/crimson/os/seastore/seastore.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -710,10 +710,10 @@ seastar::future<> SeaStore::report_stats()
710710
lru_sizes_ps.size /= seastar::smp::count;
711711
lru_sizes_ps.num_extents /= seastar::smp::count;
712712
cache_io_stats_t lru_io_ps = cache_total.lru_io;
713-
lru_io_ps.in_size /= seastar::smp::count;
714-
lru_io_ps.in_num_extents /= seastar::smp::count;
715-
lru_io_ps.out_size /= seastar::smp::count;
716-
lru_io_ps.out_num_extents /= seastar::smp::count;
713+
lru_io_ps.in_sizes.size /= seastar::smp::count;
714+
lru_io_ps.in_sizes.num_extents /= seastar::smp::count;
715+
lru_io_ps.out_sizes.size /= seastar::smp::count;
716+
lru_io_ps.out_sizes.num_extents /= seastar::smp::count;
717717
INFO("cache lru: total{} {}; per-shard: total{} {}",
718718
cache_total.lru_sizes,
719719
cache_io_stats_printer_t{seconds, cache_total.lru_io},

src/crimson/os/seastore/seastore_types.cc

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -980,25 +980,6 @@ std::ostream& operator<<(std::ostream& out, const writer_stats_printer_t& p)
980980
return out;
981981
}
982982

983-
std::ostream& operator<<(std::ostream& out, const cache_io_stats_printer_t& p)
984-
{
985-
constexpr const char* dfmt = "{:.2f}";
986-
out << "in("
987-
<< fmt::format(dfmt, p.stats.get_in_mbs(p.seconds))
988-
<< "MiB/s,"
989-
<< fmt::format(dfmt, p.stats.get_in_avg_kb())
990-
<< "KiB,"
991-
<< fmt::format(dfmt, p.stats.in_num_extents/p.seconds)
992-
<< "ps) out("
993-
<< fmt::format(dfmt, p.stats.get_out_mbs(p.seconds))
994-
<< "MiB/s,"
995-
<< fmt::format(dfmt, p.stats.get_out_avg_kb())
996-
<< "KiB,"
997-
<< fmt::format(dfmt, p.stats.out_num_extents/p.seconds)
998-
<< "ps)";
999-
return out;
1000-
}
1001-
1002983
std::ostream& operator<<(std::ostream& out, const cache_size_stats_t& p)
1003984
{
1004985
constexpr const char* dfmt = "{:.2f}";
@@ -1025,6 +1006,15 @@ std::ostream& operator<<(std::ostream& out, const cache_size_stats_printer_t& p)
10251006
return out;
10261007
}
10271008

1009+
std::ostream& operator<<(std::ostream& out, const cache_io_stats_printer_t& p)
1010+
{
1011+
out << "in"
1012+
<< cache_size_stats_printer_t{p.seconds, p.stats.in_sizes}
1013+
<< " out"
1014+
<< cache_size_stats_printer_t{p.seconds, p.stats.out_sizes};
1015+
return out;
1016+
}
1017+
10281018
std::ostream& operator<<(std::ostream& out, const dirty_io_stats_printer_t& p)
10291019
{
10301020
constexpr const char* dfmt = "{:.2f}";

src/crimson/os/seastore/seastore_types.h

Lines changed: 24 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2557,62 +2557,6 @@ struct shard_stats_t {
25572557
}
25582558
};
25592559

2560-
struct cache_io_stats_t {
2561-
uint64_t in_size = 0;
2562-
uint64_t in_num_extents = 0;
2563-
uint64_t out_size = 0;
2564-
uint64_t out_num_extents = 0;
2565-
2566-
bool is_empty() const {
2567-
return in_num_extents == 0 && out_num_extents == 0;
2568-
}
2569-
2570-
double get_in_mbs(double seconds) const {
2571-
return (in_size>>12)/(seconds*256);
2572-
}
2573-
2574-
double get_in_avg_kb() const {
2575-
return (in_size>>10)/static_cast<double>(in_num_extents);
2576-
}
2577-
2578-
double get_out_mbs(double seconds) const {
2579-
return (out_size>>12)/(seconds*256);
2580-
}
2581-
2582-
double get_out_avg_kb() const {
2583-
return (out_size>>10)/static_cast<double>(out_num_extents);
2584-
}
2585-
2586-
void account_in(extent_len_t size) {
2587-
in_size += size;
2588-
++in_num_extents;
2589-
}
2590-
2591-
void account_out(extent_len_t size) {
2592-
out_size += size;
2593-
++out_num_extents;
2594-
}
2595-
2596-
void minus(const cache_io_stats_t& o) {
2597-
in_size -= o.in_size;
2598-
in_num_extents -= o.in_num_extents;
2599-
out_size -= o.out_size;
2600-
out_num_extents -= o.out_num_extents;
2601-
}
2602-
2603-
void add(const cache_io_stats_t& o) {
2604-
in_size += o.in_size;
2605-
in_num_extents += o.in_num_extents;
2606-
out_size += o.out_size;
2607-
out_num_extents += o.out_num_extents;
2608-
}
2609-
};
2610-
struct cache_io_stats_printer_t {
2611-
double seconds;
2612-
const cache_io_stats_t &stats;
2613-
};
2614-
std::ostream& operator<<(std::ostream&, const cache_io_stats_printer_t&);
2615-
26162560
struct cache_size_stats_t {
26172561
uint64_t size = 0;
26182562
uint64_t num_extents = 0;
@@ -2658,6 +2602,30 @@ struct cache_size_stats_printer_t {
26582602
};
26592603
std::ostream& operator<<(std::ostream&, const cache_size_stats_printer_t&);
26602604

2605+
struct cache_io_stats_t {
2606+
cache_size_stats_t in_sizes;
2607+
cache_size_stats_t out_sizes;
2608+
2609+
bool is_empty() const {
2610+
return in_sizes.is_empty() && out_sizes.is_empty();
2611+
}
2612+
2613+
void add(const cache_io_stats_t& o) {
2614+
in_sizes.add(o.in_sizes);
2615+
out_sizes.add(o.out_sizes);
2616+
}
2617+
2618+
void minus(const cache_io_stats_t& o) {
2619+
in_sizes.minus(o.in_sizes);
2620+
out_sizes.minus(o.out_sizes);
2621+
}
2622+
};
2623+
struct cache_io_stats_printer_t {
2624+
double seconds;
2625+
const cache_io_stats_t& stats;
2626+
};
2627+
std::ostream& operator<<(std::ostream&, const cache_io_stats_printer_t&);
2628+
26612629
struct dirty_io_stats_t {
26622630
cache_size_stats_t in_sizes;
26632631
uint64_t num_replace = 0;

0 commit comments

Comments
 (0)