The Universal Scalability Law is used to forcast the scalability of
either a hardware or a software system.
The USL model works with one independent variable (e.g. virtual users,
processes, threads, ...) and one dependent variable (e.g. throughput, ...).
Therefore the model formula must be in the simple
"response ~ predictor
" format.
The model produces two coefficients as result: sigma
models the
contention and kappa
the coherency delay of the system. The
function coef
extracts the coefficients from the model
object.
The argument method
selects which solver is used to solve the
model:
"default
" for the default method using a transformation
into a 2nd degree polynom. It can only be used if the model frame
contains a value for the normalization where the predictor equals
"1
" for one measurement. This is the algorithm introduced by
Dr. Neil J. Gunther in the book Guerrilla Capacity Planning.
"nls
" for a nonlinear regression model. This method
estimates not only the coefficients sigma
and kappa
but
also the scale.factor
for the normalization. nls
with the "port
" algorithm is used internally to solve the
model. So all restrictions of the "port
" algorithm apply.
"nlxb
" for a nonliner regression model using the function
nlxb
from the nlsr
package. This method
also estimates both coefficients and the normalization factor. It is
expected to be more robust than the nls
method.
The "nlxb
" solver is used as fallback if the "default
"
method is selected and a predictor equal "1
" is missing. A warning
message will be printed in this case.
The Universal Scalability Law can be expressed with following formula.
C(N)
predicts the relative capacity of the system for a given
load N
:
$$C(N) = \frac{N}{1 + \sigma (N - 1) + \kappa N (N - 1)}$$