From: Sun Yuechi Date: Tue, 23 Jun 2026 06:16:38 +0000 (+0800) Subject: test/bufferlist: shrink benchmark iterations under ASan X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e16e6398b1e05bb3d98750dffa1989f5ad32d158;p=ceph.git test/bufferlist: shrink benchmark iterations under ASan The pure-timing *_bench/BenchAlloc loops repeat a stateless path millions of times. Under ASan that adds no memory-error coverage but inflates the run from minutes to hours, so cut the iteration counts when built with ASan. Signed-off-by: Sun Yuechi --- diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index 41b47c61029..629ab3e21d0 100644 --- a/src/test/bufferlist.cc +++ b/src/test/bufferlist.cc @@ -47,6 +47,18 @@ #define MAX_TEST 1000000 #define FILENAME "bufferlist" +#ifndef __has_feature +#define __has_feature(x) 0 +#endif +#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) +static constexpr bool bench_under_asan = true; +#else +static constexpr bool bench_under_asan = false; +#endif +static constexpr size_t asan_bench_rounds(size_t full) { + return bench_under_asan ? (full < 2 ? full : 2) : full; +} + using namespace std; static char cmd[128]; @@ -140,12 +152,13 @@ void bench_buffer_alloc(int size, int num) } TEST(Buffer, BenchAlloc) { - bench_buffer_alloc(16384, 1000000); - bench_buffer_alloc(4096, 1000000); - bench_buffer_alloc(1024, 1000000); - bench_buffer_alloc(256, 1000000); - bench_buffer_alloc(32, 1000000); - bench_buffer_alloc(4, 1000000); + const int n = asan_bench_rounds(1000000); + bench_buffer_alloc(16384, n); + bench_buffer_alloc(4096, n); + bench_buffer_alloc(1024, n); + bench_buffer_alloc(256, n); + bench_buffer_alloc(32, n); + bench_buffer_alloc(4, n); } TEST(BufferRaw, ostream) { @@ -544,7 +557,7 @@ TEST(BufferPtr, copy_out_bench) { for (int s=1; s<=8; s*=2) { utime_t start = ceph_clock_now(); int buflen = 1048576; - int count = 1000; + int count = asan_bench_rounds(1000); uint64_t v; for (int i=0; i src = { 0, }; - constexpr size_t rounds = 4000; + constexpr size_t rounds = asan_bench_rounds(4000); constexpr int conc_bl = 400; std::vector bls(conc_bl); @@ -1439,7 +1453,7 @@ TEST(BufferList, append_bench) { std::array src = { 0, }; for (size_t step = 4; step <= 16384; step *= 4) { const utime_t start = ceph_clock_now(); - constexpr size_t rounds = 4000; + constexpr size_t rounds = asan_bench_rounds(4000); for (size_t r = 0; r < rounds; ++r) { ceph::bufferlist bl; for (auto iter = std::begin(src); @@ -1456,7 +1470,7 @@ TEST(BufferList, append_bench) { TEST(BufferList, append_bench2) { std::array src = { 0, }; - constexpr size_t rounds = 4000; + constexpr size_t rounds = asan_bench_rounds(4000); constexpr int conc_bl = 400; std::vector bls(conc_bl); @@ -1488,7 +1502,7 @@ TEST(BufferList, append_hole_bench) { for (size_t step = 512; step <= 65536; step *= 2) { const utime_t start = ceph_clock_now(); - constexpr size_t rounds = 80000; + constexpr size_t rounds = asan_bench_rounds(80000); for (size_t r = 0; r < rounds; ++r) { ceph::bufferlist bl; while (bl.length() < targeted_bl_size) { @@ -1503,7 +1517,7 @@ TEST(BufferList, append_hole_bench) { TEST(BufferList, append_hole_bench2) { constexpr size_t targeted_bl_size = 1048576; - constexpr size_t rounds = 80000; + constexpr size_t rounds = asan_bench_rounds(80000); constexpr int conc_bl = 400; std::vector bls(conc_bl);