Hi folks,
Problems (Itch)
===============
As some of you know, I've been trying to benchmark and stress test
ApacheDS and other LDAP servers using simple tests. I've found this
very hard to do. Some servers are a black box. It's also very hard to
measure throughput with load and concurrency since you have to hit the
server with may clients often from different machines then gather
statistics. Plus it's just a nightmare to setup tests and trigger then
from many machines at the same time.
LDAP is the first of many protocols that will need to be benchmarked and
stress tested for ApacheDS. Others like Kerberos, Changepw, DNS, and
DHCP will also need benchmarks as well.
Pie In the Sky Solution
=======================
It would rock to have an imaginary tool, for the following imaginary
work flow to stress test a MINA protocol server.
Step I: Setup toolkit daemons on machines
-----------------------------------------
(a) install the stat gathering daemon on a machine used to control the
client drivers and gather throughput statistics from them; call this the
central command and control daemon (CCCD)
(b) install the server vitals monitoring daemon on the machine hosting
the MINA protocol server; call this the vitals daemon or VD. configure
it to push vitals at some frequency to the CCCD
(c) install the client driver daemon (CDD) on each client machine used
to generate load;
Step II: Capture req/resp sequence
-----------------------------------------
I fire up my MINA server and turn on ethereal to capture the traffic
between my server and a client. Then I generate an ethereal or pcap
dump of the client server conversation. This req sequence is what I
want replayed over and over again by several clients.
Step III: Create a test configuration
-----------------------------------------
Here we create a new test configuration by specifying the server and
port to be tested. When this is done the VD service is discovered to
control it's operational parameters for capturing vitals from the
command console on the CCCD.
Each client driver machine running a CDD is specified. It would be nice
if the CDDs can be discovered and selected for participation in the test
configuration using a list of check boxes. Once discovered and included
in the test configuration the CCCD can control, and gather stats from
these client daemons to make them pound on the MINA server.
Next setup the request sequence to hit the server with using the dump
captured in step II. I feed this conversation dump to the CCCD which
has a nice web UI (embedded jetty). On the upload page I have to give
it the source (ip /port) of the client. The CCCD uses that to determine
the bytes of the requests of the client and responses from the server:
the replay PDUs.
I simply tell the CCCD how many times or for how long (time wise) to
keep running the sequence of PDUs against the MINA server. I can also
tell the CCCD to skew clients by time. Also I should be able to control
the way in which the req sequence is pumped in. I.e. new connection
each time?
Now my test configuration is complete with tests ready to run.
Step IV: Schedule/Run a test configuration
------------------------------------------
The CCCD can schedule runs of a test configuration. It can also trigger
these runs manually and record the results for future progression analysis.
So I pick a test configuration and ask to manually fire off a new test.
When I do this the CCCD asks me to provide some notes about this test
for future reference as well as the version/build number of the MINA
server being tested. Again this is for future comparisons.
After providing this information the test starts. The first thing that
happens is client drivers are primmed with the requests that need to be
played over and over again against the server. Then time
synchronization is performed and a checkpoint is noted before starting
the recording of throughput. Then the MINA server starts getting pounded.
The CDD's push throughput rate information to the CCCD which collect it
for the test run and sums up totals. Once the test completes the data
can be visualized with nice graphing tools built into the console of the
CCCD.
Would others like to have such a tool? I think we can write this tool
using MINA. SLAMD does this to a degree but it's missing several
features needed for the smooth flow above and is a bit hard to setup and
configure.
Thoughts? Comments?
Alex