From: Ronen Friedman Date: Tue, 2 Aug 2022 08:40:18 +0000 (+0000) Subject: osd: a faster version of SnapMapper::get_prefix() X-Git-Tag: v18.0.0~311^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f39ccb1a90a3c77be09fd752a8c59ae5478b45dc;p=ceph.git 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 --- diff --git a/src/osd/SnapMapper.cc b/src/osd/SnapMapper.cc index 804213b1f264..26ace62a7382 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(