summaryrefslogtreecommitdiff
path: root/perf
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
parent314deb61851a0ddc37228d24e9f4eb106461370a (diff)
Ruby perf tests added
Diffstat (limited to 'perf')
-rw-r--r--perf/ruby/local_lat.rb75
-rw-r--r--perf/ruby/local_thr.rb90
-rw-r--r--perf/ruby/remote_lat.rb61
-rw-r--r--perf/ruby/remote_thr.rb55
4 files changed, 281 insertions, 0 deletions
diff --git a/perf/ruby/local_lat.rb b/perf/ruby/local_lat.rb
new file mode 100644
index 0000000..3079b2e
--- /dev/null
+++ b/perf/ruby/local_lat.rb
@@ -0,0 +1,75 @@
+#
+# 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 AssertionFailure < StandardError
+end
+
+def assert(bool, message = 'assertion failure')
+ raise AssertionFailure.new(message) unless bool
+end
+
+ if ARGV.length != 4
+ puts "usage: local_lat <in-interface> <out-interface> <message-size>
+ <roundtrip-count>"
+ Process.exit
+ end
+
+ in_interface = ARGV[0]
+ out_interface = ARGV[1]
+ message_size = ARGV[2]
+ roundtrip_count = ARGV[3]
+
+ # Print out the test parameters.
+ puts "message size: #{message_size} [B]"
+ puts "roundtrip count: #{roundtrip_count}"
+
+ # Create 0MQ transport.
+ rb_zmq = Zmq.new()
+
+ # Create the wiring.
+ context = rb_zmq.context(1,1)
+ in_socket = rb_zmq.socket(context, ZMQ_SUB)
+ out_socket = rb_zmq.socket(context, ZMQ_PUB)
+
+ # Bind.
+ rb_zmq.bind(in_socket, in_interface.to_s)
+ rb_zmq.bind(out_socket, out_interface.to_s)
+
+ # Create message data to send.
+ out_msg = rb_zmq.msg_init_size(message_size.to_i)
+
+ # Get initial timestamp.
+ start_time = Time.now
+
+ # The message loop.
+ for i in 0...roundtrip_count.to_i do
+ rb_zmq.send(out_socket, out_msg, ZMQ_NOBLOCK)
+ in_buf = rb_zmq.recv(in_socket, ZMQ_NOBLOCK)
+ assert(rb_zmq.msg_size(in_buf.msg) == message_size.to_i)
+ end
+
+ # Get final timestamp.
+ end_time = Time.now
+
+ # Compute and print out the latency.
+ latency = (end_time.to_f - start_time.to_f) *1000000 /
+ roundtrip_count.to_i / 2
+ puts "Your average latency is " + "%0.2f" % latency + "[us]"
+
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]"
+
+
diff --git a/perf/ruby/remote_lat.rb b/perf/ruby/remote_lat.rb
new file mode 100644
index 0000000..953e579
--- /dev/null
+++ b/perf/ruby/remote_lat.rb
@@ -0,0 +1,61 @@
+#
+# 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 AssertionFailure < StandardError
+end
+
+def assert(bool, message = 'assertion failure')
+ raise AssertionFailure.new(message) unless bool
+end
+
+ if ARGV.length != 4
+ puts "usage: remote_lat <in-interface> <out-interface>" + \
+ " <message-size> <roundtrip-count>"
+ Process.exit
+ end
+
+ in_interface = ARGV[0]
+ out_interface = ARGV[1]
+ message_size = ARGV[2]
+ roundtrip_count = ARGV[3]
+
+ # Create 0MQ transport.
+ rb_zmq = Zmq.new()
+
+ # Create the wiring.
+ context = rb_zmq.context(1,1)
+ in_socket = rb_zmq.socket(context, ZMQ_SUB)
+ out_socket = rb_zmq.socket(context, ZMQ_PUB)
+
+ # Connect.
+ rb_zmq.connect(in_socket, in_interface.to_s)
+ rb_zmq.connect(out_socket, out_interface.to_s)
+
+ # The message loop.
+ for i in 0...roundtrip_count.to_i do
+ data = rb_zmq.recv(in_socket, ZMQ_NOBLOCK)
+ assert(rb_zmq.msg_size(data.msg) == message_size.to_i)
+ rb_zmq.send(out_socket, data.msg, ZMQ_NOBLOCK)
+ end
+
+ # Wait till all messages are sent.
+ sleep 2
+
+
diff --git a/perf/ruby/remote_thr.rb b/perf/ruby/remote_thr.rb
new file mode 100644
index 0000000..6c3392e
--- /dev/null
+++ b/perf/ruby/remote_thr.rb
@@ -0,0 +1,55 @@
+#
+# 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 AssertionFailure < StandardError
+end
+
+def assert(bool, message = 'assertion failure')
+ raise AssertionFailure.new(message) unless bool
+end
+
+ if ARGV.length != 3
+ puts "usage: remote_thr <out-interface> <message-size> <message-count>"
+ Process.exit
+ end
+
+ out_interface = ARGV[0]
+ message_size = ARGV[1]
+ message_count = ARGV[2]
+
+ # Create 0MQ transport.
+ rb_zmq = Zmq.new();
+
+ # Create the wiring.
+ context = rb_zmq.context(1,1);
+ out_socket = rb_zmq.socket(context, ZMQ_PUB);
+ rb_zmq.bind(out_socket, out_interface.to_s);
+
+ # Create message data to send.
+ out_msg = rb_zmq.msg_init_size(message_size.to_s);
+
+ # The message loop.
+ for i in 0...message_count.to_i + 1 do
+ rb_zmq.send(out_socket, out_msg, ZMQ_NOBLOCK);
+ end
+
+ # Wait till all messages are sent.
+ sleep 2
+