From 303818b43d42bc06ec066976d2ed80650651fd5e Mon Sep 17 00:00:00 2001 From: TAGOMORI Satoshi Date: Wed, 4 Mar 2015 14:57:23 +0900 Subject: [PATCH] Adding benchmark scripts to run on both of CRuby and JRuby * Benchmark scripts are not complete yet. To be added are: * large array which contain many hash objects * benchmark which runs on many threads * long running benchmark / test with memory usage monitoring * Add viiita on Gemfile to bundle it in development of msgpack-ruby itself --- Gemfile | 1 + bench/pack.rb | 23 +++++++++++++++++++++++ bench/pack_log.rb | 33 +++++++++++++++++++++++++++++++++ bench/run.sh | 12 ++++++++++++ bench/unpack.rb | 21 +++++++++++++++++++++ bench/unpack_log.rb | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 124 insertions(+) create mode 100644 bench/pack.rb create mode 100644 bench/pack_log.rb create mode 100644 bench/run.sh create mode 100644 bench/unpack.rb create mode 100644 bench/unpack_log.rb diff --git a/Gemfile b/Gemfile index e0880133..e583a01c 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,4 @@ source 'https://rubygems.org/' gemspec +gem "viiite" diff --git a/bench/pack.rb b/bench/pack.rb new file mode 100644 index 00000000..c2590f40 --- /dev/null +++ b/bench/pack.rb @@ -0,0 +1,23 @@ +require 'viiite' +require 'msgpack' + +data = { 'hello' => 'world', 'nested' => ['structure', {value: 42}] } +data_sym = { hello: 'world', nested: ['structure', {value: 42}] } + +data = MessagePack.pack(:hello => 'world', :nested => ['structure', {:value => 42}]) + +Viiite.bench do |b| + b.range_over([10_000, 100_000, 1000_000], :runs) do |runs| + b.report(:strings) do + runs.times do + MessagePack.pack(data) + end + end + + b.report(:symbols) do + runs.times do + MessagePack.pack(data_sym) + end + end + end +end diff --git a/bench/pack_log.rb b/bench/pack_log.rb new file mode 100644 index 00000000..571d072d --- /dev/null +++ b/bench/pack_log.rb @@ -0,0 +1,33 @@ +require 'viiite' +require 'msgpack' + +data_plain = { 'message' => '127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"' } +data_structure = { + 'remote_host' => '127.0.0.1', + 'remote_user' => '-', + 'date' => '10/Oct/2000:13:55:36 -0700', + 'request' => 'GET /apache_pb.gif HTTP/1.0', + 'method' => 'GET', + 'path' => '/apache_pb.gif', + 'protocol' => 'HTTP/1.0', + 'status' => 200, + 'bytes' => 2326, + 'referer' => 'http://www.example.com/start.html', + 'agent' => 'Mozilla/4.08 [en] (Win98; I ;Nav)', +} + +Viiite.bench do |b| + b.range_over([10_000, 100_000, 1000_000], :runs) do |runs| + b.report(:plain) do + runs.times do + MessagePack.pack(data_plain) + end + end + + b.report(:structure) do + runs.times do + MessagePack.pack(data_structure) + end + end + end +end diff --git a/bench/run.sh b/bench/run.sh new file mode 100644 index 00000000..4e4a2531 --- /dev/null +++ b/bench/run.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# execute `rbenv shell 2.2.1`(or jruby-x.x.x or ...) and `bundle install` + +echo "pack" +viiite report --regroup bench,runs bench/pack.rb +echo "unpack" +viiite report --regroup bench,runs bench/unpack.rb +echo "pack log" +viiite report --regroup bench,runs bench/pack_log.rb +echo "unpack log" +viiite report --regroup bench,runs bench/unpack_log.rb diff --git a/bench/unpack.rb b/bench/unpack.rb new file mode 100644 index 00000000..9b658f17 --- /dev/null +++ b/bench/unpack.rb @@ -0,0 +1,21 @@ +require 'viiite' +require 'msgpack' + +data = MessagePack.pack(:hello => 'world', :nested => ['structure', {:value => 42}]) + +Viiite.bench do |b| + b.range_over([10_000, 100_000, 1000_000], :runs) do |runs| + b.report(:strings) do + runs.times do + MessagePack.unpack(data) + end + end + + b.report(:symbols) do + options = {:symbolize_keys => true} + runs.times do + MessagePack.unpack(data, options) + end + end + end +end diff --git a/bench/unpack_log.rb b/bench/unpack_log.rb new file mode 100644 index 00000000..54601b2c --- /dev/null +++ b/bench/unpack_log.rb @@ -0,0 +1,34 @@ +require 'viiite' +require 'msgpack' + +data_plain = MessagePack.pack({ 'message' => '127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"' }) + +data_structure = MessagePack.pack({ + 'remote_host' => '127.0.0.1', + 'remote_user' => '-', + 'date' => '10/Oct/2000:13:55:36 -0700', + 'request' => 'GET /apache_pb.gif HTTP/1.0', + 'method' => 'GET', + 'path' => '/apache_pb.gif', + 'protocol' => 'HTTP/1.0', + 'status' => 200, + 'bytes' => 2326, + 'referer' => 'http://www.example.com/start.html', + 'agent' => 'Mozilla/4.08 [en] (Win98; I ;Nav)', +}) + +Viiite.bench do |b| + b.range_over([10_000, 100_000, 1000_000], :runs) do |runs| + b.report(:plain) do + runs.times do + MessagePack.unpack(data_plain) + end + end + + b.report(:structure) do + runs.times do + MessagePack.unpack(data_structure) + end + end + end +end