summaryrefslogtreecommitdiff
path: root/perf/ruby/local_thr.rb
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@fastmq.commkdir>2009-08-31 12:45:42 +0200
committerMartin Sustrik <sustrik@fastmq.commkdir>2009-08-31 12:45:42 +0200
commitb6d345f4a6402cf2e831a8b9d113f036b394a0bc (patch)
tree73200a8e35b3409914b086876b872cf41d0df21e /perf/ruby/local_thr.rb
parent314deb61851a0ddc37228d24e9f4eb106461370a (diff)
Ruby perf tests added
Diffstat (limited to 'perf/ruby/local_thr.rb')
-rw-r--r--perf/ruby/local_thr.rb90
1 files changed, 90 insertions, 0 deletions
diff --git a/perf/ruby/local_thr.rb b/perf/ruby/local_thr.rb
new file mode 100644
index 0000000..6e2c62a
--- /dev/null
+++ b/perf/ruby/local_thr.rb
@@ -0,0 +1,90 @@
+#
+# Copyright (c) 2007-2009 FastMQ Inc.
+#
+# This file is part of 0MQ.
+#
+# 0MQ is free software; you can redistribute it and/or modify it under
+# the terms of the Lesser GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# 0MQ is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# Lesser GNU General Public License for more details.
+#
+# You should have received a copy of the Lesser GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+require 'librbzmq'
+class Context
+end
+
+class Socket
+end
+
+class AssertionFailure < StandardError
+end
+
+def assert(bool, message = 'assertion failure')
+ raise AssertionFailure.new(message) unless bool
+end
+
+ if ARGV.length != 3
+ puts "usage: local_thr <in-interface> <message-size>" + \
+ " <message-count>"
+ Process.exit
+ end
+
+ in_interface = ARGV[0]
+ message_size = ARGV[1]
+ message_count = ARGV[2]
+
+ # Print out the test parameters.
+ puts "message size: " + message_size.to_s + " [B]"
+ puts "message count: " + message_count.to_s
+
+ # Create 0MQ transport.
+ rb_zmq = Zmq.new();
+
+ # Create context.
+ context = rb_zmq.context(1, 1);
+
+ # Create the socket.
+ in_socket = rb_zmq.socket(context, ZMQ_SUB);
+
+ # Connect.
+ rb_zmq.connect(in_socket, in_interface.to_s);
+
+ # Receive first message
+ data = rb_zmq.recv(in_socket, ZMQ_NOBLOCK);
+ assert(rb_zmq.msg_size(data.msg) == message_size.to_i)
+
+ # Get initial timestamp.
+ start_time = Time.now
+
+ # The message loop.
+ for i in 0...message_count.to_i-1 do
+ data = rb_zmq.recv(in_socket, ZMQ_NOBLOCK);
+ assert(rb_zmq.msg_size(data.msg) == message_size.to_i)
+ end
+
+ # Get terminal timestamp.
+ end_time = Time.now
+
+ # Compute and print out the throughput.
+ if end_time.to_f - start_time.to_f != 0
+ message_throughput = message_count.to_i /
+ (end_time.to_f - start_time.to_f);
+ else
+ message_throughput = message_count.to_i
+ end
+
+ megabit_throughput = message_throughput.to_f * message_size.to_i * 8 /
+ 1000000;
+ puts "Your average throughput is " + "%0.2f" % message_throughput.to_s +
+ " [msg/s]"
+ puts "Your average throughput is " + "%0.2f" % megabit_throughput.to_s +
+ " [Mb/s]"
+
+