diff options
| author | Martin Sustrik <sustrik@fastmq.commkdir> | 2009-09-07 11:10:58 +0200 | 
|---|---|---|
| committer | Martin Sustrik <sustrik@fastmq.commkdir> | 2009-09-07 11:10:58 +0200 | 
| commit | 87ccbb9fae0f9234f82f9a9ec6a215f5e73209d3 (patch) | |
| tree | c2b7da25c754c3a0c1c46b8f07a2148c34fc9232 /perf/ruby | |
| parent | 67253f3186488db93dee23bd9194419f58f0b1d3 (diff) | |
| parent | d62c74232a4c1edd38004933afd0c7dc119bd98b (diff) | |
Merge branch 'master' of git@github.com:sustrik/zeromq2
Diffstat (limited to 'perf/ruby')
| -rw-r--r-- | perf/ruby/local_lat.rb | 66 | ||||
| -rw-r--r-- | perf/ruby/local_thr.rb | 90 | ||||
| -rw-r--r-- | perf/ruby/remote_lat.rb | 64 | ||||
| -rw-r--r-- | perf/ruby/remote_thr.rb | 48 | 
4 files changed, 89 insertions, 179 deletions
| 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 <bind-to> <message-size> <roundtrip-count>" +	Process.exit  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 +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 <http://www.gnu.org/licenses/>.  require 'librbzmq' -class Context -end -class Socket +if ARGV.length != 3 +	puts "usage: local_thr <bind-to> <message-size> <message-count>" +    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 <in-interface> <message-size>" + \ -		" <message-count>" -        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 <connect-to> <message-size> <roundtrip-count>" +    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 <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 -	 +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 <connect-to> <message-size> <message-count>" +	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 <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 -     +sleep 10 + | 
