Asynchronous Web Traffic Generator

wcasync is an asynchronous open-loop web-traffic generator.

Many existing web-traffic generators (httperf, webstone2.5) are too simple; they create a fixed number of client processes and re-fetch urls only after the earlier url finishes successfully. Such generators rarely stress web-servers, even when spewing out data at tens of MBps, the web-server only has to contend with a small number of simultaneous clients. We call such behavior "closed-loop".

In constrast, wcasync, built on top of WebStone 2.5, is open-loop. wcasync uses an asynchronous networking library~(libasync) to issue requests at a specified rate irrespective of responses to prior requests.

Simply speaking, wcasync takes two parameters – a request rate in reqs/sec and, – a probabilistic list of urls to fetch and requests at the specified rate. In each request, wcasync samples urls from the url list and fetches data. Prior requests that have been pending for too long are timed out and garbage collected.

wcAsync also mimics the session-like arrival of HTTP requests. User's arrive in sessions, make a request, wait some random time after which they can either make new requests or leave with a small probability.

Download Source

wcasync-0.1.tgz

Install

  1. Install sfslite
    1. tar zxvf sfslite-0.8.tgz
    2. cd sfslite-0.8
    3. ./setup
    4. ./configure
    5. make
    6. sudo make install
  2. Build wcasync.

    # You may want to modify the Makefile to point to installed location of sfslite.
    # In the main directory.

    make

Use

./wcasync -w localserver -p 8081 -a ans.blah -u dummydata -t2 -S2343 -n1 -f4 -q.1 -e xx Load is n·f·(1/q) reqs/sec. The average request size is determined by urls in dummydata, so load then is n·f·(1/q)·(avg file_size) Bytes/s.

Credits

Srikanth Kandula; Shan Sinha

Legal et. al.

Here is WebStone2.5's license. Research Prototype, absolutely no warranty.