Scheduler-test: investigate processing patterns

Some test-runs performed excitingly smooth,
but in one case the processing was was drastically delayed,
due to heavy contention. The relevance of this incident is not clear yet,
since this test run uses a rather atypical load with very short actual work jobs.

Anyway, the dump-logs are documented with this commit.
This commit is contained in:
Fischlurch 2023-12-09 04:30:35 +01:00
parent fcfdf97853
commit 7847e3156c
6 changed files with 3243 additions and 23 deletions

View file

@ -0,0 +1,498 @@
invokeTestCase: ++------------------- invoking TEST: vault::gear::test::TestChainLoad_test
#--◆--# offset() ? = 716
#--◆--# testLoad.getHash() ? = 5982496738762178821
#--◆--# offset() ? = 1004
+++ A9: seed(num:64)
ANCHOR=0 preRoll=5120
‖▷▷▷‖ A9: @ -4989 EMPTY
‖IGN‖ wof:8
‖SCH‖ A9: @-3722 ○ start=-5074 dead:100000
!◆!plan...to:63 |curr=0 (max:64)
|n.(0,lev:0)
... dispose(i=0,lev:0) -> @0
‖•△•‖ wof:8 HT:11
‖SCH‖ A9: @-3553 ○ start=0 dead:10000
|n.(1,lev:1)
... dispose(i=1,lev:1) -> @1000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3474 ○ start=1000 dead:10000
|n.(2,lev:2)
... dispose(i=2,lev:2) -> @2000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3395 ○ start=2000 dead:10000
|n.(3,lev:2)
... dispose(i=3,lev:2) -> @2000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3330 ○ start=2000 dead:10000
|n.(4,lev:3)
... dispose(i=4,lev:3) -> @3000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3266 ○ start=3000 dead:10000
|n.(5,lev:3)
... dispose(i=5,lev:3) -> @3000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3201 ○ start=3000 dead:10000
|n.(6,lev:3)
... dispose(i=6,lev:3) -> @3000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3138 ○ start=3000 dead:10000
|n.(7,lev:4)
... dispose(i=7,lev:4) -> @4000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3074 ○ start=4000 dead:10000
|n.(8,lev:4)
... dispose(i=8,lev:4) -> @4000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-3012 ○ start=4000 dead:10000
|n.(9,lev:4)
... dispose(i=9,lev:4) -> @4000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2945 ○ start=4000 dead:10000
|n.(10,lev:4)
... dispose(i=10,lev:4) -> @4000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2879 ○ start=4000 dead:10000
|n.(11,lev:5)
... dispose(i=11,lev:5) -> @5000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2813 ○ start=5000 dead:10000
|n.(12,lev:5)
... dispose(i=12,lev:5) -> @5000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2749 ○ start=5000 dead:10000
|n.(13,lev:5)
... dispose(i=13,lev:5) -> @5000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2685 ○ start=5000 dead:10000
|n.(14,lev:5)
... dispose(i=14,lev:5) -> @5000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2623 ○ start=5000 dead:10000
|n.(15,lev:6)
... dispose(i=15,lev:6) -> @6000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2558 ○ start=6000 dead:10000
|n.(16,lev:6)
... dispose(i=16,lev:6) -> @6000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2496 ○ start=6000 dead:10000
|n.(17,lev:6)
... dispose(i=17,lev:6) -> @6000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2432 ○ start=6000 dead:10000
|n.(18,lev:6)
... dispose(i=18,lev:6) -> @6000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2369 ○ start=6000 dead:10000
|n.(19,lev:6)
... dispose(i=19,lev:6) -> @6000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2306 ○ start=6000 dead:10000
|n.(20,lev:7)
... dispose(i=20,lev:7) -> @7000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2241 ○ start=7000 dead:10000
|n.(21,lev:7)
... dispose(i=21,lev:7) -> @7000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2178 ○ start=7000 dead:10000
|n.(22,lev:7)
... dispose(i=22,lev:7) -> @7000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2113 ○ start=7000 dead:10000
|n.(23,lev:7)
... dispose(i=23,lev:7) -> @7000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-2052 ○ start=7000 dead:10000
|n.(24,lev:7)
... dispose(i=24,lev:7) -> @7000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1987 ○ start=7000 dead:10000
|n.(25,lev:8)
... dispose(i=25,lev:8) -> @8000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1921 ○ start=8000 dead:10000
|n.(26,lev:8)
... dispose(i=26,lev:8) -> @8000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1858 ○ start=8000 dead:10000
|n.(27,lev:8)
... dispose(i=27,lev:8) -> @8000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1791 ○ start=8000 dead:10000
|n.(28,lev:8)
... dispose(i=28,lev:8) -> @8000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1729 ○ start=8000 dead:10000
|n.(29,lev:8)
... dispose(i=29,lev:8) -> @8000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1645 ○ start=8000 dead:10000
|n.(30,lev:9)
... dispose(i=30,lev:9) -> @9000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1579 ○ start=9000 dead:10000
|n.(31,lev:9)
... dispose(i=31,lev:9) -> @9000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1516 ○ start=9000 dead:10000
|n.(32,lev:9)
... dispose(i=32,lev:9) -> @9000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1452 ○ start=9000 dead:10000
|n.(33,lev:9)
... dispose(i=33,lev:9) -> @9000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1391 ○ start=9000 dead:10000
|n.(34,lev:9)
... dispose(i=34,lev:9) -> @9000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1328 ○ start=9000 dead:10000
|n.(35,lev:10)
... dispose(i=35,lev:10) -> @10000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1267 ○ start=10000 dead:10000
|n.(36,lev:10)
... dispose(i=36,lev:10) -> @10000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1206 ○ start=10000 dead:10000
|n.(37,lev:10)
... dispose(i=37,lev:10) -> @10000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1131 ○ start=10000 dead:10000
|n.(38,lev:10)
... dispose(i=38,lev:10) -> @10000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1068 ○ start=10000 dead:10000
|n.(39,lev:10)
... dispose(i=39,lev:10) -> @10000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-1005 ○ start=10000 dead:10000
|n.(40,lev:11)
... dispose(i=40,lev:11) -> @11000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-940 ○ start=11000 dead:10000
|n.(41,lev:11)
... dispose(i=41,lev:11) -> @11000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-876 ○ start=11000 dead:10000
|n.(42,lev:11)
... dispose(i=42,lev:11) -> @11000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-812 ○ start=11000 dead:10000
|n.(43,lev:11)
... dispose(i=43,lev:11) -> @11000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-747 ○ start=11000 dead:10000
|n.(44,lev:11)
... dispose(i=44,lev:11) -> @11000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-683 ○ start=11000 dead:10000
|n.(45,lev:12)
... dispose(i=45,lev:12) -> @12000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-621 ○ start=12000 dead:10000
|n.(46,lev:12)
... dispose(i=46,lev:12) -> @12000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-560 ○ start=12000 dead:10000
|n.(47,lev:12)
... dispose(i=47,lev:12) -> @12000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-497 ○ start=12000 dead:10000
|n.(48,lev:12)
... dispose(i=48,lev:12) -> @12000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-436 ○ start=12000 dead:10000
|n.(49,lev:12)
... dispose(i=49,lev:12) -> @12000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-373 ○ start=12000 dead:10000
|n.(50,lev:13)
... dispose(i=50,lev:13) -> @13000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-309 ○ start=13000 dead:10000
|n.(51,lev:13)
... dispose(i=51,lev:13) -> @13000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-246 ○ start=13000 dead:10000
|n.(52,lev:13)
... dispose(i=52,lev:13) -> @13000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-183 ○ start=13000 dead:10000
|n.(53,lev:13)
... dispose(i=53,lev:13) -> @13000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-121 ○ start=13000 dead:10000
|n.(54,lev:13)
... dispose(i=54,lev:13) -> @13000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @-58 ○ start=13000 dead:10000
|n.(55,lev:14)
... dispose(i=55,lev:14) -> @14000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @3 ○ start=14000 dead:10000
|n.(56,lev:14)
... dispose(i=56,lev:14) -> @14000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @64 ○ start=14000 dead:10000
|n.(57,lev:14)
... dispose(i=57,lev:14) -> @14000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @127 ○ start=14000 dead:10000
|n.(58,lev:14)
... dispose(i=58,lev:14) -> @14000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @189 ○ start=14000 dead:10000
|n.(59,lev:14)
... dispose(i=59,lev:14) -> @14000
‖•△•‖ wof:8 HT:0
‖SCH‖ A9: @252 ○ start=14000 dead:10000
|n.(60,lev:15)
... dispose(i=60,lev:15) -> @15000
‖•△•‖ wof:8 HT:11
‖SCH‖ A9: @316 ○ start=15000 dead:10000
·‖ C0: @ 245 HT:11 -> ▶ 0
|n.(61,lev:15)
... dispose(i=61,lev:15) -> @15000
‖•△•‖ wof:8 HT:11
‖SCH‖ A9: @398 ○ start=15000 dead:10000
|n.(62,lev:15)
... dispose(i=62,lev:15) -> @15000
!◆! C0: calc(i=0, lev:0)
‖•△•‖ wof:8 HT:11
‖SCH‖ A9: @496 ○ start=15000 dead:10000
|n.(63,lev:16)
... dispose(i=63,lev:16) -> @16000
!◆! C0: calc(i=1, lev:1)
‖•△•‖ wof:8 HT:11
‖SCH‖ A9: @602 ○ start=16000 dead:10000
+++ A9: Continuation(lastNode=63, levelDone=16, work_left:false)
!◆! C0: calc(i=3, lev:2)
‖•△•‖ wof:8 HT:11
‖SCH‖ A9: @692 ○ start=17000 dead:100000
!◆! C0: calc(i=6, lev:3)
!◆! C0: calc(i=10, lev:4)
!◆! C0: calc(i=14, lev:5)
!◆! C0: calc(i=19, lev:6)
·‖ C0: @ 1003 HT:1000 -> ▶ 11
‖▷▷▷‖ C0: @ 1044 HT:1000
·‖ C0: @ 1121 HT:2000 -> ▶ 1000
·‖ C0: @ 2079 HT:2000 -> ▶ 2000
·‖ C0: @ 2126 HT:3000 -> ▶ 2000
!◆! C0: calc(i=2, lev:2)
!◆! C0: calc(i=4, lev:3)
·‖ C0: @ 3084 HT:3000 -> ▶ 3000
!◆! C0: calc(i=5, lev:3)
!◆! C0: calc(i=8, lev:4)
·‖ C0: @ 3264 HT:3000 -> ▶ 3000
·‖ C0: @ 3293 HT:4000 -> ▶ 3000
·‖ C0: @ 4101 HT:4000 -> ▶ 4000
·‖ C0: @ 4142 HT:4000 -> ▶ 4000
!◆! C0: calc(i=9, lev:4)
!◆! C0: calc(i=12, lev:5)
·‖ C0: @ 4276 HT:4000 -> ▶ 4000
·‖ C0: @ 4304 HT:5000 -> ▶ 4000
!◆! C0: calc(i=7, lev:4)
!◆! C0: calc(i=11, lev:5)
!◆! C0: calc(i=16, lev:6)
·‖ C0: @ 5065 HT:5000 -> ▶ 5000
!◆! C0: calc(i=13, lev:5)
!◆! C0: calc(i=18, lev:6)
!◆! C0: calc(i=23, lev:7)
·‖ C0: @ 5228 HT:5000 -> ▶ 5000
·‖ C0: @ 5256 HT:5000 -> ▶ 5000
·‖ C0: @ 5282 HT:6000 -> ▶ 5000
·‖ C0: @ 6070 HT:6000 -> ▶ 6000
·‖ C0: @ 6112 HT:6000 -> ▶ 6000
·‖ C0: @ 6138 HT:6000 -> ▶ 6000
!◆! C0: calc(i=17, lev:6)
!◆! C0: calc(i=21, lev:7)
·‖ C0: @ 6292 HT:6000 -> ▶ 6000
·‖ 64: @ 6285 HT:6000 -> ∘
·‖ C0: @ 6324 HT:7000 -> ▶ 6000
!◆! C0: calc(i=15, lev:6)
!◆! C0: calc(i=20, lev:7)
!◆! C0: calc(i=26, lev:8)
·‖ 64: @ 7086 HT:7000 -> ▶ 7000
!◆! 64: calc(i=24, lev:7)
!◆! 64: calc(i=29, lev:8)
·‖ 64: @ 7235 HT:7000 -> ▶ 7000
·‖ 64: @ 7262 HT:7000 -> ▶ 7000
!◆! 64: calc(i=22, lev:7)
!◆! 64: calc(i=28, lev:8)
!◆! 64: calc(i=33, lev:9)
·‖ 64: @ 7414 HT:7000 -> ▶ 7000
·‖ 64: @ 7441 HT:8000 -> ▶ 7000
·‖ 64: @ 8078 HT:8000 -> ▶ 8000
·‖ 64: @ 8111 HT:8000 -> ▶ 8000
·‖ 64: @ 8137 HT:8000 -> ▶ 8000
!◆! 64: calc(i=27, lev:8)
!◆! 64: calc(i=31, lev:9)
·‖ 64: @ 8275 HT:8000 -> ▶ 8000
·‖ 64: @ 8301 HT:9000 -> ▶ 8000
!◆! 64: calc(i=25, lev:8)
!◆! 64: calc(i=30, lev:9)
!◆! 64: calc(i=36, lev:10)
·‖ 64: @ 9076 HT:9000 -> ▶ 9000
!◆! 64: calc(i=34, lev:9)
!◆! 64: calc(i=39, lev:10)
·‖ 64: @ 9207 HT:9000 -> ▶ 9000
·‖ 64: @ 9234 HT:9000 -> ▶ 9000
!◆! 64: calc(i=32, lev:9)
!◆! 64: calc(i=38, lev:10)
·‖ 34: @ 9314 HT:9000 -> ▶ 9000
·‖ 64: @ 9359 HT:9000 -> ∘
·‖ 64: @ 9379 HT:9347 -> ∘
·‖ 34: @ 9378 HT:9347 -> ▶ 9000
·‖ 64: @ 9400 HT:9347 -> ∘
·‖ 34: @ 9412 HT:10000 -> ▶ 9347
!◆! 34: calc(i=43, lev:11)
·‖ 64: @ 10074 HT:10000 -> ▶ 10000
·‖ 64: @ 10117 HT:10000 -> ▶ 10000
·‖ 64: @ 10135 HT:10000 -> ▶ 10000
·‖ 64: @ 10151 HT:10000 -> ▶ 10000
!◆! 64: calc(i=35, lev:10)
!◆! 64: calc(i=40, lev:11)
·‖ 64: @ 10273 HT:11000 -> ▶ 10000
!◆! 64: calc(i=37, lev:10)
!◆! 64: calc(i=41, lev:11)
!◆! 64: calc(i=46, lev:12)
·‖ 45: @ 11091 HT:11000 -> ▶ 11000
·‖ 45: @ 11162 HT:11000 -> ▶ 11000
!◆! 45: calc(i=44, lev:11)
!◆! 45: calc(i=49, lev:12)
·‖ 45: @ 11320 HT:11000 -> ▶ 11000
·‖ C0: @ 11344 HT:11000 -> ∘
·‖ 45: @ 11352 HT:11000 -> ▶ 11000
·‖ C0: @ 11380 HT:11000 -> ∘
·‖ 45: @ 11394 HT:12000 -> ▶ 11000
!◆! 45: calc(i=42, lev:11)
!◆! 45: calc(i=48, lev:12)
!◆! 45: calc(i=53, lev:13)
·‖ 78: @ 12029 HT:12000 -> ▶ 12000
·‖ 78: @ 12073 HT:12000 -> ▶ 12000
·‖ C0: @ 12082 HT:12000 -> ∘
·‖ 78: @ 12096 HT:12000 -> ▶ 12000
·‖ C0: @ 12124 HT:12000 -> ∘
·‖ C0: @ 12146 HT:12000 -> ▶ 12000
!◆! 78: calc(i=47, lev:12)
!◆! 78: calc(i=51, lev:13)
!◆! C0: calc(i=45, lev:12)
·‖ 78: @ 12244 HT:13000 -> ▶ 12000
·‖ 78: @ 12276 HT:13000 -> ▶ 12258
·‖ C0: @ 12275 HT:12258 -> ∘
!◆! 78: calc(i=50, lev:13)
!◆! 78: calc(i=56, lev:14)
·‖ C0: @ 13070 HT:13000 -> ▶ 13000
·‖ C0: @ 13106 HT:13000 -> ▶ 13000
!◆! C0: calc(i=52, lev:13)
!◆! C0: calc(i=58, lev:14)
·‖ 34: @ 13232 HT:13000 -> ∘
·‖ C0: @ 13232 HT:13000 -> ▶ 13000
·‖ 34: @ 13262 HT:13000 -> ∘
·‖ 34: @ 13283 HT:13000 -> ▶ 13000
!◆! C0: calc(i=54, lev:13)
·‖ 34: @ 13304 HT:14000 -> ▶ 13000
!◆! C0: calc(i=59, lev:14)
!◆! C0: calc(i=62, lev:15)
·‖ 78: @ 14002 HT:14000 -> ▶ 14000
!◆! 78: calc(i=57, lev:14)
·‖ 34: @ 14078 HT:14000 -> ▶ 14000
·‖ 78: @ 14104 HT:14000 -> ∘
·‖ 78: @ 14126 HT:14000 -> ▶ 14000
·‖ 78: @ 14146 HT:14000 -> ▶ 14000
!◆! 34: calc(i=55, lev:14)
·‖ 78: @ 14194 HT:14094 -> ▶ 14000
·‖ 34: @ 14195 HT:14094 -> ∘
·‖ 78: @ 14221 HT:14184 -> ▶ 14094
·‖ 34: @ 14232 HT:14184 -> ∘
!◆! 78: calc(i=61, lev:15)
·‖ 34: @ 14253 HT:15000 -> ▶ 14184
!◆! 34: calc(i=60, lev:15)
·‖ 34: @ 14369 HT:15000 -> ▶ 14296
!◆! 34: calc(i=63, lev:16)
·‖ 78: @ 15155 HT:15000 -> ▶ 15000
·‖ 78: @ 15254 HT:15000 -> ▶ 15000
·‖ 78: @ 15279 HT:16000 -> ▶ 15000
·‖ C1: @ 16001 HT:17000 -> ▶ 16000
·‖ C1: @ 17146 HT:51044 -> ▶ 17000
#--◆--# offset() ? = 23800
#--◆--# testLoad.getHash() ? = 5982496738762178821
‖▽▼▽‖ 45: @ 18088
‖▽▼▽‖ 78: @ 18119
‖▽▼▽‖ DE: @ 18588‖▽▼▽‖ 79: @ 18588
‖▽▼▽‖ 34: @ 19260
‖▽▼▽‖ 64: @ 20297
‖▽▼▽‖ C0: @ 20638
‖▽▼▽‖ C1: @ 51390

View file

@ -0,0 +1,497 @@
invokeTestCase: ++------------------- invoking TEST: vault::gear::test::TestChainLoad_test
#--◆--# offset() ? = 696
#--◆--# testLoad.getHash() ? = 5982496738762178821
#--◆--# offset() ? = 987
+++ 7D: seed(num:64)
ANCHOR=0 preRoll=200
‖▷▷▷‖ 7D: @ -69 EMPTY
‖IGN‖ wof:8
‖SCH‖ 7D: @1164 ○ start=-155 dead:100000
!◆!plan...to:63 |curr=0 (max:64)
|n.(0,lev:0)
... dispose(i=0,lev:0) -> @0
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1345 ○ start=0 dead:10000
!◆! 7D: calc(i=0, lev:0)
|n.(1,lev:1)
... dispose(i=1,lev:1) -> @1000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1457 ○ start=1000 dead:10000
!◆! 7D: calc(i=1, lev:1)
|n.(2,lev:2)
... dispose(i=2,lev:2) -> @2000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1553 ○ start=2000 dead:10000
|n.(3,lev:2)
... dispose(i=3,lev:2) -> @2000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1617 ○ start=2000 dead:10000
|n.(4,lev:3)
... dispose(i=4,lev:3) -> @3000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1681 ○ start=3000 dead:10000
|n.(5,lev:3)
... dispose(i=5,lev:3) -> @3000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1742 ○ start=3000 dead:10000
|n.(6,lev:3)
... dispose(i=6,lev:3) -> @3000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1807 ○ start=3000 dead:10000
|n.(7,lev:4)
... dispose(i=7,lev:4) -> @4000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1872 ○ start=4000 dead:10000
|n.(8,lev:4)
... dispose(i=8,lev:4) -> @4000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @1935 ○ start=4000 dead:10000
|n.(9,lev:4)
... dispose(i=9,lev:4) -> @4000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2000 ○ start=4000 dead:10000
|n.(10,lev:4)
... dispose(i=10,lev:4) -> @4000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2067 ○ start=4000 dead:10000
|n.(11,lev:5)
... dispose(i=11,lev:5) -> @5000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2133 ○ start=5000 dead:10000
|n.(12,lev:5)
... dispose(i=12,lev:5) -> @5000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2200 ○ start=5000 dead:10000
|n.(13,lev:5)
... dispose(i=13,lev:5) -> @5000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2264 ○ start=5000 dead:10000
|n.(14,lev:5)
... dispose(i=14,lev:5) -> @5000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2327 ○ start=5000 dead:10000
|n.(15,lev:6)
... dispose(i=15,lev:6) -> @6000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2394 ○ start=6000 dead:10000
|n.(16,lev:6)
... dispose(i=16,lev:6) -> @6000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2462 ○ start=6000 dead:10000
|n.(17,lev:6)
... dispose(i=17,lev:6) -> @6000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2527 ○ start=6000 dead:10000
|n.(18,lev:6)
... dispose(i=18,lev:6) -> @6000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2590 ○ start=6000 dead:10000
|n.(19,lev:6)
... dispose(i=19,lev:6) -> @6000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2655 ○ start=6000 dead:10000
|n.(20,lev:7)
... dispose(i=20,lev:7) -> @7000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2720 ○ start=7000 dead:10000
|n.(21,lev:7)
... dispose(i=21,lev:7) -> @7000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2785 ○ start=7000 dead:10000
|n.(22,lev:7)
... dispose(i=22,lev:7) -> @7000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2850 ○ start=7000 dead:10000
|n.(23,lev:7)
... dispose(i=23,lev:7) -> @7000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2913 ○ start=7000 dead:10000
|n.(24,lev:7)
... dispose(i=24,lev:7) -> @7000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @2979 ○ start=7000 dead:10000
|n.(25,lev:8)
... dispose(i=25,lev:8) -> @8000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3045 ○ start=8000 dead:10000
|n.(26,lev:8)
... dispose(i=26,lev:8) -> @8000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3107 ○ start=8000 dead:10000
|n.(27,lev:8)
... dispose(i=27,lev:8) -> @8000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3179 ○ start=8000 dead:10000
|n.(28,lev:8)
... dispose(i=28,lev:8) -> @8000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3243 ○ start=8000 dead:10000
|n.(29,lev:8)
... dispose(i=29,lev:8) -> @8000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3308 ○ start=8000 dead:10000
|n.(30,lev:9)
... dispose(i=30,lev:9) -> @9000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3372 ○ start=9000 dead:10000
|n.(31,lev:9)
... dispose(i=31,lev:9) -> @9000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3438 ○ start=9000 dead:10000
|n.(32,lev:9)
... dispose(i=32,lev:9) -> @9000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3503 ○ start=9000 dead:10000
|n.(33,lev:9)
... dispose(i=33,lev:9) -> @9000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3566 ○ start=9000 dead:10000
|n.(34,lev:9)
... dispose(i=34,lev:9) -> @9000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3632 ○ start=9000 dead:10000
|n.(35,lev:10)
... dispose(i=35,lev:10) -> @10000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3699 ○ start=10000 dead:10000
|n.(36,lev:10)
... dispose(i=36,lev:10) -> @10000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3764 ○ start=10000 dead:10000
|n.(37,lev:10)
... dispose(i=37,lev:10) -> @10000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3829 ○ start=10000 dead:10000
|n.(38,lev:10)
... dispose(i=38,lev:10) -> @10000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3892 ○ start=10000 dead:10000
|n.(39,lev:10)
... dispose(i=39,lev:10) -> @10000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @3960 ○ start=10000 dead:10000
|n.(40,lev:11)
... dispose(i=40,lev:11) -> @11000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4026 ○ start=11000 dead:10000
|n.(41,lev:11)
... dispose(i=41,lev:11) -> @11000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4091 ○ start=11000 dead:10000
|n.(42,lev:11)
... dispose(i=42,lev:11) -> @11000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4155 ○ start=11000 dead:10000
|n.(43,lev:11)
... dispose(i=43,lev:11) -> @11000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4221 ○ start=11000 dead:10000
|n.(44,lev:11)
... dispose(i=44,lev:11) -> @11000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4287 ○ start=11000 dead:10000
|n.(45,lev:12)
... dispose(i=45,lev:12) -> @12000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4351 ○ start=12000 dead:10000
|n.(46,lev:12)
... dispose(i=46,lev:12) -> @12000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4414 ○ start=12000 dead:10000
|n.(47,lev:12)
... dispose(i=47,lev:12) -> @12000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4482 ○ start=12000 dead:10000
|n.(48,lev:12)
... dispose(i=48,lev:12) -> @12000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4545 ○ start=12000 dead:10000
|n.(49,lev:12)
... dispose(i=49,lev:12) -> @12000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4611 ○ start=12000 dead:10000
|n.(50,lev:13)
... dispose(i=50,lev:13) -> @13000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4675 ○ start=13000 dead:10000
|n.(51,lev:13)
... dispose(i=51,lev:13) -> @13000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4738 ○ start=13000 dead:10000
|n.(52,lev:13)
... dispose(i=52,lev:13) -> @13000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4802 ○ start=13000 dead:10000
|n.(53,lev:13)
... dispose(i=53,lev:13) -> @13000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4869 ○ start=13000 dead:10000
|n.(54,lev:13)
... dispose(i=54,lev:13) -> @13000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @4935 ○ start=13000 dead:10000
|n.(55,lev:14)
... dispose(i=55,lev:14) -> @14000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @5001 ○ start=14000 dead:10000
|n.(56,lev:14)
... dispose(i=56,lev:14) -> @14000
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @5068 ○ start=14000 dead:10000
|n.(57,lev:14)
... dispose(i=57,lev:14) -> @14000
‖•△•‖ wof:8 HT:2000
‖SCH‖ 7D: @5134 ○ start=14000 dead:10000
|n.(58,lev:14)
... dispose(i=58,lev:14) -> @14000
‖•△•‖ wof:8 HT:2000
‖SCH‖ 7D: @5196 ○ start=14000 dead:10000
|n.(59,lev:14)
... dispose(i=59,lev:14) -> @14000
‖•△•‖ wof:8 HT:2000
·‖ AF: @ 5179 HT:2000 -> ▶ 2000
‖SCH‖ 7D: @5263 ○ start=14000 dead:10000
|n.(60,lev:15)
... dispose(i=60,lev:15) -> @15000
‖•△•‖ wof:8 HT:2000
‖SCH‖ 7D: @5375 ○ start=15000 dead:10000
!◆! AF: calc(i=2, lev:2) |n.(61,lev:15)
... dispose(i=61,lev: ·‖ 30: @ 5445 HT:3000 -> ▶ 200015
) -> @15000
‖•△•‖ wof:8 HT:3000 ·‖ 30: @ 5475 HT:3000 -> ▶ 3000
‖SCH‖ 7D: @5499 ○ start=15000 dead:10000
·‖ AF: @ 5467 HT:3000 -> ∘
·‖ 30: @ 5532 HT:3000 -> ▶ 3000
|n.(62,lev:15) ·‖ 30: @ 5555 HT:4000 -> ▶ 3000
·‖ AF: @ 5569 HT:4000 -> ∘
... dispose(i=62,lev:15) -> @15000
!◆! 30: calc(i=5, lev:3)
‖•△•‖ wof:8 HT:4000 ·‖ AF: @ 5611 HT:4000 -> ▶ 4000
·‖ 30: @ 5640 HT:4000 -> ∘
‖SCH‖ 7D: @5651 ○ start=15000 dead:10000
·‖ 30: @ 5656 HT:4000 -> ∘
·‖ 30: @ 5692 HT:4000 -> ▶ 4000
|n.(63,lev:16)
·‖ 30: @ 5715 HT:4000 -> ▶ 4000
!◆! ·‖ 30: @ 5739 HT:4931 -> ▶ 4000
AF: calc(i=7, lev:4)
!◆! ... dispose(i=63,lev:16) -> @16000
30: calc(i=9, lev:4)
·‖ 30: @ 5806 HT:4931 -> ∘
‖•△•‖ wof:8 HT:4931
‖SCH‖ 7D: @5824 ○ start=16000 dead:10000
·‖ 30: @ 5824 HT:5000 -> ▶ 4931
‖▷▷▷‖ 30: @ 5843 HT:5000
!◆! AF: calc(i=11, lev:5)
+++ 7D: Continuation(lastNode=63, levelDone=16, work_left:false)
·‖ 30: @ 5887 HT:5000 -> ▶ 5000
·‖ 30: @ 5907 HT:5000 -> ▶ 5000
·‖ AF: @ 5908 HT:5000 -> ∘
‖•△•‖ wof:8 HT:5000
!◆! 30: calc(i=13, lev:5)
·‖ 30: @ 5969 HT:5000 -> ∘‖SCH‖ 7D: @5968 ○ start=17000 dead:100000 ·‖ AF: @ 5952 HT:5000 -> ▶ 5000
·‖ 30: @ 6018 HT:5000 -> ∘
·‖ 30: @ 6032 HT:5440 -> ∘
·‖ AF: @ 6023 HT:5440 -> ▶ 5000
·‖ 30: @ 6047 HT:5440 -> ∘
·‖ 30: @ 6073 HT:5440 -> ∘
·‖ 30: @ 6086 HT:5633 -> ∘
·‖ AF: @ 6073 HT:5633 -> ▶ 5440
·‖ 30: @ 6103 HT:5633 -> ∘
·‖ 30: @ 6132 HT:5800 -> ▶ 5633
·‖ 30: @ 6148 HT:5893 -> ▶ 5800
!◆! AF: calc(i=4, lev:3)
!◆! 30: calc(i=12, lev:5)
·‖ 30: @ 6218 HT:5962 -> ▶ 5893
!◆! 30: calc(i=16, lev:6)
!◆! AF: calc(i=8, lev:4)
·‖ 30: @ 6258 HT:6000 -> ▶ 5962
!◆! 30: calc(i=18, lev:6)
·‖ 30: @ 6336 HT:6000 -> ∘
·‖ AF: @ 6315 HT:6000 -> ▶ 6000
·‖ 30: @ 6353 HT:6000 -> ∘
·‖ 30: @ 6380 HT:6000 -> ▶ 6000
·‖ 30: @ 6398 HT:6000 -> ▶ 6000
·‖ 30: @ 6413 HT:6000 -> ▶ 6000
!◆! AF: calc(i=15, lev:6)
!◆! 30: calc(i=17, lev:6)
!◆! 30: calc(i=21, lev:7)
·‖ 30: @ 6482 HT:6331 -> ▶ 6000
·‖ 30: @ 6498 HT:7000 -> ▶ 6331
!◆! AF: calc(i=20, lev:7)
!◆! AF: calc(i=26, lev:8)
·‖ 30: @ 7069 HT:7000 -> ▶ 7000
!◆! 30: calc(i=24, lev:7)
!◆! 30: calc(i=29, lev:8)
·‖ 30: @ 7153 HT:7000 -> ▶ 7000
·‖ 30: @ 7168 HT:7000 -> ▶ 7000
!◆! 30: calc(i=22, lev:7)
!◆! 30: calc(i=28, lev:8)
!◆! 30: calc(i=33, lev:9)
·‖ 30: @ 7256 HT:7000 -> ▶ 7000
·‖ 30: @ 7272 HT:8000 -> ▶ 7000
·‖ 30: @ 8057 HT:8000 -> ▶ 8000
·‖ 30: @ 8084 HT:8000 -> ▶ 8000
!◆! 30: calc(i=27, lev:8)
!◆! 30: calc(i=31, lev:9)
·‖ 30: @ 8159 HT:8000 -> ▶ 8000
!◆! 30: calc(i=25, lev:8)
!◆! 30: calc(i=30, lev:9)
!◆! 30: calc(i=36, lev:10)
·‖ 30: @ 8246 HT:8000 -> ▶ 8000
·‖ D9: @ 8246 HT:8000 -> ∘
·‖ D9: @ 8268 HT:9000 -> ∘ ·‖ 30: @ 8267 HT:9000 -> ▶ 8000
·‖ 30: @ 9069 HT:9000 -> ▶ 9000
·‖ 30: @ 9099 HT:9000 -> ▶ 9000
·‖ 30: @ 9113 HT:9000 -> ▶ 9000
!◆! 30: calc(i=34, lev:9)
!◆! 30: calc(i=39, lev:10)
·‖ 30: @ 9187 HT:9000 -> ▶ 9000
·‖ 30: @ 9202 HT:10000 -> ▶ 9000
!◆! 30: calc(i=32, lev:9)
!◆! 30: calc(i=38, lev:10)
!◆! 30: calc(i=43, lev:11)
·‖ 30: @ 10069 HT:10000 -> ▶ 10000
·‖ 30: @ 10099 HT:10000 -> ▶ 10000
·‖ 30: @ 10121 HT:10000 -> ▶ 10000
·‖ 30: @ 10135 HT:10000 -> ▶ 10000
!◆! 30: calc(i=37, lev:10)
!◆! 30: calc(i=41, lev:11)
·‖ 30: @ 10206 HT:11000 -> ▶ 10000
!◆! 30: calc(i=35, lev:10)
!◆! 30: calc(i=40, lev:11)
!◆! 30: calc(i=46, lev:12)
·‖ F8: @ 11005 HT:11000 -> ▶ 11000
·‖ F8: @ 11090 HT:11000 -> ▶ 11000
!◆! F8: calc(i=44, lev:11)
·‖ 30: @ 11140 HT:11000 -> ▶ 11000
·‖ F8: @ 11259 HT:11000 -> ∘
·‖ 30: @ 11286 HT:11000 -> ▶ 11000
·‖ F8: @ 11300 HT:11000 -> ∘
·‖ F8: @ 11369 HT:11242 -> ▶ 11000
!◆! 30: calc(i=42, lev:11)
·‖ F8: @ 11415 HT:12000 -> ▶ 11242
!◆! F8: calc(i=49, lev:12)
·‖ F8: @ 11624 HT:12000 -> ▶ 11484
!◆! F8: calc(i=48, lev:12)
!◆! F8: calc(i=53, lev:13)
·‖ 30: @ 12071 HT:12000 -> ∘
·‖ B5: @ 12062 HT:12000 -> ▶ 12000
·‖ 30: @ 12114 HT:12000 -> ∘
·‖ B5: @ 12134 HT:12000 -> ▶ 12000
·‖ 30: @ 12146 HT:12000 -> ∘
·‖ B5: @ 12161 HT:12000 -> ▶ 12000
·‖ 30: @ 12177 HT:12000 -> ∘
·‖ B5: @ 12184 HT:12000 -> ▶ 12000
·‖ 30: @ 12212 HT:12000 -> ∘
·‖ 30: @ 12242 HT:13000 -> ▶ 12000
!◆! B5: calc(i=47, lev:12)
!◆! B5: calc(i=51, lev:13)
!◆! 30: calc(i=45, lev:12)
!◆! 30: calc(i=50, lev:13)
!◆! 30: calc(i=56, lev:14)
·‖ B5: @ 13074 HT:13000 -> ▶ 13000
·‖ B5: @ 13112 HT:13000 -> ▶ 13000
!◆! B5: calc(i=54, lev:13)
!◆! B5: calc(i=59, lev:14)
·‖ B5: @ 13228 HT:13000 -> ▶ 13000
!◆! B5: calc(i=52, lev:13)
!◆! B5: calc(i=58, lev:14)
!◆! B5: calc(i=62, lev:15)
·‖ B5: @ 13370 HT:13000 -> ▶ 13000
·‖ B5: @ 13392 HT:14000 -> ▶ 13000
·‖ B5: @ 14072 HT:14000 -> ▶ 14000
!◆! B5: calc(i=57, lev:14)
!◆! B5: calc(i=61, lev:15)
·‖ B5: @ 14197 HT:14000 -> ▶ 14000
!◆! B5: calc(i=55, lev:14)
!◆! B5: calc(i=60, lev:15)
!◆! B5: calc(i=63, lev:16)
·‖ B5: @ 14335 HT:14000 -> ▶ 14000
·‖ B5: @ 14358 HT:14000 -> ▶ 14000
·‖ B5: @ 14380 HT:15000 -> ▶ 14000
·‖ B5: @ 15075 HT:15000 -> ▶ 15000
·‖ B5: @ 15108 HT:15000 -> ▶ 15000
·‖ B5: @ 15130 HT:16000 -> ▶ 15000
·‖ B5: @ 16073 HT:17000 -> ▶ 16000
·‖ B5: @ 17073 HT:55843 -> ▶ 17000
#--◆--# offset() ? = 18790
#--◆--# testLoad.getHash() ? = 5982496738762178821
‖▽▼▽‖ D9: @ 18649
‖▽▼▽‖ 7F: @ 18717
‖▽▼▽‖ 8D: @ 20825
‖▽▼▽‖ F8: @ 20915
‖▽▼▽‖ 77: @ 20905
‖▽▼▽‖ 30: @ 37252
‖▽▼▽‖ AF: @ 37390
‖▽▼▽‖ B5: @ 55965

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,74 @@
Scheduler Integration Testing
-----------------------------
:date: 2023-12-09
After successfully completing the unit tests for the newly built scheduler,
the next goal was to get some complete integration test runs. Moreover,
in preparation for Load Testing, the `TestChainLoad` was developed,
which is a generator for artificial yet reproducivle test calculations.
This component generates a graph of interconnected nodes, where each
node will be invoked as an individual render job. However, nodes can
have predecessors and successors; in order to calculate a node's hash value,
the hash values of all predecessors must have been calculated.
In order to see what is happening in the scheduler and the job functors
generated by `TestChainLoad::setupSchedule()`, some print statements were
added temporarily. Together, these generate a trace to indicate all planning,
scheduling and dispatching events, together with an abbreviated thread-ID
and a time relative to the first scheduler time encountered during this
test run. There is a changeset in the Git history which _removes_ all
these print statements -- and by reverting this git commit, it should be
possible to re-introduce this simplistic instrumentation.
This directory documents some Dump-Logs and detail findings from the
Debugging- and Investigation-Sessions done at that time.
.TestChainLoad_test::usageExample
Generally speaking, this test presents a slightly unusal load.
It is comprised of peaks -- one for _each level of the graph_ -- each
requiring typically 5 jobs to be calculated, all with the same start time.
The graph is composed of small join-trees, 2-3 nodes deep, which are started
interleaved. In the version used here, the actual calculations produce no
tangible CPU load and thus the job processing is absolutely dominated by
the scheduler management overhead. Several workers, pulling concurrently,
may create a slowdown due to contention on the »Grooming-Token«
Dump-01::
example of a nice and clean run
Dump-02::
example of a run with insufficient planning pre-roll;
while some nodes miss their prerequisite calculations,
overall the Scheduler copes quite well.
+
- only two workers show up after the schedule of the first tick
- these manage to work through the initial backlog (...5000) in 900µs
- then the tick runs, and then the backlog is done after 1500µs
- now scheduling is ahead of schedule, causing mostly a single worker
to do the complete work.
- occasionally a second worker shows up, but the contention does not
cause much (if any) delay
- typically one _level_ is comprised of 5 jobs with the same start time,
and these are completed after ~300µs
Dump-03::
A test run with drastic failure
+
- seemingly, a larger fraction of the work capacity shows up simulatnously,
roughly at t ≈ 5000µs
- likewise by accident, at that point the planning is already mostly complete
- massive contention can be observed between the workers attempting to work
through the backlog, but (probably due to this contention) are never able
to catch up.
- final wake-up job is scheduled for t = 17000µs
- it is actually invoked at ≈ 27000µs (~10ms late), wakes up the main (test)
thread, which then aborts, since the final exit hash is still 0.
- notably there are very long stretches where a single thread repeatedly
attempts to acquire the GroomingToken, yet fails, while no other progress
can be seen in the log
- moreover the "now" times reported for various threads differ drastically,
and there is quite some contradiction to the order in which the dump strings
appear in the log. This _may hint at additional contention generated by the
dump output itself...._

1
doc/devel/dump/DIR_INFO Normal file
View file

@ -0,0 +1 @@
Dumps, Logs and supplementary material from Research and Development

View file

@ -101474,16 +101474,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
<node CREATED="1702080463433" ID="ID_479353313" MODIFIED="1702080490992">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
targetNode : bis einschie&#223;lich diese Node-ID soll <i>mindestens </i>behandelt werden
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1702080491692" ID="ID_843468561" MODIFIED="1702080505366" TEXT="es wird aber stets auch noch der aktuelle Level komplett abgeschlossen"/>
<node CREATED="1702080506898" ID="ID_1648828975" MODIFIED="1702080525979" TEXT="f&#xfc;r den Level die bestehenden Logik weiterverwenden (sie funktioniert gut)"/>
@ -101571,16 +101568,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node COLOR="#338800" CREATED="1702009861440" ID="ID_233239535" MODIFIED="1702012038929">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
so einen Job auf den Level <i>nach dem </i>letzten Level setzen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1702012060672" ID="ID_1038613808" MODIFIED="1702094473135" TEXT="Level-Berechnung pr&#xe4;ziser machen">
@ -101941,44 +101935,381 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<font BOLD="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1702012154333" ID="ID_914050434" MODIFIED="1702012172820" TEXT="bisweilen starke Contention">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702012154333" ID="ID_914050434" MODIFIED="1702075271691" TEXT="bisweilen starke Contention">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1702012175699" ID="ID_247790637" MODIFIED="1702012199043" TEXT="im Besonderen wenn die ganze WorkForce kurz nach dem Tick geballt auftaucht"/>
<node CREATED="1702012202351" ID="ID_622532522" MODIFIED="1702012248862" TEXT="hat in einem Fall 5ms gedauert, bis sich der Dispatch bis an den Schedule gearbeitet hat"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702012419402" ID="ID_2703596" MODIFIED="1702012432142" TEXT="unklar: ist der Umgang mit der Contention effizient / ineffizient?">
<node COLOR="#435e98" CREATED="1702012419402" ID="ID_2703596" MODIFIED="1702075109191" TEXT="unklar: ist der Umgang mit der Contention effizient / ineffizient?">
<icon BUILTIN="help"/>
<node CREATED="1702068730383" ID="ID_939170295" MODIFIED="1702068733719" TEXT="Beobachtungen">
<node CREATED="1702068734834" ID="ID_1770589762" MODIFIED="1702068748470" TEXT="die Contention tritt (nur) auf beim Abarbeiten eines &#xbb;backlog&#xab;"/>
<node CREATED="1702068759779" ID="ID_268181589" MODIFIED="1702068769940" TEXT="Beobachtung mit Thread-IDs: es arbeitet nur ein Thread"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702068774514" ID="ID_580046199" MODIFIED="1702068799476" TEXT="und zwar immer dann, wenn Dispatch am Gate scheitert">
<icon BUILTIN="idea"/>
<node CREATED="1702068801723" ID="ID_1736399299" MODIFIED="1702068806933" TEXT="works as designed">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1702012250472" ID="ID_1150173173" MODIFIED="1702012269620">
<node CREATED="1702068807986" ID="ID_1662501304" MODIFIED="1702068924405" TEXT="Grooming-Token not dropped">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das Grooming-Token wird erst im WORKSTART gedroppt. Soweit kommen wir hier gar nicht, weil das Gate fr&#252;her steht
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702068821865" ID="ID_215221486" MODIFIED="1702068853168" TEXT="d.h. solange solche Ketten &#x201e;gekl&#xe4;rt werden&#x201c;...."/>
<node CREATED="1702068853828" ID="ID_1992217773" MODIFIED="1702068870210">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
arbeitet <b>nur ein</b>&#160;Thread <b>exclusiv</b>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node CREATED="1702068928011" ID="ID_1650094334" MODIFIED="1702068946382">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<i>dieser Fall:</i>&#160;ja das ist <b>sinnvoll</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
<node CREATED="1702068949226" ID="ID_202762302" MODIFIED="1702068971417" TEXT="Pr&#xfc;fen bist zum gesprerrten Gate: 20&#xb5;s (DEBUG)"/>
<node CREATED="1702069013845" ID="ID_1925675289" MODIFIED="1702069089479" TEXT="das ist ordentlich schnell .. und der Cache wird so hei&#xdf; gehalten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
habe ja schon mehrfach beobachtet, da&#223; Cache-Effekte +100&#181;s bewirken k&#246;nnen. Insofern macht es absolut keinen Sinn, mehr als einen Thread in diese Zone reinzulassen, mit intensiver Queue-Interaktion
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702069336764" ID="ID_1848679418" MODIFIED="1702071300114" TEXT="tats&#xe4;chliches Ausf&#xfc;hren und dann n&#xe4;cshten Job: 80-100&#xb5;s">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
80&#181;s f&#252;r die reine Ausf&#252;hrung, wenn danach das Grooming-Token nicht wieder elangt werden kann (denn das dauert 20&#181;s)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702071423500" ID="ID_745272965" MODIFIED="1702071481360" TEXT="Ausf&#xfc;hren bis zum Groming-Token-dropping : 30&#xb5;s">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das ist dann die Karenz-Zeit, nach der ein anderer Thread zum Zuge kommen k&#246;nnte (der braucht aber auch noch mal 20&#181;s um das Token zu erlangen
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702069435991" ID="ID_948080315" MODIFIED="1702069558929" TEXT="Vermutung/Sch&#xe4;tzung: Erlangen des Grooming-Token: 20&#xb5;s">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das interpoliere ich aus mehreren Abl&#228;ufen, wo sich jeweils eine Verz&#246;gerung in dem vorher festen poll-Zyklus zeigt, und zwar genau, wenn ein bisher erfolgloser Thread zum Zuge kommt (also an dem Punkt das Grooming-Token erlangt haben mu&#223;)
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702069169003" ID="ID_1101741786" MODIFIED="1702069220047" TEXT="zum Vergleich: eine poll-Loop hat einen Zyklus von 15&#xb5;s hier">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
also reinkommen, am Grooming-Token scheitern, rausfallen wieder reinkommen
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1702074961019" ID="ID_500366416" MODIFIED="1702075105453" TEXT="Schlu&#xdf;folgerungen">
<icon BUILTIN="forward"/>
<node CREATED="1702074967698" ID="ID_554014285" MODIFIED="1702075070363">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
f&#252;r den Zeithorizont &lt; 100&#181;s ist es <b>sinnlos</b>, nach <b>Parallelisierung</b>&#160; zu streben
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702075000133" ID="ID_999152455" MODIFIED="1702075099504">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<i>unklar bleibt, </i>ob <b>mehr als drei</b>&#160;contendende Threads <b>Schaden anrichten</b>&#160;k&#246;nnen
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702012250472" ID="ID_1150173173" MODIFIED="1702075177129">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
danach / sonst : l&#228;uft <i>verd&#228;chtig gut</i>
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1702012369880" ID="ID_1425703387" MODIFIED="1702012382381" TEXT="Kapazit&#xe4;t erscheint pa&#xdf;genau">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1702012386340" ID="ID_610604863" MODIFIED="1702012397485" TEXT="verstehe noch nicht wie das funktioniert">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1702012386340" ID="ID_610604863" MODIFIED="1702075206544" TEXT="verstehe noch nicht wie das funktioniert">
<arrowlink COLOR="#6dd26e" DESTINATION="ID_1395513427" ENDARROW="Default" ENDINCLINATION="-348;-16;" ID="Arrow_ID_193516409" STARTARROW="None" STARTINCLINATION="-24;51;"/>
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1702012270758" ID="ID_874563850" MODIFIED="1702012280845" TEXT="wie kann das &#xfc;berhaupt so gut funktionieren?">
<node COLOR="#435e98" CREATED="1702012270758" ID="ID_874563850" MODIFIED="1702064632932" TEXT="wie kann das &#xfc;berhaupt so gut funktionieren?">
<icon BUILTIN="help"/>
<node CREATED="1702012283990" ID="ID_1274845080" MODIFIED="1702012315323" TEXT="die Kapazit&#xe4;t taucht stets ~300&#xb5;s korrekt auf"/>
<node CREATED="1702012316461" ID="ID_1917953828" MODIFIED="1702012336744" TEXT="kaum &#xfc;bersch&#xfc;ssige und fast keine Contention"/>
<node CREATED="1702012316461" ID="ID_1917953828" MODIFIED="1702075234037" TEXT="kaum &#xfc;bersch&#xfc;ssige Kapazit&#xe4;t und fast keine Contention"/>
<node CREATED="1702012337405" ID="ID_1550638305" MODIFIED="1702012346427" TEXT="mit dem letzten Job geht alles nahtlos auf"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702012347707" ID="ID_144677748" MODIFIED="1702012362287" TEXT="entwickelt der Scheduler Intelligenz?">
<node CREATED="1702053054475" ID="ID_149383649" MODIFIED="1702064128158" TEXT="Theorie">
<icon BUILTIN="button_cancel"/>
<node CREATED="1702053072744" ID="ID_1645932306" MODIFIED="1702053111976" TEXT="die vorangegangene Kapazit&#xe4;tssteuerung sieht man nicht im Log"/>
<node CREATED="1702053201181" ID="ID_981010383" MODIFIED="1702060653519" TEXT="Kapazit&#xe4;t gleichverteilt &#x27f9; wird leicht fokussiert hinter den Scheduler-Head gerichtet">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Genau betrachtet: diese Aussage stimmt nur in einem allgemeinen &#187;work-horizon&#171; von &lt;20ms. Die Fokussierung ist nicht dynamisch, sondern mit einem Sprung, n&#228;mlich an der 5ms-Grenze
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702053298449" ID="ID_241996771" MODIFIED="1702053311083" TEXT="...und von dort wird sie im n&#xe4;chsten Schritt wieder mehr gleichverteilt"/>
<node CREATED="1702053443177" ID="ID_1537035854" MODIFIED="1702053516440" TEXT="Das bedeutet: hier liegt die Standard-SItuation vor"/>
<node CREATED="1702053517619" ID="ID_449051234" MODIFIED="1702053588518" TEXT="genau darauf wurde der Algorithmus ausgerichtet"/>
<node CREATED="1702053592113" ID="ID_1611174088" MODIFIED="1702053611802" TEXT="Grundbedingung: lokaler Kapazit&#xe4;ts-&#xdc;berschu&#xdf;"/>
</node>
<node COLOR="#5b280f" CREATED="1702064086500" ID="ID_749884884" MODIFIED="1702064105581" TEXT="diese Theorie ist nicht hinreichend, das Verhalten zu erkl&#xe4;ren">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1702064113991" ID="ID_236316221" MODIFIED="1702064133103" TEXT="Theorie-2">
<icon BUILTIN="forward"/>
<node CREATED="1702064134743" ID="ID_115258919" MODIFIED="1702064147166" TEXT="es ist nur der Umstand, da&#xdf; keine Contention stattfindet"/>
<node CREATED="1702064151449" ID="ID_1869952775" MODIFIED="1702064173818" TEXT="ein einziger Worker w&#xfc;rde n&#xe4;mlich locker mit der Arbeit fertig"/>
<node CREATED="1702064181220" ID="ID_1641677927" MODIFIED="1702064238913" TEXT="allein der tend-Next-Worker kann gleich alle Jobs f&#xfc;r einen &#xbb;peak&#xab; abarbeiten"/>
<node CREATED="1702064310035" ID="ID_116821376" MODIFIED="1702064322769" TEXT="wenn die restlichen Worker auf die n&#xe4;chsten 5ms verteilt sind..."/>
<node CREATED="1702064323573" ID="ID_1383345100" MODIFIED="1702064338444" TEXT="dann sind sie prinzipiell verf&#xfc;gbar, st&#xf6;ren aber nicht"/>
<node CREATED="1702064389368" ID="ID_1914870200" MODIFIED="1702064416682" TEXT="frei verf&#xfc;gbare Kapazit&#xe4;t wird permanent weiter mit dem Fokus gehend verschoben"/>
<node CREATED="1702064476078" ID="ID_1346006401" MODIFIED="1702064501359" TEXT="je mehr Kapazit&#xe4;t frei ist, desto reaktiver ist der Scheduler f&#xfc;r &#xbb;peaks&#xab;"/>
</node>
<node CREATED="1702074373081" ID="ID_1395513427" MODIFIED="1702075200312">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Theorie-2 deckt sich mit <b>emprischen Beobachtungen</b>
</p>
</body>
</html></richcontent>
<linktarget COLOR="#6dd26e" DESTINATION="ID_1395513427" ENDARROW="Default" ENDINCLINATION="-348;-16;" ID="Arrow_ID_193516409" SOURCE="ID_610604863" STARTARROW="None" STARTINCLINATION="-24;51;"/>
<icon BUILTIN="list"/>
<node CREATED="1702074426848" ID="ID_256398529" MODIFIED="1702074436292" TEXT="Abarbeiten eines Backlogs ist ein Thema f&#xfc;r sich"/>
<node CREATED="1702074437616" ID="ID_1826507013" MODIFIED="1702074527032" TEXT="durch die Karenz-Zeit von 30&#xb5;s k&#xf6;nnen &#x2205; 3 Tasks pro 100&#xb5;s starten"/>
<node CREATED="1702074593036" ID="ID_456514777" MODIFIED="1702074637010" TEXT="nach Abarbeiten das Backlog ist i.d.R. nur ein Thread aktiv"/>
<node CREATED="1702074647101" ID="ID_1557132697" MODIFIED="1702074665438" TEXT="bisweilen taucht w&#xe4;hrend einer aktiven Phase ein 2.Thread zuf&#xe4;llig auf"/>
<node CREATED="1702074667074" ID="ID_699496048" MODIFIED="1702074690699" TEXT="dann contenden beide, was aber keinen Einflu&#xdf; auf die Geschwindigkeit hat"/>
<node CREATED="1702074755942" ID="ID_1355442807" MODIFIED="1702074770228" TEXT="der einzelne arbeitende Thread wird i.d.R. auch der tend-next-Thread"/>
<node CREATED="1702074871820" ID="ID_1429330391" MODIFIED="1702074893688" TEXT="Kapazit&#xe4;t, die w&#xe4;hrend &#xbb;idle&#xab;-Phasen auftaucht, wird (spurlos) weiter deflektiert"/>
</node>
</node>
<node CREATED="1702064637738" ID="ID_1470887322" MODIFIED="1702064700752">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Fazit: es lief nur<i>&#160;ordentlich,</i>
</p>
<p>
der Fall ist aber<i>&#160;speziell</i>&#160;und
</p>
<p>
von unklarer Relevanz.
</p>
</body>
</html></richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1702075276457" ID="ID_960784104" MODIFIED="1702075771166" TEXT="Zwischen-Fazit">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1702075326037" ID="ID_1380727322" MODIFIED="1702075403111">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
kurze L&#252;cken im Schedule + freie Kapazit&#228;t &#10233; Ablaufsteuerung <b>funktioniert sehr gut</b>
</p>
</body>
</html></richcontent>
<node CREATED="1702076086522" ID="ID_1035410612" LINK="../doc/devel/dump/2023-12-09.Scheduler-Integration/Dump-02" MODIFIED="1702123255510">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
ein Beispiel: <b>Dump-02</b>
</p>
</body>
</html></richcontent>
<icon BUILTIN="list"/>
</node>
</node>
<node CREATED="1702075420189" ID="ID_765543359" MODIFIED="1702075436858">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
Abarbeiten eines Backlog mu&#223; <b>fokussiert untersucht werden</b>
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702075497947" ID="ID_1905527417" MODIFIED="1702075537343">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
<i>sofern </i>Contention auftritt &#10233; tendentiell problematisch
</p>
</body>
</html></richcontent>
<node CREATED="1702075559571" ID="ID_952029241" MODIFIED="1702075567486" TEXT="kurze Activities &lt; 100&#xb5;s"/>
<node CREATED="1702075570566" ID="ID_90038422" MODIFIED="1702075580540" TEXT="lange Ketten von dependency-Blockings"/>
</node>
<node CREATED="1702075831901" ID="ID_1933660911" MODIFIED="1702075861290" TEXT="Karenz-Zeit(Grooming) &#x27f9; Dichte-Limit (DEBUG: 3 Tasks / 100&#xb5;s)"/>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1702087135999" ID="ID_1116666606" MODIFIED="1702087157529" TEXT="Drastisch entgleister Testlauf">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1702087159620" ID="ID_872269266" MODIFIED="1702087167941" TEXT="mu&#xdf; das Zeug irgendwo dokumentieren">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1702087170919" ID="ID_640504122" LINK="../doc/devel/dump/2023-12-09.Scheduler-Integration/index.txt" MODIFIED="1702087293142" TEXT="neuer Ordner: &lt;lumi&gt;/doc/devel/dump/2023-12-09/"/>
<node CREATED="1702087192152" ID="ID_1098111859" LINK="../doc/devel/dump/2023-12-09.Scheduler-Integration/Dump-03" MODIFIED="1702087278954">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
dort als <b>Dump-03</b>
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1702087305825" ID="ID_1825727987" MODIFIED="1702087407546" TEXT="Berechnungen nicht fertig; Verz&#xf6;gerungen &gt;10ms">
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1702087410298" ID="ID_1644956979" MODIFIED="1702087415046" TEXT="Beobachtungen">
<node CREATED="1702087417193" ID="ID_1586207170" MODIFIED="1702087505826" TEXT=" 4 Worker tauchen auf zwischen 5ms und 5.4ms"/>
<node CREATED="1702087552591" ID="ID_1084119029" MODIFIED="1702087647772" TEXT="das Schedule-Backlog bis zum 1.Tick (2000 ... 4932) wird noch relativ rasch abgearbeitet">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...und zwar von 5000&#181;s ... 5982
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702087679418" ID="ID_1568141926" MODIFIED="1702087694668" TEXT="der Thread, der den Tick bearbeitet, meldet sich erst 1ms sp&#xe4;ter wieder"/>
<node CREATED="1702087695560" ID="ID_1290082809" MODIFIED="1702087729775" TEXT="es sollte aber zu der Zeit keine &#xbb;targeted sleeps&#xab; geben, da wir past Schedule sind">
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1702087779161" ID="ID_1349737354" MODIFIED="1702087795658" TEXT="bei anderen Threads beobachte ich, da&#xdf; sie 200&#xb5;s f&#xfc;r einen erfolglosen poll-Zyklus brauchen"/>
<node CREATED="1702090360751" ID="ID_663782672" MODIFIED="1702090382264" TEXT="und diese Verz&#xf6;gerung nimmt sp&#xe4;ter noch zu: 400&#xb5;s und mehr"/>
<node CREATED="1702090518904" ID="ID_584161625" MODIFIED="1702090531620" TEXT="der R&#xfc;ckstand nimmt langsam zu statt ab">
<node CREATED="1702090538187" ID="ID_1258759451" MODIFIED="1702090551641" TEXT="einerseits haben wir mehr Notify-follow-up-Jobs"/>
<node CREATED="1702090552393" ID="ID_185756921" MODIFIED="1702090563152" TEXT="andererseits werden Poll-Zyklen l&#xe4;nger"/>
<node CREATED="1702090634062" ID="ID_363968570" MODIFIED="1702090738191" TEXT="auch die Job-Ausf&#xfc;hrung selber ist deutlich langsamer">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
und zwar anscheinend der Vorlauf, bis die Meldung vom Job-Funktor selber erscheint.
</p>
<p>
Ein Beispiel: Dauer 400&#181;s, Meldung nach &gt; 300&#181;s
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1702099980199" ID="ID_1232068198" MODIFIED="1702100079789" TEXT="Fixes / Nachtr&#xe4;ge zum TestChainLoad....">
<arrowlink COLOR="#698dd2" DESTINATION="ID_53360642" ENDARROW="Default" ENDINCLINATION="721;39;" ID="Arrow_ID_532387874" STARTARROW="None" STARTINCLINATION="218;-1266;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#435e98" CREATED="1702100086522" ID="ID_512976864" MODIFIED="1702100121145">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
nun l&#228;uft es <i>wunderbar glatt</i>
</p>
</body>
</html></richcontent>
<icon BUILTIN="info"/>
<node CREATED="1702100122403" ID="ID_369548263" MODIFIED="1702100258301" TEXT="was aber auch daran liegt, da&#xdf; die Problem-Situation nun anfangs gar nicht auftreten kann">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
denn durch die genaue Schedule-Berechnung und den pr&#228;zisen pre-Roll ist nun bereits der erste Job <i>ahead of schedule.</i>
</p>
<p>
...das dreht sich dann typischerweise kurz (1.Tick, erste Kaskade von Jobs), aber dadurch entsteht h&#246;chstens ein Lag von 500&#181;s, den ein einziger Worker locker wieder aufholt, zumal der konkrete Test-Graph hier am Anfang auch noch nicht die volle Breite hat.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702100259369" ID="ID_1095155077" MODIFIED="1702100280385" TEXT="jetzt wird i.d.R. das gesamte Schedule von einem einzigen Worker abgearbeitet"/>
<node CREATED="1702100086522" ID="ID_629052288" LINK="../doc/devel/dump/2023-12-09.Scheduler-Integration/Dump-01" MODIFIED="1702107278954">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
dokumentiert als <b>Dump-01</b>
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1702076009462" ID="ID_485796782" MODIFIED="1702076013414" TEXT="TOD-Oh">
<icon BUILTIN="flag-pink"/>
<node CREATED="1702076118040" ID="ID_1646791544" MODIFIED="1702076135046" TEXT="Einsichten in der Mindmap aufschreiben"/>
<node CREATED="1702076136898" ID="ID_1934895235" MODIFIED="1702076145387" TEXT="Planung der Dokumentation"/>
<node CREATED="1702076163209" ID="ID_1341902785" MODIFIED="1702076173572" TEXT="den verf**ten Test nun endlich fertig bekommen">
<node CREATED="1702076310654" ID="ID_1949942178" MODIFIED="1702076324202" TEXT="pre-Roll besser sch&#xe4;tzen"/>
<node COLOR="#338800" CREATED="1702076363983" ID="ID_1118507080" MODIFIED="1702094437747" TEXT="wake-Up-Job genauer timen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node CREATED="1702076180112" ID="ID_587585848" MODIFIED="1702076185302" TEXT="Ticket abschlie&#xdf;en"/>
<node CREATED="1702076194614" ID="ID_560462139" MODIFIED="1702076273767" TEXT="Exit-Hash-Verkn&#xfc;pfung"/>
<node CREATED="1702076274883" ID="ID_53147677" MODIFIED="1702076283534" TEXT="Computation-Load"/>
<node CREATED="1702076289573" ID="ID_1400286686" MODIFIED="1702076302209" TEXT="Ziele / Plan f&#xfc;r KPI formuieren"/>
</node>
</node>
</node>
</node>
@ -102102,6 +102433,51 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="ksmiletris"/>
</node>
<node CREATED="1702099649889" ID="ID_1851417085" MODIFIED="1702099669825" TEXT="starke Pr&#xe4;ferenz f&#xfc;r aktuellen Thread">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
ist auch explizit so gew&#252;nscht
</p>
</body>
</html></richcontent>
<node CREATED="1702099690595" ID="ID_193536973" MODIFIED="1702099755774" TEXT="aber nur solange der das Grooming-Token h&#xe4;lt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wenn er zur Berechnung &#8222;weg&#8220; ist, und w&#228;hrenddessen taucht ein anderer Worker auf, dann schnappt sich letzterer das tend-next, und der aktuelle Thread wird erst mal weggeschickt
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702099759167" ID="ID_1406115961" MODIFIED="1702099844733" TEXT="gilt auch f&#xfc;r Notifications">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...diese beinhalten formal sogar zweimal einen postChain (das 2.mal w&#228;re eigentlich stets redundant, ist aber formal sauberer).
</p>
</body>
</html></richcontent>
<node CREATED="1702099848478" ID="ID_786567755" MODIFIED="1702099859329" TEXT="wenn er das Grooming-Token an dem Punkt bekommt..."/>
<node CREATED="1702099860105" ID="ID_1809086037" MODIFIED="1702099964990" TEXT="dann arbeitet er auch stets die Notification-Folgen mit ab">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...selbst wenn es dringendere Tasks in der Queue g&#228;be...
</p>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1702099919790" ID="ID_1643244943" MODIFIED="1702099952693" TEXT="das k&#xf6;nnte man leicht &#xe4;ndern &#x2014; durch einen winzigen Offset">
<icon BUILTIN="idea"/>
</node>
</node>
</node>
</node>
<node COLOR="#16515f" CREATED="1701977257132" ID="ID_390005380" MODIFIED="1701977946918" TEXT="Kapazit&#xe4;tssteuerung">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
@ -109032,6 +109408,64 @@ class Something
<node CREATED="1450489421795" ID="ID_12247357" MODIFIED="1557498707240" TEXT="lives until the end of the program"/>
</node>
</node>
<node CREATED="1702067267872" FOLDED="true" ID="ID_812876776" MODIFIED="1702067706346" TEXT="std::thread">
<node CREATED="1702067274343" ID="ID_1937467626" MODIFIED="1702067285086" TEXT="std::this_thread::get_id()">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1702067286142" FOLDED="true" ID="ID_339792323" MODIFIED="1702067699724" TEXT="thread::id() &#x27fc; numerisch ist versperrt">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1702067317106" ID="ID_1375583154" MODIFIED="1702067332619" TEXT="obwohl es ersichtlich als eine einfache 64bit-Zahl implementiert ist"/>
<node CREATED="1702067342643" ID="ID_978864708" MODIFIED="1702067471794" TEXT="aber der Standard verhindert den Durchgriff &#x2014; wegen Portabilit&#xe4;t">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
das mag &#228;rgerlich sein, dient aber einem &#187;guten Zweck&#171;
</p>
<p>
Es ist eine der gro&#223;en Errungenschaften, da&#223; hier nun das Thema &#187;Thread-Handling&#171; in ein <b>wirklich portables</b>&#160;Framework gepackt wurde. Also mehr als &#8222;es ist POSIX&#8220; !!!
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1702067479948" ID="ID_18176471" LINK="https://stackoverflow.com/questions/7432100/how-to-get-integer-thread-id-in-c11" MODIFIED="1702067526829" TEXT="Tricks">
<icon BUILTIN="idea"/>
<node CREATED="1702067491794" ID="ID_168505507" MODIFIED="1702067607582" TEXT="hat einen stream-output">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<pre http-equiv="content-type" content="text/html; charset=utf-8" class="lang-cpp s-code-block"><code class="hljs language-cpp">std::stringstream ss;
ss &lt;&lt; std::this_thread::get_id();
int id = std::stoi(ss.str());</code></pre>
</body>
</html></richcontent>
</node>
<node CREATED="1702067505248" ID="ID_1428990089" MODIFIED="1702067604746" TEXT="man kann den Hash berechnen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<pre http-equiv="content-type" content="text/html; charset=utf-8" class="lang-cpp s-code-block"><code class="hljs language-cpp">std::hash&lt;std::thread::id&gt;{}(std::this_thread::get_id())</code></pre>
</body>
</html></richcontent>
<icon BUILTIN="back"/>
<node CREATED="1702067532709" ID="ID_1499266088" MODIFIED="1702067539182" TEXT="beste L&#xf6;sung">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
</node>
<node CREATED="1702067539841" ID="ID_195945008" MODIFIED="1702067550175" TEXT="ist am schnellsten, und doch portabel"/>
<node CREATED="1702067550979" ID="ID_1437360523" MODIFIED="1702067563917" TEXT="einziger Nachteil: Hash-chlashes m&#xf6;glich"/>
</node>
<node CREATED="1702067510200" ID="ID_772857153" MODIFIED="1702067662607" TEXT="oder mit brachialer Gewalt casten">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<pre http-equiv="content-type" content="text/html; charset=utf-8" class="lang-cpp s-code-block"><code class="hljs language-cpp">std::thread::id threadId = std::this_thread::get_id();
unsigned int ThreadIdAsInt = *static_cast&lt;unsigned int*&gt;(static_cast&lt;void*&gt;(&amp;threadId));</code></pre>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
<node CREATED="1521779331036" FOLDED="true" ID="ID_1416813337" MODIFIED="1694010019286" TEXT="memory access ordering">
<linktarget COLOR="#5a6caa" DESTINATION="ID_1416813337" ENDARROW="Default" ENDINCLINATION="-1755;162;" ID="Arrow_ID_751165448" SOURCE="ID_1772115642" STARTARROW="None" STARTINCLINATION="-4287;-237;"/>
<node CREATED="1521779387708" ID="ID_663855061" MODIFIED="1521779394271" TEXT="C++ memory model"/>