From 400df9990b30318609ea8d212aac83dcd2cf3ddf Mon Sep 17 00:00:00 2001 From: Sridhar Seshasayee Date: Fri, 16 Sep 2022 16:50:46 +0530 Subject: [PATCH] osd: Randomize osd bench buffer data before submitting to objectstore Introduce randomization of buffer content for each osd bench write. This is to prevent any possible optimizations that the backing device may use for the writes. This should make the benchmark to be a bit more accurate. Fixes: https://tracker.ceph.com/issues/57577 Signed-off-by: Sridhar Seshasayee (cherry picked from commit 51e4067c582f36b7ba80c67711c310aef2da36ea) --- src/osd/OSD.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 323d1edace30..7111fdbad601 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3171,6 +3171,7 @@ int OSD::run_osd_bench_test( ostream &ss) { int ret = 0; + srand(time(NULL) % (unsigned long) -1); uint32_t duration = cct->_conf->osd_bench_duration; if (bsize > (int64_t) cct->_conf->osd_bench_max_block_size) { @@ -3252,12 +3253,6 @@ int OSD::run_osd_bench_test( } } - bufferlist bl; - bufferptr bp(bsize); - memset(bp.c_str(), 'a', bp.length()); - bl.push_back(std::move(bp)); - bl.rebuild_page_aligned(); - { C_SaferCond waiter; if (!service.meta_ch->flush_commit(&waiter)) { @@ -3265,10 +3260,15 @@ int OSD::run_osd_bench_test( } } + bufferlist bl; utime_t start = ceph_clock_now(); for (int64_t pos = 0; pos < count; pos += bsize) { char nm[30]; unsigned offset = 0; + bufferptr bp(bsize); + memset(bp.c_str(), rand() & 0xff, bp.length()); + bl.push_back(std::move(bp)); + bl.rebuild_page_aligned(); if (onum && osize) { snprintf(nm, sizeof(nm), "disk_bw_test_%d", (int)(rand() % onum)); offset = rand() % (osize / bsize) * bsize; @@ -3283,6 +3283,7 @@ int OSD::run_osd_bench_test( if (!onum || !osize) { cleanupt.remove(coll_t::meta(), ghobject_t(soid)); } + bl.clear(); } { -- 2.47.3