diff --git a/doc/devel/dump/2023-12-09.Scheduler-Integration/index.txt b/doc/devel/dump/2023-12-09.Scheduler-Integration/index.txt index 4b7d547c2..4c8d54a42 100644 --- a/doc/devel/dump/2023-12-09.Scheduler-Integration/index.txt +++ b/doc/devel/dump/2023-12-09.Scheduler-Integration/index.txt @@ -1,5 +1,5 @@ Scheduler Integration Testing ------------------------------ +============================= :date: 2023-12-09 After successfully completing the unit tests for the newly built scheduler, diff --git a/doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-10 b/doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-10 new file mode 100644 index 000000000..10c07a9c1 --- /dev/null +++ b/doc/devel/dump/2024-04-08.Scheduler-LoadTest/Dump-10 @@ -0,0 +1,687 @@ +| +| »watch_expenseFunction« +| +INDI: cnt frac ∅pS ∅pL ∅pLW γL◆ γLW◆ γL⬙ γLW⬙ +node: 50 100% 1.0 1.00 1.00 0.50 0.50 0.50 0.50 +seed: 50 100% 1.0 1.00 1.00 0.50 0.50 0.50 0.50 +exit: 50 100% 1.0 1.00 1.00 0.50 0.50 0.50 0.50 +innr: 0 0% 0.0 0.00 0.00 0.00 0.00 0.50 0.50 +fork: 0 0% 0.0 0.00 0.00 0.00 0.00 0.50 0.50 +join: 0 0% 0.0 0.00 0.00 0.00 0.00 0.50 0.50 +link: 0 0% 0.0 0.00 0.00 0.00 0.00 0.50 0.50 +knot: 0 0% 0.0 0.00 0.00 0.00 0.00 0.50 0.50 +wght: 50 100% 1.0 1.00 1.00 0.50 0.50 0.50 0.50 +LEVL: 50 +SEGS: 50 h = ∅1.0 / max. 1 +───═══───═══───═══───═══───═══───═══───═══───═══───═══───═══─── + +# Run with +# - CONCURRENCY = 4; +# - REPETITIONS = 40; +# - withLoadTimeBase(2ms); +# - withLevelDuration(200us); +# - perform (10,100); + + ++++ 7F: seed(num:50) +ANCHOR=0 preRoll=10000 now @-9880 sched.steps=51 +■□■schedule■□■ +lev:0 t= 0.00 +lev:1 t= 0.20 +lev:2 t= 0.40 +lev:3 t= 0.60 +lev:4 t= 0.80 +lev:5 t= 1.00 +lev:6 t= 1.20 +lev:7 t= 1.40 +lev:8 t= 1.60 +lev:9 t= 1.80 +lev:10 t= 2.00 +lev:11 t= 2.20 +lev:12 t= 2.40 +lev:13 t= 2.60 +lev:14 t= 2.80 +lev:15 t= 3.00 +lev:16 t= 3.20 +lev:17 t= 3.40 +lev:18 t= 3.60 +lev:19 t= 3.80 +lev:20 t= 4.00 +lev:21 t= 4.20 +lev:22 t= 4.40 +lev:23 t= 4.60 +lev:24 t= 4.80 +lev:25 t= 5.00 +lev:26 t= 5.20 +lev:27 t= 5.40 +lev:28 t= 5.60 +lev:29 t= 5.80 +lev:30 t= 6.00 +lev:31 t= 6.20 +lev:32 t= 6.40 +lev:33 t= 6.60 +lev:34 t= 6.80 +lev:35 t= 7.00 +lev:36 t= 7.20 +lev:37 t= 7.40 +lev:38 t= 7.60 +lev:39 t= 7.80 +lev:40 t= 8.00 +lev:41 t= 8.20 +lev:42 t= 8.40 +lev:43 t= 8.60 +lev:44 t= 8.80 +lev:45 t= 9.00 +lev:46 t= 9.20 +lev:47 t= 9.40 +lev:48 t= 9.60 +lev:49 t= 9.80 +lev:50 t=10.00 +‖IGN‖ ..: @ -9008 +‖▷▷▷‖ 7F: @ -8991 EMPTY +‖IGN‖ : @ -8341 ->wof:4 +‖SCH‖ 7F: @-8327 ○ start=-9097 dead:100000 + ·‖ 38: @-8156 HT:-3991 -> ▶ -9097 + +!◆!plan...to:49 |curr=0 (max:50) + |n.(0,lev:0) +... dispose(i=0,lev:0) -> @0 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7967 ○ start=0 dead:100000 + |n.(1,lev:1) +... dispose(i=1,lev:1) -> @200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7890 ○ start=200 dead:100000 + |n.(2,lev:2) +... dispose(i=2,lev:2) -> @400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7820 ○ start=400 dead:100000 + |n.(3,lev:3) +... dispose(i=3,lev:3) -> @600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7751 ○ start=600 dead:100000 + |n.(4,lev:4) +... dispose(i=4,lev:4) -> @800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7683 ○ start=800 dead:100000 + |n.(5,lev:5) +... dispose(i=5,lev:5) -> @1000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7618 ○ start=1000 dead:100000 + |n.(6,lev:6) +... dispose(i=6,lev:6) -> @1200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7553 ○ start=1200 dead:100000 + |n.(7,lev:7) +... dispose(i=7,lev:7) -> @1400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7484 ○ start=1400 dead:100000 + |n.(8,lev:8) +... dispose(i=8,lev:8) -> @1600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7418 ○ start=1600 dead:100000 + |n.(9,lev:9) +... dispose(i=9,lev:9) -> @1800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7353 ○ start=1800 dead:100000 + |n.(10,lev:10) +... dispose(i=10,lev:10) -> @2000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7288 ○ start=2000 dead:100000 + |n.(11,lev:11) +... dispose(i=11,lev:11) -> @2200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7222 ○ start=2200 dead:100000 + |n.(12,lev:12) +... dispose(i=12,lev:12) -> @2400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7158 ○ start=2400 dead:100000 + |n.(13,lev:13) +... dispose(i=13,lev:13) -> @2600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7093 ○ start=2600 dead:100000 + |n.(14,lev:14) +... dispose(i=14,lev:14) -> @2800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-7028 ○ start=2800 dead:100000 + |n.(15,lev:15) +... dispose(i=15,lev:15) -> @3000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6945 ○ start=3000 dead:100000 + |n.(16,lev:16) +... dispose(i=16,lev:16) -> @3200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6876 ○ start=3200 dead:100000 + |n.(17,lev:17) +... dispose(i=17,lev:17) -> @3400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6811 ○ start=3400 dead:100000 + |n.(18,lev:18) +... dispose(i=18,lev:18) -> @3600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6746 ○ start=3600 dead:100000 + |n.(19,lev:19) +... dispose(i=19,lev:19) -> @3800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6681 ○ start=3800 dead:100000 + |n.(20,lev:20) +... dispose(i=20,lev:20) -> @4000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6617 ○ start=4000 dead:100000 + |n.(21,lev:21) +... dispose(i=21,lev:21) -> @4200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6553 ○ start=4200 dead:100000 + |n.(22,lev:22) +... dispose(i=22,lev:22) -> @4400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6489 ○ start=4400 dead:100000 + |n.(23,lev:23) +... dispose(i=23,lev:23) -> @4600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6425 ○ start=4600 dead:100000 + |n.(24,lev:24) +... dispose(i=24,lev:24) -> @4800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6361 ○ start=4800 dead:100000 + |n.(25,lev:25) +... dispose(i=25,lev:25) -> @5000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6297 ○ start=5000 dead:100000 + |n.(26,lev:26) +... dispose(i=26,lev:26) -> @5200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6232 ○ start=5200 dead:100000 + |n.(27,lev:27) +... dispose(i=27,lev:27) -> @5400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6165 ○ start=5400 dead:100000 + |n.(28,lev:28) +... dispose(i=28,lev:28) -> @5600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6099 ○ start=5600 dead:100000 + |n.(29,lev:29) +... dispose(i=29,lev:29) -> @5800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-6035 ○ start=5800 dead:100000 + |n.(30,lev:30) +... dispose(i=30,lev:30) -> @6000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5971 ○ start=6000 dead:100000 + |n.(31,lev:31) +... dispose(i=31,lev:31) -> @6200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5906 ○ start=6200 dead:100000 + |n.(32,lev:32) +... dispose(i=32,lev:32) -> @6400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5836 ○ start=6400 dead:100000 + |n.(33,lev:33) +... dispose(i=33,lev:33) -> @6600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5772 ○ start=6600 dead:100000 + |n.(34,lev:34) +... dispose(i=34,lev:34) -> @6800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5708 ○ start=6800 dead:100000 + |n.(35,lev:35) +... dispose(i=35,lev:35) -> @7000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5643 ○ start=7000 dead:100000 + |n.(36,lev:36) +... dispose(i=36,lev:36) -> @7200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5578 ○ start=7200 dead:100000 + |n.(37,lev:37) +... dispose(i=37,lev:37) -> @7400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5514 ○ start=7400 dead:100000 + |n.(38,lev:38) +... dispose(i=38,lev:38) -> @7600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5450 ○ start=7600 dead:100000 + |n.(39,lev:39) +... dispose(i=39,lev:39) -> @7800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5386 ○ start=7800 dead:100000 + |n.(40,lev:40) +... dispose(i=40,lev:40) -> @8000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5321 ○ start=8000 dead:100000 + |n.(41,lev:41) +... dispose(i=41,lev:41) -> @8200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5257 ○ start=8200 dead:100000 + |n.(42,lev:42) +... dispose(i=42,lev:42) -> @8400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5193 ○ start=8400 dead:100000 + |n.(43,lev:43) +... dispose(i=43,lev:43) -> @8600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5129 ○ start=8600 dead:100000 + |n.(44,lev:44) +... dispose(i=44,lev:44) -> @8800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5065 ○ start=8800 dead:100000 + |n.(45,lev:45) +... dispose(i=45,lev:45) -> @9000 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-5001 ○ start=9000 dead:100000 + |n.(46,lev:46) +... dispose(i=46,lev:46) -> @9200 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-4933 ○ start=9200 dead:100000 + |n.(47,lev:47) +... dispose(i=47,lev:47) -> @9400 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-4869 ○ start=9400 dead:100000 + |n.(48,lev:48) +... dispose(i=48,lev:48) -> @9600 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-4805 ○ start=9600 dead:100000 + |n.(49,lev:49) +... dispose(i=49,lev:49) -> @9800 +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-4741 ○ start=9800 dead:100000 ++++ 38: Continuation(chunkStart=0, lastNode=49, levelDone=49, work_left:false) + ·‖ 62: @-3986 HT:-3991 -> ∘ ·‖ 15: @-3988 HT:-3991 -> ∘ + + ·‖ 62: @-3893 HT:-3991 -> ∘ + ·‖ 26: @-3977 HT:-3991 -> ∘ + ·‖ 62: @-3827 HT:-3991 -> ∘ ·‖ 15: @-3836 HT:-3991 -> ∘ + ·‖ 26: @-3815 HT:-3991 -> ∘ + + ·‖ 26: @-3740 HT:-3991 -> ∘ + ·‖ 15: @-3741 HT:-3991 -> ∘ + ·‖ 62: @-3701 HT:-3991 -> ∘ ·‖ 26: @-3679 HT:-3991 -> ∘ + + ·‖ 15: @-3622 HT:-3991 -> ∘ + ·‖ 26: @-3595 HT:-3991 -> ∘ + ·‖ 62: @-3544 HT:-3991 -> ∘ + ·‖ 15: @-3500 HT:-3991 -> ∘ + ·‖ 26: @-3301 HT:-3991 -> ∘ + ·‖ 62: @-3241 HT:-3991 -> ∘ + ·‖ 15: @-3189 HT:-3991 -> ∘ + ·‖ 26: @-2949 HT:-3991 -> ∘ + ·‖ 62: @-2745 HT:-3991 -> ∘ + ·‖ 15: @-2695 HT:-3991 -> ∘ +‖•△•‖ wof:4 HT:-3991 +‖SCH‖ 38: @-2389 ○ start=10010 dead:5000000 + ·‖ 26: @-2221 HT:-3991 -> ∘ + + 38: @-2096 0 —▷ 10010 + + 38: @-2030 1 —▷ 10010 + + 38: @-1996 2 —▷ 10010 + + 38: @-1963 3 —▷ 10010 + + 38: @-1930 4 —▷ 10010 + + 38: @-1899 5 —▷ 10010 + + 38: @-1867 6 —▷ 10010 + + 38: @-1837 7 —▷ 10010 + ·‖ 15: @-1802 HT:-3991 -> ∘ + + 38: @-1807 8 —▷ 10010 + + 38: @-1759 9 —▷ 10010 + ·‖ 62: @-1772 HT:-3991 -> ∘ + + 38: @-1726 10 —▷ 10010 + + 38: @-1676 11 —▷ 10010 + + 38: @-1646 12 —▷ 10010 + + 38: @-1615 13 —▷ 10010 + + 38: @-1585 14 —▷ 10010 + + 38: @-1555 15 —▷ 10010 + + 38: @-1525 16 —▷ 10010 + + 38: @-1494 17 —▷ 10010 + + 38: @-1464 18 —▷ 10010 + + 38: @-1434 19 —▷ 10010 + + 38: @-1404 20 —▷ 10010 + + 38: @-1374 21 —▷ 10010 + + 38: @-1344 22 —▷ 10010 + + 38: @-1314 23 —▷ 10010 + + 38: @-1284 24 —▷ 10010 + + 38: @-1254 25 —▷ 10010 + + 38: @-1224 26 —▷ 10010 + + 38: @-1194 27 —▷ 10010 + + 38: @-1164 28 —▷ 10010 + + 38: @-1134 29 —▷ 10010 + + 38: @-1104 30 —▷ 10010 + + 38: @-1074 31 —▷ 10010 + + 38: @-1045 32 —▷ 10010 + + 38: @-1014 33 —▷ 10010 + + 38: @-984 34 —▷ 10010 + + 38: @-954 35 —▷ 10010 + ·‖ 26: @-926 HT:-3991 -> ∘ + + 38: @-925 36 —▷ 10010 + + 38: @-884 37 —▷ 10010 + + 38: @-854 38 —▷ 10010 + + 38: @-825 39 —▷ 10010 + + 38: @-795 40 —▷ 10010 + + 38: @-765 41 —▷ 10010 + + 38: @-736 42 —▷ 10010 + + 38: @-706 43 —▷ 10010 + + 38: @-677 44 —▷ 10010 + + 38: @-647 45 —▷ 10010 + + 38: @-618 46 —▷ 10010 + + 38: @-588 47 —▷ 10010 + + 38: @-559 48 —▷ 10010 + + 38: @-530 49 —▷ 10010 + ·‖ 38: @-485 HT:0 -> ▶ -3991 +‖▷▷▷‖ 38: @ -468 HT:0 + ·‖ 38: @69 HT:200 -> ∘ + ·‖ 62: @58 HT:200 -> ▶ 0 + ·‖ 38: @200 HT:400 -> ▶ 200 + +!◆! 38: @243 ⚙ calc(i=1, lev:1) +!◆! 62: @247 ⚙ calc(i=0, lev:0) + + ·‖ 15: @462 HT:600 -> ▶ 400 +!◆! 15: @507 ⚙ calc(i=2, lev:2) + + ·‖ 26: @1574 HT:800 -> ▶ 600 +!◆! 26: @1637 ⚙ calc(i=3, lev:3) + +..! 38: @2619 ⤴ (i=1) +‖PST‖ 38: @2659 ◒ start=200▹▹10010 dead:5000000 + ·‖ 38: @2695 HT:1000 -> ▶ 800 +!◆! 38: @2713 ⚙ calc(i=4, lev:4) + +..! 15: @3639 ⤴ (i=2) +‖PST‖ 15: @3688 ◒ start=400▹▹10010 dead:5000000 + ·‖ 15: @3726 HT:1200 -> ▶ 1000 +!◆! 15: @3751 ⚙ calc(i=5, lev:5) + +..! 62: @3789 ⤴ (i=0) +‖PST‖ 62: @3832 ◒ start=0▹▹10010 dead:5000000 + ·‖ 62: @3862 HT:1400 -> ▶ 1200 +!◆! 62: @3885 ⚙ calc(i=6, lev:6) + +..! 26: @4750 ⤴ (i=3) +‖PST‖ 26: @4795 ◒ start=600▹▹10010 dead:5000000 +..! 38: @4817 ⤴ (i=4) +‖PST‖ 38: @4843 ◒ start=800▹▹10010 dead:5000000 + ·‖ 26: @4827 HT:1600 -> ▶ 1400 + ·‖ 38: @4862 HT:1800 -> ▶ 1600 + +!◆! 26: @4854 ⚙ calc(i=7, lev:7) +!◆! 38: @4878 ⚙ calc(i=8, lev:8) + +..! 15: @6852 ⤴ (i=5) +‖PST‖ 15: @6896 ◒ start=1000▹▹10010 dead:5000000 + ·‖ 15: @6926 HT:2000 -> ▶ 1800 +!◆! 15: @6953 ⚙ calc(i=9, lev:9) + +..! 62: @6971 ⤴ (i=6) +..! 38: @7005 ⤴ (i=8) +‖PST‖ 62: @7026 ◒ start=1200▹▹10010 dead:5000000 +‖PST‖ 38: @7035 ◒ start=1600▹▹10010 dead:5000000 + ·‖ 38: @7054 HT:2200 -> ∘ + ·‖ 62: @7050 HT:2200 -> ▶ 2000 + ·‖ 38: @7071 HT:2200 -> ∘ + ·‖ 38: @7096 HT:2400 -> ▶ 2200 + +!◆! 62: @7088 ⚙ calc(i=10, lev:10) +!◆! 38: @7112 ⚙ calc(i=11, lev:11) + +..! 26: @7972 ⤴ (i=7) +‖PST‖ 26: @8014 ◒ start=1400▹▹10010 dead:5000000 + ·‖ 26: @8039 HT:2600 -> ▶ 2400 +!◆! 26: @8063 ⚙ calc(i=12, lev:12) + +..! 38: @9235 ⤴ (i=11) +‖PST‖ 38: @9263 ◒ start=2200▹▹10010 dead:5000000 + ·‖ 38: @9281 HT:2800 -> ▶ 2600 +!◆! 38: @9299 ⚙ calc(i=13, lev:13) + +..! 15: @9863 ⤴ (i=9) +‖PST‖ 15: @9899 ◒ start=1800▹▹10010 dead:5000000 + ·‖ 15: @9924 HT:3000 -> ▶ 2800 +!◆! 15: @9946 ⚙ calc(i=14, lev:14) + +..! 62: @10184 ⤴ (i=10) +‖PST‖ 62: @10229 ◒ start=2000▹▹10010 dead:5000000 + ·‖ 62: @10253 HT:3200 -> ▶ 3000 +!◆! 62: @10275 ⚙ calc(i=15, lev:15) + +..! 26: @10745 ⤴ (i=12) +‖PST‖ 26: @10779 ◒ start=2400▹▹10010 dead:5000000 + ·‖ 26: @10799 HT:3400 -> ▶ 3200 +!◆! 26: @10818 ⚙ calc(i=16, lev:16) + +..! 38: @11402 ⤴ (i=13) +‖PST‖ 38: @11431 ◒ start=2600▹▹10010 dead:5000000 + ·‖ 38: @11449 HT:3600 -> ▶ 3400 +!◆! 38: @11466 ⚙ calc(i=17, lev:17) + +..! 15: @12483 ⤴ (i=14) +‖PST‖ 15: @12517 ◒ start=2800▹▹10010 dead:5000000 + ·‖ 15: @12540 HT:3800 -> ▶ 3600 +!◆! 15: @12562 ⚙ calc(i=18, lev:18) + +..! 62: @13270 ⤴ (i=15) +‖PST‖ 62: @13296 ◒ start=3000▹▹10010 dead:5000000 + ·‖ 62: @13311 HT:4000 -> ▶ 3800 +!◆! 62: @13326 ⚙ calc(i=19, lev:19) + +..! 26: @13366 ⤴ (i=16) +‖PST‖ 26: @13399 ◒ start=3200▹▹10010 dead:5000000 + ·‖ 26: @13419 HT:4200 -> ▶ 4000 +!◆! 26: @13438 ⚙ calc(i=20, lev:20) + +..! 38: @13603 ⤴ (i=17) +‖PST‖ 38: @13636 ◒ start=3400▹▹10010 dead:5000000 + ·‖ 38: @13655 HT:4400 -> ▶ 4200 +!◆! 38: @13672 ⚙ calc(i=21, lev:21) + +..! 15: @15101 ⤴ (i=18) +‖PST‖ 15: @15136 ◒ start=3600▹▹10010 dead:5000000 + ·‖ 15: @15159 HT:4600 -> ▶ 4400 +!◆! 15: @15182 ⚙ calc(i=22, lev:22) + +..! 62: @15440 ⤴ (i=19) +‖PST‖ 62: @15465 ◒ start=3800▹▹10010 dead:5000000 + ·‖ 62: @15479 HT:4800 -> ▶ 4600 +!◆! 62: @15493 ⚙ calc(i=23, lev:23) + +..! 38: @15774 ⤴ (i=21) +‖PST‖ 38: @15802 ◒ start=4200▹▹10010 dead:5000000 + ·‖ 38: @15819 HT:5000 -> ▶ 4800 +!◆! 38: @15836 ⚙ calc(i=24, lev:24) + +..! 26: @15989 ⤴ (i=20) +‖PST‖ 26: @16023 ◒ start=4000▹▹10010 dead:5000000 + ·‖ 26: @16043 HT:5200 -> ▶ 5000 +!◆! 26: @16063 ⚙ calc(i=25, lev:25) + +..! 62: @17597 ⤴ (i=23) +‖PST‖ 62: @17623 ◒ start=4600▹▹10010 dead:5000000 + ·‖ 62: @17638 HT:5400 -> ▶ 5200 +!◆! 62: @17652 ⚙ calc(i=26, lev:26) + +..! 15: @17745 ⤴ (i=22) +‖PST‖ 15: @17781 ◒ start=4400▹▹10010 dead:5000000 + ·‖ 15: @17804 HT:5600 -> ▶ 5400 +!◆! 15: @17827 ⚙ calc(i=27, lev:27) + +..! 38: @17953 ⤴ (i=24) +‖PST‖ 38: @17980 ◒ start=4800▹▹10010 dead:5000000 + ·‖ 38: @17995 HT:5800 -> ▶ 5600 +!◆! 38: @18010 ⚙ calc(i=28, lev:28) + +..! 26: @18602 ⤴ (i=25) +‖PST‖ 26: @18638 ◒ start=5000▹▹10010 dead:5000000 + ·‖ 26: @18660 HT:6000 -> ▶ 5800 +!◆! 26: @18680 ⚙ calc(i=29, lev:29) + +..! 62: @19749 ⤴ (i=26) +‖PST‖ 62: @19773 ◒ start=5200▹▹10010 dead:5000000 + ·‖ 62: @19787 HT:6200 -> ▶ 6000 +!◆! 62: @19801 ⚙ calc(i=30, lev:30) + +..! 38: @20065 ⤴ (i=28) +‖PST‖ 38: @20091 ◒ start=5600▹▹10010 dead:5000000 + ·‖ 38: @20106 HT:6400 -> ▶ 6200 +!◆! 38: @20121 ⚙ calc(i=31, lev:31) + +..! 15: @20363 ⤴ (i=27) +‖PST‖ 15: @20396 ◒ start=5400▹▹10010 dead:5000000 + ·‖ 15: @20419 HT:6600 -> ▶ 6400 +!◆! 15: @20442 ⚙ calc(i=32, lev:32) + +..! 26: @21203 ⤴ (i=29) +‖PST‖ 26: @21232 ◒ start=5800▹▹10010 dead:5000000 + ·‖ 26: @21250 HT:6800 -> ▶ 6600 +!◆! 26: @21267 ⚙ calc(i=33, lev:33) + +..! 62: @21914 ⤴ (i=30) +‖PST‖ 62: @21940 ◒ start=6000▹▹10010 dead:5000000 + ·‖ 62: @21956 HT:7000 -> ▶ 6800 +!◆! 62: @21971 ⚙ calc(i=34, lev:34) + +..! 15: @22631 ⤴ (i=32) +‖PST‖ 15: @22662 ◒ start=6400▹▹10010 dead:5000000 + ·‖ 15: @22682 HT:7200 -> ▶ 7000 +!◆! 15: @22701 ⚙ calc(i=35, lev:35) + +..! 26: @23375 ⤴ (i=33) +‖PST‖ 26: @23402 ◒ start=6600▹▹10010 dead:5000000 + ·‖ 26: @23419 HT:7400 -> ▶ 7200 +!◆! 26: @23434 ⚙ calc(i=36, lev:36) + +..! 62: @24068 ⤴ (i=34) +‖PST‖ 62: @24099 ◒ start=6800▹▹10010 dead:5000000 + ·‖ 62: @24116 HT:7600 -> ▶ 7400 +!◆! 62: @24132 ⚙ calc(i=37, lev:37) + +..! 38: @24434 ⤴ (i=31) +‖PST‖ 38: @24515 ◒ start=6200▹▹10010 dead:5000000 + ·‖ 38: @24563 HT:7800 -> ▶ 7600 +!◆! 38: @24609 ⚙ calc(i=38, lev:38) + +..! 15: @24812 ⤴ (i=35) +‖PST‖ 15: @24842 ◒ start=7000▹▹10010 dead:5000000 + ·‖ 15: @24863 HT:8000 -> ▶ 7800 +!◆! 15: @24883 ⚙ calc(i=39, lev:39) + +..! 26: @25549 ⤴ (i=36) +‖PST‖ 26: @25576 ◒ start=7200▹▹10010 dead:5000000 + ·‖ 26: @25591 HT:8200 -> ▶ 8000 +!◆! 26: @25606 ⚙ calc(i=40, lev:40) + +..! 62: @26250 ⤴ (i=37) +‖PST‖ 62: @26276 ◒ start=7400▹▹10010 dead:5000000 + ·‖ 62: @26291 HT:8400 -> ▶ 8200 +!◆! 62: @26306 ⚙ calc(i=41, lev:41) + +..! 38: @26954 ⤴ (i=38) +‖PST‖ 38: @26982 ◒ start=7600▹▹10010 dead:5000000 + ·‖ 38: @26999 HT:8600 -> ▶ 8400 +!◆! 38: @27015 ⚙ calc(i=42, lev:42) + +..! 15: @26998 ⤴ (i=39) +‖PST‖ 15: @27035 ◒ start=7800▹▹10010 dead:5000000 + ·‖ 15: @27066 HT:8800 -> ▶ 8600 +!◆! 15: @27084 ⚙ calc(i=43, lev:43) + +..! 26: @27709 ⤴ (i=40) +‖PST‖ 26: @27733 ◒ start=8000▹▹10010 dead:5000000 + ·‖ 26: @27747 HT:9000 -> ▶ 8800 +!◆! 26: @27762 ⚙ calc(i=44, lev:44) + +..! 62: @28403 ⤴ (i=41) +‖PST‖ 62: @28427 ◒ start=8200▹▹10010 dead:5000000 + ·‖ 62: @28442 HT:9200 -> ▶ 9000 +!◆! 62: @28456 ⚙ calc(i=45, lev:45) + +..! 38: @29125 ⤴ (i=42) +‖PST‖ 38: @29152 ◒ start=8400▹▹10010 dead:5000000 + ·‖ 38: @29168 HT:9400 -> ▶ 9200 +!◆! 38: @29184 ⚙ calc(i=46, lev:46) + +..! 15: @29192 ⤴ (i=43) +‖PST‖ 15: @29228 ◒ start=8600▹▹10010 dead:5000000 + ·‖ 15: @29248 HT:9600 -> ▶ 9400 +!◆! 15: @29268 ⚙ calc(i=47, lev:47) + +..! 26: @29880 ⤴ (i=44) +‖PST‖ 26: @29907 ◒ start=8800▹▹10010 dead:5000000 + ·‖ 26: @29923 HT:9800 -> ▶ 9600 +!◆! 26: @29938 ⚙ calc(i=48, lev:48) + +..! 62: @30567 ⤴ (i=45) +‖PST‖ 62: @30592 ◒ start=9000▹▹10010 dead:5000000 + ·‖ 62: @30607 HT:10010 -> ▶ 9800 +!◆! 62: @30621 ⚙ calc(i=49, lev:49) + +..! 38: @31282 ⤴ (i=46) +‖PST‖ 38: @31310 ◒ start=9200▹▹10010 dead:5000000 + ·‖ 38: @31326 HT:10010 -> ▶ 10010 + ·‖ 38: @31344 HT:10010 -> ▶ 10010 + ·‖ 38: @31358 HT:10010 -> ▶ 10010 + ·‖ 38: @31373 HT:10010 -> ▶ 10010 + ·‖ 38: @31388 HT:10010 -> ▶ 10010 +..! 15: @31376 ⤴ (i=47) +‖PST‖ 15: @31412 ◒ start=9400▹▹10010 dead:5000000 + ·‖ 38: @31403 HT:10010 -> ▶ 10010 + ·‖ 38: @31419 HT:10010 -> ▶ 10010 + ·‖ 15: @31432 HT:10010 -> ∘ + ·‖ 38: @31435 HT:10010 -> ▶ 10010 + ·‖ 15: @31454 HT:10010 -> ∘ + ·‖ 38: @31462 HT:10010 -> ▶ 10010 + ·‖ 15: @31474 HT:10010 -> ∘ + ·‖ 38: @31477 HT:10010 -> ▶ 10010 + ·‖ 38: @31501 HT:10010 -> ▶ 10010 + ·‖ 15: @31506 HT:10010 -> ∘ + ·‖ 38: @31515 HT:10010 -> ▶ 10010 + ·‖ 38: @31531 HT:10010 -> ▶ 10010 + ·‖ 38: @31546 HT:10010 -> ▶ 10010 + ·‖ 15: @31547 HT:10010 -> ∘ + ·‖ 38: @31565 HT:10010 -> ▶ 10010 + ·‖ 38: @31582 HT:10010 -> ▶ 10010 + ·‖ 38: @31596 HT:10010 -> ▶ 10010 + ·‖ 38: @31609 HT:10010 -> ▶ 10010 + ·‖ 38: @31623 HT:10010 -> ▶ 10010 + ·‖ 38: @31636 HT:10010 -> ▶ 10010 + ·‖ 38: @31649 HT:10010 -> ▶ 10010 + ·‖ 38: @31662 HT:10010 -> ▶ 10010 + ·‖ 38: @31676 HT:10010 -> ▶ 10010 + ·‖ 38: @31689 HT:10010 -> ▶ 10010 + ·‖ 38: @31704 HT:10010 -> ▶ 10010 + ·‖ 38: @31718 HT:10010 -> ▶ 10010 + ·‖ 38: @31731 HT:10010 -> ▶ 10010 + ·‖ 38: @31744 HT:10010 -> ▶ 10010 + ·‖ 38: @31757 HT:10010 -> ▶ 10010 + ·‖ 38: @31771 HT:10010 -> ▶ 10010 + ·‖ 38: @31785 HT:10010 -> ▶ 10010 + ·‖ 38: @31798 HT:10010 -> ▶ 10010 + ·‖ 38: @31812 HT:10010 -> ▶ 10010 + ·‖ 38: @31825 HT:10010 -> ▶ 10010 + ·‖ 15: @31825 HT:10010 -> ∘ + ·‖ 38: @31841 HT:10010 -> ▶ 10010 + ·‖ 38: @31856 HT:10010 -> ▶ 10010 + ·‖ 38: @31869 HT:10010 -> ▶ 10010 + ·‖ 38: @31882 HT:10010 -> ▶ 10010 + ·‖ 38: @31895 HT:10010 -> ▶ 10010 + ·‖ 38: @31909 HT:10010 -> ▶ 10010 + ·‖ 38: @31922 HT:10010 -> ▶ 10010 + ·‖ 38: @31935 HT:10010 -> ▶ 10010 + ·‖ 38: @31948 HT:10010 -> ▶ 10010 + ·‖ 38: @31961 HT:10010 -> ▶ 10010 + ·‖ 38: @31974 HT:10010 -> ▶ 10010 + ·‖ 38: @31987 HT:10010 -> ▶ 10010 + ·‖ 38: @32001 HT:10010 -> ▶ 10010 + ·‖ 38: @32018 HT:10010 -> ▶ 10010 + ·‖ 38: @32031 HT:49532 -> ▶ 10010 +..! 26: @32032 ⤴ (i=48) +‖PST‖ 26: @32059 ◒ start=9600▹▹10010 dead:5000000 + ·‖ 26: @32074 HT:49532 -> ▶ 10010 +..! 62: @32719 ⤴ (i=49) +‖PST‖ 62: @32747 ◒ start=9800▹▹10010 dead:5000000 + ·‖ 62: @32761 HT:49532 -> ▶ 10010 ++++ ▣ 62: @32778 WAKE-UP + +time=33.0158 covered=32.5043 avgconcurr=3.77667 + +‖▽▼▽‖ 38: @ 49619 +‖▽▼▽‖ 62: @ 49922 + ·‖ 15: @52444 HT:307445584173635861 -> ▶ 49532 +‖▷▷▷‖ 15: @ 52528 EMPTY +‖▽▼▽‖ 26: @ 62531 +‖▽▼▽‖ 15: @ 62590 + diff --git a/doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-10 b/doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-10 new file mode 100644 index 000000000..d7cf1940c --- /dev/null +++ b/doc/devel/dump/2024-04-08.Scheduler-LoadTest/Graph-10 @@ -0,0 +1,139 @@ +# +# +# 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" +51,31.508505,3.77477170052975,2332.1061372549,11.0931176470588 +11,15.113527,2.32047588891726,3188.23409090909,270.904363636364 +91,60.137673,3.32792050334239,2199.26807692308,108.090923076923 +62,36.776624,3.75701763707294,2228.55524193548,28.9245806451613 +56,37.566976,3.46145242033854,2322.07678571429,7.68378571428571 +84,51.195113,3.68907840871452,2248.3665,35.0133571428571 +82,46.670306,3.83766328851583,2184.20634146341,15.9964756097561 +53,38.522711,3.30306888318426,2400.81449056604,56.6865094339623 +75,44.26341,3.70152853112763,2184.56366666667,20.02632 +25,21.483284,2.77088740250327,2381.11044,58.22468 +29,24.519575,2.57787946977058,2179.60375862069,203.93924137931 +85,49.605607,3.86992917957843,2258.47277647059,7.47218823529412 +32,22.087341,3.4961801422815,2413.16634375,58.6231875 +91,57.686018,3.38763472978842,2147.46327472527,24.1998461538462 +51,36.34618,3.59277682001245,2560.46496078431,46.9979411764706 +85,51.071262,3.70227610588515,2224.46956470588,4.53978823529412 +91,57.198225,3.61179774372369,2270.20241758242,24.4224175824176 +63,44.510439,3.24747491257051,2294.38942857143,70.2196031746032 +69,45.305855,3.26819608635573,2145.91910144928,90.9167971014493 +66,46.297088,3.23108669383267,2266.51371212121,100.196045454545 +12,16.203749,2.77308541375209,3744.53166666667,158.820666666667 +80,51.0223,3.48960250713903,2225.594325,58.4322 +79,44.409523,3.77631124297372,2122.83773417721,17.5681898734177 +19,22.086871,1.89992855936905,2208.60405263158,560.758578947369 +94,56.200283,3.74721358609529,2240.36663829787,19.4130319148936 +74,42.617805,3.78016983746582,2177.06136486487,16.3727972972973 +30,23.653034,3.06613815377765,2417.449,31.6696333333333 +82,52.824186,3.13727164674151,2021.02220731707,130.852304878049 +96,61.666661,3.37476708849211,2167.8189375,75.4843020833333 +33,28.545792,2.5344397871322,2192.35124242424,347.145878787879 +94,61.217533,3.46707582940332,2257.93435106383,60.4128191489362 +47,31.615499,3.2249519136168,2169.3290212766,144.995489361702 +34,24.878695,2.83428708780746,2073.92247058824,238.106323529412 +85,51.539839,3.70859936136006,2248.71310588235,6.03429411764706 +99,59.961788,3.81605094898104,2311.28523232323,9.85738383838384 +80,47.54972,3.79465279711426,2255.433475,12.9391 +69,47.71155,3.54777755071885,2453.18791304348,5.76101449275362 +81,48.126022,3.73501163258414,2219.15125925926,5.23055555555556 +100,62.899327,3.60512040136773,2267.59647,16.29929 +10,11.845006,2.45327651163706,2905.9075,87.5561 + +_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 5 + +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 + } +} + diff --git a/doc/devel/dump/2024-04-08.Scheduler-LoadTest/index.txt b/doc/devel/dump/2024-04-08.Scheduler-LoadTest/index.txt new file mode 100644 index 000000000..abc933d00 --- /dev/null +++ b/doc/devel/dump/2024-04-08.Scheduler-LoadTest/index.txt @@ -0,0 +1,60 @@ +Scheduler Load and Stress Testing +================================= +:date: 2024-04-08 + +Following the initial integration, an extended series of Load- and Stress-testing +was conducted to determine the limitations and weaknesses of the new Scheduler +implementation. During that time, from December to April, several bugs and problems +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. + +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, +a change set with a suitable setup of such diagnostic print statements was assembled, +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'). + + +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 + 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 + follow-up job is wired as dependency on each work job; the dependency wiring + and dependency checking is performed outside the active measurement interval, + so that only the additional post of the follow-up check adds a constant + administrative overhead to each job, which can be guessed to be +30µs. + +Graph-10:: + Plot from a parametric measurement series with the same settings as used for + the Dump-10; settings in these range are known to produce clean processing + with no obivous irregular overhead. In this case here ++ +- the series is comprised of 40 measurements, covering a parameter range 10...100 +- the free parameter is the number of jobs in a homogenous load peak +- through built-in instrumentation, the job activation can be observed, allowing + to derive the average work job time, average time in full concurrency and amount + of time with limitations (less than two active workers) ++ +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 +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 +indicate that these *5ms* can be considered a *generic scheduling latency* ++ +The actual job times are always slightly above the calibrated value (the load operation +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) diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 869fd4565..721293bda 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -112036,9 +112036,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - - +

Darstellung als Gnuplot-Diagramm aufbereitet @@ -114824,9 +114822,7 @@ std::cout << tmpl.render({"what", "World"}) << s - - - +

Denn es gibt stets einige wenige ganz dramatische Ausreißer, die sonst die Skala so verschieben würden, daß man die eigentlichen Meßwerte nicht mehr sieht; ich müßte also eigens wieder Anpassungs-Code schreiben, und mir eine Heuristik einfallen lassen, um die Skala zu kappen — unnötiger Aufwand für eine nebenbei mit aufgenommene Größe @@ -114836,9 +114832,7 @@ std::cout << tmpl.render({"what", "World"}) << s - - - +

...denn der Umstand, daß der Overhead / Job weitgehend konstant ist, zeigt, daß wir hier einen separaten Setup-Effekt haben, vermutlich nämlich vor allem die Job-Planungs-Zeit. Da wir demgegenüber in der aktiven Phase sehr gut linear sind, kann man diesen zusätzlichen Overhead zunächst mal als Artefakt der Meßanordnung beiseite lassen (und später dann mal eigens untersuchen) @@ -115411,8 +115405,6 @@ std::cout << tmpl.render({"what", "World"}) << s - - @@ -115424,16 +115416,13 @@ std::cout << tmpl.render({"what", "World"}) << s - - - +

...denn er ist stark von der Hardware abhängig und i.d.R wenig variierbar, und oft gibt es noch weitere, interne Beschränkungen (wie z.B. Hyperthreading, das eben doch nicht komplett transparent ist und mit Cache und Pipelining im Prozessor wechselwirkt)

- -
+
@@ -115444,10 +115433,13 @@ std::cout << tmpl.render({"what", "World"}) << s - - - - + + + + + + + @@ -115651,6 +115643,7 @@ std::cout << tmpl.render({"what", "World"}) << s + @@ -115703,6 +115696,225 @@ 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 +

+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + +

+ Einzelbeobachtung ⟹ keinerlei auffälliges Verhalten +

+ + +
+ + + + + + + + + + + + + + +

+ sie werden per Instrumentation erfaßt, und nicht aus anderen Beobachtungen errechnet +

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
    +
  • + die Anlauf-Phase ist abgesclossen, wenn der erste Worker einen weiteren Job übernimmt und zudem alle 4 Worker da sind +
  • +
  • + unter der Annahme, daß alle Worker während der Anlauf-Phase aktiv werden, zählt diese Anlauf-Phase also grundsätzlich immer einen abgeschlossenen Job +
  • +
  • + die Shutdown-Phase beginnt, wenn der erste Worker idle wird. Damit bleiben noch N-1 Worker übrig, die ihre Arbeit beenden müssen. Die Shutdown-Phase zählt daher 3 abgeschlossene Jobs +
  • +
+ + +
+
+
+ + +
+ + + + + + + + + + +

+ 4,649/46  ( 46= 50 -4) +

+ + +
+ + + + + +

+ das entspricht genau dem empirisch beobachteten Scheduling-Overhead +

+ +
+
+ + + + +

+ ...rein zufällig habe ich hier grade 46 Jobs in der Aktiven Phase, aber das Modell deckt Parameter im Bereich 10...100 Jobs ab +

+ + +
+ +
+
+ + + + +

+ bessere Deutung: es sind ca 5ms — das enstspricht dem WORK_HORIZON +

+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + +

+ sehr schöner steady state ohne offensichtliche Inkonsistenzen +

+ + +
+
+ + + + + + + + +

+ man kann ihn also deuten als generische Scheduler-Latenz +

+ + +
+
+
+ + + + + @@ -116022,6 +116234,43 @@ std::cout << tmpl.render({"what", "World"}) << s + + + + + + +

+ gemessen wurde das Abarbeiten einer homogenen Lastspitze, welche schlagartig eingebracht wurde, und die ohne Berücksichtigung von Abhängkeiten verarbeitet werden kann +

+ +
+
+ + + + + +

+ gilt nur bei sauberem Lauf ohne Contention +

+ +
+
+ + + + +

+ und ohne Aufwand für Job-Planung +

+ +
+
+ + + +