Documentation ¶
Overview ¶
USL is a modeler for the Universal Scalability Law, which can be used in system testing and capacity planning.
As an example, consider doing load testing and capacity planning for an HTTP server. To use USL, we must first gather a set of measurements of the system. These measurements will consist of pairs of simultaneous measurements of the independent and dependent variables. With an HTTP server, it might be tempting to use the rate as the independent variable, but this is a mistake. The rate of requests being handled by the server is actually itself a dependent variable of two other independent variables: the number of concurrent users and the rate at which users send requests.
As we do our capacity planning, we make the observation that users of our system do ~10 req/sec. (Or, more commonly, we assume this based on a hunch.) By holding this constant, we leave the number of concurrent users as the single remaining independent variable.
Our load testing, then, should consist of running a series of tests with an increasing number of simulated users, each performing ~10 req/sec. While the number of users to test with depends heavily on your system, you should be testing at least six different concurrency levels. You should do one test with a single user in order to determine the performance of an uncontended system.
After our load testing is done, we should have a CSV file which consists of a series of (concurrency, throughput) pairs of measurements:
1,65 18,996 36,1652 72,1853 108,1829 144,1775 216,1702
We can then run the USL binary:
usl data.csv
USL parses the given CSV file as a series of (concurrency, throughput) points, calculates the USL parameters using quadratic regression, and then prints out the details of the model, along with a graph of the model's predictions and the given measurements.
Finally, we can provide USL a series of additional data points to provide estimates for:
usl data.csv 128 256 512
USL will output the data in CSV format on STDOUT.
For more information, see http://www.perfdynamics.com/Manifesto/USLscalability.html.