]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test, common: add BufferListIterator.BenchDeref benchmark.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 6 Sep 2018 21:50:18 +0000 (23:50 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Mon, 17 Sep 2018 14:19:13 +0000 (16:19 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/test/bufferlist.cc

index 4e8a21f00fbfc6e2753625c270ec1ebf8167defc..e1d51df8278d9c14719f2325b38abaed47fde1fa 100644 (file)
@@ -1050,6 +1050,39 @@ TEST(BufferListIterator, end) {
   }
 }
 
+static void bench_bufferlistiter_deref(const size_t step,
+                                      const size_t bufsize,
+                                      const size_t bufnum) {
+  const std::string buf('a', bufsize);
+  ceph::bufferlist bl;
+
+  for (size_t i = 0; i < bufnum; i++) {
+    bl.append(ceph::bufferptr(buf.c_str(), buf.size()));
+  }
+
+  utime_t start = ceph_clock_now();
+  bufferlist::iterator iter = bl.begin();
+  while (iter != bl.end()) {
+    iter.advance(step);
+  }
+  utime_t end = ceph_clock_now();
+  cout << bufsize * bufnum << " derefs over bl with " << bufnum
+       << " buffers, each " << bufsize << " bytes long"
+       << " in " << (end - start) << std::endl;
+}
+
+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(4, 1, 1024000);
+  bench_bufferlistiter_deref(4, 10, 102400);
+  bench_bufferlistiter_deref(4, 100, 10240);
+  bench_bufferlistiter_deref(4, 1000, 1024);
+}
+
 TEST(BufferListIterator, advance) {
   bufferlist bl;
   const std::string one("ABC");