]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/bufferlist: shrink benchmark iterations under ASan 69674/head
authorSun Yuechi <sunyuechi@iscas.ac.cn>
Tue, 23 Jun 2026 06:16:38 +0000 (14:16 +0800)
committerSun Yuechi <sunyuechi@iscas.ac.cn>
Wed, 24 Jun 2026 03:44:05 +0000 (11:44 +0800)
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 <sunyuechi@iscas.ac.cn>
src/test/bufferlist.cc

index 41b47c6102967df09a43a71878cb552d0b1fd134..629ab3e21d080bd97ec852eca2417fdbda6dba24 100644 (file)
 #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<count; ++i) {
       bufferptr bp(buflen);
@@ -583,7 +596,7 @@ TEST(BufferPtr, copy_in_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);
     for (int i=0; i<count; ++i) {
       bufferptr bp(buflen);
       for (int64_t j=0; j<buflen; j += s) {
@@ -627,7 +640,7 @@ TEST(BufferPtr, append_bench) {
   for (int s=4; s<=16384; s*=4) {
     utime_t start = ceph_clock_now();
     int buflen = 1048576;
-    int count = 4000;
+    int count = asan_bench_rounds(4000);
     for (int i=0; i<count; ++i) {
       bufferptr bp(buflen);
       bp.set_length(0);
@@ -833,15 +846,15 @@ static void bench_bufferlistiter_deref(const size_t step,
 }
 
 TEST(BufferListIterator, BenchDeref) {
-  bench_bufferlistiter_deref(1, 1, 4096000);
-  bench_bufferlistiter_deref(1, 10, 409600);
-  bench_bufferlistiter_deref(1, 100, 40960);
-  bench_bufferlistiter_deref(1, 1000, 4096);
+  bench_bufferlistiter_deref(1, 1, asan_bench_rounds(4096000));
+  bench_bufferlistiter_deref(1, 10, asan_bench_rounds(409600));
+  bench_bufferlistiter_deref(1, 100, asan_bench_rounds(40960));
+  bench_bufferlistiter_deref(1, 1000, asan_bench_rounds(4096));
 
-  bench_bufferlistiter_deref(4, 1, 1024000);
-  bench_bufferlistiter_deref(4, 10, 102400);
-  bench_bufferlistiter_deref(4, 100, 10240);
-  bench_bufferlistiter_deref(4, 1000, 1024);
+  bench_bufferlistiter_deref(4, 1, asan_bench_rounds(1024000));
+  bench_bufferlistiter_deref(4, 10, asan_bench_rounds(102400));
+  bench_bufferlistiter_deref(4, 100, asan_bench_rounds(10240));
+  bench_bufferlistiter_deref(4, 1000, asan_bench_rounds(1024));
 }
 
 TEST(BufferListIterator, advance) {
@@ -1356,17 +1369,18 @@ void bench_bufferlist_alloc(int size, int num, int per)
 }
 
 TEST(BufferList, BenchAlloc) {
-  bench_bufferlist_alloc(32768, 100000, 16);
-  bench_bufferlist_alloc(25000, 100000, 16);
-  bench_bufferlist_alloc(16384, 100000, 16);
-  bench_bufferlist_alloc(10000, 100000, 16);
-  bench_bufferlist_alloc(8192, 100000, 16);
-  bench_bufferlist_alloc(6000, 100000, 16);
-  bench_bufferlist_alloc(4096, 100000, 16);
-  bench_bufferlist_alloc(1024, 100000, 16);
-  bench_bufferlist_alloc(256, 100000, 16);
-  bench_bufferlist_alloc(32, 100000, 16);
-  bench_bufferlist_alloc(4, 100000, 16);
+  const int n = asan_bench_rounds(100000);
+  bench_bufferlist_alloc(32768, n, 16);
+  bench_bufferlist_alloc(25000, n, 16);
+  bench_bufferlist_alloc(16384, n, 16);
+  bench_bufferlist_alloc(10000, n, 16);
+  bench_bufferlist_alloc(8192, n, 16);
+  bench_bufferlist_alloc(6000, n, 16);
+  bench_bufferlist_alloc(4096, n, 16);
+  bench_bufferlist_alloc(1024, n, 16);
+  bench_bufferlist_alloc(256, n, 16);
+  bench_bufferlist_alloc(32, n, 16);
+  bench_bufferlist_alloc(4, n, 16);
 }
 
 /*
@@ -1391,7 +1405,7 @@ TEST(BufferList, append_bench_with_size_hint) {
   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(std::size(src));
       for (auto iter = std::begin(src);
@@ -1408,7 +1422,7 @@ TEST(BufferList, append_bench_with_size_hint) {
 
 TEST(BufferList, append_bench_with_size_hint2) {
   std::array<char, 1048576> src = { 0, };
-  constexpr size_t rounds = 4000;
+  constexpr size_t rounds = asan_bench_rounds(4000);
   constexpr int conc_bl = 400;
   std::vector<ceph::bufferlist*> bls(conc_bl);
 
@@ -1439,7 +1453,7 @@ TEST(BufferList, append_bench) {
   std::array<char, 1048576> 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<char, 1048576> src = { 0, };
-  constexpr size_t rounds = 4000;
+  constexpr size_t rounds = asan_bench_rounds(4000);
   constexpr int conc_bl = 400;
   std::vector<ceph::bufferlist*> 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<ceph::bufferlist*> bls(conc_bl);