├── .gitignore ├── Gemfile ├── LICENSE ├── README.md ├── barrage.gemspec ├── barrage.jpg ├── bin └── barrage ├── lib ├── barrage.rb └── barrage │ ├── commandline.rb │ ├── cpu.rb │ ├── dstat.rb │ ├── gnuplot_plotter.rb │ ├── imgur.rb │ ├── memory.rb │ ├── network.rb │ ├── program.rb │ └── version.rb ├── playbooks └── haywire │ ├── README.md │ ├── config.yaml │ ├── hosts │ ├── playbook.yaml │ └── template.erb └── tools ├── barrage └── samples │ └── stats_1444187956.csv └── wrk └── samples └── out.txt /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | /.config 4 | /coverage/ 5 | /InstalledFiles 6 | /pkg/ 7 | /spec/reports/ 8 | /test/tmp/ 9 | /test/version_tmp/ 10 | /tmp/ 11 | 12 | ## Specific to RubyMotion: 13 | .dat* 14 | .repl_history 15 | build/ 16 | 17 | ## Documentation cache and generated files: 18 | /.yardoc/ 19 | /_yardoc/ 20 | /doc/ 21 | /rdoc/ 22 | 23 | ## Environment normalisation: 24 | /.bundle/ 25 | /vendor/bundle 26 | /lib/bundler/man/ 27 | 28 | # for a library or gem, you might want to ignore these files since the code is 29 | # intended to run in multiple environments; otherwise, check them in: 30 | # Gemfile.lock 31 | # .ruby-version 32 | # .ruby-gemset 33 | 34 | # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: 35 | .rvmrc 36 | output 37 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Specify your gem's dependencies in barrage.gemspec 4 | gemspec 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Barrage 2 | # Barrage 3 | Barrage is a benchmarking tool and has the goal to fill the following roles. 4 | 5 | - Orchestrate running the benchmark on the server and client(s). 6 | - Collect benchmark statistics (requests per second and latency distribution). 7 | - Collect hardware and OS statistics (CPU, memory, disk, network, etc). 8 | - Generate graphs. 9 | 10 | There are 3 system roles in Barrage. 11 | - Orchestrator 12 | - Server 13 | - Clients 14 | 15 | # Ideas 16 | My initial thought is Barrage will have an agent and orchestrator mode. Once the benchmark run is complete it will post the benchmark details to a Gist on GitHub including the graphs. 17 | 18 | # Prerequisites 19 | - **Orchestrator** 20 | Ubuntu `subo apt-get install ansible` 21 | Mac `brew install ansible` 22 | 23 | - **Server** 24 | Ubuntu 25 | ``` 26 | sudo apt-get install dstat gnuplot xclip 27 | gem install bundler 28 | ``` 29 | 30 | # Installing 31 | ``` 32 | gem install barrage_bench 33 | ``` 34 | 35 | # Running 36 | ``` 37 | barrage benchmark playbooks/haywire 38 | ``` 39 | 40 | # Available playbooks 41 | [Haywire](playbooks/haywire) 42 | -------------------------------------------------------------------------------- /barrage.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | lib = File.expand_path('../lib', __FILE__) 3 | $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) 4 | require 'barrage/version' 5 | 6 | Gem::Specification.new do |spec| 7 | spec.name = "barrage_bench" 8 | spec.summary = 'A benchmarking tool to make benchmarking and collecting statistics from the run and system hardware simple' 9 | spec.description = 'see summary' 10 | spec.version = Barrage::VERSION 11 | spec.authors = ["kellabyte"] 12 | spec.email = ["kell.sommers@gmail.com"] 13 | spec.homepage = "http://github.com/kellabyte/barrage" 14 | spec.license = "Apache 2.0" 15 | 16 | spec.files = `git ls-files -z`.split("\x0") 17 | spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } 18 | spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) 19 | spec.require_paths = ["lib"] 20 | 21 | spec.add_runtime_dependency 'thor' 22 | spec.add_runtime_dependency 'gnuplot' 23 | spec.add_runtime_dependency 'imgurr' 24 | spec.add_runtime_dependency 'erubis' 25 | 26 | spec.add_development_dependency "bundler", "~> 1.7" 27 | spec.add_development_dependency "rake", "~> 10.0" 28 | end 29 | -------------------------------------------------------------------------------- /barrage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kellabyte/barrage/a74031c7ec2e458ebbb24d4f0908a10d5f1ef27f/barrage.jpg -------------------------------------------------------------------------------- /bin/barrage: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'barrage' 3 | Barrage::Program.run(ARGV) -------------------------------------------------------------------------------- /lib/barrage.rb: -------------------------------------------------------------------------------- 1 | module Barrage 2 | class Error < StandardError; end 3 | end 4 | 5 | require "barrage/version" 6 | require "barrage/program" -------------------------------------------------------------------------------- /lib/barrage/commandline.rb: -------------------------------------------------------------------------------- 1 | require "erubis" 2 | require "thor" 3 | require "imgurr" 4 | require_relative "dstat" 5 | require_relative "gnuplot_plotter" 6 | require_relative "imgur" 7 | 8 | class Commandline < Thor 9 | @@dstat_pid = 0 10 | def self.dstat_pid 11 | @@dstat_pid 12 | end 13 | @@unique_id = "" 14 | def self.unique_id 15 | @@unique_id 16 | end 17 | 18 | @@dstat_file = "" 19 | def self.dstat_file 20 | @@dstat_file 21 | end 22 | 23 | @@image_file = "" 24 | def self.image_file 25 | @@image_file 26 | end 27 | 28 | desc "capture", "Capture and plot dstat output" 29 | def capture 30 | @@unique_id = "#{Time.now.getutc.to_i}" 31 | @@dstat_file = "output/stats_#{@@unique_id}.csv" 32 | @@image_file = "output/results_#{@@unique_id}.png" 33 | Dir.mkdir("output") unless File.exists?("output") 34 | 35 | @@dstat_pid = Dstat.run(@@dstat_file) 36 | puts "\nPress CTRL-C to exit\n\n" 37 | trap("INT") { Commandline.kill(@@dstat_pid) } 38 | Signal.trap("TERM") { Commandline.kill(@@dstat_pid) } 39 | $stdin.read 40 | end 41 | 42 | desc "plot [FILE]", "Plot graphs from dstat [FILE]" 43 | def plot(file) 44 | @@dstat_file = file 45 | @@image_file = "#{File.dirname(file)}/#{File.basename(file,'.*')}.png" 46 | Commandline.plot 47 | Commandline.upload 48 | end 49 | 50 | desc "benchmark [PLAYBOOK PATH]", "Playbook benchmark to run" 51 | def benchmark(path) 52 | inventory_file = File.join(path, "hosts") 53 | playbook_file = File.join(path, "playbook.yaml") 54 | unique_id = "#{Time.now.getutc.to_i}" 55 | 56 | output = "" 57 | IO.popen("ansible-playbook -vvvv -k -i #{inventory_file} #{playbook_file}") do |io| 58 | while (line = io.gets) do 59 | output.concat(line) 60 | end 61 | end 62 | 63 | locals = { output:output } 64 | input = File.read("#{path}/template.erb") 65 | result = Erubis::Eruby.new(input).result(locals) 66 | puts result 67 | 68 | Dir.mkdir("#{path}/results/") unless File.exists?("#{path}/results/") 69 | File.write("#{path}/results/#{unique_id}.md", result) 70 | end 71 | 72 | private 73 | 74 | def self.plot 75 | puts "Plotting..." 76 | GnuPlotPlotter.plot(Commandline.dstat_file, Commandline.image_file) 77 | end 78 | 79 | def self.upload 80 | puts "Uploading..." 81 | Imgur.upload(@@image_file) 82 | end 83 | 84 | def self.kill(pid) 85 | if pid > 0 86 | Process.kill "QUIT", pid 87 | end 88 | 89 | plot 90 | upload 91 | exit(0) 92 | end 93 | end 94 | -------------------------------------------------------------------------------- /lib/barrage/cpu.rb: -------------------------------------------------------------------------------- 1 | require "gnuplot" 2 | require_relative 'dstat' 3 | 4 | class CPU 5 | def self.perform(file, plot) 6 | plot.title "CPU Usage" 7 | plot.xlabel "time (seconds)" 8 | plot.ylabel "percent" 9 | #plot.yrange "[0:100]" 10 | plot.pointsize "0.5" 11 | 12 | parsed = Dstat.parse(file, 1) 13 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 14 | ds.title = "usr" 15 | ds.with = "filledcurve linetype 7" 16 | ds.linewidth = 2 17 | end 18 | 19 | parsed = Dstat.parse(file, 2) 20 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 21 | ds.title = "sys" 22 | ds.with = "filledcurve linetype 3" 23 | ds.linewidth = 2 24 | end 25 | 26 | parsed = Dstat.parse(file, 4) 27 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 28 | ds.title = "iowait" 29 | ds.with = "filledcurve linetype 5" 30 | ds.linewidth = 2 31 | end 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /lib/barrage/dstat.rb: -------------------------------------------------------------------------------- 1 | require "csv" 2 | 3 | class Dstat 4 | def self.run(dstat_file) 5 | pid = fork do 6 | cmd = "dstat -tcmrd --disk-util -ny --output #{dstat_file}" 7 | exec(cmd) 8 | end 9 | return pid 10 | end 11 | 12 | def self.parse(file, column) 13 | time = [] 14 | values = [] 15 | 16 | start_parsing = false 17 | count = 0 18 | CSV.foreach(file) do |row| 19 | 20 | if start_parsing 21 | time.push(count - 7) 22 | values.push(row[column]) 23 | end 24 | 25 | if !start_parsing && count == 7 26 | start_parsing = true 27 | end 28 | 29 | count += 1 30 | end 31 | 32 | return time, values 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /lib/barrage/gnuplot_plotter.rb: -------------------------------------------------------------------------------- 1 | require "gnuplot" 2 | require "csv" 3 | 4 | class GnuPlotPlotter 5 | def self.percentile(values, percentile) 6 | values_sorted = values.sort 7 | k = (percentile*(values_sorted.length-1)+1).floor - 1 8 | f = (percentile*(values_sorted.length-1)+1).modulo(1) 9 | 10 | return values_sorted[k] + (f * (values_sorted[k+1] - values_sorted[k])) 11 | end 12 | 13 | def self.template(plot) 14 | plot.multiplot "layout 2,2" 15 | plot.object '1 rectangle from screen 0,0 to screen 3,3 fillcolor rgb"black" behind' 16 | plot.object '1 rect from graph 0, 0, 0 to graph 1, 1, 0' 17 | plot.object '1 behind lw 1.0 fc rgb "#000000" fillstyle solid 1.00 border lt -1' 18 | plot.key 'outside top center horizontal Right noreverse enhanced autotitles nobox' 19 | plot.key 'samplen 1 spacing 1.0 font "Verdana,16" textcolor rgb "#000000"' 20 | plot.style "fill transparent solid 0.2" 21 | plot.grid 22 | end 23 | 24 | def self.plot(csv_file, image_file) 25 | Gnuplot.open do |gp| 26 | Gnuplot::Plot.new(gp) do |plot| 27 | plot.term "png truecolor enhanced fontscale 1.0 size 1920, 1080 font 'Verdana,16'" 28 | plot.output image_file 29 | self.template(plot) 30 | CPU.perform(csv_file, plot) 31 | end 32 | 33 | Gnuplot::Plot.new(gp) do |plot| 34 | self.template(plot) 35 | Memory.perform(csv_file, plot) 36 | end 37 | 38 | Gnuplot::Plot.new(gp) do |plot| 39 | self.template(plot) 40 | Network.perform(csv_file, plot) 41 | end 42 | end 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /lib/barrage/imgur.rb: -------------------------------------------------------------------------------- 1 | require "imgurr" 2 | 3 | class Imgur 4 | def self.upload(file) 5 | output = `imgurr upload #{file}` 6 | puts "#{output.split(" ")[1]}" 7 | end 8 | end 9 | 10 | -------------------------------------------------------------------------------- /lib/barrage/memory.rb: -------------------------------------------------------------------------------- 1 | require "gnuplot" 2 | require_relative 'dstat' 3 | 4 | class Memory 5 | def self.perform(file, plot) 6 | plot.title "Memory Usage" 7 | plot.xlabel "time (seconds)" 8 | plot.ylabel "memory (megabytes)" 9 | 10 | parsed = Dstat.parse(file, 7) 11 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 12 | ds.title = "used" 13 | ds.with = "filledcurve linetype 7" 14 | ds.linewidth = 2 15 | ds.using = "1:(\$2 / 1024**2)" 16 | end 17 | 18 | parsed = Dstat.parse(file, 8) 19 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 20 | ds.title = "buffered" 21 | ds.with = "filledcurve linetype 3" 22 | ds.linewidth = 2 23 | ds.using = "1:(\$2 / 1024**2)" 24 | end 25 | 26 | parsed = Dstat.parse(file, 9) 27 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 28 | ds.title = "cached" 29 | ds.with = "filledcurve linetype 5" 30 | ds.linewidth = 2 31 | ds.using = "1:(\$2 / 1024**2)" 32 | end 33 | end 34 | end 35 | -------------------------------------------------------------------------------- /lib/barrage/network.rb: -------------------------------------------------------------------------------- 1 | require "gnuplot" 2 | require_relative 'dstat' 3 | 4 | class Network 5 | def self.perform(file, plot) 6 | plot.title "Network throughput" 7 | plot.xlabel "time (seconds)" 8 | plot.ylabel "throughput (mbps)" 9 | 10 | parsed = Dstat.parse(file, 16) 11 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 12 | ds.title = "received" 13 | ds.with = "filledcurve linetype 7" 14 | ds.linewidth = 2 15 | ds.using = "1:(\$2 / 125000)" 16 | end 17 | 18 | parsed = Dstat.parse(file, 17) 19 | plot.data << Gnuplot::DataSet.new( [parsed[0], parsed[1]] ) do |ds| 20 | ds.title = "sent" 21 | ds.with = "filledcurve linetype 3" 22 | ds.linewidth = 2 23 | ds.using = "1:(\$2 / 125000)" 24 | end 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /lib/barrage/program.rb: -------------------------------------------------------------------------------- 1 | require "thor" 2 | require_relative "commandline" 3 | require_relative "gnuplot_plotter" 4 | require_relative "cpu" 5 | require_relative "memory" 6 | require_relative "network" 7 | 8 | module Barrage 9 | class Program 10 | def self.run(argv) 11 | Commandline.start(argv) 12 | 13 | if argv.size > 0 && argv.first != "--help" 14 | Dir.mkdir 'output' unless Dir.exist?('output') 15 | 16 | $stdin.read unless argv.first == "plot" || argv.first == "benchmark" 17 | end 18 | end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /lib/barrage/version.rb: -------------------------------------------------------------------------------- 1 | module Barrage 2 | VERSION = '0.0.2' 3 | end 4 | -------------------------------------------------------------------------------- /playbooks/haywire/README.md: -------------------------------------------------------------------------------- 1 | # Haywire barrage benchmark 2 | This playbook does the following sequence: 3 | 4 | #### Server 5 | - Git clone Haywire and its dependencies. 6 | - Compile Haywire and it's dependencies. 7 | - Starts Haywire and listens for HTTP connections. 8 | 9 | #### Client 10 | - Git clone Haywire and its dependencies. 11 | - Compile Haywire and it's dependencies (comes with benchmark tools). 12 | - Run benchmark 13 | 14 | ### Server 15 | - Kills the Haywire process. 16 | 17 | # Configuration 18 | You need to edit the following files to fit your environment. 19 | - `playbooks/haywire/hosts` 20 | - `playbooks/haywire/config.yaml` 21 | 22 | # Running the benchmark 23 | `barrage benchmark playbooks/haywire` 24 | -------------------------------------------------------------------------------- /playbooks/haywire/config.yaml: -------------------------------------------------------------------------------- 1 | # Server 2 | server_user: user 3 | server_sudo: no 4 | server_ip: "{{ hostvars[groups['server'][0]].inventory_hostname }}" 5 | server_files_destination: ~/barrage_benchmark 6 | server_port: 8000 7 | server_threads: 8 8 | 9 | # Client 10 | client_user: user 11 | client_sudo: no 12 | client_files_destination: ~/barrage_benchmark 13 | client_duration: 60s 14 | -------------------------------------------------------------------------------- /playbooks/haywire/hosts: -------------------------------------------------------------------------------- 1 | [server] 2 | 127.0.0.1 3 | 4 | [client] 5 | 127.0.0.1 6 | -------------------------------------------------------------------------------- /playbooks/haywire/playbook.yaml: -------------------------------------------------------------------------------- 1 | - hosts: server 2 | vars_files: 3 | - config.yaml 4 | 5 | user: "{{ server_user }}" 6 | sudo: "{{ server_sudo }}" 7 | gather_facts: no 8 | 9 | tasks: 10 | - name: Clone Barrage 11 | git: repo=https://github.com/kellabyte/barrage.git 12 | dest={{ server_files_destination }}/barrage 13 | - name: Install Barrage 14 | command: chdir={{ server_files_destination }}/barrage bundle install 15 | - name: Clone Haywire 16 | git: repo=https://github.com/kellabyte/haywire.git 17 | dest={{ server_files_destination }}/haywire 18 | - name: Compile Haywire dependencies 19 | command: chdir={{ server_files_destination }}/haywire ./compile_dependencies.sh 20 | - name: Compile Haywire 21 | command: chdir={{ server_files_destination }}/haywire ./compile_make.sh 22 | - name: Run Haywire 23 | command: chdir={{ server_files_destination }}/haywire ./build/hello_world --port {{ server_port }} --threads {{ server_threads }} & 24 | async: 31536000 25 | poll: 0 26 | - name: Create a unique ID 27 | shell: echo "`date +"%Y%m%d%H%M%S"`-$(cat /dev/urandom | tr -cd [:alpha:] | tr '[:upper:]' '[:lower:]' | head -c 4)" 28 | register: unique_id 29 | - name: Creates output directory 30 | file: path={{ server_files_destination }}/barrage/output/ state=directory 31 | - name: Run Barrage capture 32 | shell: dstat -tcmrd --disk-util -ny --output {{ server_files_destination }}/barrage/output/{{ unique_id.stdout }}.csv >/dev/null 2>&1 & 33 | 34 | - hosts: client 35 | vars_files: 36 | - config.yaml 37 | 38 | user: "{{ client_user }}" 39 | sudo: "{{ client_sudo }}" 40 | gather_facts: no 41 | 42 | tasks: 43 | - name: Clone Haywire 44 | git: repo=https://github.com/kellabyte/haywire.git 45 | dest={{ client_files_destination }}/haywire 46 | - name: Compile Haywire dependencies 47 | command: chdir={{ client_files_destination }}/haywire ./compile_dependencies.sh 48 | - pause: seconds=10 49 | - name: Run Wrk benchmark 50 | command: chdir={{ client_files_destination }}/haywire/benchmark ../bin/wrk/wrk --latency -d {{ client_duration }} -t 8 -c 256 http://{{ server_ip }}:{{ server_port }} 51 | - pause: seconds=10 52 | - name: Run Wrk pipelining benchmark 53 | command: chdir={{ client_files_destination }}/haywire/benchmark ../bin/wrk/wrk --script ./pipelined_get.lua --latency -d {{ client_duration }} -t 8 -c 32 http://{{ server_ip }}:{{ server_port }} -- 64 54 | 55 | - hosts: server 56 | vars_files: 57 | - config.yaml 58 | 59 | user: "{{ server_user }}" 60 | sudo: "{{ server_sudo }}" 61 | gather_facts: no 62 | 63 | tasks: 64 | - pause: seconds=10 65 | - name: Kill dstat 66 | command: pkill -f dstat 67 | - name: Kill Haywire 68 | command: killall hello_world 69 | - name: Run Barrage plot 70 | shell: chdir={{ server_files_destination }}/barrage bundle exec bin/barrage plot output/{{ unique_id.stdout }}.csv 71 | -------------------------------------------------------------------------------- /playbooks/haywire/template.erb: -------------------------------------------------------------------------------- 1 | <%=output.match(/Requests\/sec: (.*)\\n/)[1].to_i%> 2 | " /> 3 | -------------------------------------------------------------------------------- /tools/barrage/samples/stats_1444187956.csv: -------------------------------------------------------------------------------- 1 | "Dstat 0.7.2 CSV output" 2 | "Author:","Dag Wieers ",,,,"URL:","http://dag.wieers.com/home-made/dstat/" 3 | "Host:","skynet1",,,,"User:","kelly" 4 | "Cmdline:","dstat -tcmrd --disk-util -ny --output output/stats_1444187956.csv",,,,"Date:","06 Oct 2015 23:19:16 EDT" 5 | 6 | "system","total cpu usage",,,,,,"memory usage",,,,"io/total",,"dsk/total",,"sda","net/total",,"system", 7 | "time","usr","sys","idl","wai","hiq","siq","used","buff","cach","free","read","writ","read","writ","util","recv","send","int","csw" 8 | 06-10 23:19:16,0.154,0.038,99.795,0.004,0.000,0.008,744800256.0,531689472.0,4736708608.0,19269640192.0,0.073,0.522,875.492,144936.595,0.070,0.0,0.0,70.636,88.497 9 | 06-10 23:19:17,0.0,0.0,100.0,0.0,0.0,0.0,744792064.0,531689472.0,4736708608.0,19269648384.0,0.0,0.0,0.0,0.0,0.0,648.0,1454.0,41.0,68.0 10 | 06-10 23:19:18,0.125,0.125,99.751,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,0.0,0.0,0.0,0.0,426.0,732.0,85.0,125.0 11 | 06-10 23:19:19,0.0,0.0,100.0,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,0.0,0.0,0.0,0.0,928.0,596.0,48.0,66.0 12 | 06-10 23:19:20,0.0,0.0,100.0,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,0.0,0.0,0.0,0.0,770.0,766.0,45.0,69.0 13 | 06-10 23:19:21,0.125,0.0,99.875,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,14.0,0.0,61440.0,0.0,246.0,666.0,52.0,48.0 14 | 06-10 23:19:22,0.0,0.0,100.0,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,2.0,0.0,36864.0,0.0,140.0,612.0,54.0,78.0 15 | 06-10 23:19:23,0.125,0.0,99.875,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,0.0,0.0,0.0,0.0,864.0,748.0,81.0,120.0 16 | 06-10 23:19:24,0.0,0.0,100.0,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,41.0,59.0 17 | 06-10 23:19:25,0.0,0.0,100.0,0.0,0.0,0.0,744894464.0,531689472.0,4736712704.0,19269541888.0,0.0,0.0,0.0,0.0,0.0,140.0,674.0,33.0,42.0 18 | 06-10 23:19:26,0.125,0.0,99.875,0.0,0.0,0.0,744919040.0,531689472.0,4736712704.0,19269517312.0,0.0,0.0,0.0,0.0,0.0,1314.0,1838.0,151.0,289.0 19 | 06-10 23:19:27,0.0,0.0,100.0,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,16.0,0.0,118784.0,0.0,140.0,596.0,82.0,87.0 20 | 06-10 23:19:28,0.125,0.0,99.875,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,0.0,0.0,0.0,0.0,426.0,748.0,74.0,121.0 21 | 06-10 23:19:29,0.0,0.0,100.0,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,0.0,0.0,0.0,0.0,578.0,596.0,52.0,83.0 22 | 06-10 23:19:30,0.0,0.0,100.0,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,56.0,89.0 23 | 06-10 23:19:31,0.125,0.0,99.875,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,47.0,74.0 24 | 06-10 23:19:32,0.0,0.0,100.0,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,2.0,0.0,12288.0,0.0,578.0,596.0,58.0,98.0 25 | 06-10 23:19:33,0.125,0.0,99.875,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,1.0,0.0,4096.0,0.0,426.0,748.0,84.0,133.0 26 | 06-10 23:19:34,0.0,0.0,100.0,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,0.0,0.0,0.0,0.0,140.0,612.0,62.0,103.0 27 | 06-10 23:19:35,0.0,0.0,100.0,0.0,0.0,0.0,745095168.0,531689472.0,4736712704.0,19269341184.0,0.0,0.0,0.0,0.0,0.0,1002.0,702.0,56.0,89.0 28 | 06-10 23:19:36,13.208,2.390,80.126,0.0,0.0,4.277,746016768.0,531689472.0,4736712704.0,19268419584.0,0.0,0.0,0.0,0.0,0.0,19133096.0,66383132.0,6400.0,6158.0 29 | 06-10 23:19:37,36.829,7.161,45.780,0.128,0.0,10.102,746573824.0,531689472.0,4736712704.0,19267862528.0,0.0,2.0,0.0,12288.0,0.400,51701984.0,178308142.0,16498.0,14828.0 30 | 06-10 23:19:38,37.500,7.197,44.823,0.0,0.0,10.480,746639360.0,531689472.0,4736712704.0,19267796992.0,0.0,0.0,0.0,0.0,0.0,51604143.0,177415714.0,16506.0,15349.0 31 | 06-10 23:19:39,39.549,7.885,42.053,0.0,0.0,10.513,747065344.0,531689472.0,4736712704.0,19267371008.0,0.0,1.0,0.0,4096.0,0.0,53542108.0,183442474.0,16219.0,14560.0 32 | 06-10 23:19:40,34.180,9.530,44.473,0.0,0.0,11.817,747294720.0,531689472.0,4736712704.0,19267141632.0,0.0,0.0,0.0,0.0,0.0,52091598.0,178479668.0,16400.0,15320.0 33 | 06-10 23:19:41,35.868,8.872,43.093,0.0,0.0,12.167,747458560.0,531689472.0,4736712704.0,19266977792.0,0.0,0.0,0.0,0.0,0.0,52695380.0,180312270.0,16648.0,15777.0 34 | 06-10 23:19:42,36.178,8.408,43.694,0.0,0.0,11.720,747552768.0,531689472.0,4736716800.0,19266879488.0,0.0,0.0,0.0,0.0,0.0,52276560.0,178198056.0,16503.0,15371.0 35 | 06-10 23:19:43,36.456,8.354,43.671,0.0,0.0,11.519,746668032.0,531689472.0,4736716800.0,19267764224.0,0.0,2.0,0.0,12288.0,0.400,52222578.0,177708428.0,16676.0,15429.0 36 | 06-10 23:19:44,35.659,8.398,43.282,0.0,0.0,12.661,746893312.0,531689472.0,4736716800.0,19267538944.0,0.0,0.0,0.0,0.0,0.0,52897512.0,179971696.0,17173.0,16771.0 37 | 06-10 23:19:45,37.469,9.023,42.356,0.0,0.0,11.153,746401792.0,531689472.0,4736716800.0,19268030464.0,0.0,2.0,0.0,8192.0,0.0,52911954.0,180202690.0,16880.0,15867.0 38 | 06-10 23:19:46,36.573,8.312,42.711,0.0,0.0,12.404,747089920.0,531689472.0,4736716800.0,19267342336.0,0.0,0.0,0.0,0.0,0.0,53140474.0,181073314.0,16828.0,16102.0 39 | 06-10 23:19:47,33.979,8.398,44.057,0.0,0.0,13.566,746369024.0,531689472.0,4736716800.0,19268063232.0,0.0,0.0,0.0,0.0,0.0,52555292.0,178811840.0,16055.0,14608.0 40 | 06-10 23:19:48,36.181,8.668,42.588,0.0,0.0,12.563,747646976.0,531689472.0,4736716800.0,19266785280.0,0.0,0.0,0.0,0.0,0.0,52556674.0,178364584.0,16237.0,14949.0 41 | 06-10 23:19:49,36.929,8.503,42.259,0.0,0.0,12.310,748236800.0,531689472.0,4736716800.0,19266195456.0,0.0,2.0,0.0,20480.0,0.400,53295354.0,180727160.0,16088.0,14638.0 42 | 06-10 23:19:50,35.714,8.418,43.112,0.0,0.0,12.755,746565632.0,531689472.0,4736716800.0,19267866624.0,0.0,0.0,0.0,0.0,0.0,52480002.0,177810448.0,16583.0,15802.0 43 | 06-10 23:19:51,36.607,8.546,41.964,0.0,0.0,12.883,747155456.0,531689472.0,4736716800.0,19267276800.0,0.0,3.0,0.0,12288.0,0.0,53308658.0,180836498.0,16611.0,15672.0 44 | 06-10 23:19:52,36.090,9.524,41.228,0.0,0.0,13.158,747220992.0,531689472.0,4736716800.0,19267211264.0,0.0,0.0,0.0,0.0,0.0,53221758.0,180340496.0,16616.0,15688.0 45 | 06-10 23:19:53,36.444,9.584,40.984,0.0,0.0,12.989,747282432.0,531689472.0,4736716800.0,19267149824.0,0.0,0.0,0.0,0.0,0.0,53370422.0,180873650.0,16724.0,16006.0 46 | 06-10 23:19:54,38.319,8.900,41.409,0.0,0.0,11.372,747282432.0,531689472.0,4736716800.0,19267149824.0,0.0,2.0,0.0,12288.0,0.400,52306300.0,176605914.0,16870.0,16014.0 47 | 06-10 23:19:55,34.839,9.290,42.581,0.0,0.0,13.290,746692608.0,531689472.0,4736716800.0,19267739648.0,0.0,0.0,0.0,0.0,0.0,52699450.0,177586306.0,16941.0,16676.0 48 | 06-10 23:19:56,37.197,8.790,40.510,0.0,0.0,13.503,746889216.0,531689472.0,4736716800.0,19267543040.0,0.0,0.0,0.0,0.0,0.0,53868820.0,181601882.0,16396.0,15892.0 49 | 06-10 23:19:57,36.466,9.148,41.855,0.0,0.0,12.531,747610112.0,531689472.0,4736716800.0,19266822144.0,0.0,1.0,0.0,4096.0,0.0,52439518.0,176862732.0,16566.0,15773.0 50 | 06-10 23:19:58,33.877,10.163,41.907,0.0,0.0,14.053,746364928.0,531689472.0,4736716800.0,19268067328.0,0.0,0.0,0.0,0.0,0.0,52262734.0,175882138.0,16786.0,15872.0 51 | 06-10 23:19:59,37.312,8.668,41.709,0.0,0.0,12.312,746954752.0,531689472.0,4736716800.0,19267477504.0,0.0,2.0,0.0,12288.0,0.400,52427206.0,176778646.0,16796.0,16012.0 52 | 06-10 23:20:00,34.923,9.278,42.268,0.0,0.0,13.531,746496000.0,531689472.0,4736716800.0,19267936256.0,0.0,0.0,0.0,0.0,0.0,52945450.0,178411796.0,16728.0,16326.0 53 | 06-10 23:20:01,36.443,9.204,42.289,0.0,0.0,12.065,746954752.0,531689472.0,4736716800.0,19267477504.0,0.0,0.0,0.0,0.0,0.0,51782530.0,174472856.0,16538.0,15434.0 54 | 06-10 23:20:02,35.101,9.596,41.162,0.0,0.0,14.141,746696704.0,531689472.0,4736753664.0,19267698688.0,0.0,0.0,0.0,0.0,0.0,52694288.0,177834564.0,16936.0,16641.0 55 | 06-10 23:20:03,36.020,8.564,42.317,0.0,0.0,13.098,746926080.0,531689472.0,4736753664.0,19267469312.0,0.0,3.0,0.0,45056.0,0.0,52306028.0,176701858.0,16836.0,16292.0 56 | 06-10 23:20:04,35.287,9.554,43.312,0.127,0.0,11.720,747319296.0,531689472.0,4736753664.0,19267076096.0,0.0,2.0,0.0,24576.0,0.400,51700336.0,174353372.0,16587.0,15608.0 57 | 06-10 23:20:05,33.929,9.056,42.474,0.0,0.0,14.541,746950656.0,531689472.0,4736753664.0,19267444736.0,0.0,0.0,0.0,0.0,0.0,52358942.0,176201108.0,16651.0,15871.0 58 | 06-10 23:20:06,35.623,8.906,42.366,0.0,0.0,13.104,746590208.0,531689472.0,4736753664.0,19267805184.0,0.0,0.0,0.0,0.0,0.0,52541526.0,177262546.0,16817.0,16278.0 59 | 06-10 23:20:07,37.389,8.238,42.839,0.0,0.0,11.534,747139072.0,531689472.0,4736757760.0,19267252224.0,0.0,0.0,0.0,0.0,0.0,52191440.0,175825532.0,16476.0,15502.0 60 | 06-10 23:20:08,35.939,9.079,40.984,0.0,0.0,13.997,746844160.0,531689472.0,4736757760.0,19267547136.0,0.0,0.0,0.0,0.0,0.0,53109080.0,179172364.0,17030.0,16921.0 61 | 06-10 23:20:09,34.097,8.015,43.639,0.0,0.0,14.249,747528192.0,531689472.0,4736757760.0,19266863104.0,0.0,7.0,0.0,32768.0,0.400,51502998.0,173576764.0,16445.0,15663.0 62 | 06-10 23:20:10,36.882,8.619,41.191,0.0,0.0,13.308,746708992.0,531689472.0,4736757760.0,19267682304.0,0.0,0.0,0.0,0.0,0.0,53395492.0,179974252.0,16360.0,15486.0 63 | 06-10 23:20:11,37.875,8.625,40.625,0.0,0.0,12.875,746676224.0,531689472.0,4736757760.0,19267715072.0,0.0,0.0,0.0,0.0,0.0,53152012.0,179393768.0,16870.0,16501.0 64 | 06-10 23:20:12,36.398,8.438,42.443,0.0,0.0,12.720,746610688.0,531689472.0,4736757760.0,19267780608.0,0.0,0.0,0.0,0.0,0.0,52287506.0,176121338.0,16155.0,15178.0 65 | 06-10 23:20:13,36.943,8.917,40.255,0.0,0.0,13.885,746577920.0,531689472.0,4736757760.0,19267813376.0,0.0,0.0,0.0,0.0,0.0,54519614.0,183430418.0,15754.0,14800.0 66 | 06-10 23:20:14,35.496,9.288,41.730,0.0,0.0,13.486,747360256.0,531693568.0,4736757760.0,19267026944.0,0.0,2.0,0.0,20480.0,0.400,52950272.0,178322000.0,16297.0,15302.0 67 | 06-10 23:20:15,36.317,9.591,40.793,0.0,0.0,13.299,746541056.0,531693568.0,4736757760.0,19267846144.0,0.0,3.0,0.0,12288.0,0.0,53923328.0,181667350.0,16369.0,15607.0 68 | 06-10 23:20:16,38.119,8.513,41.804,0.0,0.0,11.563,747130880.0,531693568.0,4736757760.0,19267256320.0,0.0,0.0,0.0,0.0,0.0,53249456.0,179622740.0,15897.0,14430.0 69 | 06-10 23:20:17,37.312,8.668,41.457,0.0,0.0,12.563,746901504.0,531693568.0,4736757760.0,19267485696.0,0.0,0.0,0.0,0.0,0.0,52791490.0,178015080.0,16680.0,16135.0 70 | 06-10 23:20:18,37.674,9.102,42.099,0.0,0.0,11.125,745693184.0,531693568.0,4736757760.0,19268694016.0,0.0,0.0,0.0,0.0,0.0,52616830.0,177312234.0,16295.0,15151.0 71 | 06-10 23:20:19,35.623,8.779,43.003,0.0,0.0,12.595,746643456.0,531693568.0,4736757760.0,19267743744.0,0.0,2.0,0.0,12288.0,0.400,52177298.0,175810896.0,16070.0,14955.0 72 | 06-10 23:20:20,35.949,8.228,43.544,0.0,0.0,12.278,746446848.0,531693568.0,4736757760.0,19267940352.0,0.0,0.0,0.0,0.0,0.0,51230056.0,172595344.0,16654.0,15822.0 73 | 06-10 23:20:21,35.615,8.238,42.205,0.0,0.0,13.942,747495424.0,531693568.0,4736757760.0,19266891776.0,0.0,1.0,0.0,4096.0,0.0,52445212.0,176741434.0,16724.0,15993.0 74 | 06-10 23:20:22,36.444,9.962,40.605,0.0,0.0,12.989,746708992.0,531693568.0,4736757760.0,19267678208.0,0.0,0.0,0.0,0.0,0.0,53550662.0,180728474.0,16496.0,15754.0 75 | 06-10 23:20:23,37.074,9.710,42.623,0.0,0.0,10.593,747003904.0,531693568.0,4736757760.0,19267383296.0,0.0,0.0,0.0,0.0,0.0,51887674.0,174941914.0,16764.0,16057.0 76 | 06-10 23:20:24,37.610,8.931,41.509,0.0,0.0,11.950,746708992.0,531693568.0,4736757760.0,19267678208.0,0.0,0.0,0.0,0.0,0.0,52653878.0,177678526.0,16789.0,16253.0 77 | 06-10 23:20:25,35.787,8.122,43.909,0.0,0.0,12.183,747139072.0,531693568.0,4736757760.0,19267248128.0,0.0,2.0,0.0,16384.0,0.400,51295814.0,172763120.0,16390.0,15396.0 78 | 06-10 23:20:26,34.772,9.264,43.401,0.0,0.0,12.563,746704896.0,531693568.0,4736757760.0,19267682304.0,0.0,0.0,0.0,0.0,0.0,51614898.0,173687996.0,16085.0,14689.0 79 | 06-10 23:20:27,36.157,9.229,42.099,0.0,0.0,12.516,747491328.0,531693568.0,4736757760.0,19266895872.0,0.0,3.0,0.0,12288.0,0.0,52514540.0,176792610.0,16851.0,16160.0 80 | 06-10 23:20:28,37.235,9.091,40.847,0.0,0.0,12.827,747233280.0,531693568.0,4736757760.0,19267153920.0,0.0,0.0,0.0,0.0,0.0,52958486.0,178318598.0,16704.0,15927.0 81 | 06-10 23:20:29,36.272,9.194,41.814,0.0,0.0,12.720,747102208.0,531693568.0,4736757760.0,19267284992.0,0.0,0.0,0.0,0.0,0.0,52427726.0,176709514.0,16418.0,15752.0 82 | 06-10 23:20:30,36.329,8.608,42.911,0.0,0.0,12.152,747102208.0,531693568.0,4736757760.0,19267284992.0,0.0,0.0,0.0,0.0,0.0,51914380.0,174730798.0,16670.0,15867.0 83 | 06-10 23:20:31,35.132,10.038,42.033,0.0,0.0,12.798,746446848.0,531693568.0,4736757760.0,19267940352.0,0.0,2.0,0.0,12288.0,0.400,52113996.0,175359892.0,16782.0,16237.0 84 | 06-10 23:20:32,38.806,8.955,40.672,0.0,0.0,11.567,746246144.0,531693568.0,4736761856.0,19268136960.0,0.0,0.0,0.0,0.0,0.0,53077070.0,178800014.0,16538.0,15785.0 85 | 06-10 23:20:33,35.377,8.812,42.656,0.0,0.0,13.155,746835968.0,531693568.0,4736761856.0,19267547136.0,0.0,2.0,0.0,8192.0,0.0,52437928.0,176402730.0,16507.0,15446.0 86 | 06-10 23:20:34,36.431,10.657,40.892,0.0,0.0,12.020,746246144.0,531693568.0,4736761856.0,19268136960.0,0.0,0.0,0.0,0.0,0.0,52840798.0,177981138.0,16667.0,15806.0 87 | 06-10 23:20:35,35.768,9.194,41.688,0.0,0.0,13.350,746344448.0,531693568.0,4736761856.0,19268038656.0,0.0,0.0,0.0,0.0,0.0,52762892.0,177815974.0,16083.0,15144.0 88 | 06-10 23:20:36,35.488,8.745,42.205,0.0,0.0,13.561,746901504.0,531693568.0,4736761856.0,19267481600.0,0.0,0.0,0.0,0.0,0.0,52416670.0,176839570.0,16807.0,16295.0 89 | 06-10 23:20:37,35.975,9.560,42.013,0.0,0.0,12.453,746381312.0,531693568.0,4736761856.0,19268001792.0,0.0,2.0,0.0,20480.0,0.400,52344888.0,176590862.0,16679.0,15864.0 90 | 06-10 23:20:38,37.848,8.354,42.152,0.0,0.0,11.646,746479616.0,531693568.0,4736761856.0,19267903488.0,0.0,0.0,0.0,0.0,0.0,52644508.0,177233608.0,16596.0,15697.0 91 | 06-10 23:20:39,37.594,9.774,39.975,0.0,0.0,12.657,745852928.0,531693568.0,4736761856.0,19268530176.0,0.0,3.0,0.0,12288.0,0.0,54014596.0,182120512.0,16071.0,14972.0 92 | 06-10 23:20:40,33.718,9.487,44.231,0.0,0.0,12.564,746639360.0,531693568.0,4736761856.0,19267743744.0,0.0,0.0,0.0,0.0,0.0,51461488.0,173168844.0,16263.0,15086.0 93 | 06-10 23:20:41,37.625,9.125,41.875,0.0,0.0,11.375,746803200.0,531693568.0,4736761856.0,19267579904.0,0.0,0.0,0.0,0.0,0.0,52316076.0,176369360.0,16124.0,14813.0 94 | 06-10 23:20:42,33.501,10.414,43.162,0.0,0.0,12.923,746180608.0,531693568.0,4736761856.0,19268202496.0,0.0,0.0,0.0,0.0,0.0,51662492.0,173865228.0,15964.0,14533.0 95 | 06-10 23:20:43,35.939,8.701,42.119,0.0,0.0,13.241,747290624.0,531697664.0,4736761856.0,19267088384.0,0.0,2.0,0.0,12288.0,0.400,52464438.0,176737660.0,16276.0,15198.0 96 | 06-10 23:20:44,33.972,9.451,43.167,0.0,0.0,13.410,746405888.0,531697664.0,4736761856.0,19267973120.0,0.0,0.0,0.0,0.0,0.0,52041170.0,175419550.0,16356.0,15529.0 97 | 06-10 23:20:45,35.544,9.262,42.428,0.0,0.0,12.766,746340352.0,531697664.0,4736761856.0,19268038656.0,0.0,1.0,0.0,4096.0,0.0,51910718.0,175167260.0,16485.0,15356.0 98 | 06-10 23:20:46,36.432,9.673,41.960,0.0,0.0,11.935,746995712.0,531697664.0,4736761856.0,19267383296.0,0.0,0.0,0.0,0.0,0.0,52562154.0,176970572.0,16124.0,14956.0 99 | 06-10 23:20:47,34.821,9.821,41.837,0.0,0.0,13.520,746799104.0,531697664.0,4736761856.0,19267579904.0,0.0,0.0,0.0,0.0,0.0,53160830.0,179163096.0,16294.0,15513.0 100 | 06-10 23:20:48,35.496,9.288,43.130,0.0,0.0,12.087,746536960.0,531697664.0,4736761856.0,19267842048.0,0.0,2.0,0.0,12288.0,0.400,51779650.0,174456568.0,16869.0,16286.0 101 | 06-10 23:20:49,35.390,9.698,42.317,0.0,0.0,12.594,746373120.0,531697664.0,4736761856.0,19268005888.0,0.0,0.0,0.0,0.0,0.0,52320362.0,176142294.0,15991.0,14669.0 102 | 06-10 23:20:50,34.655,9.079,43.095,0.0,0.0,13.171,746143744.0,531697664.0,4736761856.0,19268235264.0,0.0,0.0,0.0,0.0,0.0,52071686.0,175474430.0,16636.0,15822.0 103 | 06-10 23:20:51,37.327,9.206,41.110,0.0,0.0,12.358,746766336.0,531697664.0,4736761856.0,19267612672.0,0.0,1.0,0.0,4096.0,0.0,53362432.0,179784060.0,16348.0,15450.0 104 | 06-10 23:20:52,36.181,8.668,42.714,0.0,0.0,12.437,746602496.0,531697664.0,4736761856.0,19267776512.0,0.0,0.0,0.0,0.0,0.0,51496708.0,173345848.0,16893.0,16542.0 105 | 06-10 23:20:53,35.570,8.987,41.392,0.0,0.0,14.051,746143744.0,531697664.0,4736761856.0,19268235264.0,0.0,0.0,0.0,0.0,0.0,53157106.0,179288562.0,16707.0,16066.0 106 | 06-10 23:20:54,35.159,8.535,43.185,0.127,0.0,12.994,746536960.0,531697664.0,4736761856.0,19267842048.0,0.0,2.0,0.0,12288.0,0.400,51885842.0,174576920.0,16643.0,15758.0 107 | 06-10 23:20:55,34.234,9.653,42.857,0.0,0.0,13.256,747094016.0,531697664.0,4736761856.0,19267284992.0,0.0,0.0,0.0,0.0,0.0,52332254.0,176421796.0,16822.0,16088.0 108 | 06-10 23:20:56,32.905,10.283,42.931,0.0,0.0,13.882,746536960.0,531697664.0,4736761856.0,19267842048.0,0.0,0.0,0.0,0.0,0.0,52258208.0,176019080.0,16751.0,16178.0 109 | 06-10 23:20:57,34.478,8.906,42.621,0.0,0.0,13.995,746930176.0,531697664.0,4736761856.0,19267448832.0,0.0,1.0,0.0,4096.0,0.0,52324752.0,176406984.0,16290.0,15192.0 110 | 06-10 23:20:58,35.332,8.546,42.474,0.0,0.0,13.648,746893312.0,531697664.0,4736765952.0,19267481600.0,0.0,0.0,0.0,0.0,0.0,52513240.0,176808114.0,16114.0,15019.0 111 | 06-10 23:20:59,36.809,8.920,41.834,0.0,0.0,12.437,746790912.0,531697664.0,4736765952.0,19267584000.0,0.0,2.0,0.0,12288.0,0.400,52269398.0,176117170.0,16790.0,16218.0 112 | 06-10 23:21:00,34.224,10.433,42.112,0.0,0.0,13.232,746758144.0,531697664.0,4736765952.0,19267616768.0,0.0,0.0,0.0,0.0,0.0,52663820.0,177356902.0,16762.0,16086.0 113 | 06-10 23:21:01,35.930,10.050,41.080,0.0,0.0,12.940,746430464.0,531697664.0,4736765952.0,19267944448.0,0.0,0.0,0.0,0.0,0.0,53344102.0,179914406.0,16149.0,14997.0 114 | 06-10 23:21:02,35.750,9.500,42.250,0.0,0.0,12.500,746233856.0,531697664.0,4736765952.0,19268141056.0,0.0,0.0,0.0,0.0,0.0,51981880.0,175143226.0,16561.0,15731.0 115 | 06-10 23:21:03,37.079,8.614,42.447,0.0,0.0,11.860,745938944.0,531697664.0,4736765952.0,19268435968.0,0.0,2.0,0.0,8192.0,0.0,51831844.0,174668898.0,16212.0,14971.0 116 | 06-10 23:21:04,33.163,8.673,43.367,0.0,0.0,14.796,746758144.0,531697664.0,4736765952.0,19267616768.0,0.0,0.0,0.0,0.0,0.0,51752892.0,174415016.0,16411.0,15564.0 117 | 06-10 23:21:05,36.629,9.759,40.938,0.0,0.0,12.674,746856448.0,531701760.0,4736765952.0,19267514368.0,0.0,2.0,0.0,20480.0,0.400,53478924.0,180199738.0,16723.0,16099.0 118 | 06-10 23:21:06,35.696,8.861,42.152,0.0,0.0,13.291,746528768.0,531701760.0,4736765952.0,19267842048.0,0.0,0.0,0.0,0.0,0.0,52467210.0,176522942.0,16739.0,16037.0 119 | 06-10 23:21:07,35.642,9.068,41.688,0.0,0.0,13.602,746725376.0,531701760.0,4736765952.0,19267645440.0,0.0,0.0,0.0,0.0,0.0,52458360.0,176782476.0,16994.0,16772.0 120 | 06-10 23:21:08,37.703,9.988,41.448,0.0,0.0,10.861,746561536.0,531701760.0,4736765952.0,19267809280.0,0.0,0.0,0.0,0.0,0.0,52493598.0,176978094.0,16726.0,16059.0 121 | 06-10 23:21:09,34.003,11.292,41.531,0.0,0.0,13.174,747020288.0,531701760.0,4736765952.0,19267350528.0,0.0,3.0,0.0,12288.0,0.0,52548166.0,176836330.0,16811.0,16205.0 122 | 06-10 23:21:10,36.802,8.756,42.259,0.0,0.0,12.183,746692608.0,531701760.0,4736765952.0,19267678208.0,0.0,0.0,0.0,0.0,0.0,52417806.0,176641596.0,16820.0,16166.0 123 | 06-10 23:21:11,35.375,9.0,42.125,0.0,0.0,13.500,746528768.0,531701760.0,4736765952.0,19267842048.0,0.0,2.0,0.0,12288.0,0.400,51997684.0,175176086.0,16420.0,15658.0 124 | 06-10 23:21:12,35.323,9.826,43.905,0.0,0.0,10.945,746528768.0,531701760.0,4736765952.0,19267842048.0,0.0,0.0,0.0,0.0,0.0,50453136.0,170033274.0,16393.0,15428.0 125 | 06-10 23:21:13,36.704,9.238,40.949,0.0,0.0,13.109,746172416.0,531701760.0,4736765952.0,19268198400.0,0.0,0.0,0.0,0.0,0.0,52862342.0,178143698.0,16628.0,15937.0 126 | 06-10 23:21:14,39.849,8.575,38.462,0.0,0.0,13.115,747249664.0,531701760.0,4736765952.0,19267121152.0,0.0,0.0,0.0,0.0,0.0,55550642.0,187258252.0,16296.0,15874.0 127 | 06-10 23:21:15,35.385,8.974,41.795,0.0,0.0,13.846,746860544.0,531701760.0,4736765952.0,19267510272.0,0.0,1.0,0.0,4096.0,0.0,53096560.0,178934706.0,16939.0,16573.0 128 | 06-10 23:21:16,36.170,8.636,41.802,0.0,0.0,13.392,746467328.0,531701760.0,4736765952.0,19267903488.0,0.0,0.0,0.0,0.0,0.0,52453538.0,176660510.0,16279.0,15356.0 129 | 06-10 23:21:17,36.216,9.273,41.103,0.0,0.0,13.409,747155456.0,531701760.0,4736765952.0,19267215360.0,0.0,2.0,0.0,12288.0,0.400,52944270.0,178231640.0,16828.0,16253.0 130 | 06-10 23:21:18,38.048,8.135,41.677,0.0,0.0,12.140,747089920.0,531701760.0,4736765952.0,19267280896.0,0.0,0.0,0.0,0.0,0.0,52493542.0,176791368.0,16704.0,15816.0 131 | 06-10 23:21:19,35.377,8.812,44.317,0.0,0.0,11.494,746893312.0,531701760.0,4736765952.0,19267477504.0,0.0,0.0,0.0,0.0,0.0,51005906.0,171920814.0,16170.0,15100.0 132 | 06-10 23:21:20,35.741,8.745,43.726,0.0,0.0,11.787,746532864.0,531701760.0,4736765952.0,19267837952.0,0.0,0.0,0.0,0.0,0.0,51386084.0,173316116.0,16149.0,14898.0 133 | 06-10 23:21:21,36.421,9.262,42.553,0.0,0.0,11.765,746303488.0,531701760.0,4736765952.0,19268067328.0,0.0,1.0,0.0,4096.0,0.0,51647182.0,174035474.0,16945.0,16488.0 134 | 06-10 23:21:22,36.248,10.139,41.698,0.0,0.0,11.914,746106880.0,531701760.0,4736765952.0,19268263936.0,0.0,2.0,0.0,12288.0,0.400,52677364.0,177652686.0,16924.0,16442.0 135 | 06-10 23:21:23,37.265,9.536,41.280,0.0,0.0,11.920,745644032.0,531701760.0,4736770048.0,19268722688.0,0.0,0.0,0.0,0.0,0.0,52893302.0,178175064.0,16946.0,16262.0 136 | 06-10 23:21:24,35.558,8.216,42.234,0.0,0.0,13.992,746721280.0,531701760.0,4736770048.0,19267645440.0,0.0,0.0,0.0,0.0,0.0,53125092.0,179122560.0,15746.0,14479.0 137 | 06-10 23:21:25,36.226,8.176,43.019,0.0,0.0,12.579,746131456.0,531701760.0,4736770048.0,19268235264.0,0.0,0.0,0.0,0.0,0.0,51741904.0,174393590.0,16440.0,15286.0 138 | 06-10 23:21:26,37.715,9.951,41.032,0.0,0.0,11.302,746721280.0,531701760.0,4736770048.0,19267645440.0,0.0,0.0,0.0,0.0,0.0,52301686.0,176225660.0,16805.0,15791.0 139 | 06-10 23:21:27,33.333,8.974,43.590,0.0,0.0,14.103,746364928.0,531701760.0,4736770048.0,19268001792.0,0.0,4.0,0.0,20480.0,0.400,51703450.0,174078190.0,16763.0,16007.0 140 | 06-10 23:21:28,35.516,9.446,42.695,0.0,0.0,12.343,746266624.0,531701760.0,4736770048.0,19268100096.0,0.0,0.0,0.0,0.0,0.0,52052576.0,175230776.0,16617.0,15643.0 141 | 06-10 23:21:29,35.687,8.701,41.614,0.0,0.0,13.997,746397696.0,531701760.0,4736770048.0,19267969024.0,0.0,0.0,0.0,0.0,0.0,52665160.0,177987072.0,16883.0,16390.0 142 | 06-10 23:21:30,36.730,8.805,41.258,0.0,0.0,13.208,746725376.0,531701760.0,4736770048.0,19267641344.0,0.0,0.0,0.0,0.0,0.0,52701488.0,177793744.0,17127.0,17010.0 143 | 06-10 23:21:31,35.840,10.150,41.479,0.0,0.0,12.531,746790912.0,531701760.0,4736770048.0,19267575808.0,0.0,0.0,0.0,0.0,0.0,52679124.0,177404638.0,16587.0,15580.0 144 | 06-10 23:21:32,37.750,9.250,40.500,0.0,0.0,12.500,746004480.0,531705856.0,4736765952.0,19268362240.0,0.0,2.0,0.0,20480.0,0.0,53239366.0,179611378.0,16890.0,16639.0 145 | 06-10 23:21:33,35.118,8.344,44.458,0.0,0.0,12.080,747016192.0,531705856.0,4736770048.0,19267346432.0,0.0,3.0,0.0,12288.0,0.0,50167150.0,168950644.0,15791.0,14085.0 146 | 06-10 23:21:34,36.055,9.171,40.578,0.0,0.0,14.196,746786816.0,531705856.0,4736770048.0,19267575808.0,0.0,0.0,0.0,0.0,0.0,53540880.0,180441036.0,16509.0,15995.0 147 | 06-10 23:21:35,36.364,9.343,41.793,0.0,0.0,12.500,746328064.0,531705856.0,4736770048.0,19268034560.0,0.0,0.0,0.0,0.0,0.0,52822514.0,178013558.0,16101.0,15045.0 148 | 06-10 23:21:36,24.747,6.313,59.975,0.0,0.0,8.965,745914368.0,531705856.0,4736770048.0,19268448256.0,0.0,0.0,0.0,0.0,0.0,36405806.0,122794936.0,11743.0,11208.0 149 | 06-10 23:21:37,0.0,0.125,99.875,0.0,0.0,0.0,745426944.0,531705856.0,4736770048.0,19268935680.0,0.0,0.0,0.0,0.0,0.0,578.0,596.0,63.0,86.0 150 | 06-10 23:21:38,0.125,0.0,99.751,0.125,0.0,0.0,745066496.0,531705856.0,4736770048.0,19269296128.0,0.0,2.0,0.0,12288.0,0.0,140.0,596.0,80.0,123.0 151 | 06-10 23:21:39,0.0,0.0,100.0,0.0,0.0,0.0,744771584.0,531705856.0,4736770048.0,19269591040.0,0.0,1.0,0.0,4096.0,0.0,426.0,748.0,79.0,118.0 152 | 06-10 23:21:40,0.125,0.0,99.875,0.0,0.0,0.0,744771584.0,531705856.0,4736770048.0,19269591040.0,0.0,0.0,0.0,0.0,0.0,578.0,612.0,56.0,87.0 153 | 06-10 23:21:41,0.0,0.0,100.0,0.0,0.0,0.0,744771584.0,531705856.0,4736770048.0,19269591040.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,52.0,74.0 154 | 06-10 23:21:42,0.125,0.0,99.875,0.0,0.0,0.0,744771584.0,531705856.0,4736770048.0,19269591040.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,61.0,97.0 155 | 06-10 23:21:43,0.0,0.0,100.0,0.0,0.0,0.0,744767488.0,531709952.0,4736770048.0,19269591040.0,0.0,2.0,0.0,12288.0,0.0,578.0,596.0,67.0,103.0 156 | 06-10 23:21:44,0.0,0.0,100.0,0.0,0.0,0.0,744767488.0,531709952.0,4736770048.0,19269591040.0,0.0,0.0,0.0,0.0,0.0,426.0,748.0,87.0,140.0 157 | 06-10 23:21:45,0.125,0.0,99.875,0.0,0.0,0.0,744767488.0,531709952.0,4736770048.0,19269591040.0,0.0,1.0,0.0,4096.0,0.0,140.0,596.0,53.0,76.0 158 | 06-10 23:21:46,0.0,0.0,100.0,0.0,0.0,0.0,744767488.0,531709952.0,4736770048.0,19269591040.0,0.0,0.0,0.0,0.0,0.0,140.0,612.0,69.0,110.0 159 | 06-10 23:21:47,0.125,0.125,99.750,0.0,0.0,0.0,743288832.0,531709952.0,4736770048.0,19271069696.0,0.0,0.0,0.0,0.0,0.0,1174.0,1674.0,163.0,271.0 160 | 06-10 23:21:48,0.0,0.0,100.0,0.0,0.0,0.0,743288832.0,531709952.0,4736770048.0,19271069696.0,0.0,2.0,0.0,40960.0,0.0,332.0,872.0,48.0,72.0 161 | 06-10 23:21:49,0.0,0.0,100.0,0.0,0.0,0.0,743415808.0,531709952.0,4736770048.0,19270942720.0,0.0,0.0,0.0,0.0,0.0,988.0,1956.0,84.0,124.0 162 | 06-10 23:21:50,0.125,0.0,99.875,0.0,0.0,0.0,743546880.0,531709952.0,4736774144.0,19270807552.0,0.0,0.0,0.0,0.0,0.0,2774.0,1572.0,118.0,175.0 163 | 06-10 23:21:51,0.0,0.0,100.0,0.0,0.0,0.0,743403520.0,531709952.0,4736774144.0,19270950912.0,0.0,9.0,0.0,36864.0,0.0,668.0,930.0,75.0,75.0 164 | 06-10 23:21:52,0.125,0.0,99.875,0.0,0.0,0.0,743403520.0,531709952.0,4736774144.0,19270950912.0,0.0,0.0,0.0,0.0,0.0,492.0,824.0,51.0,67.0 165 | 06-10 23:21:53,0.0,0.0,100.0,0.0,0.0,0.0,743399424.0,531714048.0,4736774144.0,19270950912.0,0.0,2.0,0.0,20480.0,0.0,578.0,596.0,51.0,72.0 166 | 06-10 23:21:54,0.0,0.0,100.0,0.0,0.0,0.0,743399424.0,531714048.0,4736774144.0,19270950912.0,0.0,0.0,0.0,0.0,0.0,426.0,748.0,90.0,131.0 167 | 06-10 23:21:55,0.125,0.0,99.875,0.0,0.0,0.0,743399424.0,531714048.0,4736774144.0,19270950912.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,40.0,54.0 168 | 06-10 23:21:56,0.0,0.125,99.875,0.0,0.0,0.0,743399424.0,531714048.0,4736774144.0,19270950912.0,0.0,0.0,0.0,0.0,0.0,1384.0,1912.0,133.0,260.0 169 | 06-10 23:21:57,0.0,0.0,100.0,0.0,0.0,0.0,743550976.0,531714048.0,4736774144.0,19270799360.0,0.0,4.0,0.0,16384.0,0.0,140.0,596.0,60.0,76.0 170 | 06-10 23:21:58,0.125,0.0,99.751,0.125,0.0,0.0,743550976.0,531714048.0,4736774144.0,19270799360.0,0.0,2.0,0.0,61440.0,0.0,140.0,612.0,64.0,103.0 171 | 06-10 23:21:59,0.0,0.0,100.0,0.0,0.0,0.0,743600128.0,531714048.0,4736774144.0,19270750208.0,0.0,0.0,0.0,0.0,0.0,864.0,748.0,90.0,137.0 172 | 06-10 23:22:00,0.0,0.0,100.0,0.0,0.0,0.0,743600128.0,531714048.0,4736774144.0,19270750208.0,0.0,0.0,0.0,0.0,0.0,140.0,596.0,42.0,68.0 173 | 06-10 23:22:01,1.905,0.544,97.551,0.0,0.0,0.0,743854080.0,531714048.0,4736778240.0,19270492160.0,0.0,0.0,0.0,0.0,0.0,2753330.0,2186360.0,23701.0,1122.0 174 | 06-10 23:22:02,0.140,0.0,99.721,0.0,0.0,0.140,743776256.0,531714048.0,4736778240.0,19270569984.0,0.0,0.0,0.0,0.0,0.0,3463942.0,2842474.0,30134.0,854.0 175 | 06-10 23:22:03,0.0,0.140,99.860,0.0,0.0,0.0,744132608.0,531718144.0,4736778240.0,19270209536.0,0.0,25.0,0.0,147456.0,0.400,3473168.0,2850068.0,30654.0,857.0 176 | 06-10 23:22:04,0.0,0.140,99.720,0.0,0.0,0.140,743866368.0,531718144.0,4736778240.0,19270475776.0,0.0,0.0,0.0,0.0,0.0,3472128.0,2849516.0,30728.0,883.0 177 | 06-10 23:22:05,0.0,0.0,100.0,0.0,0.0,0.0,744017920.0,531718144.0,4736778240.0,19270324224.0,0.0,0.0,0.0,0.0,0.0,3472982.0,2849748.0,30117.0,857.0 178 | 06-10 23:22:06,0.0,0.0,100.0,0.0,0.0,0.0,743358464.0,531718144.0,4736778240.0,19270983680.0,0.0,0.0,0.0,0.0,0.0,3464666.0,2843220.0,30254.0,848.0 179 | 06-10 23:22:07,0.0,0.140,99.860,0.0,0.0,0.0,743604224.0,531718144.0,4736778240.0,19270737920.0,0.0,0.0,0.0,0.0,0.0,3473480.0,2850580.0,30268.0,841.0 180 | 06-10 23:22:08,0.140,0.140,99.720,0.0,0.0,0.0,743612416.0,531718144.0,4736778240.0,19270729728.0,0.0,2.0,0.0,24576.0,0.0,3473286.0,2851012.0,30581.0,858.0 181 | 06-10 23:22:09,0.0,0.0,100.0,0.0,0.0,0.0,743604224.0,531718144.0,4736778240.0,19270737920.0,0.0,4.0,0.0,16384.0,0.0,3474114.0,2850966.0,30325.0,838.0 182 | 06-10 23:22:10,0.0,0.0,100.0,0.0,0.0,0.0,743649280.0,531718144.0,4736778240.0,19270692864.0,0.0,0.0,0.0,0.0,0.0,3471920.0,2849124.0,30205.0,832.0 183 | 06-10 23:22:11,2.192,0.685,96.986,0.0,0.0,0.137,743542784.0,531718144.0,4736778240.0,19270799360.0,0.0,0.0,0.0,0.0,0.0,3011228.0,2403200.0,26170.0,1352.0 184 | 06-10 23:22:12,0.0,0.0,99.860,0.0,0.0,0.140,743718912.0,531718144.0,4736778240.0,19270623232.0,0.0,0.0,0.0,0.0,0.0,3468808.0,2846698.0,31626.0,843.0 185 | 06-10 23:22:13,0.0,0.0,100.0,0.0,0.0,0.0,743845888.0,531722240.0,4736774144.0,19270496256.0,0.0,2.0,0.0,86016.0,0.400,3468098.0,2845844.0,31660.0,843.0 186 | 06-10 23:22:14,0.0,0.132,99.868,0.0,0.0,0.0,743985152.0,531722240.0,4736782336.0,19270348800.0,0.0,0.0,0.0,0.0,0.0,1654510.0,1357892.0,15178.0,517.0 187 | 06-10 23:22:15,0.0,0.0,100.0,0.0,0.0,0.0,743985152.0,531722240.0,4736782336.0,19270348800.0,0.0,22.0,0.0,90112.0,0.0,268.0,596.0,92.0,68.0 188 | 06-10 23:22:16,0.125,0.0,99.875,0.0,0.0,0.0,743858176.0,531722240.0,4736782336.0,19270475776.0,0.0,0.0,0.0,0.0,0.0,140.0,612.0,33.0,45.0 189 | 06-10 23:22:17,0.0,0.0,100.0,0.0,0.0,0.0,743858176.0,531722240.0,4736782336.0,19270475776.0,0.0,0.0,0.0,0.0,0.0,578.0,596.0,44.0,60.0 190 | 06-10 23:22:18,0.0,0.0,99.875,0.125,0.0,0.0,743854080.0,531730432.0,4736778240.0,19270475776.0,0.0,2.0,0.0,12288.0,0.0,140.0,596.0,52.0,77.0 191 | 06-10 23:22:19,0.125,0.0,99.875,0.0,0.0,0.0,743849984.0,531730432.0,4736782336.0,19270475776.0,0.0,0.0,0.0,0.0,0.0,283.0,748.0,67.0,96.0 192 | 06-10 23:22:20,0.0,0.0,100.0,0.0,0.0,0.0,743845888.0,531730432.0,4736786432.0,19270475776.0,0.0,0.0,0.0,0.0,0.0,1366.0,596.0,51.0,77.0 193 | -------------------------------------------------------------------------------- /tools/wrk/samples/out.txt: -------------------------------------------------------------------------------- 1 | Running 2m test @ http://192.168.0.101:8000 2 | 8 threads and 32 connections 3 | Thread Stats Avg Stdev Max +/- Stdev 4 | Latency 1.21ms 1.10ms 24.49ms 60.88% 5 | Req/Sec 126.92k 31.99k 214.07k 65.20% 6 | Latency Distribution 7 | 50% 1.61ms 8 | 75% 5.61ms 9 | 90% 0.00us 10 | 99% 0.00us 11 | 121270683 requests in 2.00m, 17.84GB read 12 | Requests/sec: 1010014.80 13 | Transfer/sec: 152.19MB 14 | --------------------------------------------------------------------------------