From 976252c508b4feebef3b0811f640cd9bf0cfeeaa Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 8 Nov 2007 21:16:02 +0000 Subject: src/tests/perfdist: Use ssh to run distributed perftest. ./perfdist for usage. src/tests/perftest.cpp: --summary gives one-line report, can cut/paste into spreadsheet for multiple runs. --purge as initial clean-up step for distributed tests (see perfdist) git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@593321 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/tests/perfdist | 33 ++++++++++++++++ cpp/src/tests/perftest.cpp | 94 ++++++++++++++++++++++++++++------------------ 2 files changed, 91 insertions(+), 36 deletions(-) create mode 100755 cpp/src/tests/perfdist (limited to 'cpp/src') diff --git a/cpp/src/tests/perfdist b/cpp/src/tests/perfdist new file mode 100755 index 0000000000..07338f6822 --- /dev/null +++ b/cpp/src/tests/perfdist @@ -0,0 +1,33 @@ +#!/bin/bash +# +echo $_ +usage() { +cat < listen(opts.consumers); PublishThread publish; @@ -141,15 +150,15 @@ void PublishThread::run() { Session_0_10 session = connection.newSession(); // Wait for consumers. - cout << "Publisher wating for consumers " << flush; + if (!opts.summary) cout << "Waiting for consumers ready " << flush; SubscriptionManager subs(session); LocalQueue control; subs.subscribe(control, "control"); for (int i = 0; i < opts.consumers; ++i) { - cout << "." << flush; + if (!opts.summary) cout << "." << flush; expect(control.pop().getData(), "ready"); } - cout << endl; + if (!opts.summary) cout << endl; // Create test message size_t msgSize=max(opts.size, 32); @@ -159,14 +168,14 @@ void PublishThread::run() { msg.getDeliveryProperties().setDeliveryMode(framing::PERSISTENT); // Time sending message. AbsTime start=now(); - cout << "Publishing " << opts.count << " messages " << flush; + if (!opts.summary) cout << "Publishing " << opts.count << " messages " << flush; for (int i=0; i(report); + consume_rate += rate/opts.consumers; + } } end=now(); @@ -197,11 +212,19 @@ void PublishThread::run() { transfers=2*opts.count; else // sent once, received N times. transfers=opts.count*(opts.consumers + 1); - - cout << endl - << "total transfers:" << transfers << endl - << "total secs:" << secs(start, end) << endl - << "total transfers/sec:" << transfers/secs(start, end) << endl; + double total_rate=transfers/secs(start, end); + if (opts.summary) + cout << opts.mode << '(' << opts.count + << ':' << opts.consumers << ')' + << '\t' << publish_rate + << '\t' << consume_rate + << '\t' << total_rate + << endl; + else + cout << endl + << "total transfers:" << transfers << endl + << "total secs:" << secs(start, end) << endl + << "total rate:" << total_rate << endl; connection.close(); } @@ -238,23 +261,22 @@ void ListenThread::run() { int consumed=0; AbsTime start=now(); Message msg; - if (!opts.publish) - cout << "Consuming " << flush; while ((msg=consume.pop()).getData() != "done") { ++consumed; - if (!opts.publish && (consumed%10000) == 0) - cout << "." << flush; } - if (!opts.publish) - cout << endl; msg.acknowledge(); // Ack all outstanding messages. AbsTime end=now(); // Report to publisher. ostringstream report; - report << "consume count: " << consumed << endl - << "consume secs: " << secs(start, end) << endl - << "consume rate: " << consumed/secs(start,end) << endl; + double consume_rate=consumed/secs(start,end); + if (opts.summary) + report << consume_rate; + else + report << "consume count: " << consumed << endl + << "consume secs: " << secs(start, end) << endl + << "consume rate: " << consume_rate << endl; + session.messageTransfer(arg::content=Message(report.str(), "control")); connection.close(); } -- cgit v1.2.1