}
}
+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");