Analyze System Scalability with the Universal Scalability Law

The Universal Scalability Law (Gunther 2007) is a model to predict hardware and software scalability. It uses system capacity as a function of load to forecast the scalability for the system.

Build Status

This is an R package to analyze system performance data with the Universal Scalability Law.

The Universal Scalability Law (USL) was developed by Dr. Neil J. Gunther. It can be used to analyze system performance data in order to learn more about the scalability limitations of the system.

Details are presented in the book Guerrilla Capacity Planning and on the authors website.


Here is an example for the scalability analysis of a Sun SPARCcenter 2000 in the SPEC SDM 91 benchmark. The data used is available for download from the SPEC website and also included as a demo dataset.

# Load data from the SPEC SDM91 benchmark
# Analyze "throughput" by "load" for the "specsdm91" data
usl.model <- usl(throughput ~ load, specsdm91)
# Show a model summary including scalability coefficients
# Predict the location of the maximum in the scalability function
# Plot original data and computed scalability function
plot(specsdm91, pch=16)
plot(usl.model, col="red", add=TRUE)

The summary command returns the following output:

usl(formula = throughput ~ load, data = specsdm91)

Scale Factor for normalization: 64.9

   Min     1Q Median     3Q    Max
0.1214 0.2254 0.3966 0.7799 1.0000

   Min     1Q Median     3Q    Max
-70.89 -23.59  19.39  86.14 274.88

       Estimate Std. Error t value Pr(>|t|)
sigma 1.705e-02  3.318e-03   5.137  0.00365 **
kappa 7.892e-05  2.492e-05   3.167  0.02489 *
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 140.6 on 5 degrees of freedom
Multiple R-squared: 0.9624,  Adjusted R-squared: 0.9549

The following image shows the plotted output:

SPEC SDM91 scalability function


The package is available from CRAN. Use the following command to install the package from the repository:



In addition to the package documentation there is also a package vignette available. Install the package and use the following command to open the vignette:


The vignette is also available from CRAN:


CHANGES in `usl' VERSION 1.8.0 (2017-08-07)

  • The nlsr package will replace the older nlmrt package. The package has been updated accordingly.

CHANGES in `usl' VERSION 1.7.0 (2016-10-13)

  • The `summary()' command now shows the t-value and the two sided p-value for the coefficients sigma and kappa.

CHANGES in `usl' VERSION 1.6.0 (2016-06-17)

  • Remove unused parameter R' from the signature of theconfint()' function.

  • Add additional section about multivalued data to vignette.

CHANGES in `usl' VERSION 1.5.0 (2016-02-25)

  • Use method nlxb' as fallback if the value for the scale factor is missing in the data and thedefault' method is used. A warning message is printed in this case. This is more user-friendly than the error message given before.

  • Remove unused parameter R' from the signature of theusl()' function.

CHANGES in `usl' VERSION 1.4.1 (2014-12-29)

  • Depend on methods' package instead of importing it. This fixes a problem with callingusl()' from Rscript.

  • Minor fixes concerning coding style and typos.

CHANGES in `usl' VERSION 1.4.0 (2014-11-04)

  • Add new method `overhead()' to calculate the overhead in execution time caused by contention and coherency delays.

CHANGES in `usl' VERSION 1.3.1 (2014-06-20)

  • Fix vignette for TeXLive 2014.

CHANGES in `usl' VERSION 1.3.0 (2014-06-02)

  • The estimation of standard errors for the coefficients has been rewritten. Bootstrapping is no longer used for the calculation. Therefore the argument R' for theusl()' function and the argument type' for theconfint()' function have been deprecated. The arguments will be removed in the next release.

  • Added coefficient standard errors and residual standard error to the summary output.

  • Added implementation for the df.residual() function to get the degrees of freedom for the model.

  • Removed misleading calculation of deviance.

  • Used roxygen2 4.0.1 to generate the documentation.

  • Added a new demo data set `oracledb'.

CHANGES in `usl' VERSION 1.2.2 (2014-04-03)

  • Use roxygen2 3.1 to generate documentation.

  • Fix handling of unsorted input data frame for method="default".

CHANGES in `usl' VERSION 1.2.1 (2013-08-12)

  • Adapt to `nlmrt' version 2013-8.10

CHANGES in `usl' VERSION 1.2.0 (2013-04-29)

  • Added function `confint()' to estimate parameter confidence intervals.

CHANGES in `usl' VERSION 1.1.0 (2013-02-26)

  • Added a package vignette.

  • Use Import' instead ofDepend' for the used packages.

  • Function efficiency()' now returns a named vector. The names are the values of the independent variable, cf.fitted()' or `residuals()'.

CHANGES in `usl' VERSION 1.0.0 (2013-02-10)

  • Initial release on CRAN

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


3.0.0 by Stefan Moeding, a year ago

Report a bug at

Browse source code at

Authors: Neil J. Gunther [aut] , Stefan Moeding [aut, cre]

Documentation:   PDF Manual  

BSD_2_clause + file LICENSE license

Imports graphics, stats, nlsr

Depends on methods

Suggests knitr

See at CRAN