/hh-load

Basic load generation library for Common Lisp (SBCL-specific for now)

Primary LanguageCommon Lisp

HH-Load

Very basic load generator for CL projects.  Makes use of Eager Futures for suitable multi-threading
of load creation, and depends upon Drakma for HTTP  For now, only works on SBCL, but only because it 
depends upon a specific SBCL condition when handling socket connection failures.

Basically, 2 major functions for now:

 * generate-load : Supply any callable function (with optional amount of concurrency and max number
   of iterations), and generate-load will make sure the function is called the specified number
   of iterations spread across a concurrent number of invocations.  So, for example, if concurrency
   is 5 and iterations is 20, then hh-load will advise the Eager Futures runtime to use 5 threads,
   then queue up 20 different futures--resulting most likely in each of the 5 threads handling
   4 iterations each.

 * generate-http-load : Instead of passing a function, pass an URL as a string, and generate-http-load
   will generate HTTP GET requests against the URL.  The same concurrency and iteration parameters as 
   for generate-load are valid here as well.  Note that if an interrupt occurs during socket connection,
   then the socket connection will be attempted again (based on handling an SBCL-specific condition,
   SB-BSD-SOCKETS:INTERUPPTED-ERROR).

Upon completion, both functions print out information to *error-output* (e.g., stderr), like this:

     Elapsed time: 1.275
     Completed: 100 iterations
     Iterations per second: 78.431/second
     Errors: 6 (6.000%)
     Longest: 1.028 seconds
     Average: 0.171 seconds
     Fastest: 0.008 seconds

Both functions will also print out a consolidated list of any errors encounters during the run, based
on the message reported for each such error, including the number of times the error was encountered
 (e.g., "3 times 'Condition USOCKET:CONNECTION-RESET-ERROR was signalled.'").

These functions return multiple values, which presently include:

 * elapsed-time : total elapsed time in seconds for complete run
 * completed-iterations : total number of iterations performed (nearly always the same as passed in)
 * iterations-per-second : completed iterations divided by elapsed time
 * total-errors : total number of errors encountered during the run (an error usually terminates an iteration)
 * error-rate : total errors divided by completed iterations
 * max-iteration-duration : longest iteration encountered, in seconds
 * average-duration : average duration across all iterations, in seconds
 * min-iteration-duration : fastest iteration encountered, in seconds

All original code in this package licensed under the MIT license.

Contact phil@haphazardhouse.net for any questions, comments, feedback, or contributions, and keep an eye on
http://haphazardhouse.net/projects/hh-load for info and news about hh-load.