Ōku no hitto ("many hits" in Japanese) is an experiment to figure out how best to saturate a HTTP pipe.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
simulator
.gitignore
README
thread_test.rb
threadpool.rb
threadpool_test.rb

README

Ōku no hitto ("many hits" in Japanese) is an experiment to figure out how best to saturate a HTTP pipe under the following conditions:
* A constant throughput is desirable over varying throughput.
* Network latency is expected
* Response time is large, at least 7 seconds, and possibly more.

Pre-requisites:
* Make sure open files on your system isn't low. On OSX, use sysctl to tweak kern.maxfiles and kern.maxfilesperproc


Ōku no hitto simulator:

Depends on:
* Ruby 1.8.7
* Thin rubygem
* async_sinatra rubygem

Steps to run:
* thin -R config.ru -p 3000 start
or for robustness:
* thin -R config.ru -p 3001 -s 3
- and then use simulator/nginx.conf or simulator/haproxy.conf to front.
- There's also a crude random client side load balancer in threadpool_test, under long_process


Ōku no hitto thread_test.rb:

Depends on:
* JRuby 1.5.3

Steps to run:
~ Run the simulator
~ jruby -J-Xmx1024m threadpool_test.rb 

Interesting variables to tweak:
Currently all variables are within the threadpool_test.rb file:
* under def long_process:
	* host - of the simulator
	* port - of the simulator
* under invoker:
	* throughput - the intended throughput
* under top:
	* poll_delay - the delay to poll status
	
	
Ōku no hitto threadpool_test.rb:
Everything under thread_test.rb plus:
Interesting variables to tweak:
* under invoker:
	* threadpool_size - the size of the threadpool
	
How to interpret stats:

T: 12318 F: 10668 W: 1650 CE: 0 FE: 0 IT (req/s): 160 FT (req/s): 171

T -> total requests
F -> finished requests
W -> waiting requests = T - F
CE -> connection errors
FE -> fatal errors
IT -> invoke throughput (dependent on invoker)
FT -> finish throughput (dependent on simulator)