From: Sridhar Seshasayee Date: Fri, 16 Sep 2022 11:20:46 +0000 (+0530) Subject: osd: Randomize osd bench buffer data before submitting to objectstore X-Git-Tag: v18.1.0~719^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=51e4067c582f36b7ba80c67711c310aef2da36ea;p=ceph.git 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 --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index acbfdf4667c2..b4bc95481e22 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3181,6 +3181,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) { @@ -3262,12 +3263,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)) { @@ -3275,10 +3270,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[34]; 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; @@ -3293,6 +3293,7 @@ int OSD::run_osd_bench_test( if (!onum || !osize) { cleanupt.remove(coll_t::meta(), ghobject_t(soid)); } + bl.clear(); } {