Skip to content

Auto Tuning

Ioannis Papapanagiotou edited this page Oct 16, 2017 · 4 revisions

Some plugin-implementations may elect to support auto-tuning to minimize the manual overhead of figuring out the read or write rate limit at which performance starts to fall below some configurable threshold.

In a nutshell, this technique involves:

  • setting the initial read/write limit for your benchmark run to a low enough level that is guaranteed not to overload the data store you are benchmarking,
  • using a benchmark driver plug-in that provides an implementation for the autoTune[Write/Read]RateLimit methods.

These methods will first examine three things:

  1. events which encode the results of read/write operations,
  2. runtime statistics, and
  3. the currentRateLimit.

After interpreting these three pieces of information these methods will return a new recommended rate limit (which may be higher or lower than currentRateLimit.) (As a user you don't have to write these methods, but you can only take advantage of auto-tuning if you use a plugin that has these methods implemented.)

The benchmark driver will attempt to raise a rate limit from its initial to its final value in a fixed number of steps, given by the formula: _autoTuneRampPeriodMillisecs / autoTuneIncrementIntervalMillisecs_. At each step the new candidate limit should be determined by the previous value for the rate PLUS (final rate - initial rate) / number-of-steps, rounded down to the nearest integer.

This feature is experimental. The first plug-in which implements it (Elastic search REST client plug-in) only implements auto-tuning for write operations.

Plug-in authors wishing to support this extension should provide an implementation for the autoTuneReadRateLimit of @NdBenchAbstractClient. More information about the configuration can be found in the Configuration section.