#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];
}
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) {
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);
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) {
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);
}
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) {
}
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);
}
/*
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);
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);
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);
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);
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) {
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);