Block-Flow: draft Load/Stress-Test
- use a midrange load scenario - but play this at saturation level
This commit is contained in:
parent
a4365a24f8
commit
c1001064e3
2 changed files with 137 additions and 3 deletions
|
|
@ -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]);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -78922,9 +78922,68 @@ Date:   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="⟹ 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="⟹ 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ö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ür Laufzeitmessung"/>
|
||||
</node>
|
||||
<node CREATED="1689609334347" ID="ID_1456811556" MODIFIED="1689610460870" TEXT="Zielwert: 200 fps fü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="∅ 1000 Activities im Vorlauf">
|
||||
<node CREATED="1689610536148" ID="ID_1153226592" MODIFIED="1689610541467" TEXT="das sind ∅ 10 Epochen"/>
|
||||
<node CREATED="1689610676253" ID="ID_910559745" MODIFIED="1689610685976" TEXT="verwende ±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ü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üfsumme"/>
|
||||
<node CREATED="1689610928747" ID="ID_796987353" MODIFIED="1689610975585" TEXT="Deadline-Vorlauf zufällig 500ms ± 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ünstliche Zeitachse">
|
||||
<node CREATED="1689611092623" ID="ID_1167959769" MODIFIED="1689611179221" TEXT="120000/60000ms ≙ 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 ≙ 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ögerung (500ms) : Prü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 λ">
|
||||
<node CREATED="1689611756428" ID="ID_121020011" MODIFIED="1689611763612" TEXT="λ1 : alloc"/>
|
||||
<node CREATED="1689611766050" ID="ID_1445074536" MODIFIED="1689611771519" TEXT="λ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:   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üllung">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
|
|
@ -80313,6 +80374,10 @@ Date:   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ä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">
|
||||
|
|
|
|||
Loading…
Reference in a new issue