Scheduler-test: adjust contention mitigation as result of testing
Investigate the behaviour over a wider range of job loads, job count and worker pool sizes. Seemingly the processing can not fully utilise the available worker pool capacity. By inspection of trace-dumps, one impeding mechanism could be identified: the »stickiness« of the contention mitigation. Whenever a worker encounters repeated contention, it steps up and adds more and more wait cycles to remove pressure from the schedule coordination. As such this is fine and prevents further degradation of performance by repeated atomic synchronisation. However, this throttling was kept up needlessly after further successful work-pulls. Since job times of several milliseconds can be expected on average in media processing, such a long retention would spread a performance degradation over a duration of several frames. Thus, the scheme for step-down was changed to decrease the throttling by a power series rather than just documenting the level.
This commit is contained in:
parent
a6a9155cd9
commit
1316ee2c7f
11 changed files with 6325 additions and 37 deletions
2651
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-11
Normal file
2651
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-11
Normal file
File diff suppressed because it is too large
Load diff
2629
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-12
Normal file
2629
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-12
Normal file
File diff suppressed because it is too large
Load diff
169
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-11
Normal file
169
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-11
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
#
|
||||
#
|
||||
# GNUPLOT - data plot from Lumiera
|
||||
#
|
||||
|
||||
set term wxt size 600,600
|
||||
|
||||
|
||||
set datafile separator ",;"
|
||||
|
||||
####---------Data--------------------------------
|
||||
$RunData << _End_of_Data_
|
||||
"load size","result time","concurrency","avg jobtime","avg impeded"
|
||||
157,46.554495,7.48728108853936,2220.16936305732,5.00084713375796
|
||||
121,50.292037,5.33252293996364,2216.39207438017,98.5650165289256
|
||||
41,17.16609,6.07957181862614,2545.42626829268,19.3487317073171
|
||||
136,47.647478,6.35526132149114,2226.56010294118,17.3729779411765
|
||||
49,20.584294,5.44682436035941,2288.14355102041,38.9046530612245
|
||||
189,56.006029,7.37320239219245,2184.88776190476,0.771513227513227
|
||||
187,59.645147,6.96034609488011,2220.05810695187,2.20291978609626
|
||||
157,55.209898,6.03719403719964,2123.01189171975,37.0743630573248
|
||||
61,27.400035,4.93882274237971,2218.42485245902,7.64193442622951
|
||||
144,46.944119,6.66945282325993,2174.24713194444,11.4371458333333
|
||||
176,54.16028,7.11431672805236,2189.28060227273,5.80461363636364
|
||||
77,26.727591,6.39997349555371,2221.50485714286,4.55142857142857
|
||||
47,23.835568,5.08421993551821,2578.41,32.0726595744681
|
||||
161,53.806824,6.90029627097113,2306.10575776397,3.0222298136646
|
||||
48,24.075089,4.98632615646821,2500.96345833333,153.631833333333
|
||||
123,46.065361,6.04074328213775,2262.34975609756,30.5994390243902
|
||||
48,19.493791,6.84829938927733,2781.23577083333,22.5110833333333
|
||||
74,34.211108,4.9586167744114,2292.42937837838,54.5361486486486
|
||||
125,38.459702,7.04485364967206,2167.543776,3.341488
|
||||
87,41.065671,4.75102269727919,2242.57396551724,151.366091954023
|
||||
123,43.067274,6.74489662382625,2361.66106504065,10.4976260162602
|
||||
197,57.968187,7.62476801284125,2243.62425380711,3.16879187817259
|
||||
186,54.641177,7.24991421762383,2129.80562365591,3.05421505376344
|
||||
94,34.292914,6.61717834769014,2414.06731914894,5.99422340425532
|
||||
83,30.439659,6.41262587731354,2351.78487951807,70.7724096385542
|
||||
109,40.008459,6.38738712730725,2344.49097247706,7.56521100917431
|
||||
59,29.033358,4.97959316314703,2450.41205084746,104.970728813559
|
||||
40,19.635726,4.44165670268571,2180.37885,19.92975
|
||||
62,22.712011,6.9283870107319,2538.02583870968,8.72167741935484
|
||||
51,27.127065,4.54867118871872,2419.45292156863,67.0625490196078
|
||||
136,48.226757,6.67485178404179,2366.95922794118,3.46152941176471
|
||||
81,29.423654,6.26774414217894,2276.78932098765,12.4343703703704
|
||||
99,30.381306,7.3978615336681,2270.26964646465,4.01015151515151
|
||||
125,43.996299,6.55915273691544,2308.62756,4.578288
|
||||
68,26.404795,5.94296914632361,2307.68944117647,1.91704411764706
|
||||
56,24.513297,6.05979424146821,2652.59885714286,22.1650535714286
|
||||
156,55.991977,6.11697006162151,2195.52081410256,19.6662179487179
|
||||
181,56.97651,7.54696488079035,2375.68906077348,0.618259668508287
|
||||
33,15.986522,5.1415193373518,2490.75793939394,12.9112121212121
|
||||
198,59.500354,7.14364250673199,2146.71342424243,2.43373737373737
|
||||
163,51.103658,7.15751062282078,2244.01825153374,6.80783435582822
|
||||
121,39.859696,6.88613310046319,2268.42290909091,15.1302314049587
|
||||
181,55.874614,7.49570459672437,2313.92044751381,7.49208839779005
|
||||
68,25.322434,6.57913011047833,2449.99394117647,9.17791176470588
|
||||
179,57.311142,6.88257079225537,2203.62006703911,3.28875977653631
|
||||
32,16.349611,4.86687469200338,2486.609625,7.32503125
|
||||
161,51.394423,7.13552826539175,2277.80346583851,6.49071428571429
|
||||
176,60.008068,6.6547853032029,2268.98186931818,1.71989772727273
|
||||
188,58.826985,7.35173932507335,2300.42903723404,2.80307446808511
|
||||
55,22.664287,5.5486769118305,2286.48738181818,24.2084545454545
|
||||
59,26.815392,4.83147003780515,2195.89428813559,13.0098813559322
|
||||
97,37.460556,6.19002019083753,2390.53193814433,7.96409278350515
|
||||
84,26.563322,6.43358820105407,2034.49375,11.4647380952381
|
||||
69,27.823527,6.03438586344571,2433.30286956522,30.3107391304348
|
||||
97,39.035368,5.51833693485354,2220.72487628866,16.4026701030928
|
||||
115,41.256006,6.50182913973786,2332.51740869565,13.6992086956522
|
||||
90,29.937511,6.80177340060101,2262.53517777778,9.98628888888889
|
||||
33,22.91761,4.0258742076508,2795.86106060606,41.6706060606061
|
||||
166,58.566848,7.22227735390506,2548.10855421687,5.82302409638554
|
||||
159,55.436672,7.54835627578798,2631.79717610063,2.16196226415094
|
||||
34,16.062211,4.7875236478963,2261.71220588235,13.4043529411765
|
||||
185,63.36048,7.42693573344141,2543.64439459459,3.23899459459459
|
||||
84,34.441246,5.62509698400575,2306.37320238095,50.2789761904762
|
||||
185,54.992998,7.36138984457621,2188.24268648649,3.21179459459459
|
||||
187,60.002963,6.69152031708834,2147.11789304813,3.68767914438503
|
||||
87,34.14314,5.78903486908351,2271.90606896552,28.3448045977011
|
||||
183,56.644245,7.29961391488226,2259.45966666667,3.22210382513661
|
||||
150,46.269744,7.13931710968619,2202.22916666667,2.64142666666667
|
||||
200,60.218589,7.20858394739206,2170.45377,5.500815
|
||||
104,37.635813,6.88045049006913,2489.91680769231,7.87939423076923
|
||||
|
||||
_End_of_Data_
|
||||
|
||||
|
||||
#
|
||||
#---common-styles-for-plots-from-Lumiera---------
|
||||
set style line 1 linetype 1 linewidth 2 linecolor rgb '#240CC3'
|
||||
set style line 2 linetype 3 linewidth 2 linecolor rgb '#1149D6'
|
||||
set style line 3 linetype 2 linewidth 2 linecolor rgb '#0B7FCC'
|
||||
set style line 4 linetype 6 linewidth 2 linecolor rgb '#37999D'
|
||||
set style line 5 linetype 7 linewidth 2 linecolor rgb '#248269'
|
||||
set style line 6 linetype 13 linewidth 2 linecolor rgb '#00C443'
|
||||
set style line 7 linetype 12 linewidth 2 linecolor rgb '#EBE83E'
|
||||
set style line 8 linetype 5 linewidth 2 linecolor rgb '#762C14'
|
||||
set style line 9 linetype 4 linewidth 2 linecolor rgb '#AA0519'
|
||||
|
||||
set style line 10 linetype 1 linewidth 1 linecolor rgb '#303030'
|
||||
set style line 11 linetype 0 linewidth 1 linecolor rgb '#A0A0A0' dashtype 3
|
||||
#---(End)styles----------------------------------
|
||||
|
||||
#
|
||||
#---axis-and-grid-setup--------------------------
|
||||
unset border
|
||||
set tics nomirror
|
||||
set grid back linestyle 11
|
||||
|
||||
set arrow 10 from graph 0,0 to graph 1.04,0 size screen 0.025,15,60 filled ls 10
|
||||
set arrow 11 from graph 0,0 to graph 0,1.08 size screen 0.025,15,60 filled ls 10
|
||||
|
||||
|
||||
set xlabel 'load size ⟶ number of jobs'
|
||||
set ylabel 'active time ⟶ ms'
|
||||
set key autotitle columnheader tmargin
|
||||
|
||||
#
|
||||
stats $RunData using 1:2 nooutput
|
||||
|
||||
# regression line function derived from data
|
||||
regLine(x) = STATS_slope * x + STATS_intercept
|
||||
#
|
||||
regLabel = sprintf("Model: %3.2f·p + %3.2f", STATS_slope, STATS_intercept)
|
||||
|
||||
set key horizontal width -4
|
||||
set xtics 10
|
||||
|
||||
plots = STATS_columns - 1
|
||||
# Adjust layout based on number of data sequences;
|
||||
# additional sequences placed into secondary diagram
|
||||
#
|
||||
if (plots > 1) {
|
||||
set multiplot layout 2,1 # 2 rows 1 column
|
||||
set lmargin at screen 0.12 # fixed margins to align diagrams
|
||||
set rmargin at screen 0.88
|
||||
}
|
||||
#
|
||||
#
|
||||
####---------Scatter-Regression-Plot-------------
|
||||
plot $RunData using 1:2 with points linestyle 1, \
|
||||
regLine(x) with line linestyle 9 title regLabel
|
||||
|
||||
if (plots > 1) {
|
||||
# switch off decorations for secondary diagram
|
||||
unset arrow 10
|
||||
unset arrow 11
|
||||
set border 2+8
|
||||
set key bmargin vertical
|
||||
|
||||
unset xlabel
|
||||
set format x ""
|
||||
set ylabel 'concurrent threads ⟶'
|
||||
if (plots <= 2) {
|
||||
####---------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3
|
||||
|
||||
} else {
|
||||
# more than one additional data sequence
|
||||
#
|
||||
set y2tics
|
||||
set y2label 'avg job time ⟶ µs' offset -1.5
|
||||
|
||||
####---------------------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3, \
|
||||
for [i=4:*] $RunData using 1:i with points linestyle 5+(i-4) axes x1y2
|
||||
}
|
||||
}
|
||||
|
||||
179
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-13
Normal file
179
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-13
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
#
|
||||
#
|
||||
# GNUPLOT - data plot from Lumiera
|
||||
#
|
||||
|
||||
set term wxt size 600,600
|
||||
|
||||
|
||||
set datafile separator ",;"
|
||||
|
||||
####---------Data--------------------------------
|
||||
$RunData << _End_of_Data_
|
||||
"load size","result time","concurrency","avg jobtime","avg impeded"
|
||||
153,170.946512,7.78687575678642,8700.25653594771,5.00798039215686
|
||||
44,62.23816,6.27163995529431,8871.25752272727,12.1919318181818
|
||||
183,203.423327,7.75858338016465,8624.4636284153,13.1594808743169
|
||||
42,56.112058,6.78149748134349,9060.09,44.8326904761905
|
||||
90,100.047863,7.59502188467534,8442.95232222222,7.94103333333333
|
||||
135,154.629696,7.63453155207652,8744.6318,9.55625185185185
|
||||
158,178.711938,7.6224815322634,8621.69903164558,19.8237848101266
|
||||
107,123.18375,7.45052793895299,8577.42028971962,4.03854205607477
|
||||
184,210.967189,7.53411515569845,8638.32117391305,21.1774891304348
|
||||
166,187.874357,7.6084824657577,8611.07681325302,7.85254819277108
|
||||
117,140.797535,7.3004006568723,8785.28561538462,63.0558461538462
|
||||
178,202.060661,7.63797121301113,8670.41298876405,7.93822471910112
|
||||
134,154.345701,7.52624548966219,8668.98235820895,7.90755970149254
|
||||
192,211.836526,7.87293083724381,8686.32457291667,4.667359375
|
||||
175,200.123106,7.57198753950981,8659.02665714286,11.2267371428571
|
||||
41,48.978404,7.01731289569991,8382.84843902439,6.01575609756098
|
||||
45,58.274311,6.83578161910829,8852.23253333333,76.9384888888889
|
||||
151,172.980433,7.58952424983235,8694.2992781457,4.47547682119205
|
||||
132,153.026385,7.55264709415962,8755.71425757576,7.99570454545455
|
||||
158,178.018003,7.71592079931377,8693.49881012659,8.37062025316456
|
||||
69,92.36753,6.56372200274274,8786.59114492753,68.7861014492754
|
||||
124,143.783357,7.45693382997032,8646.63692741935,14.2164193548387
|
||||
82,105.241708,7.11045134311199,9125.80541463415,33.7637926829268
|
||||
182,201.71038,7.80215036529107,8647.11381868131,11.6857802197802
|
||||
142,161.895882,7.64046158999893,8710.98076056338,17.8816971830986
|
||||
180,205.45594,7.53362558415201,8599.04514444444,4.43985
|
||||
92,123.926265,6.51652633120187,8777.92140217391,174.256630434783
|
||||
125,145.977467,7.69331672949223,8984.407112,7.557792
|
||||
148,167.747099,7.65965778043053,8681.65791891893,14.4133716216216
|
||||
148,171.986958,7.59045817299705,8820.67439864864,16.6693513513514
|
||||
75,102.291856,7.14353657831763,9743.0082,34.5084
|
||||
102,135.271044,7.37042686681712,9774.56212745098,5.23352941176471
|
||||
162,184.31177,7.60523132082123,8652.67682716049,3.55493827160494
|
||||
58,72.810445,6.92005793948931,8687.11203448276,7.53760344827586
|
||||
114,128.121482,7.53414729467459,8467.42207894737,14.7899736842105
|
||||
52,64.053725,7.24216978793973,8920.92215384616,24.6449038461538
|
||||
163,183.382431,7.67686917619715,8636.82780368098,4.41739877300614
|
||||
72,84.678058,7.18322151412589,8448.07288888889,44.6918888888889
|
||||
129,147.917639,7.55477410642013,8662.66937209302,2.45032558139535
|
||||
146,168.145135,7.61967169612133,8775.41593150685,29.6997534246575
|
||||
38,51.818695,6.66403374303425,9087.4087368421,59.5343947368421
|
||||
46,58.756216,7.18251839090523,9174.29569565217,19.0596304347826
|
||||
124,154.073539,7.48495967889723,9300.27602419355,21.2015
|
||||
142,183.827489,7.71538247470703,9988.02385211267,4.56102816901408
|
||||
38,56.228229,6.82857845300445,10104.1808684211,25.8802894736842
|
||||
99,119.6339,7.33980391845455,8869.58957575758,2.46583838383838
|
||||
153,174.549751,7.75248096458184,8844.40275816994,7.52324836601307
|
||||
53,68.231081,6.97641758013477,8981.29269811321,23.7217924528302
|
||||
50,67.754534,6.86505280960238,9302.76908,17.53768
|
||||
85,108.94381,7.09744277348112,9096.73478823529,10.4850823529412
|
||||
181,202.123233,7.78004533996347,8687.99954143647,8.87863535911602
|
||||
89,104.348229,7.44979666113931,8734.52907865169,5.81651685393259
|
||||
179,203.595589,7.701035870674,8759.20074860335,4.36360893854749
|
||||
63,78.600133,7.0536965503608,8800.34106349207,26.3423492063492
|
||||
72,88.062773,7.19550271259343,8800.77669444444,18.2799722222222
|
||||
121,141.65176,7.5069013473606,8788.14700826446,11.9957024793388
|
||||
42,54.373882,7.26977586408121,9411.56988095238,27.6116904761905
|
||||
133,153.982931,7.60265251737545,8802.09562406016,1.32300751879699
|
||||
46,55.878697,7.22372087523802,8775.04586956521,30.4320434782609
|
||||
161,183.281008,7.6095385835067,8662.63293167702,8.46380124223603
|
||||
82,101.811279,6.97652248332918,8662.05703658537,51.9063658536585
|
||||
91,110.203893,7.23693537759142,8764.15881318681,34.950032967033
|
||||
62,78.678888,6.95584745681713,8827.0700483871,4.51682258064516
|
||||
44,59.766715,6.99746832329667,9504.90215909091,17.1681590909091
|
||||
119,138.043866,7.48610716248703,8684.12751260504,1.31360504201681
|
||||
146,163.142201,7.69377247766812,8597.11627397261,16.3477876712329
|
||||
65,80.939635,7.10862072703935,8851.83333846153,2.93209230769231
|
||||
82,99.235561,7.24491740415515,8767.72491463414,2.91723170731707
|
||||
188,213.363011,7.70100523656371,8739.94502659574,3.68948404255319
|
||||
164,185.166253,7.76932021192868,8772.04824390244,5.72121341463415
|
||||
198,223.197176,7.71031646923704,8691.51950505051,1.21380303030303
|
||||
196,220.192503,7.69108110824282,8640.4,0.430612244897959
|
||||
180,206.330767,7.6558709685793,8775.78738333333,10.3256
|
||||
123,144.721694,7.31167694872339,8602.91279674797,16.6400650406504
|
||||
138,160.709094,7.55113937733978,8793.74469565217,25.4078550724638
|
||||
188,209.142032,7.85878765393271,8742.56818617022,1.85203191489362
|
||||
192,219.726544,7.6175970892256,8717.64730208333,8.65040625
|
||||
91,106.028299,7.41373312043797,8638.08254945055,10.6057692307692
|
||||
200,228.362229,7.53655624897583,8605.32391999999,55.18684
|
||||
30,44.530553,6.37356549333667,9460.6132,39.0685333333333
|
||||
|
||||
_End_of_Data_
|
||||
|
||||
|
||||
#
|
||||
#---common-styles-for-plots-from-Lumiera---------
|
||||
set style line 1 linetype 1 linewidth 2 linecolor rgb '#240CC3'
|
||||
set style line 2 linetype 3 linewidth 2 linecolor rgb '#1149D6'
|
||||
set style line 3 linetype 2 linewidth 2 linecolor rgb '#0B7FCC'
|
||||
set style line 4 linetype 6 linewidth 2 linecolor rgb '#37999D'
|
||||
set style line 5 linetype 7 linewidth 2 linecolor rgb '#248269'
|
||||
set style line 6 linetype 13 linewidth 2 linecolor rgb '#00C443'
|
||||
set style line 7 linetype 12 linewidth 2 linecolor rgb '#EBE83E'
|
||||
set style line 8 linetype 5 linewidth 2 linecolor rgb '#762C14'
|
||||
set style line 9 linetype 4 linewidth 2 linecolor rgb '#AA0519'
|
||||
|
||||
set style line 10 linetype 1 linewidth 1 linecolor rgb '#303030'
|
||||
set style line 11 linetype 0 linewidth 1 linecolor rgb '#A0A0A0' dashtype 3
|
||||
#---(End)styles----------------------------------
|
||||
|
||||
#
|
||||
#---axis-and-grid-setup--------------------------
|
||||
unset border
|
||||
set tics nomirror
|
||||
set grid back linestyle 11
|
||||
|
||||
set arrow 10 from graph 0,0 to graph 1.04,0 size screen 0.025,15,60 filled ls 10
|
||||
set arrow 11 from graph 0,0 to graph 0,1.08 size screen 0.025,15,60 filled ls 10
|
||||
|
||||
|
||||
set xlabel 'load size ⟶ number of jobs'
|
||||
set ylabel 'active time ⟶ ms'
|
||||
set key autotitle columnheader tmargin
|
||||
|
||||
#
|
||||
stats $RunData using 1:2 nooutput
|
||||
|
||||
# regression line function derived from data
|
||||
regLine(x) = STATS_slope * x + STATS_intercept
|
||||
#
|
||||
regLabel = sprintf("Model: %3.2f·p + %3.2f", STATS_slope, STATS_intercept)
|
||||
|
||||
set key horizontal width -4
|
||||
set xtics 10
|
||||
|
||||
plots = STATS_columns - 1
|
||||
# Adjust layout based on number of data sequences;
|
||||
# additional sequences placed into secondary diagram
|
||||
#
|
||||
if (plots > 1) {
|
||||
set multiplot layout 2,1 # 2 rows 1 column
|
||||
set lmargin at screen 0.12 # fixed margins to align diagrams
|
||||
set rmargin at screen 0.88
|
||||
}
|
||||
#
|
||||
#
|
||||
####---------Scatter-Regression-Plot-------------
|
||||
plot $RunData using 1:2 with points linestyle 1, \
|
||||
regLine(x) with line linestyle 9 title regLabel
|
||||
|
||||
if (plots > 1) {
|
||||
# switch off decorations for secondary diagram
|
||||
unset arrow 10
|
||||
unset arrow 11
|
||||
set border 2+8
|
||||
set key bmargin vertical
|
||||
|
||||
unset xlabel
|
||||
set format x ""
|
||||
set ylabel 'concurrent threads ⟶'
|
||||
if (plots <= 2) {
|
||||
####---------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3
|
||||
|
||||
} else {
|
||||
# more than one additional data sequence
|
||||
#
|
||||
set y2tics
|
||||
set y2label 'avg job time ⟶ µs' offset -2.2
|
||||
|
||||
####---------------------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3, \
|
||||
for [i=4:*] $RunData using 1:i with points linestyle 5+(i-4) axes x1y2
|
||||
}
|
||||
}
|
||||
|
||||
179
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-14
Normal file
179
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-14
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
#
|
||||
#
|
||||
# GNUPLOT - data plot from Lumiera
|
||||
#
|
||||
|
||||
set term wxt size 600,600
|
||||
|
||||
|
||||
set datafile separator ",;"
|
||||
|
||||
####---------Data--------------------------------
|
||||
$RunData << _End_of_Data_
|
||||
"load size","result time","concurrency","avg jobtime","avg impeded"
|
||||
43,8.636836,5.47468089008521,1099.62606976744,2.52183720930233
|
||||
93,26.908743,2.56734578794706,742.839225806452,188.25976344086
|
||||
75,15.820093,3.30725609514432,697.614653333333,52.9558666666667
|
||||
131,26.428591,3.616400511098,729.590610687023,1.24181679389313
|
||||
119,24.15819,3.85807815072239,783.228445378151,2.23156302521008
|
||||
185,37.591041,3.7520257286836,762.392178378379,29.0166054054054
|
||||
41,6.880802,4.31080868189493,723.459048780488,27.0829268292683
|
||||
98,19.653472,3.64645290155348,731.280204081633,5.27408163265306
|
||||
121,24.051169,3.5910388804802,713.790768595042,32.4789090909091
|
||||
139,28.090693,3.47401917069116,702.069107913669,34.8621798561151
|
||||
64,13.393712,4.0976385784613,857.540484375,10.0011875
|
||||
184,37.108684,3.53275616025618,712.477891304348,2.09190760869565
|
||||
78,18.921565,2.71536968532994,658.705692307693,82.1700512820513
|
||||
118,26.658957,2.83160387707591,639.725474576271,108.319347457627
|
||||
166,33.589537,3.22544252396215,652.657355421687,32.881078313253
|
||||
135,27.235694,3.53119927841751,712.404911111111,26.3981333333333
|
||||
58,7.141216,5.60710528851109,690.371551724138,17.0463448275862
|
||||
136,27.387405,3.72205658038795,749.540227941176,80.8050441176471
|
||||
53,17.931685,1.92801167319189,652.311283018868,24.3333018867925
|
||||
72,14.636963,4.3122036313134,876.632847222222,13.7587361111111
|
||||
60,18.188159,2.13008424876866,645.705183333333,100.166383333333
|
||||
192,38.780127,3.53985385349563,714.979072916667,1.82634375
|
||||
152,31.034915,3.69955271345193,755.363842105263,11.4056710526316
|
||||
181,36.4724,3.84462777332997,774.711613259669,26.8866022099448
|
||||
85,17.383982,3.39731926781793,694.811023529412,2.29705882352941
|
||||
118,20.375271,4.46922075294115,771.708338983051,5.79375423728814
|
||||
142,28.870534,3.34539156774862,680.163669014084,63.9251056338028
|
||||
149,30.09014,3.61821895810388,730.689362416107,1.92344295302013
|
||||
196,39.41001,3.78412900681832,760.880418367347,25.665056122449
|
||||
183,36.975648,3.72883104036473,753.420459016394,2.47966666666667
|
||||
182,36.757653,3.57614184452963,722.25593956044,56.2165054945055
|
||||
40,12.165464,2.62321659083451,797.816175,32.148575
|
||||
75,12.948139,3.63023265351106,626.730093333333,10.9645066666667
|
||||
56,11.446777,4.72160076150693,965.126982142858,5.38482142857143
|
||||
140,28.516713,3.45315636483069,703.376207142857,27.5876285714286
|
||||
165,33.291917,3.51991547978448,710.210509090909,14.2399454545455
|
||||
41,10.196795,3.60956967360823,897.708341463415,137.913902439024
|
||||
151,30.432115,3.23020841633912,651.007112582781,53.5216357615894
|
||||
62,11.787079,4.40271325915437,837.018209677419,1.32517741935484
|
||||
132,27.058347,3.77599067674016,774.030803030303,27.7883484848485
|
||||
90,18.457616,4.15023099407854,851.148555555556,4.60322222222222
|
||||
96,15.160173,4.7719223256885,753.574666666667,11.3016770833333
|
||||
116,23.435105,3.15719029208531,637.836948275862,99.4875517241379
|
||||
138,27.810283,3.2704919615525,659.081934782609,78.9682753623188
|
||||
184,37.170721,3.68864480729335,745.160798913043,7.12672826086957
|
||||
83,17.028773,3.6115818209568,740.973578313253,4.92331325301205
|
||||
73,15.594583,2.87202639531945,613.53498630137,5.09360273972603
|
||||
43,12.828224,2.76669319151271,825.38976744186,23.1223953488372
|
||||
188,38.143029,3.56482559368843,723.26194680851,1.19660638297872
|
||||
96,19.626924,3.76855441025807,770.470114583333,5.41494791666667
|
||||
85,11.552879,5.82613104491097,791.865729411765,3.60017647058824
|
||||
48,12.221377,2.2205017486982,565.3664375,186.669604166667
|
||||
88,13.987957,4.06567985589318,646.256306818182,2.51251136363636
|
||||
37,17.710473,1.13015185986281,540.960108108108,410.624621621622
|
||||
199,40.006723,3.38209727899983,679.932809045226,8.41501005025126
|
||||
142,28.564952,3.65154217658058,734.550190140845,19.7686830985915
|
||||
125,25.277989,3.84072846934145,776.687136,14.180904
|
||||
141,28.547534,3.41566154190411,691.551163120567,6.5322695035461
|
||||
92,16.575694,3.96867232225691,715.03802173913,1.50796739130435
|
||||
122,22.726996,3.91264745239538,728.874778688524,45.1266967213115
|
||||
124,25.088678,2.54309585383494,514.539620967742,109.820387096774
|
||||
73,14.871936,3.58092019761247,729.523506849315,44.2219589041096
|
||||
131,26.332903,3.00676347761582,604.40313740458,94.4729465648855
|
||||
169,34.140142,3.78017944389335,763.644159763314,51.814550295858
|
||||
100,20.192983,3.63811691417757,734.64433,54.45321
|
||||
71,13.325791,4.26514230937586,800.512605633803,17.5440845070423
|
||||
134,27.094559,3.54328210324442,716.445268656716,67.796723880597
|
||||
111,24.377955,3.41665890350524,750.370783783784,118.771900900901
|
||||
192,38.680898,3.43369608430497,691.76275,4.71284375
|
||||
166,33.711279,3.69578917489307,750.540843373494,50.0127228915663
|
||||
43,9.119694,4.39974411422138,933.123720930233,3.01481395348837
|
||||
82,18.804953,3.54320130446484,812.557731707317,27.7167926829268
|
||||
62,12.592702,3.06591008029889,622.711161290323,9.63659677419355
|
||||
130,26.137617,4.0830164050533,820.925530769231,28.3186615384615
|
||||
190,38.367218,3.58517813306141,723.964794736842,1.98525789473684
|
||||
47,13.325866,3.74684279430695,1062.33882978723,154.121382978723
|
||||
182,37.015108,3.5805424368882,728.209697802198,1.67770879120879
|
||||
63,12.794701,3.39708977958922,689.916634920635,62.6871428571429
|
||||
200,40.321327,3.48643151055024,702.887725,1.57428
|
||||
30,5.780155,4.24835493165841,818.538333333333,91.5525666666667
|
||||
|
||||
_End_of_Data_
|
||||
|
||||
|
||||
#
|
||||
#---common-styles-for-plots-from-Lumiera---------
|
||||
set style line 1 linetype 1 linewidth 2 linecolor rgb '#240CC3'
|
||||
set style line 2 linetype 3 linewidth 2 linecolor rgb '#1149D6'
|
||||
set style line 3 linetype 2 linewidth 2 linecolor rgb '#0B7FCC'
|
||||
set style line 4 linetype 6 linewidth 2 linecolor rgb '#37999D'
|
||||
set style line 5 linetype 7 linewidth 2 linecolor rgb '#248269'
|
||||
set style line 6 linetype 13 linewidth 2 linecolor rgb '#00C443'
|
||||
set style line 7 linetype 12 linewidth 2 linecolor rgb '#EBE83E'
|
||||
set style line 8 linetype 5 linewidth 2 linecolor rgb '#762C14'
|
||||
set style line 9 linetype 4 linewidth 2 linecolor rgb '#AA0519'
|
||||
|
||||
set style line 10 linetype 1 linewidth 1 linecolor rgb '#303030'
|
||||
set style line 11 linetype 0 linewidth 1 linecolor rgb '#A0A0A0' dashtype 3
|
||||
#---(End)styles----------------------------------
|
||||
|
||||
#
|
||||
#---axis-and-grid-setup--------------------------
|
||||
unset border
|
||||
set tics nomirror
|
||||
set grid back linestyle 11
|
||||
|
||||
set arrow 10 from graph 0,0 to graph 1.04,0 size screen 0.025,15,60 filled ls 10
|
||||
set arrow 11 from graph 0,0 to graph 0,1.08 size screen 0.025,15,60 filled ls 10
|
||||
|
||||
|
||||
set xlabel 'load size ⟶ number of jobs'
|
||||
set ylabel 'active time ⟶ ms'
|
||||
set key autotitle columnheader tmargin
|
||||
|
||||
#
|
||||
stats $RunData using 1:2 nooutput
|
||||
|
||||
# regression line function derived from data
|
||||
regLine(x) = STATS_slope * x + STATS_intercept
|
||||
#
|
||||
regLabel = sprintf("Model: %3.2f·p + %3.2f", STATS_slope, STATS_intercept)
|
||||
|
||||
set key horizontal width -4
|
||||
set xtics 10
|
||||
|
||||
plots = STATS_columns - 1
|
||||
# Adjust layout based on number of data sequences;
|
||||
# additional sequences placed into secondary diagram
|
||||
#
|
||||
if (plots > 1) {
|
||||
set multiplot layout 2,1 # 2 rows 1 column
|
||||
set lmargin at screen 0.12 # fixed margins to align diagrams
|
||||
set rmargin at screen 0.88
|
||||
}
|
||||
#
|
||||
#
|
||||
####---------Scatter-Regression-Plot-------------
|
||||
plot $RunData using 1:2 with points linestyle 1, \
|
||||
regLine(x) with line linestyle 9 title regLabel
|
||||
|
||||
if (plots > 1) {
|
||||
# switch off decorations for secondary diagram
|
||||
unset arrow 10
|
||||
unset arrow 11
|
||||
set border 2+8
|
||||
set key bmargin vertical
|
||||
|
||||
unset xlabel
|
||||
set format x ""
|
||||
set ylabel 'concurrent threads ⟶'
|
||||
if (plots <= 2) {
|
||||
####---------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3
|
||||
|
||||
} else {
|
||||
# more than one additional data sequence
|
||||
#
|
||||
set y2tics
|
||||
set y2label 'avg job time ⟶ µs' offset -1.5
|
||||
|
||||
####---------------------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3, \
|
||||
for [i=4:*] $RunData using 1:i with points linestyle 5+(i-4) axes x1y2
|
||||
}
|
||||
}
|
||||
|
||||
180
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-15
Normal file
180
doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-15
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
#
|
||||
#
|
||||
# GNUPLOT - data plot from Lumiera
|
||||
#
|
||||
|
||||
set term wxt size 600,600
|
||||
|
||||
|
||||
set datafile separator ",;"
|
||||
|
||||
####---------Data--------------------------------
|
||||
$RunData << _End_of_Data_
|
||||
"load size","result time","concurrency","avg jobtime","avg impeded"
|
||||
179,35.63124,1.79985243286509,358.273597765363,105.151083798883
|
||||
177,35.333096,1.84486881647733,368.276423728813,68.0845141242937
|
||||
59,11.826895,2.1317825177276,427.328271186441,125.632440677966
|
||||
139,27.656609,1.69648524155655,337.546971223022,93.1134460431655
|
||||
69,7.592238,3.84578236351389,423.160797101449,15.62
|
||||
76,15.253411,1.56144366660021,313.386078947368,93.5487631578947
|
||||
139,27.697876,1.64504964207364,327.801302158273,73.7196402877698
|
||||
162,32.371138,1.72661112500895,345.014611111111,60.4682901234568
|
||||
119,23.779756,1.75157289250571,350.016605042017,148.353
|
||||
148,29.496382,1.78577796422626,355.905331081081,111.492858108108
|
||||
156,31.151338,1.6940306063258,338.277692307692,109.569416666667
|
||||
39,7.804463,2.27069703578581,454.399256410256,22.2919743589744
|
||||
158,31.64639,1.64517557926828,329.518151898734,91.2047848101266
|
||||
125,24.638671,1.81110016039421,356.984808,57.763192
|
||||
80,8.89486,3.31325776909361,368.38705,23.6623875
|
||||
41,3.246095,3.96197523485912,313.681658536585,5.52668292682927
|
||||
86,12.878812,2.63628617297931,394.793418604651,55.0483953488372
|
||||
69,15.889,1.00159663918434,230.643028985507,222.759507246377
|
||||
61,12.498178,2.15249630786183,441.021016393443,114.346213114754
|
||||
199,39.870461,1.82091468668998,364.82767839196,50.0526582914573
|
||||
142,28.522807,1.74354817181913,350.217521126761,60.3965422535211
|
||||
156,31.253045,1.79720718413198,360.052544871795,56.4501730769231
|
||||
119,23.819071,1.85057036859246,370.410647058824,46.6504537815126
|
||||
162,32.279941,1.67515166771835,333.78887037037,71.3886975308642
|
||||
157,31.518053,1.97087783309457,395.65752866242,95.0335286624204
|
||||
25,8.924809,0.964483161488386,344.31312,356.99236
|
||||
181,36.250303,1.781842347635,356.863674033149,56.5681712707182
|
||||
184,36.75795,1.69997083624087,339.605668478261,108.827619565217
|
||||
16,1.685641,3.52622355531219,371.4966875,46.988875
|
||||
79,15.651189,1.63294660872091,323.513367088607,70.1948987341772
|
||||
20,2.156301,2.13973512974302,230.69565,36.92085
|
||||
191,38.367116,1.94760476654018,391.225015706806,36.3046230366492
|
||||
55,7.196328,2.82408125366159,369.509363636364,36.3265636363636
|
||||
75,14.963745,1.31130422230531,261.62696,137.272213333333
|
||||
130,25.941701,1.61283537266889,321.843792307692,80.9860692307692
|
||||
120,21.701709,1.8366870093042,332.160391666667,83.3058583333333
|
||||
147,29.460911,1.72671754787216,346.058993197279,72.4423809523809
|
||||
70,7.844502,2.89830176600121,324.7962,40.4968
|
||||
82,15.553826,1.55505089230135,294.963304878049,164.758268292683
|
||||
65,7.127141,4.72273300051171,517.839753846154,4.49523076923077
|
||||
18,3.341583,1.8750475448313,348.090388888889,23.1966111111111
|
||||
38,3.918406,3.34534731725094,344.958657894737,24.6373684210526
|
||||
100,20.205017,1.74584866718994,352.74902,63.26982
|
||||
172,34.398834,1.67980103627931,335.948819767442,90.5519593023256
|
||||
159,31.833826,1.90874169507617,382.154408805031,91.7036666666667
|
||||
176,35.29628,1.61548984765533,323.981715909091,121.156585227273
|
||||
13,3.022598,1.8098172499287,420.796153846154,97.3303076923077
|
||||
45,7.57213,2.18830553622296,368.2252,38.1020444444444
|
||||
45,9.667158,1.49805103009592,321.819911111111,171.646822222222
|
||||
70,13.978447,1.41961027573378,283.484957142857,122.369428571429
|
||||
44,6.995391,1.7957738173606,285.503181818182,31.7503409090909
|
||||
183,36.697165,1.62957740741008,326.780715846994,87.2222677595628
|
||||
26,4.485739,2.88331220340729,497.453307692308,46.1854230769231
|
||||
159,31.623796,1.71386158069069,340.873012578616,66.8181823899371
|
||||
145,29.027672,1.77185642031507,354.709427586207,96.5250965517241
|
||||
179,35.790229,1.74933599893982,349.771709497207,60.8866592178771
|
||||
180,36.0188,1.74721054005131,349.624594444444,69.2989166666667
|
||||
126,25.17708,1.89118313164195,377.892611111111,137.614285714286
|
||||
163,32.608486,1.53913907563816,307.907944785276,118.752975460123
|
||||
192,38.643666,1.7102021583563,344.210838541667,62.0867760416667
|
||||
4,0.907267,2.19658490830153,498.22225,52.75375
|
||||
179,35.906926,1.68108564904721,337.221329608939,100.840290502793
|
||||
183,36.508054,1.57717162903287,314.641896174863,121.484327868853
|
||||
56,12.837901,1.76890599171936,405.518571428571,51.546875
|
||||
53,11.64554,1.53189530069022,336.599018867925,171.561660377358
|
||||
113,22.543634,1.6258490534401,324.358814159292,82.5855398230088
|
||||
172,34.462216,1.9703688816761,394.7865,57.0161802325581
|
||||
196,39.243665,1.69912741330352,340.204015306122,69.6907602040817
|
||||
179,35.903897,1.72076719137201,345.152223463687,81.7715195530726
|
||||
54,7.078423,2.57057694913118,336.95612962963,87.4055740740741
|
||||
61,12.715775,0.967899793760113,201.763868852459,208.455327868853
|
||||
193,38.714267,1.80170227683763,361.407165803109,59.2353730569948
|
||||
88,10.61802,3.25951815875276,393.291238636364,25.2093863636364
|
||||
157,31.433111,1.6798099939901,336.316267515924,107.236203821656
|
||||
165,32.836242,1.62567391238011,323.521345454545,79.4364363636363
|
||||
47,4.921991,3.77766497338171,395.609212765957,51.0604680851064
|
||||
134,26.475937,1.58844844660266,313.84821641791,137.973470149254
|
||||
174,34.912692,1.83480391600854,368.149103448276,59.1995862068966
|
||||
200,40.095864,1.63798313461957,328.381745,117.2451
|
||||
174,34.836438,1.9257432978653,385.551936781609,47.0866149425287
|
||||
|
||||
_End_of_Data_
|
||||
|
||||
|
||||
#
|
||||
#---common-styles-for-plots-from-Lumiera---------
|
||||
set style line 1 linetype 1 linewidth 2 linecolor rgb '#240CC3'
|
||||
set style line 2 linetype 3 linewidth 2 linecolor rgb '#1149D6'
|
||||
set style line 3 linetype 2 linewidth 2 linecolor rgb '#0B7FCC'
|
||||
set style line 4 linetype 6 linewidth 2 linecolor rgb '#37999D'
|
||||
set style line 5 linetype 7 linewidth 2 linecolor rgb '#248269'
|
||||
set style line 6 linetype 13 linewidth 2 linecolor rgb '#00C443'
|
||||
set style line 7 linetype 12 linewidth 2 linecolor rgb '#EBE83E'
|
||||
set style line 8 linetype 5 linewidth 2 linecolor rgb '#762C14'
|
||||
set style line 9 linetype 4 linewidth 2 linecolor rgb '#AA0519'
|
||||
|
||||
set style line 10 linetype 1 linewidth 1 linecolor rgb '#303030'
|
||||
set style line 11 linetype 0 linewidth 1 linecolor rgb '#A0A0A0' dashtype 3
|
||||
#---(End)styles----------------------------------
|
||||
|
||||
#
|
||||
#---axis-and-grid-setup--------------------------
|
||||
unset border
|
||||
set tics nomirror
|
||||
set grid back linestyle 11
|
||||
|
||||
set arrow 10 from graph 0,0 to graph 1.04,0 size screen 0.025,15,60 filled ls 10
|
||||
set arrow 11 from graph 0,0 to graph 0,1.08 size screen 0.025,15,60 filled ls 10
|
||||
|
||||
|
||||
set xlabel 'load size ⟶ number of jobs'
|
||||
set ylabel 'active time ⟶ ms'
|
||||
set key autotitle columnheader tmargin
|
||||
|
||||
#
|
||||
stats $RunData using 1:2 nooutput
|
||||
|
||||
# regression line function derived from data
|
||||
regLine(x) = STATS_slope * x + STATS_intercept
|
||||
#
|
||||
regLabel = sprintf("Model: %3.2f·p + %3.2f", STATS_slope, STATS_intercept)
|
||||
|
||||
set key horizontal width -4
|
||||
set xtics 10
|
||||
set yrange [0:*]
|
||||
|
||||
plots = STATS_columns - 1
|
||||
# Adjust layout based on number of data sequences;
|
||||
# additional sequences placed into secondary diagram
|
||||
#
|
||||
if (plots > 1) {
|
||||
set multiplot layout 2,1 # 2 rows 1 column
|
||||
set lmargin at screen 0.12 # fixed margins to align diagrams
|
||||
set rmargin at screen 0.88
|
||||
}
|
||||
#
|
||||
#
|
||||
####---------Scatter-Regression-Plot-------------
|
||||
plot $RunData using 1:2 with points linestyle 1, \
|
||||
regLine(x) with line linestyle 9 title regLabel
|
||||
|
||||
if (plots > 1) {
|
||||
# switch off decorations for secondary diagram
|
||||
unset arrow 10
|
||||
unset arrow 11
|
||||
set border 2+8
|
||||
set key bmargin vertical
|
||||
|
||||
unset xlabel
|
||||
set format x ""
|
||||
set ylabel 'concurrent threads ⟶'
|
||||
if (plots <= 2) {
|
||||
####---------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3
|
||||
|
||||
} else {
|
||||
# more than one additional data sequence
|
||||
#
|
||||
set y2tics
|
||||
set y2label 'avg job time ⟶ µs' offset -1.5
|
||||
|
||||
####---------------------------------------------
|
||||
plot $RunData using 1:3 with impulses linestyle 3, \
|
||||
for [i=4:*] $RunData using 1:i with points linestyle 5+(i-4) axes x1y2
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -8,7 +8,7 @@ implementation. During that time, from December to April, several bugs and probl
|
|||
were identified, improving the maturity of design and code. In the first phase,
|
||||
the goal was to subject the implementation to increasingly challenging load patterns.
|
||||
In the second phase, several instrumentation- and measurement methods were developed,
|
||||
to establish characteristic traits and boudary conditions quantitatively.
|
||||
to establish characteristic traits and boundary conditions quantitatively.
|
||||
|
||||
This directory holds a loose collection of material related to these testing efforts.
|
||||
Trace-dumps were produced by adding print statements at relevant locations; over time,
|
||||
|
|
@ -16,7 +16,7 @@ a change set with a suitable setup of such diagnostic print statements was assem
|
|||
which can be applied by `git cherry-pick`. Moreover, load patterns generated by the
|
||||
`TestChainLoad` tooling can be visualised as _graphviz diagram_ and the collection
|
||||
of tools in the `StressTestRig` generate report output and data visualisation as
|
||||
_Gnuplot_ script. Raw measurment data is stored as CSV (see 'csv.hpp').
|
||||
_Gnuplot_ script. Raw measurement data is stored as CSV (see 'csv.hpp').
|
||||
|
||||
|
||||
Load Peak Testing
|
||||
|
|
@ -25,7 +25,7 @@ Load Peak Testing
|
|||
Dump-10::
|
||||
Example of a typical clean run working through a homogenous load peak.
|
||||
With load patterns in this category, contention is not an issue and, after the
|
||||
initial ramp-up, all workers are fully loaded and immediately comence with the
|
||||
initial ramp-up, all workers are fully loaded and immediately commence with the
|
||||
next job in row, typically requiring ~70µs for the administrative work between
|
||||
processing jobs (Note: all those measurements were done with *debug builds*,
|
||||
without compiler optimisation). As an artefact of the measurement setup, a
|
||||
|
|
@ -47,8 +47,8 @@ Graph-10::
|
|||
+
|
||||
Notably the concurrency approaches the theoretic limit with increasing peak length,
|
||||
yet some headroom remains. However, by logical reasoning it becomes clear that there
|
||||
_must be a startup and shutdown phase_ in each run, and this phase must be calculated
|
||||
with one Job length each (in this case 2ms startup and 2ms shutdown); startup counts
|
||||
_must be a start-up and shutdown phase_ in each run, and this phase must be calculated
|
||||
with one Job length each (in this case 2ms start-up and 2ms shutdown); start-up counts
|
||||
as _one Job completed,_ while shutdown counts as _N-1 Jobs completed._ Taking these
|
||||
considerations into account, 4ms of the socket indicated by the linear model can be
|
||||
explained, so there remains a further socket of 5ms. Various observations seem to
|
||||
|
|
@ -58,3 +58,70 @@ The actual job times are always slightly above the calibrated value (the load op
|
|||
is calibrated before each test on the specific hardware; it could be shown that this
|
||||
calibration also holds under multithreaded performance, but the behaviour degrades
|
||||
when contention, lock coordination and cache misses come into play)
|
||||
|
||||
Graph-11::
|
||||
There seem to be limitations on the achievable degree of concurrency however.
|
||||
Using the same basic setup, again a job load of 2ms, but this time a 8 worker pool
|
||||
(the maximum possible on this machine), even in an extended range up to 200 jobs
|
||||
the average concurrency barely surpasses 7 workers. Moreover, in similar runs,
|
||||
a small number of excessive outliers was observed, hinting at some pattern
|
||||
which prevents full usage of available capacity.
|
||||
|
||||
Dump-11::
|
||||
One example trace with 200 Jobs, Job load 2ms and 8-worker pool (all instrumented
|
||||
runs investigated did take notably longer than the corresponding runs in the Graph,
|
||||
which can be due to overheads created by the print statements). Some observations
|
||||
+
|
||||
- planning expense is significant, which causes the planning to surpass the start
|
||||
of the first »tick« job. At this point, the complete workforce shows up as expected,
|
||||
and goes into contention wait subsequently. _This seems to have further ramifications._
|
||||
- almost 10ms pass until more workers return back from sleep states; this is the expected
|
||||
behaviour, given that there was a pause of 10ms after all planning work was complete.
|
||||
- on surface level, the following processing pattern looks completely regular
|
||||
- yet always when a worker happens to hit contention, it immediately retracts for
|
||||
an extended period of several milliseconds.
|
||||
|
||||
Dump-12::
|
||||
Based on that observation, the _stickiness_ of the contention-encounter was reduced;
|
||||
the step-down is not by a power series and thus it takes far less successful work-pulls
|
||||
to erase the memory of an contention event. The effect can be seen clearly; there are
|
||||
now longer strikes of contention in the middle of the processing, and workers encountering
|
||||
contention return faster to regular work.
|
||||
+
|
||||
Yet some further irregularities remain: sometimes an assumed pause of 2ms takes 6 or 10ms,
|
||||
without obvious reason. Presumably these are effects of hardware and OS scheduling -- which
|
||||
effectively prevent the processing to reach full load on all 8 cores.
|
||||
|
||||
Graph-13::
|
||||
Increasing the load per job again by an factor 4, setting the nominal job computation load
|
||||
to 8ms, further supports the observed tendency: with increasing number of jobs in row, the
|
||||
concurrency converges even closer to the theoretical limit, but misses it by a narrow margin.
|
||||
Interestingly, also the distribution of timings around the regression line is tighter here,
|
||||
and, again, the linear model matches up close to the expectation (8ms with 8 cores => ∅ 1ms)
|
||||
|
||||
Graph-14::
|
||||
Going into the opposite direction, with only a small job computation load of 500µs, the
|
||||
parallelisation remains even below 4 workers on average, due to throttling of worker's
|
||||
pull cycles when encountering repeated contention on the »Grooming Token«
|
||||
|
||||
Graph-15::
|
||||
As an extreme example, here the job computation load was set to 200µs, which is barely
|
||||
above the known base overhead of 100µs required to schedule a single job (with debug build).
|
||||
Notably, a breach of patterns appears here: below 90 jobs, in some cases a higher concurrency
|
||||
is achieved, thus distinguishing two separate sub-populations with different behaviour patterns.
|
||||
Above 90 jobs, all cases are handled by two workers, and the behaviour is much more uniform.
|
||||
From watching individual runs with trace-dump, it can be hypothesised that the amount of
|
||||
contention at the beginning of the work phase is determinant for the emerging work pattern.
|
||||
If, by chance, workers show up interleaved and evenly spaced, a higher number of workers is
|
||||
able to pick a job and remain in duty also for follow-up jobs, since workers returning from
|
||||
active work get precedence in picking the next job.
|
||||
+
|
||||
Another surprising observation is the drift of the actual in-job times; even while the work load
|
||||
was pre-calibrated for this hardware, the actual computation in the context of the scheduler is
|
||||
reproducibly slower (at least on my machine). Below 90 jobs, also the spread of this observation
|
||||
value is larger, as is the spread of time in _impeded state,_ which is defined as less than two
|
||||
workers processing active job content at a given time.
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@ namespace gear {
|
|||
res = contentionWait();
|
||||
else
|
||||
if (kickLevel_)
|
||||
--kickLevel_;
|
||||
kickLevel_ /= 2;
|
||||
if (res == activity::WAIT)
|
||||
res = idleWait();
|
||||
else
|
||||
|
|
|
|||
|
|
@ -390,7 +390,8 @@ namespace test {
|
|||
cpuLoad.calibrate();
|
||||
//////////////////////////////////////////////////////////////////TODO for development only
|
||||
MARK_TEST_FUN
|
||||
TestChainLoad testLoad{50};
|
||||
/*
|
||||
TestChainLoad testLoad{200};
|
||||
testLoad.configure_isolated_nodes()
|
||||
.buildTopology()
|
||||
// .printTopologyDOT()
|
||||
|
|
@ -404,7 +405,7 @@ namespace test {
|
|||
|
||||
auto set1 = testLoad.setupSchedule(scheduler)
|
||||
.withLevelDuration(200us)
|
||||
.withJobDeadline(100ms)
|
||||
.withJobDeadline(500ms)
|
||||
.withUpfrontPlanning()
|
||||
.withLoadTimeBase(2ms)
|
||||
.withInstrumentation();
|
||||
|
|
@ -417,12 +418,12 @@ cout << "time="<<runTime/1000
|
|||
}
|
||||
|
||||
return;
|
||||
|
||||
*/
|
||||
struct Setup
|
||||
: StressRig, bench::LoadPeak_ParamRange_Evaluation
|
||||
{
|
||||
uint CONCURRENCY = 4;
|
||||
uint REPETITIONS = 40;
|
||||
uint CONCURRENCY = 8;
|
||||
uint REPETITIONS = 80;
|
||||
|
||||
auto testLoad(Param nodes)
|
||||
{
|
||||
|
|
@ -438,14 +439,15 @@ cout << "time="<<runTime/1000
|
|||
};
|
||||
|
||||
auto results = StressRig::with<Setup>()
|
||||
.perform<bench::ParameterRange> (10,100);
|
||||
.perform<bench::ParameterRange> (20,200);
|
||||
|
||||
cout << "───═══───═══───═══───═══───═══───═══───═══───═══───═══───═══───"<<endl;
|
||||
cout << Setup::renderGnuplot (results);
|
||||
cout << "───═══───═══───═══───═══───═══───═══───═══───═══───═══───═══───"<<endl;
|
||||
auto [socket,gradient,v1,v2,corr,maxDelta,stdev] = bench::linearRegression (results.param, results.time);
|
||||
cout << _Fmt{"Model: %3.2f·p + %3.2f corr=%4.2f Δmax=%4.2f σ=%4.2f"}
|
||||
% gradient % socket % corr % maxDelta % stdev
|
||||
double avgConc = Setup::avgConcurrency (results);
|
||||
cout << _Fmt{"Model: %3.2f·p + %3.2f corr=%4.2f Δmax=%4.2f σ=%4.2f ∅concurrency: %3.1f"}
|
||||
% gradient % socket % corr % maxDelta % stdev % avgConc
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,9 +68,9 @@
|
|||
** The implementation code is arranged as a »sandwich« structure...
|
||||
** - StressTestRig, which is also the framework class, acts as _bottom layer_ to
|
||||
** provide an anchor point, some common definitions implying an invocation scheme
|
||||
** ** first a TestChainLoad topology is constructed, based on test parameters
|
||||
** ** this is used to create a TestChainLoad::SchedulerCtx, which is then
|
||||
** outfitted specifically for each test run
|
||||
** + first a TestChainLoad topology is constructed, based on test parameters
|
||||
** + this is used to create a TestChainLoad::SchedulerCtx, which is then
|
||||
** outfitted specifically for each test run
|
||||
** - the _middle layer_ is a custom `Setup` class, which inherits from the bottom
|
||||
** layer and fills in the actual topology and configuration for the desired test
|
||||
** - the test performance is then initiated by layering a specific _test tool_ on
|
||||
|
|
@ -240,7 +240,7 @@ namespace test {
|
|||
{
|
||||
return testLoad.setupSchedule(scheduler)
|
||||
.withLevelDuration(200us)
|
||||
.withJobDeadline(100ms)
|
||||
.withJobDeadline(500ms)
|
||||
.withUpfrontPlanning();
|
||||
}
|
||||
|
||||
|
|
@ -527,6 +527,7 @@ namespace test {
|
|||
|
||||
using lib::stat::Column;
|
||||
using lib::stat::DataTable;
|
||||
using lib::stat::DataSpan;
|
||||
using lib::stat::CSVData;
|
||||
using IncidenceStat = lib::IncidenceCount::Statistic;
|
||||
|
||||
|
|
@ -535,7 +536,7 @@ namespace test {
|
|||
* @return a tuple `(socket,gradient,Vector(predicted),Vector(deltas),correlation,maxDelta,stdev)`
|
||||
*/
|
||||
template<typename F, typename G>
|
||||
auto
|
||||
inline auto
|
||||
linearRegression (Column<F> const& x, Column<G> const& y)
|
||||
{
|
||||
lib::stat::RegressionData points;
|
||||
|
|
@ -592,6 +593,12 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
static double
|
||||
avgConcurrency (Table const& results)
|
||||
{
|
||||
return lib::stat::average (DataSpan<double> (results.conc.data));
|
||||
}
|
||||
|
||||
static string
|
||||
renderGnuplot (Table const& results)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -115719,8 +115719,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
Im Schnitt sind 3 Worker losgelaufen, wenn der erste Worker nach 500µs + X wieder zurückkehrt. Da ein zurückkehrender Worker vorrangig behandelt wird, kommen die restlichen Worker kaum zum Zug und regeln sich herunter
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712623556019" ID="ID_1359823747" MODIFIED="1712623567438" TEXT="insofern »works as designed«">
|
||||
<icon BUILTIN="idea"/>
|
||||
|
|
@ -115750,8 +115749,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
Einzelbeobachtung ⟹ <b>keinerlei auffälliges Verhalten</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<node CREATED="1712624058565" ID="ID_19403295" MODIFIED="1712624079993" TEXT="Planung und Dependency-Setup sind zu Beginn abgeschlossen"/>
|
||||
<node CREATED="1712623971169" ID="ID_738756991" MODIFIED="1712623992258" TEXT="Hochlauf zur Vollauslastung: 2ms"/>
|
||||
<node CREATED="1712624086127" ID="ID_1559594499" MODIFIED="1712624098707" TEXT="regelmäßiges, gleichverteiltes Arbeiten"/>
|
||||
|
|
@ -115770,8 +115768,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
sie werden per Instrumentation erfaßt, und nicht aus anderen Beobachtungen errechnet
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712625101236" ID="ID_465653239" MODIFIED="1712625201546" TEXT="die ∅ 3.7 Threads sind erklärbar durch 4ms mit 1.5 + Rest mit Vollast"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1712625078878" ID="ID_1920144642" MODIFIED="1712625253483" TEXT="ich verstehe nicht ganz woher der Sockel kommt">
|
||||
|
|
@ -115808,8 +115805,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712666509334" ID="ID_70230671" MODIFIED="1712666648236" TEXT="2470µs + 1437µs = 3907µs"/>
|
||||
|
|
@ -115829,8 +115825,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
4,649/46  ( 46= 50 -4)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1712672235394" ID="ID_1423460333" MODIFIED="1712672276018">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -115850,8 +115845,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
...rein zufällig habe ich hier grade 46 Jobs in der Aktiven Phase, aber das Modell deckt Parameter im Bereich 10...100 Jobs ab
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -115863,8 +115857,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
bessere Deutung: es sind ca 5ms — das enstspricht dem <font face="Monospaced" size="4" color="#6c1010">WORK_HORIZON</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712672779497" ID="ID_1561617455" MODIFIED="1712672797914" TEXT="Einsicht: auch in der Arbeitsphase steckt ein Overhead">
|
||||
|
|
@ -115880,6 +115873,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1712673109278" ID="ID_72527128" MODIFIED="1712673119027" TEXT="Fazit">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
|
|
@ -115891,8 +115885,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
sehr schöner <i>steady state </i>ohne offensichtliche Inkonsistenzen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712673183634" ID="ID_200427956" MODIFIED="1712673219481" TEXT="rein logisch ergibt sich eine Anlauf/Auslauf-Phase, die einen Overhead von 2*JobTime erzeugt"/>
|
||||
<node CREATED="1712673245754" ID="ID_742162652" MODIFIED="1712673259044" TEXT="der verbleibende Sockel-Overhead sind 5ms">
|
||||
|
|
@ -115906,8 +115899,7 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
man kann ihn also deuten als generische <b>Scheduler-Latenz</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712673418442" ID="ID_29307844" MODIFIED="1712673442307" TEXT="Dokumentation">
|
||||
|
|
@ -115917,6 +115909,227 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712698751005" ID="ID_1003770326" MODIFIED="1712704713746" TEXT="4.Test">
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
<node CREATED="1712698757922" ID="ID_125540685" LINK="#ID_217903920" MODIFIED="1712698800389" TEXT="analog aber 8 Kerne, Last 2ms"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1712698802885" ID="ID_201705801" MODIFIED="1712698833976" TEXT="stelle fest: selbst bei 200 Jobs bleibt ∅conc ~ 7">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1712698908815" ID="ID_656303246" MODIFIED="1712698919553" TEXT="Modell: 0.26·p + 10"/>
|
||||
<node CREATED="1712698920525" ID="ID_1447324007" MODIFIED="1712698936423" TEXT="also der Expense-Faktor paßt sehr gut"/>
|
||||
<node CREATED="1712698939008" ID="ID_104123529" MODIFIED="1712698951469" TEXT="sehe aber auch immer wieder einzelne, extreme »outlier«"/>
|
||||
<node CREATED="1712698979246" ID="ID_1668142891" MODIFIED="1712699006491" TEXT="unter 100 Jobs bleibet ∅conc < 6">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node CREATED="1712699034814" ID="ID_1036647495" MODIFIED="1712699037994" TEXT="siehe Graph-11">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1712699045928" ID="ID_701769112" MODIFIED="1712699146046" TEXT="aus diesem wurden einige Outlier bereinigt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Begründung: mir kommt es auf das Modell an, und die Regressionslinie war durch die Outlier ersichtlich nach oben verschoben; Model war 0.25·p + 13
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="11"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712698852926" ID="ID_968074250" MODIFIED="1712698859964" TEXT="Einzelbeobachtung">
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1712699753065" ID="ID_1445371638" MODIFIED="1712699755061" TEXT="Dump-11"/>
|
||||
<node CREATED="1712699755673" ID="ID_210589716" MODIFIED="1712699782331" TEXT="Planungsphase überfährt den ersten geplanten »Tick« - Job"/>
|
||||
<node CREATED="1712699782809" ID="ID_691493413" MODIFIED="1712699792656" TEXT="infolgedessen geht die ganze Workforce in contention-wait"/>
|
||||
<node CREATED="1712699794476" ID="ID_904180227" MODIFIED="1712699907336" TEXT="es dauert 10ms bis wieder mehr Worker auftauchen (das wäre aber OK)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...hat wohl nichts mit der Contention zu tun, sondern damit, daß eine längere Pause war nach dem Ende der Planung. Alle Worker, die irgendwann auftauchen, wurden daraufhin weiter in die Zukunft geschoben. Dieses Muster habe ich bewußt so gewählt, um eine bessere strategische Verteilung der Kapazität zu erzielen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712699912963" ID="ID_252158235" MODIFIED="1712699932277" TEXT="weitere Verarbeitung sieht — oberflächlich betrachtet — sauber aus"/>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1712699932985" ID="ID_1648223947" MODIFIED="1712699958382" TEXT="ABER: einzelne Contention-Events schicken Worker gleich mehrere ms lang weg">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1712700929019" ID="ID_1548815337" MODIFIED="1712701199664" TEXT="das liegt an der »stickyness«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
Ein Worker merkt sich, wenn er in Contention gelaufen ist; jedesmal wenn er wieder erfolgreich zum Zuge kommt, wird sein contention-Level nur reduziert (aber die Erinnerung nicht gelöscht). Das habe ich so eingebaut, um die Drosselung mit einer gewissen Trägheit zu erhalten; denn selbst unter starker Contention kommt ein Worker ab und zu doch mal im richtigen Moment, und würde dann sofort wieder den Contention-Druck erhöhen. Mein Ziel war, im Falle von andauernder Contention erst mal sehr effektiv »Druck rauszunehmen«
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712701201623" ID="ID_1167106861" MODIFIED="1712701220016" TEXT="Zeiten: auf Maximal-Level 1.6 ... 3.2ms">
|
||||
<node CREATED="1712701221884" ID="ID_1442502178" MODIFIED="1712701262800" TEXT="abhängig von einem Zufallsfaktor">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...der nicht gleichverteilt ist, sondern die Thread-ID verwendet. Es kann also passieren, daß die ganze WorkForce auf Extrem getrimmt ist
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712701269813" ID="ID_690297260" MODIFIED="1712701295902" TEXT="das paßt mit den Beobachtungen im Dump zusammen"/>
|
||||
<node CREATED="1712701312176" ID="ID_1806050715" MODIFIED="1712701344447" TEXT="Kick-Level 3...8 ⟹ exponentielle Steierung bis Faktor 16"/>
|
||||
<node CREATED="1712701347667" ID="ID_278643686" MODIFIED="1712701356693" TEXT="darüber gibt es noch 4 Sättigungs-Level"/>
|
||||
</node>
|
||||
<node CREATED="1712701360625" ID="ID_1106806787" MODIFIED="1712701610339" TEXT="das bedeutet: aus Sättigung braucht es 12 erfolgreiche Zuteilungen"/>
|
||||
<node CREATED="1712701615455" ID="ID_114229524" MODIFIED="1712701645454" TEXT="im Beispiel 2ms / Job dauert es also > 20ms bis ein Worker „vergessen hat“"/>
|
||||
<node CREATED="1712701710445" ID="ID_725574726" MODIFIED="1712704509547" TEXT="das erscheint mit etwas zu brachial">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
im Realbetrieb erwarte ich durchaus Job-Zeiten im Millisekunden-Bereich —ein zufälliges Contention-Event, das (wie im Beispiel hier) nicht notwendig problematisch ist, würde dennoch für eine Dauer von etlichen Frames die „Bremsen anziehen“
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#4666c4" DESTINATION="ID_1763982757" ENDARROW="Default" ENDINCLINATION="185;10;" ID="Arrow_ID_892274680" STARTARROW="None" STARTINCLINATION="-108;8;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712701995339" ID="ID_1763982757" MODIFIED="1712704509547" TEXT="Anpassung der Steuerlogik: schneller zurückfahren">
|
||||
<arrowlink COLOR="#3b3479" DESTINATION="ID_1390873701" ENDARROW="Default" ENDINCLINATION="189;-13;" ID="Arrow_ID_691473565" STARTARROW="None" STARTINCLINATION="-448;24;"/>
|
||||
<linktarget COLOR="#4666c4" DESTINATION="ID_1763982757" ENDARROW="Default" ENDINCLINATION="185;10;" ID="Arrow_ID_892274680" SOURCE="ID_725574726" STARTARROW="None" STARTINCLINATION="-108;8;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1712704514857" HGAP="44" ID="ID_14366808" MODIFIED="1712704697306" TEXT="Effekt im Einzel-Dump ersichtlich" VSHIFT="28">
|
||||
<linktarget COLOR="#438cbd" DESTINATION="ID_14366808" ENDARROW="Default" ENDINCLINATION="271;23;" ID="Arrow_ID_1881409256" SOURCE="ID_554599062" STARTARROW="None" STARTINCLINATION="305;18;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1712704536837" HGAP="41" ID="ID_1992523438" MODIFIED="1712704561461" TEXT="aber leider keine Steigerung der Concurrency" VSHIFT="-1">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1712704590131" ID="ID_302274255" MODIFIED="1712704702472" TEXT="Fazit">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<node CREATED="1712704594574" ID="ID_908855219" MODIFIED="1712704606448" TEXT="Vollauslastung wird nicht erreicht"/>
|
||||
<node CREATED="1712704607036" ID="ID_554599062" MODIFIED="1712704697306" TEXT="ein Effekt konnte identifiziert und behoben werden">
|
||||
<arrowlink COLOR="#438cbd" DESTINATION="ID_14366808" ENDARROW="Default" ENDINCLINATION="271;23;" ID="Arrow_ID_1881409256" STARTARROW="None" STARTINCLINATION="305;18;"/>
|
||||
</node>
|
||||
<node CREATED="1712704631074" ID="ID_1854463156" MODIFIED="1712704650387" TEXT="aber weitere Effekte bleiben unerklärlich"/>
|
||||
<node CREATED="1712704657102" ID="ID_642785886" MODIFIED="1712704668448" TEXT="abgesehen davon: Ausführung ohne ersichtilche Fehlfunktion"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1712707225417" ID="ID_483926503" MODIFIED="1712707234332" TEXT="5.Test">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1712707236795" ID="ID_1193438894" MODIFIED="1712707253972" TEXT="8 Kerne, Last 8ms"/>
|
||||
<node COLOR="#435e98" CREATED="1712707259464" ID="ID_1079397067" MODIFIED="1712707277190" TEXT="bleibt hängen">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1712707278278" HGAP="33" ID="ID_441113188" MODIFIED="1712707422922" TEXT="klar ⟶ Job-Deadline 100ms wird nun überfahren" VSHIFT="2">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
200 * 8ms = 1600ms / 8 Worker = 200ms, aber der letzte Job wird auf 200*0.2 = 40ms geplant
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1712707325216" ID="ID_407215716" MODIFIED="1712707328134" TEXT="withJobDeadline(500ms)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1712707425495" ID="ID_923192890" MODIFIED="1712707436497" STYLE="fork" TEXT="bleibt beim 2.Lauf hängen">
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1712707454214" ID="ID_614749757" MODIFIED="1712707464397" TEXT="izt werd's interessant...">
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1712707465445" ID="ID_1436192915" MODIFIED="1712707496042" TEXT="Deadline für den Tick wurde überfahren">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1712707500045" ID="ID_154552576" MODIFIED="1712707511038">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und zwar<i> ganz regulär</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1712707512094" ID="ID_1670959788" MODIFIED="1712707519425" TEXT="die Lastspitze ist einfach zu groß">
|
||||
<node CREATED="1712707567303" ID="ID_1273482137" MODIFIED="1712707578721" TEXT="wir hatten 200 Jobs + 200 Follow-ups"/>
|
||||
<node CREATED="1712707579296" ID="ID_1961322078" MODIFIED="1712707592063" TEXT="alle mit Zeiten < 40ms"/>
|
||||
<node CREATED="1712707601066" ID="ID_575482041" MODIFIED="1712707609994" TEXT="der Tick war auf ~50ms geplant"/>
|
||||
<node CREATED="1712707610685" ID="ID_1408583654" MODIFIED="1712707632554" TEXT="wir sind mit den Jobs (incl Wake-Up) aber fertig um ~ 200ms"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1712707656787" ID="ID_724311228" MODIFIED="1712707722866" TEXT="Tick wird nicht ausgeführt — der nächste Planer-Job kommt nicht zum Zug">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1712707736176" ID="ID_421830106" MODIFIED="1712707752031" TEXT="was passiert hier genau?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1712707753382" ID="ID_1683091808" MODIFIED="1712707767961" TEXT="hätte das nicht eine »Scheduler-Emergency« auslösen sollen?"/>
|
||||
<node CREATED="1712707769420" ID="ID_836418133" MODIFIED="1712707781294" TEXT="hätte nicht einfach der Tick-Job verworfen werden sollen?"/>
|
||||
<node COLOR="#5b280f" CREATED="1712708333504" ID="ID_1111150113" MODIFIED="1712709487030" TEXT="(Bauchgefühl) ⟶ irgendwas mit dem Grooming-Token ist faul">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1712708472718" ID="ID_55805674" MODIFIED="1712708477913" TEXT="ScopedGroomingGuard">
|
||||
<node CREATED="1712708480671" ID="ID_599948104" MODIFIED="1712708494615" TEXT="macht nichts wenn der Thread das Token bereits hält"/>
|
||||
<node CREATED="1712708660270" ID="ID_1855081310" MODIFIED="1712708664816" TEXT="nur verwendet von...">
|
||||
<node CREATED="1712708672851" ID="ID_1257905726" MODIFIED="1712708701876" TEXT="seedCalcStream (Eingang zum Planning-Job)"/>
|
||||
<node CREATED="1712708688114" ID="ID_129027253" MODIFIED="1712708692133" TEXT="handleDutyCycle (der Tick)"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712709107576" ID="ID_1671437251" MODIFIED="1712709134657" TEXT="aber: jeder Job-Ausgang != Activity::PASS droppt das Grooming-Token"/>
|
||||
<node CREATED="1712709339970" ID="ID_503292469" MODIFIED="1712709345348" TEXT="der Wake-up-Job...">
|
||||
<node CREATED="1712709346456" ID="ID_665320770" MODIFIED="1712709355652" TEXT="wird als normaler Job gescheduled"/>
|
||||
<node CREATED="1712709376266" ID="ID_160425716" MODIFIED="1712709395366" TEXT="⟹ es wird ein kompletter Term gebaut"/>
|
||||
<node CREATED="1712709426806" ID="ID_396019281" MODIFIED="1712709439288" TEXT="der sollte also das Grooming-Token sogar regulär droppen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1712709488734" ID="ID_1622321499" MODIFIED="1712709738428" TEXT="Entscheidungslogik im work-Pull zweifelhaft">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1712709767218" ID="ID_634325363" MODIFIED="1712709778474" TEXT="Commutator::findWork()">
|
||||
<node CREATED="1712709783870" ID="ID_664714267" MODIFIED="1712709793464" TEXT="hat einen fallback-Leer-Ausgang"/>
|
||||
<node CREATED="1712709794076" ID="ID_1248917668" MODIFIED="1712709817749" TEXT="dieser wird vom Worker als Contention-Kick gedeutet"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1712709831231" ID="ID_1502538432" MODIFIED="1712709849386" TEXT="tatsächlich gibt es aber einen weiteren Pfad dorthin">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1712709851885" ID="ID_1894325652" MODIFIED="1712709880413">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
und zwar <font face="Monospaced" color="#d70330">if layer1.isOutOfTime(now)</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node COLOR="#ad006c" CREATED="1712709996385" ID="ID_851225832" MODIFIED="1712710021393" TEXT="genau das ist hier der Fall">
|
||||
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
<node COLOR="#b009b2" CREATED="1712710157659" ID="ID_614822816" MODIFIED="1712710204032" TEXT="�� der Job bleibt in der Queue"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1712710253302" ID="ID_116406334" MODIFIED="1712710292628" TEXT="↯ Emergency soll aber nur im Tick getriggert werden">
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1712710297041" ID="ID_860306486" MODIFIED="1712710545023" TEXT="der Tick ist hier aber selbst der Trigger">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1712710547319" ID="ID_1932392128" MODIFIED="1712710556804" TEXT="Catch-22">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712715257580" ID="ID_1655798622" MODIFIED="1712715485004" TEXT="ansonsten (wenn man das umschifft)...">
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1712715273016" ID="ID_203587208" MODIFIED="1712715285762" TEXT="Verhalten im Einklang mit den anderen Beispielen"/>
|
||||
<node CREATED="1712715286445" ID="ID_1232642164" MODIFIED="1712715303655" TEXT="siehe Graph-13"/>
|
||||
<node CREATED="1712715317273" ID="ID_862871082" MODIFIED="1712715340474" TEXT="konvergiert noch näher an concurrency ≡ 8"/>
|
||||
<node CREATED="1712715341390" ID="ID_1454215812" MODIFIED="1712715357408" TEXT="aber ein overhead bleibt">
|
||||
<node CREATED="1712715359444" ID="ID_1500987358" MODIFIED="1712715370510" TEXT="der Sockel-Wert ist insgesamt höher"/>
|
||||
<node CREATED="1712715371098" ID="ID_1895482443" MODIFIED="1712715441759" TEXT="es bleibt auch eine Anlauf/Auslauf-Phase"/>
|
||||
</node>
|
||||
<node CREATED="1712715472324" ID="ID_607480259" MODIFIED="1712715480392" TEXT="die Streuung ist insgesamt geringer">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -116004,6 +116217,18 @@ std::cout << tmpl.render({"what", "World"}) << s
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1712702077001" ID="ID_314927060" MODIFIED="1712702080372" TEXT="Steuer-Logik">
|
||||
<node COLOR="#435e98" CREATED="1712702083622" ID="ID_1390873701" MODIFIED="1712704490342" TEXT="Contention-Zustand ist zu »sticky«">
|
||||
<linktarget COLOR="#3b3479" DESTINATION="ID_1390873701" ENDARROW="Default" ENDINCLINATION="189;-13;" ID="Arrow_ID_691473565" SOURCE="ID_1763982757" STARTARROW="None" STARTINCLINATION="-448;24;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1712702188498" ID="ID_1542108518" MODIFIED="1712702221649" TEXT="sporatische Contention-Situation ⟹ längerfristige Leistungs-Bremse"/>
|
||||
<node CREATED="1712702226285" ID="ID_559746023" MODIFIED="1712702278842" TEXT="Jobs im ms-Bereich erwartet ⟹ Wirkung über mehrere Frames befürchtet"/>
|
||||
<node CREATED="1712702289661" ID="ID_1097877530" MODIFIED="1712702306062" TEXT="es braucht 12 Stufen, um die Erinnerung an Contention zu löschen"/>
|
||||
<node COLOR="#338800" CREATED="1712702309425" ID="ID_1491619143" MODIFIED="1712704466471" TEXT="Anpassung: für Rückschritte die Stufen halbieren, statt dekrementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1702954431054" ID="ID_669378388" MODIFIED="1702954436305" TEXT="offen/aufzuklären">
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1702954476683" ID="ID_1030796415" MODIFIED="1702954846789" TEXT="Verhalten von Workern unter concurrency">
|
||||
|
|
|
|||
Loading…
Reference in a new issue