From f39ccb1a90a3c77be09fd752a8c59ae5478b45dc Mon Sep 17 00:00:00 2001 From: Ronen Friedman Date: Tue, 2 Aug 2022 08:40:18 +0000 Subject: [PATCH] osd: a faster version of SnapMapper::get_prefix() Using fmtlib, and treating the size of uint64_t as a known quantity. Per google-bench - the new version is 10% to 20% faster. Signed-off-by: Ronen Friedman --- src/osd/SnapMapper.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/osd/SnapMapper.cc b/src/osd/SnapMapper.cc index 804213b1f2644..26ace62a7382e 100644 --- a/src/osd/SnapMapper.cc +++ b/src/osd/SnapMapper.cc @@ -13,6 +13,7 @@ */ #include "SnapMapper.h" +#include #define dout_context cct #define dout_subsys ceph_subsys_osd @@ -99,13 +100,11 @@ int OSDriver::get_next( string SnapMapper::get_prefix(int64_t pool, snapid_t snap) { - char buf[100]; - int len = snprintf( - buf, sizeof(buf), - "%lld_%.*X_", - (long long)pool, - (int)(sizeof(snap)*2), static_cast(snap)); - return MAPPING_PREFIX + string(buf, len); + static_assert(sizeof(pool) == 8, "assumed by the formatting code"); + return fmt::sprintf("%s%lld_%.16X_", + MAPPING_PREFIX, + pool, + snap); } string SnapMapper::to_raw_key( -- 2.39.5