This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
EC2 Benchmarking
To run the ec2 load tests, you will need the following on your local machine:
- dynomite
- python 2.5 or 2.6 (earlier may work)
- boto 1.5 or better
- optional: nosetests
You will need an active AWS account, and access to an AMI that includes:
- erlang R12B-2 or better
- python 2.5 or 2.6
- ruby
- rake
- thrift
The test file is found in pylibs/test/ec2. It may be run on its own, or via nosetests. The following environment variables can be set to control test behavior and set ec2 connection parameters:
AWS_KEY -- your amazon key
AWS_SECRET_KEY -- your amazon secret key
AWS_SSH_KEY -- your amazon ssh key name
AWS_SSH_KEY_PATH -- path on disk to ssh key file
EC2_AMI -- your AMI name. AMI must have erlang R12B-1 or
better, ruby, rake, python 2.5.1 or better, and
thrift installed
EC2_INSTANCE_TYPE -- type of EC2 instances to start
EC2_INSTANCES -- number of EC2 instances to start
EC2_RUN_TIME -- length of time to run the load test
EC2_CLIENTS_PER_HOST -- number of clients per instance
EC2_GET_THRESHOLD -- If 99.9% of gets are not faster than this # of
milliseconds, the test fails
EC2_PUT_THRESHOLD -- If 99.9% of puts are not faster than this # of
milliseconds, the test fails
EC2_DYNOMITE_BUILD_DIR -- Directory to upload to and build in, on each
ec2 instance.
EC2_DYNOMITE_ARGS -- Extra args to pass to dynomite start script
EC2_DYNOMITE_STORAGE -- Dynomite storage module to use
EC2_LOAD_SCRIPT_ARGS -- Extra args for load_thrift script
EC2_RAKE_ARGS -- Extra args for rake (when building dynamo on each
ec2 instance)
EC2_SEPARATE_CLIENT -- (flag) If true, run clients on separate instances
from servers. Default is to run both client and
server on same instance.
Command line options, when run as a script (not available under nosetests):
-h, --help show this help message and exit
--aws-key=AWS_KEY, --key=AWS_KEY
AWS key (the short one)
--aws-secret-key=AWS_SECRET_KEY, --secret-key=AWS_SECRET_KEY
AWS secret key (the long one)
--aws-ssh-key=AWS_SSH_KEY, --ssh-key=AWS_SSH_KEY
Name of AWS ssh key pair to use
--aws-ssh-key-path=AWS_SSH_KEY_PATH, --ssh-key-path=AWS_SSH_KEY_PATH
Path on disk to AWS ssh private key file associated
with chosen ssh key pair name
--ec2-ami=EC2_AMI, --ami=EC2_AMI
ID of the AMI to use when starting ec2 instances
--ec2-type=EC2_TYPE, --type=EC2_TYPE
Type of instances to start (default: m1.small)
--ec2-instances=EC2_INSTANCES, --instances=EC2_INSTANCES
Number of instances to start (default: 4)
--ec2-run-time=EC2_RUN_TIME, --run-time=EC2_RUN_TIME
Number of seconds to run the test (default: 300)
--ec2-clients=EC2_CLIENTS, --clients=EC2_CLIENTS
Number of client threads per host (default: 10)
--get-threshold=GET_THRESHOLD
If 99.9% of gets are not faster than this # of
milliseconds, the test fails (default: 300)
--put-threshold=PUT_THRESHOLD
If 99.9% of puts are not faster than this # of
milliseconds, the test fails (default: 300)
--dynomite-build-dir=DYN_DIR, --dynomite-dir=DYN_DIR
Directory to upload to and build in, on each ec2
instance
--dynomite-storage=DYNOMITE_STORAGE
Dynomite storage module to use
--dynomite-args=DYNOMITE_ARGS
Extra args to pass to dynomite start script on each
node
--load-args=LOAD_ARGS
Extra args to pass to load script on each node
--rake-args=RAKE_ARGS
Extra args to pass to rake when building dynomite on
each node
--separate-client Run clients on separate instances from servers
Example and recent results:
python test/ec2/ec2_load_test.py --ec2-ami=xxx --type=c1.medium --run-time=600 [... lots of progress output snipped ... ] gets: 23502 puts: 23502 collisions: 0 get avg: 14.1821250.3ms median: 7.9438690.3ms 99.9: 228.2829280.3ms put avg: 19.9633930.3ms median: 11.6100310.3ms 99.9: 191.6468140.3ms gets: 10% < 1.790ms 20% < 2.918ms 30% < 4.905ms 40% < 6.386ms 50% < 7.941ms 60% < 10.555ms 70% < 13.275ms 80% < 18.824ms 90% < 29.427ms 100% < 3685.608ms puts: 10% < 3.440ms 20% < 4.979ms 30% < 6.438ms 40% < 8.214ms 50% < 11.607ms 60% < 15.936ms 70% < 22.062ms 80% < 31.926ms 90% < 47.970ms 100% < 3778.776ms






