Changeset 1026
- Timestamp:
- 11/19/07 01:16:54 (10 months ago)
- Files:
-
- apps/rails_benchmark/app/controllers/haml_perf_controller.rb (added)
- apps/rails_benchmark/app/helpers/haml_perf_helper.rb (added)
- apps/rails_benchmark/app/views/haml_perf (added)
- apps/rails_benchmark/app/views/haml_perf/_partial.html.haml (added)
- apps/rails_benchmark/app/views/haml_perf/_partial_one.html.haml (added)
- apps/rails_benchmark/app/views/haml_perf/_partial_two.html.haml (added)
- apps/rails_benchmark/app/views/haml_perf/complex_partials.html.haml (added)
- apps/rails_benchmark/app/views/haml_perf/partials.html.haml (added)
- apps/rails_benchmark/app/views/haml_perf/simple_template.html.haml (added)
- apps/rails_benchmark/script/benchmark (modified) (3 diffs)
- apps/rails_benchmark/test/functional/haml_perf_controller_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml (added)
- apps/rails_benchmark/vendor/plugins/haml/MIT-LICENSE (added)
- apps/rails_benchmark/vendor/plugins/haml/README (added)
- apps/rails_benchmark/vendor/plugins/haml/Rakefile (added)
- apps/rails_benchmark/vendor/plugins/haml/TODO (added)
- apps/rails_benchmark/vendor/plugins/haml/VERSION (added)
- apps/rails_benchmark/vendor/plugins/haml/bin (added)
- apps/rails_benchmark/vendor/plugins/haml/bin/css2sass (added)
- apps/rails_benchmark/vendor/plugins/haml/bin/haml (added)
- apps/rails_benchmark/vendor/plugins/haml/bin/html2haml (added)
- apps/rails_benchmark/vendor/plugins/haml/bin/sass (added)
- apps/rails_benchmark/vendor/plugins/haml/extra (added)
- apps/rails_benchmark/vendor/plugins/haml/extra/haml-mode.el (added)
- apps/rails_benchmark/vendor/plugins/haml/extra/sass-mode.el (added)
- apps/rails_benchmark/vendor/plugins/haml/init.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/buffer.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/engine.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/error.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/exec.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/filters.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/helpers (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/helpers.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/helpers/action_view_extensions.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/helpers/action_view_mods.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/html.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/template.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/haml/util.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant/color.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant/literal.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant/number.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant/operation.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/constant/string.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/css.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/engine.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/error.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/plugin (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/plugin.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/plugin/merb.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/plugin/rails.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree/attr_node.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree/comment_node.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree/directive_node.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree/node.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree/rule_node.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/lib/sass/tree/value_node.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test (added)
- apps/rails_benchmark/vendor/plugins/haml/test/benchmark.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/engine_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/helper_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/html2haml_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/markaby (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/markaby/standard.mab (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/mocks (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/mocks/article.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/content_for_layout.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/eval_suppressed.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/filters.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/helpers.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/helpful.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/just_stuff.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/list.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/original_engine.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/partials.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/silent_script.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/standard.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/tag_parsing.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/very_basic.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/results/whitespace_handling.xhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/rhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/rhtml/standard.rhtml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/runner.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/template_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/_partial.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/_text_area.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/breakage.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/content_for_layout.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/eval_suppressed.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/filters.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/helpers.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/helpful.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/just_stuff.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/list.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/original_engine.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/partialize.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/partials.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/silent_script.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/standard.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/tag_parsing.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/very_basic.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/haml/templates/whitespace_handling.haml (added)
- apps/rails_benchmark/vendor/plugins/haml/test/profile.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/engine_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/plugin_test.rb (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/alt.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/basic.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/compact.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/complex.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/compressed.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/constants.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/expanded.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/import.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/nested.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/parent_ref.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/subdir (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/subdir/nested_subdir (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/subdir/nested_subdir/nested_subdir.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/results/subdir/subdir.css (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/_partial.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/alt.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/basic.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/bork.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/bork2.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/compact.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/complex.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/compressed.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/constants.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/expanded.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/import.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/importee.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/nested.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/parent_ref.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/subdir (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/subdir/nested_subdir (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/subdir/nested_subdir/nested_subdir.sass (added)
- apps/rails_benchmark/vendor/plugins/haml/test/sass/templates/subdir/subdir.sass (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
apps/rails_benchmark/script/benchmark
r1019 r1026 1 1 #!/usr/bin/env ruby 2 2 require 'open3' 3 require 'optparse' 3 4 $stdout.sync = true 5 @options = {} 6 @scenarios = {} 7 @err = STDERR.dup 8 9 opts = OptionParser.new do |opts| 10 11 opts.banner = "Usage: ./script/benchmark [cts] argument" 12 opts.define_head "Benchmark for the Rails web framework" 13 opts.separator '*'*80 14 15 opts.on("-c", "--concurrency NUMBER", "This flag is for setting the concurrency during the test.") do |config| 16 @options[:concurrency] = config.to_i 17 end 18 19 opts.on("-t", "--times NUMBER", "This flag sets the number of iterations to perform during the test.") do |config| 20 @options[:times] = config.to_i 21 end 22 23 opts.on("-s", "--scenarios LIST,OF,SENARIOS", "This flag allows you to select which scenario you want to run. Multiple scenarios can be run by supplying a comma seperated list.") do |config| 24 @options[:scenarios] = config.split(",") 25 end 26 27 opts.on("-l", "--[no-]list", "Lists all available scenarios") do |config| 28 @options[:list] = config 29 end 30 end 31 32 @options = opts.getopts 33 34 def call_ab(msg, url) 35 print " ** #{msg} " 36 Open3.popen3("ab -n#{TIMES} -c#{CNCRC} http://127.0.0.1:4000/#{url}") do |strin, out, err| 37 while true 38 error, output = err.gets, out.gets 39 next unless (error || output) 40 print "." if error =~ /Completed/ 41 STDOUT.flush 42 output = out.gets 43 if (output =~ /Requests per second/) 44 puts "\n " + output 45 break 46 end 47 sleep 0.05 48 end 49 end 50 end 51 52 def get_rps(str) 53 GC.start 54 sleep 1 55 " " + str.find {|x| x =~ /Requests per second/ } 56 end 57 58 def put_header_message(message) 59 spacer = "-" * (39 - message.length / 2) 60 @err.puts "#{spacer} #{message} #{spacer}" 61 end 62 63 def add_scenario(name, title, &block) 64 @scenarios[name] = [title, block] 65 end 66 67 def run_scenarios 68 69 @err.puts "* Benchmarks (These may take a while)" 70 @err.puts "* Requests per benchmark: #{TIMES}" 71 @err.puts "* Concurrency: #{CNCRC}" 72 73 @err.puts 74 75 list = @options["scenarios"] || ["all"] 76 if list.include?("all") 77 run_list = @scenarios.map{|k,v| v } 78 else 79 run_list = @scenarios.keys.sort.map{|k| @scenarios[k] if list.include?(k)} 80 end 81 82 run_list = run_list.compact 83 @err.puts "Available Scenarios #{[@scenarios.keys, "all"].flatten.sort.join(",")}" and exit if run_list.empty? 84 85 run_list.each do |scn| 86 put_header_message(scn.first) 87 scn.last.call 88 end 89 90 end 91 92 93 # ========================= ADD SCENARIOS HERE =============================================== 94 add_scenario("static", "Static Files") do 95 call_ab("Serve Static File", "hello.txt") 96 end 97 98 add_scenario("erb", "Templates and Partials - (ERB)") do 99 call_ab("Render a string", "perf/string") 100 call_ab("Render a simple template", "perf/simple_template") 101 102 [1,10,100].each do |number| 103 call_ab("Render #{number} simple partial#{'s' if number > 1}", "perf/partials/#{number}") 104 end 105 106 [1,10,100].each do |number| 107 call_ab("Render #{number} nested partial#{'s' if number > 1}", "perf/complex_partials/#{number}") 108 end 109 end 110 111 add_scenario("haml", "Templates and Partials - (HAML)") do 112 call_ab("Render a string", "haml_perf/string") 113 call_ab("Render a simple template", "haml_perf/simple_template") 114 115 [1,10,100].each do |number| 116 call_ab("Render #{number} simple partial#{'s' if number > 1}", "haml_perf/partials/#{number}") 117 end 118 119 [1,10,100].each do |number| 120 call_ab("Render #{number} nested partial#{'s' if number > 1}", "haml_perf/complex_partials/#{number}") 121 end 122 end 123 124 add_scenario("url", "URL Generation") do 125 [1,10,100].each do |number| 126 call_ab("Render #{number} simple named url#{'s' if number > 1}", "url_perf/simple_named_url_generation/#{number}") 127 end 128 129 [1,10,100].each do |number| 130 call_ab("Render #{number} top level nested named url#{'s' if number > 1}", "url_perf/top_level_nested_named_url_generation/#{number}") 131 end 132 133 [1,10,100].each do |number| 134 call_ab("Render #{number} second level nested named url#{'s' if number > 1}", "url_perf/second_level_nested_named_url_generation/#{number}") 135 end 136 end 137 138 139 # ========================= FINISH SCENARIOS HERE =============================================== 140 141 142 if @options['list'] 143 out = <<-EOD 144 145 Available Scenarios: #{@scenarios.keys.sort.join(", ")} 146 147 EOD 148 @err.puts out 149 exit 150 end 151 4 152 begin 5 err = STDERR.dup153 6 154 7 155 if File.exists?("#{File.dirname(__FILE__)}/../log/mongrel.pid") … … 9 157 end 10 158 11 err.puts "* Starting Rails"159 @err.puts "* Starting Rails" 12 160 ENV["EVENT"] = "1" 13 161 `mongrel_rails start -d -p 4000 -e production` … … 20 168 memsize = (ps.split("\n")[1].split[5].to_f / 10.24).round / 100.0 21 169 22 err.puts "* Memory size before benchmarking: #{memsize}MB"170 @err.puts "* Memory size before benchmarking: #{memsize}MB" 23 171 24 TIMES = ARGV.find{|x| x =~ /^-t/ }[2..-1].to_i rescue100025 CNCRC = ARGV.find{|x| x =~ /^-c/ }[2..-1].to_i rescue 5172 TIMES = @options["times"] || 1000 173 CNCRC = @options["concurrency"]|| 5 26 174 27 def call_ab(msg, url) 28 print " ** #{msg} " 29 Open3.popen3("ab -n#{TIMES} -c#{CNCRC} http://127.0.0.1:4000/#{url}") do |strin, out, err| 30 while true 31 error, output = err.gets, out.gets 32 next unless (error || output) 33 print "." if error =~ /Completed/ 34 STDOUT.flush 35 output = out.gets 36 if (output =~ /Requests per second/) 37 puts "\n " + output 38 break 39 end 40 sleep 0.05 41 end 42 end 43 end 44 45 def get_rps(str) 46 GC.start 47 sleep 1 48 " " + str.find {|x| x =~ /Requests per second/ } 49 end 50 51 def put_header_message(message) 52 spacer = "-" * (39 - message.length / 2) 53 puts "#{spacer} #{message} #{spacer}" 54 end 55 56 err.puts "* Benchmarks (These may take a while)" 57 err.puts "* Requests per benchmark: #{TIMES}" 58 err.puts "* Concurrency: #{CNCRC}" 59 60 err.puts 61 62 put_header_message("Static files") 63 call_ab("Serve Static File", "hello.txt") 64 65 put_header_message("Templates and Partials") 66 call_ab("Render a string", "perf/string") 67 call_ab("Render a simple template", "perf/simple_template") 68 69 [1,10,100].each do |number| 70 call_ab("Render #{number} simple partial#{'s' if number > 1}", "perf/partials/#{number}") 71 end 72 73 [1,10,100].each do |number| 74 call_ab("Render #{number} nested partial#{'s' if number > 1}", "perf/complex_partials/#{number}") 75 end 76 77 put_header_message("URL Generation") 78 79 [1,10,100].each do |number| 80 call_ab("Render #{number} simple named url#{'s' if number > 1}", "url_perf/simple_named_url_generation/#{number}") 81 end 82 83 [1,10,100].each do |number| 84 call_ab("Render #{number} top level nested named url#{'s' if number > 1}", "url_perf/top_level_nested_named_url_generation/#{number}") 85 end 86 87 [1,10,100].each do |number| 88 call_ab("Render #{number} second level nested named url#{'s' if number > 1}", "url_perf/second_level_nested_named_url_generation/#{number}") 89 end 175 run_scenarios 90 176 91 177 ps = `ps aux #{pid}` 92 178 memsize = (ps.split("\n")[1].split[5].to_f / 10.24).round / 100.0 93 179 94 err.puts95 err.puts "* Memory size after benchmarking: #{memsize}MB"180 @err.puts 181 @err.puts "* Memory size after benchmarking: #{memsize}MB" 96 182 ensure 97 183 `mongrel_rails stop`
