|
@@ -8,170 +8,9 @@ Join in the conversation at our Google Group: https://groups.google.com/forum/?f
|
|
|
|
|
|
## Running the test suite
|
|
## Running the test suite
|
|
|
|
|
|
-We ran our tests using two dedicated i7 2600k machines as well as two EC2 m1.large instances. Below you will find instructions on how to replicate our tests using either EC2 or your own dedicated machines.
|
|
|
|
|
|
+We ran our tests using two dedicated i7 2600k machines as well as two EC2 m1.large instances.
|
|
|
|
|
|
-###EC2 Instructions
|
|
|
|
-
|
|
|
|
-#### 1. Create EC2 Instances
|
|
|
|
-
|
|
|
|
-Create two EC2 instances running Ubuntu Server 12.04.1 LTS 64-bit. We tested on m1.large instances, but feel free to experiment with different configurations. Give the instance that will act as the application server more then the default 8GB of disk capacity (we used 20GB).
|
|
|
|
-
|
|
|
|
-##### Security Group
|
|
|
|
-
|
|
|
|
-When propmted to create a security group for the instances, here are the ports that you'll need to open.
|
|
|
|
-
|
|
|
|
-* 22 (SSH)
|
|
|
|
-* 8080 (Most of the tests run on 8080)
|
|
|
|
-* 3306 (MySQL)
|
|
|
|
-* 5432 (PostgreSQL)
|
|
|
|
-* 9000 (Play Framework)
|
|
|
|
-* 27017 (MongoDB)
|
|
|
|
-* 3000 (yesod)
|
|
|
|
-* 8000 (snap)
|
|
|
|
-* 16969 (cpoll)
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-#### 2. Setting up the servers
|
|
|
|
-
|
|
|
|
-To coordinate the tests via scripting, the servers need to be able to work together. So once the instances are running, the first thing you'll want to do is copy your ssh key to the application server instance so that you can ssh between the two machines:
|
|
|
|
-
|
|
|
|
- sftp -i path-to-pem-file ubuntu@server-instance-ip
|
|
|
|
- put path-to-pem-file .ssh/
|
|
|
|
- exit
|
|
|
|
-
|
|
|
|
-Now ssh into the server instance and clone the latest from this repository (the scripts we use to run the tests expect that you'll clone the repository into your home directory):
|
|
|
|
-
|
|
|
|
- ssh -i path-to-pem-file ubuntu@server-instance-ip
|
|
|
|
- yes | sudo apt-get install git-core
|
|
|
|
- git clone https://github.com/TechEmpower/FrameworkBenchmarks.git
|
|
|
|
- cd FrameworkBenchmarks
|
|
|
|
-
|
|
|
|
-Next, we're going to setup the servers with all the necessary software:
|
|
|
|
-
|
|
|
|
- ./run-tests.py -s server-private-ip -c client-private-ip -i path-to-pem --install-software --list-tests
|
|
|
|
- source ~/.bash_profile
|
|
|
|
- # For your first time through the tests, set the ulimit for open files
|
|
|
|
- ulimit -n 8192
|
|
|
|
- # Most software is installed automatically by the script, but running the mongo command below from
|
|
|
|
- # the install script was causing some errors. For now this needs to be run manually.
|
|
|
|
- cd installs/jruby-rack && rvm jruby-1.7.4 do jruby -S bundle exec rake clean gem SKIP_SPECS=true
|
|
|
|
- cd target && rvm jruby-1.7.4 do gem install jruby-rack-1.2.0.SNAPSHOT.gem
|
|
|
|
- cd ../../..
|
|
|
|
- cd installs && curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
|
|
|
|
- cd ..
|
|
|
|
- sudo apt-get remove --purge openjdk-6-jre openjdk-6-jre-headless
|
|
|
|
- mongo --host client-private-ip < config/create.js
|
|
|
|
-
|
|
|
|
-Assuming the above finished without error, we're ready to start the test suite:
|
|
|
|
-
|
|
|
|
- nohup ./run-tests.py -s server-private-ip -c client-private-ip -i path-to-pem --max-threads number-of-cores &
|
|
|
|
-
|
|
|
|
-For the number-of-cores parameter, you will need to know your application server's core count. For example, Amazon EC2 large instances have 2 cores.
|
|
|
|
-
|
|
|
|
-This script will run the full set of tests. Results of all the tests will output to ~/FrameworkBenchmarks/results/ec2/*timestamp*. If you use a different configuration than two m1.large instances, please use the --name option to name the results appropriately.
|
|
|
|
-
|
|
|
|
- nohup ./run-tests.py -s server-private-ip -c client-private-ip -i path-to-pem --max-threads cores --name ec2-servertype-clienttype &
|
|
|
|
-
|
|
|
|
-So if you were running an m1.large and an m1.medium, it would look like this:
|
|
|
|
-
|
|
|
|
- nohup ./run-tests.py -s server-private-ip -c client-private-ip -i path-to-pem --max-threads cores --name ec2-m1.large-m1.medium &
|
|
|
|
-
|
|
|
|
-This will allow us to differentiate results.
|
|
|
|
-
|
|
|
|
-Be aware that on Large instances, if you include the slower frameworks (and they are included by default), the total runtime of a full suite of tests can be measured in days, not just hours. The EC2 bill isn't going to break the bank, but it's also not going to be chump change.
|
|
|
|
-
|
|
|
|
-### Dedicated Hardware Instructions
|
|
|
|
-
|
|
|
|
-If you have two servers or workstations lying around, then you can install and run the tests on physical hardware. Please be aware that these setup instructions can overwrite software and settings, It's best to follow these instructions on clean hardware. We assume that both machines are running Ubuntu Server 12.04 64-bit.
|
|
|
|
-
|
|
|
|
-#### 1. Prerequisites
|
|
|
|
-
|
|
|
|
-Before you get started, there are a couple of steps you can take to make running the tests easier on yourself. Since the tests can run for several hours, it helps to set everything up so that once the tests are running, you can leave the machines unattended and don't need to be around to enter ssh or sudo passwords.
|
|
|
|
-
|
|
|
|
-1. Setup an ssh key for the client machine
|
|
|
|
-2. Edit your sudoers file so that you do not need to enter your password for sudo access
|
|
|
|
-
|
|
|
|
-#### 2. Setting up the servers
|
|
|
|
-
|
|
|
|
-As it currently stands, the script that runs the tests makes some assumptions about where the code is placed, we assume that the FrameworkBenchmarks repository will be located in your home directory.
|
|
|
|
-
|
|
|
|
-Check out the latest from github:
|
|
|
|
-
|
|
|
|
- cd ~
|
|
|
|
- git clone https://github.com/TechEmpower/FrameworkBenchmarks.git
|
|
|
|
- cd FrameworkBenchmarks
|
|
|
|
-
|
|
|
|
-Next, we're going to setup the servers with all the necessary software:
|
|
|
|
-
|
|
|
|
- ./run-tests.py -s server-ip -c client-ip -i path-to-ssh-key --install-software --list-tests
|
|
|
|
- source ~/.bash_profile
|
|
|
|
- # For your first time through the tests, set the ulimit for open files
|
|
|
|
- # Most software is installed automatically by the script, but running the mongo command below from
|
|
|
|
- # the install script was causing some errors. For now this needs to be run manually.
|
|
|
|
- cd installs/jruby-rack && rvm jruby-1.7.4 do jruby -S bundle exec rake clean gem SKIP_SPECS=true
|
|
|
|
- cd target && rvm jruby-1.7.4 do gem install jruby-rack-1.2.0.SNAPSHOT.gem
|
|
|
|
- cd ../../..
|
|
|
|
- cd installs && curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
|
|
|
|
- cd ..
|
|
|
|
- sudo apt-get remove --purge openjdk-6-jre openjdk-6-jre-headless
|
|
|
|
- mongo --host client-ip < config/create.js
|
|
|
|
-
|
|
|
|
-Assuming this finished without error, we're ready to start the test suite:
|
|
|
|
-
|
|
|
|
- nohup ./run-tests.py -s server-ip -c client-ip -i path-to-ssh-key --max-threads cores --name unique-machine-name &
|
|
|
|
-
|
|
|
|
-This will run the full set of tests. Results of all the tests will output to ~/FrameworkBenchmarks/results/unique-machine-name/*timestamp*.
|
|
|
|
-
|
|
|
|
-### Windows Instructions
|
|
|
|
-Generously provided by [@pdonald](https://github.com/pdonald)
|
|
|
|
-
|
|
|
|
-Server installation scripts for Windows Server 2012 R2 on Amazon EC2.
|
|
|
|
-
|
|
|
|
-Instructions:
|
|
|
|
-
|
|
|
|
-* Create an instance from the `Microsoft Windows Server 2012 Base` image on Amazon EC2
|
|
|
|
-* Connect to it via Remote Desktop
|
|
|
|
-* Copy `installer-bootstrap.ps1` from this repo to the server (for files CTRL-C + CTRL-V works alright)
|
|
|
|
-* Copy your client private key too while you're at it
|
|
|
|
-* Right click on the installer script and select `Run with PowerShell`
|
|
|
|
-* It will ask something, just hit enter
|
|
|
|
-* It will install git and then launch `installer.ps1` from the repo which will install everything else
|
|
|
|
-* Installation shouldn't take more than 5 to 10 minutes
|
|
|
|
-* Then you have a working console: try `python`, `git`, `ssh`, `curl`, `node` etc. everything works + PowerShell goodies
|
|
|
|
-
|
|
|
|
-The client/database machine is still assumed to be a Linux box, you can install just the client software via
|
|
|
|
-
|
|
|
|
- python run-tests.py -s server-ip -c client-ip -i "C:\Users\Administrator\Desktop\client.key" --install-software --install client --list-tests
|
|
|
|
-
|
|
|
|
-Now you can run tests:
|
|
|
|
-
|
|
|
|
- python run-tests.py -s server-ip -c client-ip -i "C:\Users\Administrator\Desktop\client.key" --max-threads 2 --duration 30 --sleep 5 --name win --test aspnet --type all
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-### SQL Server on Windows Instructions
|
|
|
|
-
|
|
|
|
-Server installation scripts for Windows Server 2012 with SQL Server 2012 Standard on Amazon EC2.
|
|
|
|
-
|
|
|
|
-Instructions:
|
|
|
|
-
|
|
|
|
-* Create an instance from the [Windows Server 2012 RTM English 64-bit SQL 2012 Standard](https://aws.amazon.com/amis/amazon-ebs-backed-windows-server-2012-rtm-english-64-bit-sql-2012-standard) image on Amazon EC2
|
|
|
|
-* Connect to it via Remote Desktop
|
|
|
|
-* Run a `Command Prompt` as Administrator
|
|
|
|
-* Enter `powershell -ExecutionPolicy Bypass -Command "iex (New-Object Net.WebClient).DownloadString('https://raw.github.com/TechEmpower/FrameworkBenchmarks/master/setup-sqlserver-bootstrap.ps1')"`
|
|
|
|
-* This will configure SQL Server, the Windows Firewall, and populate the database.
|
|
|
|
-
|
|
|
|
-Now, when running `python run-tests.py`, just add `-d <ip of SQL Server instance>`. This works for the (Windows Server-based) `aspnet-sqlserver-raw` and `aspnet-sqlserver-entityframework` tests.
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-## Result Files
|
|
|
|
-
|
|
|
|
-After a test run, the directory ~/FrameworkBenchmarks/results/machine-name/timestamp will contains all the result files. In this folder are four files: three CSV files, one for each of the test types (json, db, query), and a single results.json file that contains all the results as well as some additional information. The results.json file is what we use to drive our blog post, and may or may not be useful to you. There are three subdirectories: one for each of the test types (json, db, query), each of these directories contain the raw weighttp results for each framework.
|
|
|
|
-
|
|
|
|
-## Benchmarking a Single Test
|
|
|
|
-
|
|
|
|
-If you are making changes to any of the tests, or you simply want to verify a single test, you can run the script with the --test flag. For example, if you only wanted to run the JRuby tests:
|
|
|
|
-
|
|
|
|
- nohup ./run-tests.py -s server-ip -c client-ip -i path-to-ssh-key --max-threads cores --name unique-machine-name --test rack-jruby sinatra-jruby rails-jruby
|
|
|
|
|
|
+On the [Toolset README file](toolset/README.md) you will find tools and instructions to replicate our tests using either EC2 or your own dedicated machines.
|
|
|
|
|
|
## Updating Tests
|
|
## Updating Tests
|
|
|
|
|