void *ObjBencher::status_printer(void *_bencher) {
ObjBencher *bencher = static_cast<ObjBencher *>(_bencher);
bench_data& data = bencher->data;
+ Formatter *formatter = bencher->formatter;
+ ostream *outstream = bencher->outstream;
Cond cond;
int i = 0;
int previous_writes = 0;
utime_t ONE_SECOND;
ONE_SECOND.set_from_double(1.0);
bencher->lock.Lock();
+ if (formatter)
+ formatter->open_array_section("datas");
while(!data.done) {
utime_t cur_time = ceph_clock_now(bencher->cct);
- if (i % 20 == 0) {
+ if (i % 20 == 0 && !formatter) {
if (i > 0)
cur_time.localtime(cout) << " min lat: " << data.min_latency
<< " max lat: " << data.max_latency
data.history.iops.push_back(iops);
}
+
+ if (formatter)
+ formatter->open_object_section("data");
double avg_bandwidth = (double) (data.object_size) * (data.finished)
/ (double)(cur_time - data.start_time) / (1024*1024);
if (previous_writes != data.finished) {
previous_writes = data.finished;
cycleSinceChange = 0;
- bencher->out(cout, cur_time) << setfill(' ')
+ if (!formatter) {
+ bencher->out(cout, cur_time) << setfill(' ')
<< setw(5) << i
<< setw(8) << data.in_flight
<< setw(10) << data.started
<< setw(10) << bandwidth
<< setw(10) << (double)data.cur_latency
<< setw(10) << data.avg_latency << std::endl;
+ } else {
+ formatter->dump_format("sec", "%d", i);
+ formatter->dump_format("cur_ops", "%d", data.in_flight);
+ formatter->dump_format("started", "%d", data.started);
+ formatter->dump_format("finished", "%d", data.finished);
+ formatter->dump_format("avg_bw", "%f", avg_bandwidth);
+ formatter->dump_format("cur_bw", "%f", bandwidth);
+ formatter->dump_format("last_lat", "%f", (double)data.cur_latency);
+ formatter->dump_format("avg_lat", "%f", data.avg_latency);
+ }
}
else {
- bencher->out(cout, cur_time) << setfill(' ')
+ if (!formatter) {
+ bencher->out(cout, cur_time) << setfill(' ')
<< setw(5) << i
<< setw(8) << data.in_flight
<< setw(10) << data.started
<< setw(10) << '0'
<< setw(10) << '-'
<< setw(10) << data.avg_latency << std::endl;
+ } else {
+ formatter->dump_format("sec", "%d", i);
+ formatter->dump_format("cur_ops", "%d", data.in_flight);
+ formatter->dump_format("started", "%d", data.started);
+ formatter->dump_format("finished", "%d", data.finished);
+ formatter->dump_format("avg_bw", "%f", avg_bandwidth);
+ formatter->dump_format("cur_bw", "%f", 0);
+ formatter->dump_format("last_lat", "%f", 0);
+ formatter->dump_format("avg_lat", "%f", data.avg_latency);
+ }
+ }
+ if (formatter) {
+ formatter->close_section(); // data
+ formatter->flush(*outstream);
}
++i;
++cycleSinceChange;
cond.WaitInterval(bencher->cct, bencher->lock, ONE_SECOND);
}
+ if (formatter)
+ formatter->close_section(); //datas
bencher->lock.Unlock();
return NULL;
}
//fill in contentsChars deterministically so we can check returns
sanitize_object_contents(&data, data.object_size);
+ if (formatter)
+ formatter->open_object_section("bench");
+
if (OP_WRITE == operation) {
r = write_bench(secondsToRun, concurrentios, run_name_meta);
if (r != 0) goto out;
}
out:
+ if (formatter) {
+ formatter->close_section(); // bench
+ formatter->flush(*outstream);
+ *outstream << std::endl;
+ }
delete[] contentsChars;
return r;
}
int concurrentios, const string& run_name_meta) {
if (concurrentios <= 0)
return -EINVAL;
-
- out(cout) << "Maintaining " << concurrentios << " concurrent writes of "
- << data.object_size << " bytes for up to "
- << secondsToRun << " seconds"
- << std::endl;
+
+ if (!formatter) {
+ out(cout) << "Maintaining " << concurrentios << " concurrent writes of "
+ << data.object_size << " bytes for up to "
+ << secondsToRun << " seconds"
+ << std::endl;
+ } else {
+ formatter->dump_format("concurrent_ios", "%d", concurrentios);
+ formatter->dump_format("object_size", "%d", data.object_size);
+ formatter->dump_format("seconds_to_run", "%d", secondsToRun);
+ }
bufferlist* newContents = 0;
std::string prefix = generate_object_prefix();
- out(cout) << "Object prefix: " << prefix << std::endl;
+ if (!formatter)
+ out(cout) << "Object prefix: " << prefix << std::endl;
+ else
+ formatter->dump_string("object_prefix", prefix);
std::vector<string> name(concurrentios);
std::string newName;
bandwidth = ((double)data.finished)*((double)data.object_size)/(double)timePassed;
bandwidth = bandwidth/(1024*1024); // we want it in MB/sec
- out(cout) << "Total time run: " << timePassed << std::endl
+ if (!formatter) {
+ out(cout) << "Total time run: " << timePassed << std::endl
<< "Total writes made: " << data.finished << std::endl
<< "Write size: " << data.object_size << std::endl
<< "Bandwidth (MB/sec): " << setprecision(3) << bandwidth << std::endl
<< "Stddev Latency: " << vec_stddev(data.history.latency) << std::endl
<< "Max latency: " << data.max_latency << std::endl
<< "Min latency: " << data.min_latency << std::endl;
-
+ } else {
+ formatter->dump_format("total_time_run", "%f", (double)timePassed);
+ formatter->dump_format("total_writes_made", "%d", data.finished);
+ formatter->dump_format("write_size", "%d", data.object_size);
+ formatter->dump_format("bandwidth", "%f", bandwidth);
+ formatter->dump_format("stddev_bandwidth", "%f", vec_stddev(data.history.bandwidth));
+ formatter->dump_format("max_bandwidth", "%f", data.idata.max_bandwidth);
+ formatter->dump_format("min_bandwidth", "%f", data.idata.min_bandwidth);
+ formatter->dump_format("average_iops", "%d", (int)(data.finished/timePassed));
+ formatter->dump_format("stddev_iops", "%d", vec_stddev(data.history.iops));
+ formatter->dump_format("max_iops", "%d", data.idata.max_iops);
+ formatter->dump_format("min_iops", "%d", data.idata.min_iops);
+ formatter->dump_format("average_latency", "%f", data.avg_latency);
+ formatter->dump_format("stddev_latency", "%f", vec_stddev(data.history.latency));
+ formatter->dump_format("max_latency:", "%f", data.max_latency);
+ formatter->dump_format("min_latency", "%f", data.min_latency);
+ }
//write object size/number data for read benchmarks
::encode(data.object_size, b_write);
::encode(data.finished, b_write);
bandwidth = ((double)data.finished)*((double)data.object_size)/(double)runtime;
bandwidth = bandwidth/(1024*1024); // we want it in MB/sec
- out(cout) << "Total time run: " << runtime << std::endl
+ if (!formatter) {
+ out(cout) << "Total time run: " << runtime << std::endl
<< "Total reads made: " << data.finished << std::endl
<< "Read size: " << data.object_size << std::endl
<< "Bandwidth (MB/sec): " << setprecision(3) << bandwidth << std::endl
<< "Average Latency: " << data.avg_latency << std::endl
<< "Max latency: " << data.max_latency << std::endl
<< "Min latency: " << data.min_latency << std::endl;
+ } else {
+ formatter->dump_format("total_time_run", "%f", (double)runtime);
+ formatter->dump_format("total_reads_made", "%d", data.finished);
+ formatter->dump_format("read_size", "%d", data.object_size);
+ formatter->dump_format("bandwidth", "%f", bandwidth);
+ formatter->dump_format("average_iops", "%d", (int)(data.finished/runtime));
+ formatter->dump_format("stddev_iops", "%d", vec_stddev(data.history.iops));
+ formatter->dump_format("max_iops", "%d", data.idata.max_iops);
+ formatter->dump_format("min_iops", "%d", data.idata.min_iops);
+ formatter->dump_format("average_latency", "%f", data.avg_latency);
+ formatter->dump_format("max_latency", "%f", data.max_latency);
+ formatter->dump_format("min_latency", "%f", data.min_latency);
+ }
completions_done();
bandwidth = ((double)data.finished)*((double)data.object_size)/(double)runtime;
bandwidth = bandwidth/(1024*1024); // we want it in MB/sec
- out(cout) << "Total time run: " << runtime << std::endl
+ if (!formatter) {
+ out(cout) << "Total time run: " << runtime << std::endl
<< "Total reads made: " << data.finished << std::endl
<< "Read size: " << data.object_size << std::endl
<< "Bandwidth (MB/sec): " << setprecision(3) << bandwidth << std::endl
<< "Average Latency: " << data.avg_latency << std::endl
<< "Max latency: " << data.max_latency << std::endl
<< "Min latency: " << data.min_latency << std::endl;
-
+ } else {
+ formatter->dump_format("total_time_run", "%f", (double)runtime);
+ formatter->dump_format("total_reads_made", "%d", data.finished);
+ formatter->dump_format("read_size", "%d", data.object_size);
+ formatter->dump_format("bandwidth", "%f", bandwidth);
+ formatter->dump_format("average_iops", "%d", (int)(data.finished/runtime));
+ formatter->dump_format("stddev_iops", "%d", vec_stddev(data.history.iops));
+ formatter->dump_format("max_iops", "%d", data.idata.max_iops);
+ formatter->dump_format("min_iops", "%d", data.idata.min_iops);
+ formatter->dump_format("average_latency", "%f", data.avg_latency);
+ formatter->dump_format("max_latency", "%f", data.max_latency);
+ formatter->dump_format("min_latency", "%f", data.min_latency);
+ }
completions_done();
return 0;