Lumiera  0.pre.03
»edit your freedom«
BreakingPoint< CONF > Class Template Reference

#include "/Werk/devel/lumi/tests/vault/gear/stress-test-rig.hpp"

Description

template<class CONF>
class vault::gear::test::bench::BreakingPoint< CONF >

Specific stress test scheme to determine the »breaking point« where the Scheduler starts to slip.

Definition at line 276 of file stress-test-rig.hpp.

Public Member Functions

auto perform ()
 Launch a measurement sequence to determine the »breaking point« for the configured test load and parametrisation of the Scheduler. More...
 

Classes

struct  Res
 

Private Types

using TestLoad = typename CONF::TestLoad
 
using TestSetup = typename TestLoad::ScheduleCtx
 

Private Member Functions

template<class FUN >
Res conductBinarySearch (FUN &&runTestCase, vector< Res > const &results)
 invoke a binary search to produce a sequence of test series with the goal to narrow down the stressFact where the Schedule slips away.
 
void configureTest (TestSetup &testSetup, double stressFac)
 prepare the ScheduleCtx for a specifically parametrised test series
 
bool decideBreakPoint (Res &res)
 criterion to decide if this test series constitutes a slipped schedule
 
void maybeAdaptScaleEmpirically (TestSetup &testSetup, double stressFac)
 Attempt to factor out some observable properties, which are considered circumstantial and not a direct result of scheduling overheads. More...
 
Res runProbes (TestSetup &testSetup, double stressFac)
 perform a repetition of test runs and compute statistics
 
void showRef (TestSetup &testSetup)
 
void showRes (Res &res)
 
void showRun (uint i, double delta, double t, bool over, bool fail)
 
void showStep (Res &res)
 

Private Attributes

double adjustmentFac {1.0}
 adaptive scale correction based on observed behaviour
 
_Fmt fmtResSDv_ {"%9s= %5.2f ±%4.2f%s"}
 
_Fmt fmtResVal_ {"%9s: %5.2f%s"}
 
_Fmt fmtRun_ {"....·%-2d: Δ=%4.1f t=%4.1f %s %s"}
 
_Fmt fmtStep_ { "%4.2f| : ∅Δ=%4.1f±%-4.2f ∅t=%4.1f %s %%%-3.0f -- expect:%4.1fms"}
 
size_t gaugeProbes = 3 * CONF::REPETITIONS
 

Class Documentation

◆ vault::gear::test::bench::BreakingPoint::Res

struct vault::gear::test::bench::BreakingPoint::Res
Class Members
double stressFac
double percentOff
double stdDev
double avgDelta
double avgTime
double expTime
+ Collaboration diagram for BreakingPoint< CONF >::Res:

Member Function Documentation

◆ maybeAdaptScaleEmpirically()

void maybeAdaptScaleEmpirically ( TestSetup &  testSetup,
double  stressFac 
)
inlineprivate

Attempt to factor out some observable properties, which are considered circumstantial and not a direct result of scheduling overheads.

The artificial computational load is known to drift towards larger values than calibrated; moreover the actual concurrency achieved can deviate from the heuristic assumptions built into the testing schedule. The latter is problematic to some degree however, since the Scheduler is bound to scale down capacity when idle. To strike a reasonable balance, this adjustment of the measurement scale is done only initially, and when the stress factor is high and some degree of pressure on the scheduler can thus be assumed.

Definition at line 393 of file stress-test-rig.hpp.

References StressTestRig< maxFan >::showRef, StressTestRig< maxFan >::showRes, StressTestRig< maxFan >::showStep, and StressTestRig< maxFan >::testSetup().

+ Here is the call graph for this function:

◆ perform()

auto perform ( )
inline

Launch a measurement sequence to determine the »breaking point« for the configured test load and parametrisation of the Scheduler.

Returns
a tuple [stress-factor, ∅delta, ∅run-time]

Definition at line 459 of file stress-test-rig.hpp.

References Config::COMPUTATION_CAPACITY, StressTestRig< maxFan >::showRef, StressTestRig< maxFan >::showRes, StressTestRig< maxFan >::testLoad(), and TRANSIENTLY.

+ Here is the call graph for this function:
+ Inheritance diagram for BreakingPoint< CONF >:
+ Collaboration diagram for BreakingPoint< CONF >:

The documentation for this class was generated from the following file: