Block-Flow: draft Load/Stress-Test

- use a midrange load scenario
- but play this at saturation level
This commit is contained in:
Fischlurch 2023-07-17 18:36:12 +02:00
parent a4365a24f8
commit c1001064e3
2 changed files with 137 additions and 3 deletions

View file

@ -31,15 +31,23 @@
//#include "lib/time/timevalue.hpp"
//#include "lib/format-cout.hpp"
#include "lib/test/diagnostic-output.hpp" ////////////////////////////////TODO
#include "lib/meta/function.hpp"
#include "lib/util.hpp"
//#include <utility>
#include <vector>
#include <tuple>
using test::Test;
//using std::move;
using util::isSameObject;
using lib::test::randTime;
using lib::test::showType;
using lib::time::Offset;
using std::vector;
using std::pair;
using std::reference_wrapper;
namespace vault{
@ -47,7 +55,6 @@ namespace gear {
namespace test {
// using lib::time::FrameRate;
// using lib::time::Offset;
// using lib::time::Time;
@ -330,12 +337,64 @@ namespace test {
// which is a different calculation path but yields the same result
/** @test TODO maintain progression of epochs.
* @todo WIP 7/23 🔁define implement
/** @test investigate progression of epochs under realistic load
* - expose the allocator to a load of 200fps for simulated 60sec
* - assuming 10 Activities per frame, this means a throughput of 120000 Activities
* - run this load exposure under saturation for performance measurement
* - use a planning to deadline delay of 500ms, but with ±200ms random spread
* - after 250ms (500 steps), »invoke« by accessing and adding the random checksum
* - run a comparison of all-pre-allocated heap allocated BlockFlow
* @todo WIP 7/23 🔁define 🔁implement
*/
void
storageFlow()
{
const uint ACTIVITIES = 120000; // Activities to send through the test subject
const uint MAX_TIME = 121000; // Test steps to perform, with 2 steps / ms
Offset BASE_DEADLINE{FSecs{1,2}}; // base pre-roll before deadline
Offset SPREAD_DEAD{FSecs{2,100}}; // random spread of deadline around base
const uint INVOKE_LAG = 500; // „invoke“ the Activity after 500 steps (≙ simulated 250ms)
const uint CLEAN_UP = 200; // perform clean-up every 200 steps
using TestData = vector<pair<TimeVar, size_t>>;
using Subjects = vector<reference_wrapper<Activity>>;
using Storage = vector<Activity>;
TestData testData{ACTIVITIES};
for (auto&[t,r] : testData)
{
const size_t SPREAD = 2*_raw(SPREAD_DEAD);
const size_t MIN_DEAD = _raw(BASE_DEADLINE) - _raw(SPREAD_DEAD);
r = rand() % SPREAD;
t = TimeValue(MIN_DEAD + r);
}
Activity dummy;
Subjects subject{ACTIVITIES, std::ref(dummy)};
auto runTest = [&](auto allocate, auto invoke) -> size_t
{
// allocate Activity record for deadline and with given random payload
ASSERT_VALID_SIGNATURE (decltype(allocate), Activity&(Time, size_t));
// access the given Activity, read the payload, then trigger disposal
ASSERT_VALID_SIGNATURE (decltype(invoke), size_t(Activity&));
size_t checksum{0};
for (size_t i=0; i<MAX_TIME; ++i)
{
if (i < ACTIVITIES)
{
auto const& data = testData[i];
subject[i] = allocate(data.first, data.second);
}
if (i >= INVOKE_LAG)
checksum += invoke(subject[i-INVOKE_LAG]);
}
};
}
};

View file

@ -78922,9 +78922,68 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689202692911" ID="ID_906364025" MODIFIED="1689560760573" TEXT="Massentest zur Performance-Messung">
<linktarget COLOR="#a03b66" DESTINATION="ID_906364025" ENDARROW="Default" ENDINCLINATION="-1525;104;" ID="Arrow_ID_849510703" SOURCE="ID_1170043916" STARTARROW="None" STARTINCLINATION="455;-1256;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1689607803699" ID="ID_620009729" MODIFIED="1689609183664" TEXT="Default-Init-Parameter">
<icon BUILTIN="info"/>
<node CREATED="1689608995574" ID="ID_1382602336" MODIFIED="1689608995574" TEXT="EPOCH_SIZ = 100"/>
<node CREATED="1689609002434" ID="ID_216937805" MODIFIED="1689609002434" TEXT="ACTIVITIES_PER_FRAME = 10"/>
<node CREATED="1689609017551" ID="ID_272032946" MODIFIED="1689609040604" TEXT="&#x27f9; FRAMES_PER_EPOCH = 10"/>
<node CREATED="1689609051050" ID="ID_1257102210" MODIFIED="1689609058851" TEXT="initial assumed Framerate: 50 fps"/>
<node CREATED="1689609075143" ID="ID_344074739" MODIFIED="1689609133361" TEXT="&#x27f9; INITIAL_EPOCH_STEP = 200ms"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1689609141854" ID="ID_82493559" MODIFIED="1689610221195">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
setze aber einen h&#246;heren Durchsatz an
</p>
<p>
(damit das System unter Druck kommt)
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
<node CREATED="1689610222139" ID="ID_1704167473" LINK="#ID_1804527820" MODIFIED="1689610391195" TEXT="Kategorie: Lasttest">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1689610228610" ID="ID_1383838489" MODIFIED="1689610246476" TEXT="aber auch hinreichend viel Durchsatz f&#xfc;r Laufzeitmessung"/>
</node>
<node CREATED="1689609334347" ID="ID_1456811556" MODIFIED="1689610460870" TEXT="Zielwert: 200 fps f&#xfc;r simulierte 60 Sekunden mit 500ms Planungsvorlauf"/>
<node CREATED="1689609354638" ID="ID_13693062" MODIFIED="1689609360660" TEXT="erwartete Lastdaten">
<node CREATED="1689609372927" ID="ID_1978827728" MODIFIED="1689609380722" TEXT="12000 Frames"/>
<node CREATED="1689609382411" ID="ID_155883232" MODIFIED="1689609389365" TEXT="120000 Activities"/>
<node CREATED="1689609467874" ID="ID_1876259312" MODIFIED="1689609473232" TEXT="1200 Epochen"/>
<node CREATED="1689610411828" ID="ID_386161916" MODIFIED="1689610424739" TEXT="2000 Activities/sec"/>
<node CREATED="1689611568517" ID="ID_1701491686" MODIFIED="1689611600839" TEXT="20 Epochen / sec"/>
<node CREATED="1689610474674" ID="ID_1543562596" MODIFIED="1689610513127" TEXT="&#x2205; 1000 Activities im Vorlauf">
<node CREATED="1689610536148" ID="ID_1153226592" MODIFIED="1689610541467" TEXT="das sind &#x2205; 10 Epochen"/>
<node CREATED="1689610676253" ID="ID_910559745" MODIFIED="1689610685976" TEXT="verwende &#xb1;200ms Streuung im Vorlauf"/>
</node>
<node CREATED="1689611710754" ID="ID_488317579" MODIFIED="1689611720732" TEXT="alle 100ms ein clean-up"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689560632798" ID="ID_1959869883" MODIFIED="1689560652584" TEXT="probabilistische F&#xfc;llung verwenden">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1689610738613" ID="ID_981353581" MODIFIED="1689610750951" TEXT="System wird synchron Ende-zu-Ende unter Druck gesetzt"/>
<node CREATED="1689610757842" ID="ID_1665227842" MODIFIED="1689610778211" TEXT="erzeuge im Vorlauf die Zufallsdaten">
<node CREATED="1689610814059" ID="ID_887238999" MODIFIED="1689610825598" TEXT="Zufallszahl als Pr&#xfc;fsumme"/>
<node CREATED="1689610928747" ID="ID_796987353" MODIFIED="1689610975585" TEXT="Deadline-Vorlauf zuf&#xe4;llig 500ms &#xb1; 200ms"/>
</node>
<node CREATED="1689610781367" ID="ID_777278499" MODIFIED="1689610796142" TEXT="erzeuge die Activities direkt hintereinander">
<node CREATED="1689611029321" ID="ID_262626991" MODIFIED="1689611091545" TEXT="k&#xfc;nstliche Zeitachse">
<node CREATED="1689611092623" ID="ID_1167959769" MODIFIED="1689611179221" TEXT="120000/60000ms &#x2259; 2 / ms"/>
<node CREATED="1689611188368" ID="ID_1473863990" MODIFIED="1689611233453" TEXT="Messdauer 60.5 sec"/>
<node CREATED="1689611093797" ID="ID_852184671" MODIFIED="1689611304636" TEXT="t = i/121000"/>
<node CREATED="1689611317734" ID="ID_1020302542" MODIFIED="1689611352430" TEXT="i &#x2259; step mit 2step / ms"/>
</node>
<node CREATED="1689610978989" ID="ID_986448579" MODIFIED="1689610993746" TEXT="stelle die Pointer in vorbereiteten Vector"/>
<node CREATED="1689611424768" ID="ID_770500915" MODIFIED="1689611453648" TEXT="mit 1000 Steps Verz&#xf6;gerung (500ms) : Pr&#xfc;fsumme zugreifen und lesen"/>
<node CREATED="1689611688365" ID="ID_693753703" MODIFIED="1689611706798" TEXT="alle 200 Steps ein clean-up"/>
</node>
<node CREATED="1689611733375" ID="ID_1765690809" MODIFIED="1689611754896" TEXT="brauche Abstraktion der Messung durch zwei &#x3bb;">
<node CREATED="1689611756428" ID="ID_121020011" MODIFIED="1689611763612" TEXT="&#x3bb;1 : alloc"/>
<node CREATED="1689611766050" ID="ID_1445074536" MODIFIED="1689611771519" TEXT="&#x3bb;2 : invoke"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689560655505" ID="ID_341052414" MODIFIED="1689560698827" TEXT="Laufzeiten messen...">
<icon BUILTIN="flag-yellow"/>
@ -80300,6 +80359,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689560454292" ID="ID_1170043916" MODIFIED="1689560767049" TEXT="Laufzeitverhalten beobachten">
<arrowlink COLOR="#a03b66" DESTINATION="ID_906364025" ENDARROW="Default" ENDINCLINATION="-1525;104;" ID="Arrow_ID_849510703" STARTARROW="None" STARTINCLINATION="455;-1256;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1689607767280" ID="ID_1402491463" MODIFIED="1689607773610" TEXT="Analyse-Setup">
<icon BUILTIN="info"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1689560462402" ID="ID_572069226" MODIFIED="1689560515277" TEXT="verwende probabilisitsche F&#xfc;llung">
<icon BUILTIN="flag-yellow"/>
</node>
@ -80313,6 +80374,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1689607779429" ID="ID_1970538924" MODIFIED="1689607783608" TEXT="Feststellungen">
<icon BUILTIN="hourglass"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688559356693" HGAP="9" ID="ID_1823374976" MODIFIED="1688559375797" TEXT="Grenzf&#xe4;lle" VSHIFT="7">
<icon BUILTIN="flag-yellow"/>
@ -89970,6 +90035,16 @@ class Something
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1689610305547" ID="ID_1569437785" MODIFIED="1689610311743" TEXT="QA-testing">
<icon BUILTIN="hourglass"/>
<node CREATED="1689610320586" ID="ID_1544042895" MODIFIED="1689610323417" TEXT="Acceptance"/>
<node CREATED="1689610323870" ID="ID_1042323172" MODIFIED="1689610326409" TEXT="Performance">
<node CREATED="1689610327819" ID="ID_1930713525" MODIFIED="1689610330232" TEXT="Kategorien">
<node CREATED="1689610331212" ID="ID_1804527820" MODIFIED="1689610343679" TEXT="Load-Test: typische Belastung"/>
<node CREATED="1689610344482" ID="ID_1870176832" MODIFIED="1689610351589" TEXT="Stress-Test: Systemgrenzen"/>
</node>
</node>
</node>
<node CREATED="1570812308345" FOLDED="true" ID="ID_595212266" MODIFIED="1582333970566" TEXT="Review">
<icon BUILTIN="bell"/>
<node CREATED="1570812319615" ID="ID_587624101" MODIFIED="1570812352560" TEXT="buffhandle.hpp">