From 11a6cb925f7ff3d17f48edccc886839b4d49ef0b Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Mon, 7 Sep 2009 11:00:20 +0200 Subject: Ruby binding functional --- perf/ruby/local_lat.rb | 66 +++++++++--------------------------- perf/ruby/local_thr.rb | 90 +++++++++++++++---------------------------------- perf/ruby/remote_lat.rb | 64 +++++++++++++++-------------------- perf/ruby/remote_thr.rb | 48 ++++++++++---------------- 4 files changed, 89 insertions(+), 179 deletions(-) (limited to 'perf') diff --git a/perf/ruby/local_lat.rb b/perf/ruby/local_lat.rb index 3079b2e..b71af80 100644 --- a/perf/ruby/local_lat.rb +++ b/perf/ruby/local_lat.rb @@ -18,58 +18,24 @@ require 'librbzmq' -class AssertionFailure < StandardError +if ARGV.length != 3 + puts "usage: local_lat " + Process.exit end - -def assert(bool, message = 'assertion failure') - raise AssertionFailure.new(message) unless bool -end - - if ARGV.length != 4 - puts "usage: local_lat - " - 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 +bind_to = ARGV[0] +message_size = ARGV[1].to_i +roundtrip_count = ARGV[2].to_i + +ctx = Context.new(1, 1) +s = Socket.new(ctx, REP); +s.bind(bind_to); + +for i in 0...roundtrip_count do + msg = s.recv(0) + s.send(msg, 0) +end - # 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 +sleep 1 - # 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 index 6e2c62a..4d9357b 100644 --- a/perf/ruby/local_thr.rb +++ b/perf/ruby/local_thr.rb @@ -17,74 +17,40 @@ # along with this program. If not, see . require 'librbzmq' -class Context -end -class Socket +if ARGV.length != 3 + puts "usage: local_thr " + Process.exit end -class AssertionFailure < StandardError -end +bind_to = ARGV[0] +message_size = ARGV[1].to_i +message_count = ARGV[2].to_i + +ctx = Context.new(1, 1) +s = Socket.new(ctx, SUB); +s.bind(bind_to); -def assert(bool, message = 'assertion failure') - raise AssertionFailure.new(message) unless bool +msg = s.recv(0) + +start_time = Time.now + +for i in 1...message_count.to_i do + msg = s.recv(0) end - if ARGV.length != 3 - puts "usage: local_thr " + \ - " " - Process.exit - end +end_time = Time.now - 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]" +elapsed = (end_time.to_f - start_time.to_f) * 1000000 +if elapsed == 0 + elapsed = 1 +end + +throughput = message_count * 1000000 / elapsed +megabits = throughput * message_size * 8 / 1000000 +puts "message size: %i [B]" % message_size +puts "message count: %i" % message_count +puts "mean throughput: %i [msg/s]" % throughput +puts "mean throughput: %.3f [Mb/s]" % megabits diff --git a/perf/ruby/remote_lat.rb b/perf/ruby/remote_lat.rb index 953e579..9387fe1 100644 --- a/perf/ruby/remote_lat.rb +++ b/perf/ruby/remote_lat.rb @@ -18,44 +18,36 @@ require 'librbzmq' -class AssertionFailure < StandardError +if ARGV.length != 3 + puts "usage: remote_lat " + Process.exit end -def assert(bool, message = 'assertion failure') - raise AssertionFailure.new(message) unless bool +connect_to = ARGV[0] +message_size = ARGV[1].to_i +roundtrip_count = ARGV[2].to_i + +ctx = Context.new(1, 1) +s = Socket.new(ctx, REQ); +s.connect(connect_to); + +msg = "#{'0'*message_size}" + +start_time = Time.now + +for i in 0...roundtrip_count do + s.send(msg, 0) + msg = s.recv(0) end - if ARGV.length != 4 - puts "usage: remote_lat " + \ - " " - 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 - +end_time = Time.now + +elapsed = (end_time.to_f - start_time.to_f) * 1000000 +latency = elapsed / roundtrip_count / 2 + +puts "message size: %i [B]" % message_size +puts "roundtrip count: %i" % roundtrip_count +puts "mean latency: %.3f [us]" % latency + + diff --git a/perf/ruby/remote_thr.rb b/perf/ruby/remote_thr.rb index 6c3392e..7d55f86 100644 --- a/perf/ruby/remote_thr.rb +++ b/perf/ruby/remote_thr.rb @@ -18,38 +18,24 @@ require 'librbzmq' -class AssertionFailure < StandardError +if ARGV.length != 3 + puts "usage: remote_thr " + Process.exit end + +connect_to = ARGV[0] +message_size = ARGV[1].to_i +message_count = ARGV[2].to_i + +ctx = Context.new(1, 1) +s = Socket.new(ctx, PUB); +s.connect(connect_to); + +msg = "#{'0'*message_size}" -def assert(bool, message = 'assertion failure') - raise AssertionFailure.new(message) unless bool +for i in 0...message_count do + s.send(msg, 0) end - if ARGV.length != 3 - puts "usage: remote_thr " - 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 - +sleep 10 + -- cgit v1.2.3