Giter VIP home page Giter VIP logo

Comments (7)

mratsim avatar mratsim commented on August 17, 2024

Or maybe it's not the memory.

For some reason it's spending a significant time in atomics, so it might be a situation where locks are better:

DeepinScreenshot_select-area_20191201195343

from weave.

mratsim avatar mratsim commented on August 17, 2024

With the new reporting framework from cf8fc30

$  ./build/weave_spc_lazy 
Usage: weave_spc_lazy <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0
--------------------------------------------------------------------------
Scheduler:                                    Weave (lazy flowvars)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      834.921
Max RSS (KB):                                 390228
Runtime RSS (KB):                             387024
# of page faults:                             96774
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0

$  ./build/weave_spc_eager
Usage: weave_spc_eager <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0
--------------------------------------------------------------------------
Scheduler:                                    Weave (eager flowvars)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      961.269
Max RSS (KB):                                 390216
Runtime RSS (KB):                             387024
# of page faults:                             96774
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0

$  ./build/orig_spc_lazy 
Usage: orig_spc_lazy <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0
Number of CPUs: 36
Manager  0: 36 of 256 workers available
--------------------------------------------------------------------------
Scheduler:                                    Weave (lazy futures)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      301.785
Max RSS (KB):                                 206244
Runtime RSS (KB):                             203280
# of page faults:                             50782
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0
Worker  0: random_receiver fast path (slow path):  90 % ( 10 %)
^CSIGINT: Interrupted by Ctrl-C.

$  ./build/orig_spc_eager 
Usage: orig_spc_eager <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0
Number of CPUs: 36
Manager  0: 36 of 256 workers available
--------------------------------------------------------------------------
Scheduler:                                    Weave (eager futures)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      311.71
Max RSS (KB):                                 206256
Runtime RSS (KB):                             203280
# of page faults:                             50782
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0
Worker  0: random_receiver fast path (slow path):  94 % (  6 %)
^CSIGINT: Interrupted by Ctrl-C.

from weave.

mratsim avatar mratsim commented on August 17, 2024

Suspicion n°1

Since we had the symbols of atomics appearing in VTune, they were not properly inlined.
Looking more into it, it seems like the assembly has no indirection though the "GUI" view is a bit confusing

Confusing view
DeepinScreenshot_select-area_20191201225749

Focus on assembly,the left pane is wrong ... this is the MSPC batched queue it can be recognized from the prefetching and the pause instruction

DeepinScreenshot_select-area_20191201234138

So Suspicion n°1 is probably wrong

Suspicion n°2

The instructions retired is 155 millions with the new weave while the PoC only retired 55 millions instructions

DeepinScreenshot_select-area_20191201233546

And all the extra instructions are related to atomics or receiving from a channel, especially in the decline_all proc (which makes sense, there is only 1 producer).
DeepinScreenshot_select-area_20191201233523

It could be that

  • the changes that reduced the overhead on fibonacci bench allow the runtime to circulate more steal requests per unit of time, flooding it if there is only 1 producer.
  • the lock-based channels where much faster for a receiver than the current lock-free solution. Unlikely as there was no lock, only a fence for the single consumer of the MPSC channels.

I expect the extra instructions are due to the absence of backoff mechanism so and implementing one (#8) may solve this issue although strange.

The memory subsystem doesn't appear at all as a hotspot, they it may cause extra pagefaulting

from weave.

mratsim avatar mratsim commented on August 17, 2024

So backoff is implemented in #26 and nothing changed :/.

Even on 1'000'000 long tasks (100us), Weave is 2x slower than the proof of concept even though it's significantly faster on all other benches. The hunt continues ...

from weave.

mratsim avatar mratsim commented on August 17, 2024

And the light shined upon this problem.

Seems like it was the only benchmark implemented with a huge load imbalance and I forgot to put or active steal-half. UTS (Unbalanced Tree Search) and BPC (Bouncing Consumer<->Producer) are definitely needed to ensure that I'm properly have load balancing in tricky case

Statistics in the PoC

Number of CPUs: 36
Manager  0: 36 of 256 workers available
Elapsed wall time: 313.15 ms (10 us per task)

+========================================+
|  Per-worker statistics                 |
+========================================+
  / use -d:profile for high-res timers /
Worker 26: 62 steal requests sent
Worker 11: 59 steal requests sent
Worker 11: 71 steal requests handled
Worker 9: 61 steal requests sent
Worker 27: 74 steal requests sent
Worker 30: 77 steal requests sent
Worker 30: 70 steal requests handled
Worker 30: 195 steal requests declined
Worker 30: 27598 tasks executed
Worker 30: 42713 tasks sent
Worker 30: 0 tasks split
Worker 6: 78 steal requests sent
Worker 6: 149 steal requests handled
Worker 6: 202 steal requests declined
Worker 6: 29168 tasks executed
Worker 6: 81857 tasks sent
Worker 5: 62 steal requests sent
Worker 5: 90 steal requests handled
Worker 5: 225 steal requests declined
Worker 29: 66 steal requests sent
Worker 29: 80 steal requests handled
Worker 15: 76 steal requests sent
Worker 15: 53 steal requests handled
Worker 15: 202 steal requests declined
Worker 15: 29003 tasks executed
Worker 15: 39623 tasks sent
Worker 15: 0 tasks split
Worker 0: 68 steal requests sent
Worker 0: 162 steal requests handled
Worker 0: 54 steal requests declined
Worker 0: 15031 tasks executed
Worker 0: 1033434 tasks sent
Worker 0: 0 tasks split
Worker 0: 73.53 % steal-one
Worker 0: 26.47 % steal-half
Worker 27: 73 steal requests handled
Worker 27: 185 steal requests declined
Worker 27: 28469 tasks executed
Worker 17: 58 steal requests sent
Worker 17: 53 steal requests handled
Worker 17: 191 steal requests declined
Worker 17: 28239 tasks executed
Worker 17: 32048 tasks sent
Worker 17: 0 tasks split
Worker 17: 43.10 % steal-one
Worker 17: 56.90 % steal-half
Worker 26: 34 steal requests handled
Worker 26: 195 steal requests declined
Worker 26: 28834 tasks executed
Worker 32: 66 steal requests sent
Worker 32: 48 steal requests handled
Worker 32: 118 steal requests declined
Worker 32: 27775 tasks executed
Worker 32: 41024 tasks sent
Worker 32: 0 tasks split
Worker 32: 37.88 % steal-one
Worker 32: 62.12 % steal-half
Worker 19: 63 steal requests sent
Worker 19: 44 steal requests handled
Worker 19: 213 steal requests declined
Worker 19: 25338 tasks executed
Worker 15: 32.89 % steal-one
Worker 15: 67.11 % steal-half
Worker 31: 62 steal requests sent
Worker 31: 50 steal requests handled
Worker 9: 64 steal requests handled
Worker 24: 51 steal requests sent
Worker 28: 79 steal requests sent
Worker 28: 84 steal requests handled
Worker 35: 76 steal requests sent
Worker 35: 41 steal requests handled
Worker 35: 124 steal requests declined
Worker 35: 27685 tasks executed
Worker 35: 48791 tasks sent
Worker 35: 0 tasks split
Worker 35: 32.89 % steal-one
Worker 35: 67.11 % steal-half
Worker 30: 32.47 % steal-one
Worker 30: 67.53 % steal-half
Worker 23: 85 steal requests sent
Worker 23: 41 steal requests handled
Worker 23: 202 steal requests declined
Worker 23: 29294 tasks executed
Worker 23: 10928 tasks sent
Worker 23: 0 tasks split
Worker 23: 29.41 % steal-one
Worker 23: 70.59 % steal-half
Worker 11: 207 steal requests declined
Worker 11: 27426 tasks executed
Worker 11: 24657 tasks sent
Worker 11: 0 tasks split
Worker 33: 67 steal requests sent
Worker 33: 42 steal requests handled
Worker 33: 121 steal requests declined
Worker 33: 27200 tasks executed
Worker 33: 129104 tasks sent
Worker 33: 0 tasks split
Worker 33: 37.31 % steal-one
Worker 33: 62.69 % steal-half
Worker 28: 175 steal requests declined
Worker 28: 28101 tasks executed
Worker 28: 111052 tasks sent
Worker 28: 0 tasks split
Worker 28: 31.65 % steal-one
Worker 28: 68.35 % steal-half
Worker 1: 59 steal requests sent
Worker 1: 103 steal requests handled
Worker 1: 104 steal requests declined
Worker 1: 29507 tasks executed
Worker 1: 61910 tasks sent
Worker 1: 0 tasks split
Worker 1: 42.37 % steal-one
Worker 1: 57.63 % steal-half
Worker 5: 28808 tasks executed
Worker 5: 64955 tasks sent
Worker 5: 0 tasks split
Worker 5: 40.32 % steal-one
Worker 5: 59.68 % steal-half
Worker 11: 42.37 % steal-one
Worker 11: 57.63 % steal-half
Worker 4: 77 steal requests sent
Worker 4: 97 steal requests handled
Worker 4: 236 steal requests declined
Worker 4: 29002 tasks executed
Worker 4: 49658 tasks sent
Worker 18: 76 steal requests sent
Worker 18: 62 steal requests handled
Worker 18: 189 steal requests declined
Worker 18: 28415 tasks executed
Worker 18: 47377 tasks sent
Worker 18: 0 tasks split
Worker 18: 32.89 % steal-one
Worker 18: 67.11 % steal-half
Worker 19: 156290 tasks sent
Worker 19: 0 tasks split
Worker 19: 39.68 % steal-one
Worker 19: 60.32 % steal-half
Worker 20: 67 steal requests sent
Worker 20: 47 steal requests handled
Worker 20: 194 steal requests declined
Worker 12: 74 steal requests sent
Worker 34: 65 steal requests sent
Worker 34: 43 steal requests handled
Worker 34: 138 steal requests declined
Worker 34: 25994 tasks executed
Worker 34: 268621 tasks sent
Worker 34: 0 tasks split
Worker 34: 38.46 % steal-one
Worker 34: 61.54 % steal-half
Worker 26: 30785 tasks sent
Worker 26: 0 tasks split
Worker 26: 40.32 % steal-one
Worker 26: 59.68 % steal-half
Worker 7: 82 steal requests sent
Worker 7: 69 steal requests handled
Worker 7: 228 steal requests declined
Worker 7: 28907 tasks executed
Worker 7: 20324 tasks sent
Worker 8: 72 steal requests sent
Worker 25: 61 steal requests sent
Worker 25: 52 steal requests handled
Worker 25: 195 steal requests declined
Worker 25: 27899 tasks executed
Worker 25: 114570 tasks sent
Worker 25: 0 tasks split
Worker 25: 40.98 % steal-one
Worker 25: 59.02 % steal-half
Worker 4: 0 tasks split
Worker 4: 32.47 % steal-one
Worker 4: 67.53 % steal-half
Worker 22: 72 steal requests sent
Worker 22: 39 steal requests handled
Worker 22: 175 steal requests declined
Worker 22: 27538 tasks executed
Worker 22: 51672 tasks sent
Worker 22: 0 tasks split
Worker 22: 34.72 % steal-one
Worker 22: 65.28 % steal-half
Worker 21: 72 steal requests sent
Worker 21: 45 steal requests handled
Worker 21: 176 steal requests declined
Worker 21: 28308 tasks executed
Worker 21: 52786 tasks sent
Worker 21: 0 tasks split
Worker 21: 34.72 % steal-one
Worker 21: 65.28 % steal-half
Worker 20: 27479 tasks executed
Worker 20: 16072 tasks sent
Worker 20: 0 tasks split
Worker 20: 37.31 % steal-one
Worker 20: 62.69 % steal-half
Worker 16: 89 steal requests sent
Worker 16: 59 steal requests handled
Worker 16: 200 steal requests declined
Worker 16: 26961 tasks executed
Worker 16: 22734 tasks sent
Worker 16: 0 tasks split
Worker 16: 28.09 % steal-one
Worker 16: 71.91 % steal-half
Worker 6: 0 tasks split
Worker 6: 32.05 % steal-one
Worker 6: 67.95 % steal-half
Worker 29: 188 steal requests declined
Worker 29: 28445 tasks executed
Worker 29: 74881 tasks sent
Worker 29: 0 tasks split
Worker 8: 67 steal requests handled
Worker 8: 246 steal requests declined
Worker 8: 27170 tasks executed
Worker 8: 66770 tasks sent
Worker 8: 0 tasks split
Worker 8: 34.72 % steal-one
Worker 8: 65.28 % steal-half
Worker 12: 69 steal requests handled
Worker 12: 205 steal requests declined
Worker 12: 27859 tasks executed
Worker 12: 16111 tasks sent
Worker 12: 0 tasks split
Worker 12: 33.78 % steal-one
Worker 12: 66.22 % steal-half
Worker 9: 194 steal requests declined
Worker 9: 28798 tasks executed
Worker 9: 43351 tasks sent
Worker 10: 70 steal requests sent
Worker 10: 58 steal requests handled
Worker 10: 213 steal requests declined
Worker 10: 29123 tasks executed
Worker 10: 20436 tasks sent
Worker 10: 0 tasks split
Worker 7: 0 tasks split
Worker 7: 30.49 % steal-one
Worker 7: 69.51 % steal-half
Worker 9: 0 tasks split
Worker 9: 40.98 % steal-one
Worker 9: 59.02 % steal-half
Worker 31: 194 steal requests declined
Worker 2: 72 steal requests sent
Worker 2: 109 steal requests handled
Worker 2: 90 steal requests declined
Worker 2: 29371 tasks executed
Worker 2: 50808 tasks sent
Worker 2: 0 tasks split
Worker 2: 34.72 % steal-one
Worker 2: 65.28 % steal-half
Worker 13: 81 steal requests sent
Worker 13: 96 steal requests handled
Worker 13: 203 steal requests declined
Worker 13: 28397 tasks executed
Worker 13: 33609 tasks sent
Worker 13: 0 tasks split
Worker 13: 30.86 % steal-one
Worker 13: 69.14 % steal-half
Worker 24: 43 steal requests handled
Worker 24: 192 steal requests declined
Worker 24: 27598 tasks executed
Worker 24: 129283 tasks sent
Worker 24: 0 tasks split
Worker 24: 49.02 % steal-one
Worker 24: 50.98 % steal-half
Worker 31: 28287 tasks executed
Worker 31: 46959 tasks sent
Worker 31: 0 tasks split
Worker 31: 40.32 % steal-one
Worker 31: 59.68 % steal-half
Worker 27: 76644 tasks sent
Worker 27: 0 tasks split
Worker 27: 33.78 % steal-one
Worker 27: 66.22 % steal-half
Worker 29: 37.88 % steal-one
Worker 29: 62.12 % steal-half
Worker 3: 63 steal requests sent
Worker 3: 81 steal requests handled
Worker 3: 102 steal requests declined
Worker 3: 27981 tasks executed
Worker 3: 108472 tasks sent
Worker 3: 0 tasks split
Worker 3: 39.68 % steal-one
Worker 3: 60.32 % steal-half
Worker 14: 73 steal requests sent
Worker 14: 91 steal requests handled
Worker 10: 35.71 % steal-one
Worker 10: 64.29 % steal-half
Worker 14: 202 steal requests declined
Worker 14: 28992 tasks executed
Worker 14: 37056 tasks sent
Worker 14: 0 tasks split
Worker 14: 34.25 % steal-one
Worker 14: 65.75 % steal-half
Worker 0: random_receiver fast path (slow path):  80 % ( 20 %)
Worker 34: random_receiver fast path (slow path):  95 % (  5 %)
Worker 19: random_receiver fast path (slow path):  88 % ( 12 %)
Worker 18: random_receiver fast path (slow path):  82 % ( 18 %)
Worker 11: random_receiver fast path (slow path):  75 % ( 25 %)
Worker 17: random_receiver fast path (slow path):  84 % ( 16 %)
Worker 35: random_receiver fast path (slow path):  90 % ( 10 %)
Worker 22: random_receiver fast path (slow path):  81 % ( 19 %)
Worker 16: random_receiver fast path (slow path):  73 % ( 27 %)
Worker 33: random_receiver fast path (slow path):  96 % (  4 %)
Worker 8: random_receiver fast path (slow path):  72 % ( 28 %)
Worker 28: random_receiver fast path (slow path):  77 % ( 23 %)
Worker 21: random_receiver fast path (slow path):  84 % ( 16 %)
Worker 30: random_receiver fast path (slow path):  82 % ( 18 %)
Worker 3: random_receiver fast path (slow path):  81 % ( 19 %)
Worker 25: random_receiver fast path (slow path):  79 % ( 21 %)
Worker 20: random_receiver fast path (slow path):  85 % ( 15 %)
Worker 32: random_receiver fast path (slow path):  91 % (  9 %)
Worker 26: random_receiver fast path (slow path):  83 % ( 17 %)
Worker 31: random_receiver fast path (slow path):  90 % ( 10 %)
Worker 5: random_receiver fast path (slow path):  74 % ( 26 %)
Worker 7: random_receiver fast path (slow path):  78 % ( 22 %)
Worker 24: random_receiver fast path (slow path):  79 % ( 21 %)
Worker 4: random_receiver fast path (slow path):  64 % ( 36 %)
Worker 12: random_receiver fast path (slow path):  74 % ( 26 %)
Worker 9: random_receiver fast path (slow path):  76 % ( 24 %)
Worker 29: random_receiver fast path (slow path):  79 % ( 21 %)
Worker 13: random_receiver fast path (slow path):  73 % ( 27 %)
Worker 15: random_receiver fast path (slow path):  80 % ( 20 %)
Worker 14: random_receiver fast path (slow path):  70 % ( 30 %)
Worker 6: random_receiver fast path (slow path):  73 % ( 27 %)
Worker 27: random_receiver fast path (slow path):  75 % ( 25 %)
Worker 10: random_receiver fast path (slow path):  76 % ( 24 %)
Worker 23: random_receiver fast path (slow path):  82 % ( 18 %)
Worker 2: random_receiver fast path (slow path):  78 % ( 22 %)
Worker 1: random_receiver fast path (slow path):  83 % ( 17 %)

Statistics as of PR #15

The branch from #15 (sparse bitsets) has been modified to use Legacy channels throughout to eliminate some speculation I had about atomics cost. It's a pretty "old" branch without the fancy memory management techniques or idle thread parking. Note that the "receiver slow paths" statistics doesn't mean anything anymore, the whole point of sparse bitsets was to remove the potential slow path in victim selection

+========================================+
|  Per-worker statistics                 |
+========================================+
  / use -d:WV_profile for high-res timers /
Worker 7: 27706 steal requests sent
Worker 31: 27486 steal requests sent
Worker 15: 27581 steal requests sent
Worker 1: 27616 steal requests sent
Worker 1: 0 steal requests handled
Worker 10: 27627 steal requests sent
Worker 10: 0 steal requests handled
Worker 19: 27474 steal requests sent
Worker 25: 27581 steal requests sent
Worker 25: 0 steal requests handled
Worker 25: 467799 steal requests declined
Worker 25: 27580 tasks executed
Worker 25: 0 tasks sent
Worker 25: 0 tasks split
Worker 26: 27377 steal requests sent
Worker 26: 0 steal requests handled
Worker 26: 467684 steal requests declined
Worker 26: 27376 tasks executed
Worker 26: 0 tasks sent
Worker 26: 0 tasks split
Worker 26: 100.00 % steal-one
Worker 26: 0.00 % steal-half
Worker 26: random victim fast path (slow path):   0 % (100 %)
Worker 30: 27468 steal requests sent
Worker 30: 0 steal requests handled
Worker 30: 468727 steal requests declined
Worker 30: 27467 tasks executed
Worker 30: 0 tasks sent
Worker 30: 0 tasks split
Worker 30: 100.00 % steal-one
Worker 30: 0.00 % steal-half
Worker 30: random victim fast path (slow path):   0 % (100 %)
Worker 5: 27664 steal requests sent
Worker 5: 0 steal requests handled
Worker 5: 468165 steal requests declined
Worker 5: 27663 tasks executed
Worker 5: 0 tasks sent
Worker 4: 27533 steal requests sent
Worker 4: 0 steal requests handled
Worker 4: 468132 steal requests declined
Worker 4: 27532 tasks executed
Worker 9: 27518 steal requests sent
Worker 9: 0 steal requests handled
Worker 9: 468164 steal requests declined
Worker 9: 27517 tasks executed
Worker 10: 468456 steal requests declined
Worker 19: 0 steal requests handled
Worker 21: 27566 steal requests sent
Worker 21: 0 steal requests handled
Worker 33: 27495 steal requests sent
Worker 33: 0 steal requests handled
Worker 33: 468754 steal requests declined
Worker 33: 27494 tasks executed
Worker 33: 0 tasks sent
Worker 33: 0 tasks split
Worker 33: 100.00 % steal-one
Worker 33: 0.00 % steal-half
Worker 16: 27491 steal requests sent
Worker 16: 0 steal requests handled
Worker 16: 468785 steal requests declined
Worker 16: 27490 tasks executed
Worker 13: 27398 steal requests sent
Worker 13: 0 steal requests handled
Worker 13: 468362 steal requests declined
Worker 13: 27397 tasks executed
Worker 13: 0 tasks sent
Worker 13: 0 tasks split
Worker 13: 100.00 % steal-one
Worker 13: 0.00 % steal-half
Worker 13: random victim fast path (slow path):   0 % (100 %)
Worker 35: 27429 steal requests sent
Worker 35: 0 steal requests handled
Worker 35: 467841 steal requests declined
Worker 35: 27428 tasks executed
Worker 35: 0 tasks sent
Worker 35: 0 tasks split
Worker 35: 100.00 % steal-one
Worker 35: 0.00 % steal-half
Worker 35: random victim fast path (slow path):   0 % (100 %)
Worker 3: 27519 steal requests sent
Worker 3: 0 steal requests handled
Worker 3: 468189 steal requests declined
Worker 3: 27518 tasks executed
Worker 5: 0 tasks split
Worker 5: 100.00 % steal-one
Worker 5: 0.00 % steal-half
Worker 5: random victim fast path (slow path):   0 % (100 %)
Worker 1: 468161 steal requests declined
Worker 1: 27615 tasks executed
Worker 1: 0 tasks sent
Worker 1: 0 tasks split
Worker 1: 100.00 % steal-one
Worker 1: 0.00 % steal-half
Worker 1: random victim fast path (slow path):   0 % (100 %)
Worker 11: 27606 steal requests sent
Worker 11: 0 steal requests handled
Worker 11: 468018 steal requests declined
Worker 11: 27605 tasks executed
Worker 11: 0 tasks sent
Worker 11: 0 tasks split
Worker 11: 100.00 % steal-one
Worker 11: 0.00 % steal-half
Worker 11: random victim fast path (slow path):   0 % (100 %)
Worker 0: 1 steal requests sent
Worker 0: 963814 steal requests handled
Worker 0: 59 steal requests declined
Worker 0: 36186 tasks executed
Worker 0: 963814 tasks sent
Worker 0: 0 tasks split
Worker 0: 100.00 % steal-one
Worker 0: 0.00 % steal-half
Worker 0: random victim fast path (slow path):   0 % (100 %)
Worker 34: 27466 steal requests sent
Worker 34: 0 steal requests handled
Worker 31: 0 steal requests handled
Worker 31: 467932 steal requests declined
Worker 31: 27485 tasks executed
Worker 31: 0 tasks sent
Worker 31: 0 tasks split
Worker 31: 100.00 % steal-one
Worker 31: 0.00 % steal-half
Worker 31: random victim fast path (slow path):   0 % (100 %)
Worker 2: 27634 steal requests sent
Worker 2: 0 steal requests handled
Worker 2: 468576 steal requests declined
Worker 20: 27561 steal requests sent
Worker 20: 0 steal requests handled
Worker 18: 28007 steal requests sent
Worker 18: 0 steal requests handled
Worker 18: 467972 steal requests declined
Worker 18: 28006 tasks executed
Worker 18: 0 tasks sent
Worker 18: 0 tasks split
Worker 19: 468439 steal requests declined
Worker 19: 27473 tasks executed
Worker 19: 0 tasks sent
Worker 19: 0 tasks split
Worker 19: 100.00 % steal-one
Worker 19: 0.00 % steal-half
Worker 19: random victim fast path (slow path):   0 % (100 %)
Worker 6: 27577 steal requests sent
Worker 6: 0 steal requests handled
Worker 6: 468479 steal requests declined
Worker 6: 27576 tasks executed
Worker 8: 27579 steal requests sent
Worker 8: 0 steal requests handled
Worker 8: 468547 steal requests declined
Worker 8: 27578 tasks executed
Worker 8: 0 tasks sent
Worker 8: 0 tasks split
Worker 8: 100.00 % steal-one
Worker 8: 0.00 % steal-half
Worker 8: random victim fast path (slow path):   0 % (100 %)
Worker 12: 27531 steal requests sent
Worker 12: 0 steal requests handled
Worker 12: 468003 steal requests declined
Worker 12: 27530 tasks executed
Worker 12: 0 tasks sent
Worker 12: 0 tasks split
Worker 12: 100.00 % steal-one
Worker 12: 0.00 % steal-half
Worker 12: random victim fast path (slow path):   0 % (100 %)
Worker 25: 100.00 % steal-one
Worker 25: 0.00 % steal-half
Worker 25: random victim fast path (slow path):   0 % (100 %)
Worker 29: 27412 steal requests sent
Worker 29: 0 steal requests handled
Worker 29: 468981 steal requests declined
Worker 29: 27411 tasks executed
Worker 29: 0 tasks sent
Worker 29: 0 tasks split
Worker 29: 100.00 % steal-one
Worker 29: 0.00 % steal-half
Worker 29: random victim fast path (slow path):   0 % (100 %)
Worker 17: 27383 steal requests sent
Worker 17: 0 steal requests handled
Worker 17: 467744 steal requests declined
Worker 17: 27382 tasks executed
Worker 17: 0 tasks sent
Worker 17: 0 tasks split
Worker 17: 100.00 % steal-one
Worker 17: 0.00 % steal-half
Worker 17: random victim fast path (slow path):   0 % (100 %)
Worker 2: 27633 tasks executed
Worker 2: 0 tasks sent
Worker 2: 0 tasks split
Worker 2: 100.00 % steal-one
Worker 2: 0.00 % steal-half
Worker 2: random victim fast path (slow path):   0 % (100 %)
Worker 3: 0 tasks sent
Worker 3: 0 tasks split
Worker 3: 100.00 % steal-one
Worker 3: 0.00 % steal-half
Worker 3: random victim fast path (slow path):   0 % (100 %)
Worker 21: 468686 steal requests declined
Worker 21: 27565 tasks executed
Worker 21: 0 tasks sent
Worker 21: 0 tasks split
Worker 21: 100.00 % steal-one
Worker 21: 0.00 % steal-half
Worker 21: random victim fast path (slow path):   0 % (100 %)
Worker 34: 467991 steal requests declined
Worker 34: 27465 tasks executed
Worker 34: 0 tasks sent
Worker 34: 0 tasks split
Worker 34: 100.00 % steal-one
Worker 34: 0.00 % steal-half
Worker 34: random victim fast path (slow path):   0 % (100 %)
Worker 4: 0 tasks sent
Worker 4: 0 tasks split
Worker 4: 100.00 % steal-one
Worker 4: 0.00 % steal-half
Worker 4: random victim fast path (slow path):   0 % (100 %)
Worker 14: 27517 steal requests sent
Worker 14: 0 steal requests handled
Worker 14: 468360 steal requests declined
Worker 14: 27516 tasks executed
Worker 14: 0 tasks sent
Worker 14: 0 tasks split
Worker 14: 100.00 % steal-one
Worker 14: 0.00 % steal-half
Worker 14: random victim fast path (slow path):   0 % (100 %)
Worker 9: 0 tasks sent
Worker 9: 0 tasks split
Worker 9: 100.00 % steal-one
Worker 9: 0.00 % steal-half
Worker 18: 100.00 % steal-one
Worker 18: 0.00 % steal-half
Worker 27: 27545 steal requests sent
Worker 27: 0 steal requests handled
Worker 27: 468534 steal requests declined
Worker 7: 0 steal requests handled
Worker 28: 27518 steal requests sent
Worker 28: 0 steal requests handled
Worker 28: 468754 steal requests declined
Worker 28: 27517 tasks executed
Worker 28: 0 tasks sent
Worker 28: 0 tasks split
Worker 28: 100.00 % steal-one
Worker 28: 0.00 % steal-half
Worker 28: random victim fast path (slow path):   0 % (100 %)
Worker 24: 27506 steal requests sent
Worker 24: 0 steal requests handled
Worker 24: 468033 steal requests declined
Worker 24: 27505 tasks executed
Worker 24: 0 tasks sent
Worker 24: 0 tasks split
Worker 24: 100.00 % steal-one
Worker 24: 0.00 % steal-half
Worker 24: random victim fast path (slow path):   0 % (100 %)
Worker 15: 0 steal requests handled
Worker 15: 468184 steal requests declined
Worker 15: 27580 tasks executed
Worker 15: 0 tasks sent
Worker 15: 0 tasks split
Worker 15: 100.00 % steal-one
Worker 15: 0.00 % steal-half
Worker 15: random victim fast path (slow path):   0 % (100 %)
Worker 9: random victim fast path (slow path):   0 % (100 %)
Worker 18: random victim fast path (slow path):   0 % (100 %)
Worker 22: 27430 steal requests sent
Worker 22: 0 steal requests handled
Worker 22: 467807 steal requests declined
Worker 22: 27429 tasks executed
Worker 22: 0 tasks sent
Worker 22: 0 tasks split
Worker 22: 100.00 % steal-one
Worker 22: 0.00 % steal-half
Worker 22: random victim fast path (slow path):   0 % (100 %)
Worker 7: 468932 steal requests declined
Worker 7: 27705 tasks executed
Worker 7: 0 tasks sent
Worker 7: 0 tasks split
Worker 7: 100.00 % steal-one
Worker 7: 0.00 % steal-half
Worker 7: random victim fast path (slow path):   0 % (100 %)
Worker 33: random victim fast path (slow path):   0 % (100 %)
Worker 16: 0 tasks sent
Worker 16: 0 tasks split
Worker 16: 100.00 % steal-one
Worker 16: 0.00 % steal-half
Worker 16: random victim fast path (slow path):   0 % (100 %)
Worker 23: 27449 steal requests sent
Worker 23: 0 steal requests handled
Worker 23: 469121 steal requests declined
Worker 23: 27448 tasks executed
Worker 23: 0 tasks sent
Worker 23: 0 tasks split
Worker 23: 100.00 % steal-one
Worker 23: 0.00 % steal-half
Worker 23: random victim fast path (slow path):   0 % (100 %)
Worker 27: 27544 tasks executed
Worker 27: 0 tasks sent
Worker 27: 0 tasks split
Worker 27: 100.00 % steal-one
Worker 27: 0.00 % steal-half
Worker 27: random victim fast path (slow path):   0 % (100 %)
Worker 10: 27626 tasks executed
Worker 10: 0 tasks sent
Worker 10: 0 tasks split
Worker 10: 100.00 % steal-one
Worker 10: 0.00 % steal-half
Worker 10: random victim fast path (slow path):   0 % (100 %)
Worker 20: 468399 steal requests declined
Worker 20: 27560 tasks executed
Worker 20: 0 tasks sent
Worker 20: 0 tasks split
Worker 20: 100.00 % steal-one
Worker 20: 0.00 % steal-half
Worker 20: random victim fast path (slow path):   0 % (100 %)
Worker 6: 0 tasks sent
Worker 6: 0 tasks split
Worker 6: 100.00 % steal-one
Worker 6: 0.00 % steal-half
Worker 6: random victim fast path (slow path):   0 % (100 %)
Worker 32: 27599 steal requests sent
Worker 32: 0 steal requests handled
Worker 32: 468158 steal requests declined
Worker 32: 27598 tasks executed
Worker 32: 0 tasks sent
Worker 32: 0 tasks split
Worker 32: 100.00 % steal-one
Worker 32: 0.00 % steal-half
Worker 32: random victim fast path (slow path):   0 % (100 %)
+========================================+
--------------------------------------------------------------------------
Scheduler:                                    Runtime (eager flowvars)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      854.84
Max RSS (KB):                                 206112
Runtime RSS (KB):                             133584
# of page faults:                             50781
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0

Current master

Same remark, there is no slow path anymore, focus should be on steal-half and total steal requests sent.

Usage: weave_spc_metrics <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0

+========================================+
|  Per-worker statistics                 |
+========================================+
  / use -d:WV_profile for high-res timers /  
Worker  2: 65692 steal requests sent
Worker  2: 0 steal requests handled
Worker  2: 515117 steal requests declined
Worker  2: 65691 tasks executed
Worker 18: 63792 steal requests sent
Worker 18: 0 steal requests handled
Worker 16: 1 steal requests sent
Worker 16: 0 steal requests handled
Worker 13: 1 steal requests sent
Worker 13: 0 steal requests handled
Worker 30: 1 steal requests sent
Worker  8: 63444 steal requests sent
Worker  8: 0 steal requests handled
Worker  8: 516051 steal requests declined
Worker  8: 63443 tasks executed
Worker  8: 0 tasks sent
Worker  8: 0 tasks split
Worker  8: 100.00 % steal-one
Worker  8: 0.00 % steal-half
Worker  8: random victim fast path (slow path):   0 % (100 %)
Worker 28: 1 steal requests sent
Worker 28: 0 steal requests handled
Worker 28: 36 steal requests declined
Worker 34: 1 steal requests sent
Worker 34: 0 steal requests handled
Worker 34: 34 steal requests declined
Worker  9: 1 steal requests sent
Worker  9: 0 steal requests handled
Worker  9: 38 steal requests declined
Worker  9: 0 tasks executed
Worker  9: 0 tasks sent
Worker  9: 0 tasks split
Worker  9: 100.00 % steal-one
Worker  9: 0.00 % steal-half
Worker  9: random victim fast path (slow path):   0 % (100 %)
Worker  6: 48299 steal requests sent
Worker 11: 54076 steal requests sent
Worker 11: 0 steal requests handled
Worker 11: 805354 steal requests declined
Worker 11: 54075 tasks executed
Worker 11: 0 tasks sent
Worker 11: 0 tasks split
Worker 11: 100.00 % steal-one
Worker 11: 0.00 % steal-half
Worker 11: random victim fast path (slow path):   0 % (100 %)
Worker 25: 1 steal requests sent
Worker 25: 0 steal requests handled
Worker 25: 31 steal requests declined
Worker 25: 0 tasks executed
Worker 25: 0 tasks sent
Worker 25: 0 tasks split
Worker 25: 100.00 % steal-one
Worker 25: 0.00 % steal-half
Worker 25: random victim fast path (slow path):   0 % (100 %)
Worker 35: 61360 steal requests sent
Worker 35: 0 steal requests handled
Worker 35: 518698 steal requests declined
Worker 35: 61359 tasks executed
Worker 35: 0 tasks sent
Worker 35: 0 tasks split
Worker 35: 100.00 % steal-one
Worker 35: 0.00 % steal-half
Worker 35: random victim fast path (slow path):   0 % (100 %)
Worker  1: 43349 steal requests sent
Worker  1: 0 steal requests handled
Worker 19: 1 steal requests sent
Worker 19: 0 steal requests handled
Worker 19: 28 steal requests declined
Worker 19: 0 tasks executed
Worker 19: 0 tasks sent
Worker 19: 0 tasks split
Worker 19: 100.00 % steal-one
Worker 19: 0.00 % steal-half
Worker 19: random victim fast path (slow path):   0 % (100 %)
Worker 15: 54277 steal requests sent
Worker 15: 0 steal requests handled
Worker 15: 805544 steal requests declined
Worker 15: 54276 tasks executed
Worker 15: 0 tasks sent
Worker 15: 0 tasks split
Worker 15: 100.00 % steal-one
Worker 15: 0.00 % steal-half
Worker 15: random victim fast path (slow path):   0 % (100 %)
Worker 21: 1 steal requests sent
Worker 21: 0 steal requests handled
Worker 21: 32 steal requests declined
Worker 21: 0 tasks executed
Worker 21: 0 tasks sent
Worker 21: 0 tasks split
Worker 21: 100.00 % steal-one
Worker 21: 0.00 % steal-half
Worker 21: random victim fast path (slow path):   0 % (100 %)
Worker 33: 1 steal requests sent
Worker 33: 0 steal requests handled
Worker 33: 32 steal requests declined
Worker 33: 0 tasks executed
Worker 33: 0 tasks sent
Worker 33: 0 tasks split
Worker 33: 100.00 % steal-one
Worker 33: 0.00 % steal-half
Worker 33: random victim fast path (slow path):   0 % (100 %)
Worker 31: 63719 steal requests sent
Worker 31: 0 steal requests handled
Worker 31: 516995 steal requests declined
Worker 31: 63718 tasks executed
Worker 31: 0 tasks sent
Worker  5: 47727 steal requests sent
Worker  5: 0 steal requests handled
Worker  5: 1125258 steal requests declined
Worker  5: 47726 tasks executed
Worker  5: 0 tasks sent
Worker  5: 0 tasks split
Worker  5: 100.00 % steal-one
Worker  5: 0.00 % steal-half
Worker  5: random victim fast path (slow path):   0 % (100 %)
Worker 12: 1 steal requests sent
Worker 12: 0 steal requests handled
Worker 27: 1 steal requests sent
Worker 27: 0 steal requests handled
Worker 27: 33 steal requests declined
Worker 27: 0 tasks executed
Worker 27: 0 tasks sent
Worker 27: 0 tasks split
Worker 27: 100.00 % steal-one
Worker 27: 0.00 % steal-half
Worker 27: random victim fast path (slow path):   0 % (100 %)
Worker  4: 4 steal requests sent
Worker  4: 0 steal requests handled
Worker  4: 57 steal requests declined
Worker  4: 3 tasks executed
Worker  4: 0 tasks sent
Worker  4: 0 tasks split
Worker  4: 100.00 % steal-one
Worker  4: 0.00 % steal-half
Worker  4: random victim fast path (slow path):   0 % (100 %)
Worker 28: 0 tasks executed
Worker 28: 0 tasks sent
Worker 28: 0 tasks split
Worker 28: 100.00 % steal-one
Worker 28: 0.00 % steal-half
Worker 28: random victim fast path (slow path):   0 % (100 %)
Worker 10: 2 steal requests sent
Worker 10: 0 steal requests handled
Worker 10: 48 steal requests declined
Worker 10: 1 tasks executed
Worker 10: 0 tasks sent
Worker 10: 0 tasks split
Worker 10: 100.00 % steal-one
Worker 10: 0.00 % steal-half
Worker 10: random victim fast path (slow path):   0 % (100 %)
Worker 22: 1 steal requests sent
Worker 22: 0 steal requests handled
Worker 22: 29 steal requests declined
Worker 22: 0 tasks executed
Worker 22: 0 tasks sent
Worker 22: 0 tasks split
Worker 22: 100.00 % steal-one
Worker 22: 0.00 % steal-half
Worker 22: random victim fast path (slow path):   0 % (100 %)
Worker 24: 1 steal requests sent
Worker 24: 0 steal requests handled
Worker 24: 27 steal requests declined
Worker 24: 0 tasks executed
Worker 24: 0 tasks sent
Worker 24: 0 tasks split
Worker 24: 100.00 % steal-one
Worker 24: 0.00 % steal-half
Worker 24: random victim fast path (slow path):   0 % (100 %)
Worker  7: 47476 steal requests sent
Worker  7: 0 steal requests handled
Worker  7: 1125092 steal requests declined
Worker 17: 63997 steal requests sent
Worker 17: 0 steal requests handled
Worker 17: 516023 steal requests declined
Worker 17: 63996 tasks executed
Worker 17: 0 tasks sent
Worker 17: 0 tasks split
Worker 17: 100.00 % steal-one
Worker 17: 0.00 % steal-half
Worker 17: random victim fast path (slow path):   0 % (100 %)
Worker  1: 1454068 steal requests declined
Worker  1: 43348 tasks executed
Worker  1: 0 tasks sent
Worker  1: 0 tasks split
Worker  1: 100.00 % steal-one
Worker  1: 0.00 % steal-half
Worker  1: random victim fast path (slow path):   0 % (100 %)
Worker  3: 64927 steal requests sent
Worker  3: 0 steal requests handled
Worker  3: 516511 steal requests declined
Worker 14: 54133 steal requests sent
Worker 14: 0 steal requests handled
Worker 14: 804415 steal requests declined
Worker 14: 54132 tasks executed
Worker 14: 0 tasks sent
Worker 14: 0 tasks split
Worker 14: 100.00 % steal-one
Worker 14: 0.00 % steal-half
Worker 14: random victim fast path (slow path):   0 % (100 %)
Worker 13: 46 steal requests declined
Worker 13: 0 tasks executed
Worker 13: 0 tasks sent
Worker 13: 0 tasks split
Worker 13: 100.00 % steal-one
Worker 13: 0.00 % steal-half
Worker 13: random victim fast path (slow path):   0 % (100 %)
Worker 12: 36 steal requests declined
Worker 12: 0 tasks executed
Worker 12: 0 tasks sent
Worker 12: 0 tasks split
Worker 12: 100.00 % steal-one
Worker 12: 0.00 % steal-half
Worker  0: 1 steal requests sent
Worker  0: 924219 steal requests handled
Worker  0: 57 steal requests declined
Worker  0: 75781 tasks executed
Worker  0: 924219 tasks sent
Worker  0: 0 tasks split
Worker  0: 100.00 % steal-one
Worker  0: 0.00 % steal-half
Worker  0: random victim fast path (slow path):   0 % (100 %)
Worker 34: 0 tasks executed
Worker 34: 0 tasks sent
Worker 34: 0 tasks split
Worker 34: 100.00 % steal-one
Worker 34: 0.00 % steal-half
Worker 34: random victim fast path (slow path):   0 % (100 %)
Worker  6: 0 steal requests handled
Worker  6: 1126789 steal requests declined
Worker  6: 48298 tasks executed
Worker  6: 0 tasks sent
Worker  6: 0 tasks split
Worker  6: 100.00 % steal-one
Worker  6: 0.00 % steal-half
Worker  6: random victim fast path (slow path):   0 % (100 %)
Worker  7: 47475 tasks executed
Worker  7: 0 tasks sent
Worker  7: 0 tasks split
Worker  3: 64926 tasks executed
Worker  3: 0 tasks sent
Worker  3: 0 tasks split
Worker  3: 100.00 % steal-one
Worker  3: 0.00 % steal-half
Worker 23: 64668 steal requests sent
Worker 23: 0 steal requests handled
Worker 23: 517356 steal requests declined
Worker 23: 64667 tasks executed
Worker 23: 0 tasks sent
Worker 23: 0 tasks split
Worker 23: 100.00 % steal-one
Worker 23: 0.00 % steal-half
Worker 23: random victim fast path (slow path):   0 % (100 %)
Worker 30: 0 steal requests handled
Worker 30: 30 steal requests declined
Worker 30: 0 tasks executed
Worker 30: 0 tasks sent
Worker 30: 0 tasks split
Worker 30: 100.00 % steal-one
Worker 30: 0.00 % steal-half
Worker 30: random victim fast path (slow path):   0 % (100 %)
Worker  7: 100.00 % steal-one
Worker  7: 0.00 % steal-half
Worker  7: random victim fast path (slow path):   0 % (100 %)
Worker 16: 43 steal requests declined
Worker 16: 0 tasks executed
Worker 16: 0 tasks sent
Worker 16: 0 tasks split
Worker 16: 100.00 % steal-one
Worker 16: 0.00 % steal-half
Worker 16: random victim fast path (slow path):   0 % (100 %)
Worker 18: 517200 steal requests declined
Worker 18: 63791 tasks executed
Worker 18: 0 tasks sent
Worker 18: 0 tasks split
Worker 18: 100.00 % steal-one
Worker 18: 0.00 % steal-half
Worker 26: 1 steal requests sent
Worker 26: 0 steal requests handled
Worker 26: 26 steal requests declined
Worker  3: random victim fast path (slow path):   0 % (100 %)
Worker 12: random victim fast path (slow path):   0 % (100 %)
Worker 29: 63295 steal requests sent
Worker 29: 0 steal requests handled
Worker 29: 516139 steal requests declined
Worker 32: 1 steal requests sent
Worker 32: 0 steal requests handled
Worker 32: 32 steal requests declined
Worker 32: 0 tasks executed
Worker 32: 0 tasks sent
Worker 32: 0 tasks split
Worker 32: 100.00 % steal-one
Worker 32: 0.00 % steal-half
Worker 32: random victim fast path (slow path):   0 % (100 %)
Worker 20: 1 steal requests sent
Worker 20: 0 steal requests handled
Worker 20: 31 steal requests declined
Worker 20: 0 tasks executed
Worker 20: 0 tasks sent
Worker 20: 0 tasks split
Worker 20: 100.00 % steal-one
Worker 20: 0.00 % steal-half
Worker 20: random victim fast path (slow path):   0 % (100 %)
Worker 31: 0 tasks split
Worker 31: 100.00 % steal-one
Worker 31: 0.00 % steal-half
Worker 31: random victim fast path (slow path):   0 % (100 %)
Worker 29: 63294 tasks executed
Worker 29: 0 tasks sent
Worker 29: 0 tasks split
Worker 29: 100.00 % steal-one
Worker 29: 0.00 % steal-half
Worker 18: random victim fast path (slow path):   0 % (100 %)
Worker  2: 0 tasks sent
Worker  2: 0 tasks split
Worker  2: 100.00 % steal-one
Worker  2: 0.00 % steal-half
Worker  2: random victim fast path (slow path):   0 % (100 %)
Worker 29: random victim fast path (slow path):   0 % (100 %)
Worker 26: 0 tasks executed
Worker 26: 0 tasks sent
Worker 26: 0 tasks split
Worker 26: 100.00 % steal-one
Worker 26: 0.00 % steal-half
Worker 26: random victim fast path (slow path):   0 % (100 %)
+========================================+
--------------------------------------------------------------------------
Scheduler:                                    Weave (eager flowvars)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      1375.06
Max RSS (KB):                                 390200
Runtime RSS (KB):                             316080
# of page faults:                             96782
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0

Analysis

Without steal-half over 50k steal requests are sent per worker while with steal-half, about ~70 or so are needed. The overhead is enormous, I'm surprised that the runtime is only about 3x slower.

Looking back into the paper, on 36 cores, the max speedup measured with steal-one is 6x over sequential while with steal-half it's 32x. And SPC with tasks of 10µs is the worst case scenario for stealing only one task:

image

from weave.

mratsim avatar mratsim commented on August 17, 2024

Latest commit recovers a huge part as runs are now at 460ms (but the run at 1350 is probably an outlier, most were at 900ms).

Still 150ms (50% perf) lost somewhere, and this scales linearly with task length

Eager futures

Usage: weave_spc_metrics_fixed_eager <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0

+========================================+
|  Per-worker statistics                 |
+========================================+
  / use -d:WV_profile for high-res timers /  
Worker 25: 96 steal requests sent
Worker 28: 120 steal requests sent
Worker  4: 104 steal requests sent
Worker 24: 114 steal requests sent
Worker 24: 98 steal requests handled
Worker 24: 401 steal requests declined
Worker 24: 27221 tasks executed
Worker 24: 132121 tasks sent
Worker 24: 0 tasks split
Worker 24: 21.93 % steal-one
Worker 24: 78.07 % steal-half
Worker 24: random victim fast path (slow path):   0 % (100 %)
Worker 34: 121 steal requests sent
Worker 34: 74 steal requests handled
Worker 34: 438 steal requests declined
Worker 34: 28078 tasks executed
Worker 34: 21919 tasks sent
Worker 34: 0 tasks split
Worker 34: 20.66 % steal-one
Worker 34: 79.34 % steal-half
Worker 34: random victim fast path (slow path):   0 % (100 %)
Worker 28: 94 steal requests handled
Worker 28: 439 steal requests declined
Worker 28: 28616 tasks executed
Worker 28: 29784 tasks sent
Worker 28: 0 tasks split
Worker 28: 20.83 % steal-one
Worker 28: 79.17 % steal-half
Worker 28: random victim fast path (slow path):   0 % (100 %)
Worker 19: 110 steal requests sent
Worker 19: 78 steal requests handled
Worker 19: 436 steal requests declined
Worker 19: 28216 tasks executed
Worker 19: 27046 tasks sent
Worker 19: 0 tasks split
Worker 19: 22.73 % steal-one
Worker 19: 77.27 % steal-half
Worker 19: random victim fast path (slow path):   0 % (100 %)
Worker 21: 97 steal requests sent
Worker 21: 89 steal requests handled
Worker 21: 427 steal requests declined
Worker 21: 26981 tasks executed
Worker 21: 65356 tasks sent
Worker 21: 0 tasks split
Worker 21: 25.77 % steal-one
Worker 21: 74.23 % steal-half
Worker 21: random victim fast path (slow path):   0 % (100 %)
Worker 14: 110 steal requests sent
Worker 14: 63 steal requests handled
Worker 14: 491 steal requests declined
Worker 14: 28170 tasks executed
Worker 16: 87 steal requests sent
Worker 16: 84 steal requests handled
Worker 16: 460 steal requests declined
Worker 16: 28242 tasks executed
Worker 16: 61795 tasks sent
Worker 16: 0 tasks split
Worker 16: 28.74 % steal-one
Worker 16: 71.26 % steal-half
Worker 16: random victim fast path (slow path):   0 % (100 %)
Worker  9: 97 steal requests sent
Worker  9: 92 steal requests handled
Worker  9: 451 steal requests declined
Worker  9: 28175 tasks executed
Worker  9: 51143 tasks sent
Worker  9: 0 tasks split
Worker  9: 25.77 % steal-one
Worker  9: 74.23 % steal-half
Worker  9: random victim fast path (slow path):   0 % (100 %)
Worker 22: 104 steal requests sent
Worker 22: 64 steal requests handled
Worker 22: 439 steal requests declined
Worker 22: 29173 tasks executed
Worker 22: 48321 tasks sent
Worker 22: 0 tasks split
Worker 22: 24.04 % steal-one
Worker 22: 75.96 % steal-half
Worker 22: random victim fast path (slow path):   0 % (100 %)
Worker 25: 78 steal requests handled
Worker 25: 441 steal requests declined
Worker 25: 28029 tasks executed
Worker 25: 40230 tasks sent
Worker 25: 0 tasks split
Worker 25: 26.04 % steal-one
Worker 25: 73.96 % steal-half
Worker 25: random victim fast path (slow path):   0 % (100 %)
Worker 23: 102 steal requests sent
Worker 23: 76 steal requests handled
Worker 23: 439 steal requests declined
Worker 23: 24928 tasks executed
Worker 23: 64120 tasks sent
Worker 23: 0 tasks split
Worker 23: 24.51 % steal-one
Worker 23: 75.49 % steal-half
Worker 23: random victim fast path (slow path):   0 % (100 %)
Worker 27: 110 steal requests sent
Worker 27: 75 steal requests handled
Worker 27: 438 steal requests declined
Worker 27: 28019 tasks executed
Worker 27: 33487 tasks sent
Worker 27: 0 tasks split
Worker 27: 22.73 % steal-one
Worker 27: 77.27 % steal-half
Worker 27: random victim fast path (slow path):   0 % (100 %)
Worker  1: 103 steal requests sent
Worker  1: 88 steal requests handled
Worker  1: 456 steal requests declined
Worker  1: 28167 tasks executed
Worker  1: 67377 tasks sent
Worker  5: 103 steal requests sent
Worker  5: 86 steal requests handled
Worker  5: 450 steal requests declined
Worker  5: 28890 tasks executed
Worker  5: 33459 tasks sent
Worker  5: 0 tasks split
Worker  5: 24.27 % steal-one
Worker  5: 75.73 % steal-half
Worker  5: random victim fast path (slow path):   0 % (100 %)
Worker 15: 119 steal requests sent
Worker 15: 85 steal requests handled
Worker 15: 450 steal requests declined
Worker 15: 28674 tasks executed
Worker 15: 56462 tasks sent
Worker  4: 69 steal requests handled
Worker  4: 444 steal requests declined
Worker  4: 29636 tasks executed
Worker  4: 41430 tasks sent
Worker  4: 0 tasks split
Worker  4: 24.04 % steal-one
Worker  4: 75.96 % steal-half
Worker  4: random victim fast path (slow path):   0 % (100 %)
Worker 33: 112 steal requests sent
Worker 33: 75 steal requests handled
Worker 33: 455 steal requests declined
Worker 33: 28247 tasks executed
Worker 33: 22432 tasks sent
Worker 33: 0 tasks split
Worker 33: 22.32 % steal-one
Worker 33: 77.68 % steal-half
Worker 33: random victim fast path (slow path):   0 % (100 %)
Worker 17: 108 steal requests sent
Worker 17: 99 steal requests handled
Worker 17: 434 steal requests declined
Worker 17: 28325 tasks executed
Worker 17: 13274 tasks sent
Worker 17: 0 tasks split
Worker 17: 23.15 % steal-one
Worker 17: 76.85 % steal-half
Worker 17: random victim fast path (slow path):   0 % (100 %)
Worker 30: 113 steal requests sent
Worker 30: 72 steal requests handled
Worker 30: 441 steal requests declined
Worker 30: 26573 tasks executed
Worker 30: 219975 tasks sent
Worker 30: 0 tasks split
Worker 30: 22.12 % steal-one
Worker 30: 77.88 % steal-half
Worker 20: 100 steal requests sent
Worker 20: 89 steal requests handled
Worker 20: 445 steal requests declined
Worker 20: 27908 tasks executed
Worker 20: 55788 tasks sent
Worker 20: 0 tasks split
Worker 20: 25.00 % steal-one
Worker 20: 75.00 % steal-half
Worker 20: random victim fast path (slow path):   0 % (100 %)
Worker 18: 110 steal requests sent
Worker 18: 73 steal requests handled
Worker 18: 442 steal requests declined
Worker 18: 27960 tasks executed
Worker 18: 17324 tasks sent
Worker 18: 0 tasks split
Worker 18: 22.73 % steal-one
Worker 18: 77.27 % steal-half
Worker 18: random victim fast path (slow path):   0 % (100 %)
Worker 26: 124 steal requests sent
Worker 26: 86 steal requests handled
Worker 35: 111 steal requests sent
Worker 35: 80 steal requests handled
Worker 35: 439 steal requests declined
Worker 35: 27962 tasks executed
Worker 35: 69276 tasks sent
Worker 35: 0 tasks split
Worker 35: 22.52 % steal-one
Worker 35: 77.48 % steal-half
Worker 35: random victim fast path (slow path):   0 % (100 %)
Worker  1: 0 tasks split
Worker  1: 24.27 % steal-one
Worker  1: 75.73 % steal-half
Worker  1: random victim fast path (slow path):   0 % (100 %)
Worker 12: 109 steal requests sent
Worker 12: 89 steal requests handled
Worker 12: 466 steal requests declined
Worker 12: 28543 tasks executed
Worker 12: 46752 tasks sent
Worker 12: 0 tasks split
Worker 12: 22.94 % steal-one
Worker 12: 77.06 % steal-half
Worker 12: random victim fast path (slow path):   0 % (100 %)
Worker  0: 66 steal requests sent
Worker  0: 861 steal requests handled
Worker  0: 64 steal requests declined
Worker  0: 15483 tasks executed
Worker  0: 987847 tasks sent
Worker  0: 0 tasks split
Worker  0: 75.76 % steal-one
Worker  0: 24.24 % steal-half
Worker  0: random victim fast path (slow path):   0 % (100 %)
Worker 26: 463 steal requests declined
Worker 26: 28511 tasks executed
Worker 26: 32521 tasks sent
Worker 26: 0 tasks split
Worker 26: 20.16 % steal-one
Worker 26: 79.84 % steal-half
Worker 26: random victim fast path (slow path):   0 % (100 %)
Worker  3: 102 steal requests sent
Worker  3: 90 steal requests handled
Worker  3: 468 steal requests declined
Worker  3: 29074 tasks executed
Worker  3: 37933 tasks sent
Worker  3: 0 tasks split
Worker  3: 24.51 % steal-one
Worker  3: 75.49 % steal-half
Worker  3: random victim fast path (slow path):   0 % (100 %)
Worker 29: 106 steal requests sent
Worker 29: 78 steal requests handled
Worker 29: 448 steal requests declined
Worker 29: 28284 tasks executed
Worker 29: 22885 tasks sent
Worker 29: 0 tasks split
Worker 29: 23.58 % steal-one
Worker 29: 76.42 % steal-half
Worker 29: random victim fast path (slow path):   0 % (100 %)
Worker 10: 100 steal requests sent
Worker 10: 78 steal requests handled
Worker 10: 473 steal requests declined
Worker 10: 28898 tasks executed
Worker 10: 36972 tasks sent
Worker 31: 95 steal requests sent
Worker 31: 78 steal requests handled
Worker 31: 436 steal requests declined
Worker  6: 75 steal requests sent
Worker  6: 83 steal requests handled
Worker  2: 119 steal requests sent
Worker  2: 82 steal requests handled
Worker  2: 461 steal requests declined
Worker  2: 28875 tasks executed
Worker  2: 16105 tasks sent
Worker  2: 0 tasks split
Worker  2: 21.01 % steal-one
Worker  2: 78.99 % steal-half
Worker  2: random victim fast path (slow path):   0 % (100 %)
Worker 11: 106 steal requests sent
Worker 11: 97 steal requests handled
Worker 11: 442 steal requests declined
Worker 11: 28158 tasks executed
Worker 11: 112512 tasks sent
Worker 11: 0 tasks split
Worker 11: 23.58 % steal-one
Worker 11: 76.42 % steal-half
Worker 11: random victim fast path (slow path):   0 % (100 %)
Worker 32: 90 steal requests sent
Worker 32: 79 steal requests handled
Worker 32: 439 steal requests declined
Worker 32: 27957 tasks executed
Worker 32: 25561 tasks sent
Worker 32: 0 tasks split
Worker 32: 27.78 % steal-one
Worker 32: 72.22 % steal-half
Worker 32: random victim fast path (slow path):   0 % (100 %)
Worker 31: 27563 tasks executed
Worker 31: 24819 tasks sent
Worker 31: 0 tasks split
Worker 14: 53894 tasks sent
Worker 14: 0 tasks split
Worker 14: 22.73 % steal-one
Worker 14: 77.27 % steal-half
Worker 14: random victim fast path (slow path):   0 % (100 %)
Worker  6: 477 steal requests declined
Worker  6: 26358 tasks executed
Worker  6: 104616 tasks sent
Worker  6: 0 tasks split
Worker  6: 33.33 % steal-one
Worker  6: 66.67 % steal-half
Worker  6: random victim fast path (slow path):   0 % (100 %)
Worker 10: 0 tasks split
Worker 10: 25.00 % steal-one
Worker 10: 75.00 % steal-half
Worker 10: random victim fast path (slow path):   0 % (100 %)
Worker  8: 114 steal requests sent
Worker  8: 87 steal requests handled
Worker  8: 458 steal requests declined
Worker  8: 29131 tasks executed
Worker 30: random victim fast path (slow path):   0 % (100 %)
Worker  7: 89 steal requests sent
Worker  7: 77 steal requests handled
Worker  7: 458 steal requests declined
Worker  7: 28741 tasks executed
Worker  7: 28255 tasks sent
Worker  7: 0 tasks split
Worker  7: 28.09 % steal-one
Worker  7: 71.91 % steal-half
Worker  7: random victim fast path (slow path):   0 % (100 %)
Worker 13: 100 steal requests sent
Worker 13: 64 steal requests handled
Worker 13: 463 steal requests declined
Worker 13: 28234 tasks executed
Worker 13: 69735 tasks sent
Worker 13: 0 tasks split
Worker  8: 34244 tasks sent
Worker  8: 0 tasks split
Worker  8: 21.93 % steal-one
Worker  8: 78.07 % steal-half
Worker  8: random victim fast path (slow path):   0 % (100 %)
Worker 13: 25.00 % steal-one
Worker 13: 75.00 % steal-half
Worker 13: random victim fast path (slow path):   0 % (100 %)
Worker 15: 0 tasks split
Worker 15: 21.01 % steal-one
Worker 15: 78.99 % steal-half
Worker 15: random victim fast path (slow path):   0 % (100 %)
Worker 31: 26.32 % steal-one
Worker 31: 73.68 % steal-half
Worker 31: random victim fast path (slow path):   0 % (100 %)
+========================================+
--------------------------------------------------------------------------
Scheduler:                                    Weave (eager flowvars)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      432.051
Max RSS (KB):                                 390128
Runtime RSS (KB):                             316144
# of page faults:                             96780
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0

Lazy Futures

Usage: weave_spc_metrics_fixed_lazy <# of tasks:1000000> <task granularity (us): 10> [polling interval (us): task granularity]
Running with default config tasks = 1000000, granularity (us) = 10, polling (us) = 10.0

+========================================+
|  Per-worker statistics                 |
+========================================+
  / use -d:WV_profile for high-res timers /  
Worker 22: 81 steal requests sent
Worker 24: 76 steal requests sent
Worker 22: 72 steal requests handled
Worker 22: 104 steal requests declined
Worker 22: 27922 tasks executed
Worker 22: 38925 tasks sent
Worker 22: 0 tasks split
Worker  2: 92 steal requests sent
Worker  2: 72 steal requests handled
Worker  2: 380 steal requests declined
Worker  2: 29347 tasks executed
Worker  2: 17204 tasks sent
Worker  2: 0 tasks split
Worker  2: 27.17 % steal-one
Worker  2: 72.83 % steal-half
Worker  2: 0 futures converted
Worker 11: 82 steal requests sent
Worker 11: 84 steal requests handled
Worker 11: 411 steal requests declined
Worker  8: 86 steal requests sent
Worker  8: 65 steal requests handled
Worker  8: 534 steal requests declined
Worker  8: 29051 tasks executed
Worker  8: 36422 tasks sent
Worker 25: 84 steal requests sent
Worker 25: 82 steal requests handled
Worker 25: 364 steal requests declined
Worker 25: 27847 tasks executed
Worker 25: 77614 tasks sent
Worker 25: 0 tasks split
Worker 25: 29.76 % steal-one
Worker 25: 70.24 % steal-half
Worker 25: 0 futures converted
Worker 25: random victim fast path (slow path):   0 % (100 %)
Worker 24: 73 steal requests handled
Worker 24: 381 steal requests declined
Worker 24: 28139 tasks executed
Worker 24: 75289 tasks sent
Worker 24: 0 tasks split
Worker 30: 72 steal requests sent
Worker 30: 45 steal requests handled
Worker 30: 89 steal requests declined
Worker 22: 30.86 % steal-one
Worker 22: 69.14 % steal-half
Worker 22: 0 futures converted
Worker 33: 80 steal requests sent
Worker 33: 51 steal requests handled
Worker 33: 396 steal requests declined
Worker 33: 28715 tasks executed
Worker 33: 16592 tasks sent
Worker 33: 0 tasks split
Worker 33: 31.25 % steal-one
Worker 33: 68.75 % steal-half
Worker 33: 0 futures converted
Worker 33: random victim fast path (slow path):   0 % (100 %)
Worker 12: 84 steal requests sent
Worker 12: 65 steal requests handled
Worker 12: 389 steal requests declined
Worker 12: 28884 tasks executed
Worker 12: 54785 tasks sent
Worker 12: 0 tasks split
Worker 12: 29.76 % steal-one
Worker 12: 70.24 % steal-half
Worker 12: 0 futures converted
Worker 12: random victim fast path (slow path):   0 % (100 %)
Worker 28: 71 steal requests sent
Worker 14: 96 steal requests sent
Worker 14: 72 steal requests handled
Worker 14: 547 steal requests declined
Worker 14: 27774 tasks executed
Worker 14: 42357 tasks sent
Worker 14: 0 tasks split
Worker 31: 86 steal requests sent
Worker 31: 67 steal requests handled
Worker 31: 350 steal requests declined
Worker 31: 26703 tasks executed
Worker 31: 156228 tasks sent
Worker 31: 0 tasks split
Worker 31: 29.07 % steal-one
Worker 31: 70.93 % steal-half
Worker 31: 0 futures converted
Worker 35: 93 steal requests sent
Worker 35: 67 steal requests handled
Worker 35: 389 steal requests declined
Worker 35: 28606 tasks executed
Worker 35: 29606 tasks sent
Worker 35: 0 tasks split
Worker 35: 26.88 % steal-one
Worker 35: 73.12 % steal-half
Worker 35: 0 futures converted
Worker 35: random victim fast path (slow path):   0 % (100 %)
Worker  6: 85 steal requests sent
Worker  6: 65 steal requests handled
Worker  7: 91 steal requests sent
Worker  7: 69 steal requests handled
Worker  7: 392 steal requests declined
Worker  7: 28545 tasks executed
Worker  7: 43755 tasks sent
Worker  7: 0 tasks split
Worker  7: 27.47 % steal-one
Worker  7: 72.53 % steal-half
Worker  7: 0 futures converted
Worker  7: random victim fast path (slow path):   0 % (100 %)
Worker 27: 73 steal requests sent
Worker 27: 54 steal requests handled
Worker 27: 90 steal requests declined
Worker 27: 27936 tasks executed
Worker 27: 41504 tasks sent
Worker 27: 0 tasks split
Worker 27: 34.25 % steal-one
Worker 27: 65.75 % steal-half
Worker 27: 0 futures converted
Worker 27: random victim fast path (slow path):   0 % (100 %)
Worker  8: 0 tasks split
Worker  8: 29.07 % steal-one
Worker  8: 70.93 % steal-half
Worker  8: 0 futures converted
Worker  8: random victim fast path (slow path):   0 % (100 %)
Worker  0: 64 steal requests sent
Worker  0: 727 steal requests handled
Worker  0: 94 steal requests declined
Worker  0: 14586 tasks executed
Worker  0: 989563 tasks sent
Worker  0: 0 tasks split
Worker  0: 78.12 % steal-one
Worker  0: 21.88 % steal-half
Worker  0: 0 futures converted
Worker  0: random victim fast path (slow path):   0 % (100 %)
Worker 21: 76 steal requests sent
Worker 21: 43 steal requests handled
Worker 21: 416 steal requests declined
Worker 21: 26044 tasks executed
Worker 21: 104564 tasks sent
Worker 21: 0 tasks split
Worker 21: 32.89 % steal-one
Worker 21: 67.11 % steal-half
Worker 21: 0 futures converted
Worker 21: random victim fast path (slow path):   0 % (100 %)
Worker 28: 52 steal requests handled
Worker 28: 386 steal requests declined
Worker 28: 27932 tasks executed
Worker 28: 33624 tasks sent
Worker 28: 0 tasks split
Worker 28: 35.21 % steal-one
Worker 28: 64.79 % steal-half
Worker 28: 0 futures converted
Worker 28: random victim fast path (slow path):   0 % (100 %)
Worker 20: 86 steal requests sent
Worker 20: 52 steal requests handled
Worker 20: 87 steal requests declined
Worker 20: 28479 tasks executed
Worker 20: 18306 tasks sent
Worker 20: 0 tasks split
Worker 20: 29.07 % steal-one
Worker 20: 70.93 % steal-half
Worker 20: 0 futures converted
Worker 20: random victim fast path (slow path):   0 % (100 %)
Worker  1: 93 steal requests sent
Worker  1: 53 steal requests handled
Worker  1: 422 steal requests declined
Worker  1: 29042 tasks executed
Worker  1: 42879 tasks sent
Worker  1: 0 tasks split
Worker  1: 26.88 % steal-one
Worker  1: 73.12 % steal-half
Worker  1: 0 futures converted
Worker  1: random victim fast path (slow path):   0 % (100 %)
Worker 34: 76 steal requests sent
Worker 34: 63 steal requests handled
Worker 34: 385 steal requests declined
Worker 34: 27103 tasks executed
Worker 34: 118164 tasks sent
Worker 34: 0 tasks split
Worker 34: 32.89 % steal-one
Worker  3: 94 steal requests sent
Worker  3: 72 steal requests handled
Worker 30: 27315 tasks executed
Worker 30: 64257 tasks sent
Worker 30: 0 tasks split
Worker 30: 34.72 % steal-one
Worker 30: 65.28 % steal-half
Worker 30: 0 futures converted
Worker 30: random victim fast path (slow path):   0 % (100 %)
Worker 31: random victim fast path (slow path):   0 % (100 %)
Worker  2: random victim fast path (slow path):   0 % (100 %)
Worker 23: 80 steal requests sent
Worker 23: 63 steal requests handled
Worker 23: 398 steal requests declined
Worker 23: 23949 tasks executed
Worker 23: 174899 tasks sent
Worker 23: 0 tasks split
Worker 23: 31.25 % steal-one
Worker 23: 68.75 % steal-half
Worker 23: 0 futures converted
Worker 23: random victim fast path (slow path):   0 % (100 %)
Worker 11: 28967 tasks executed
Worker 11: 46544 tasks sent
Worker 11: 0 tasks split
Worker 11: 30.49 % steal-one
Worker 11: 69.51 % steal-half
Worker 11: 0 futures converted
Worker 11: random victim fast path (slow path):   0 % (100 %)
Worker 10: 94 steal requests sent
Worker 10: 60 steal requests handled
Worker 18: 88 steal requests sent
Worker 18: 49 steal requests handled
Worker 15: 97 steal requests sent
Worker 15: 59 steal requests handled
Worker 15: 415 steal requests declined
Worker 15: 28584 tasks executed
Worker 15: 78177 tasks sent
Worker 15: 0 tasks split
Worker 15: 25.77 % steal-one
Worker 15: 74.23 % steal-half
Worker 15: 0 futures converted
Worker 15: random victim fast path (slow path):   0 % (100 %)
Worker 22: random victim fast path (slow path):   0 % (100 %)
Worker 32: 77 steal requests sent
Worker 32: 71 steal requests handled
Worker 32: 398 steal requests declined
Worker 32: 28068 tasks executed
Worker 32: 44674 tasks sent
Worker 32: 0 tasks split
Worker 32: 32.47 % steal-one
Worker 32: 67.53 % steal-half
Worker 32: 0 futures converted
Worker 32: random victim fast path (slow path):   0 % (100 %)
Worker  9: 78 steal requests sent
Worker  9: 80 steal requests handled
Worker  9: 543 steal requests declined
Worker 29: 99 steal requests sent
Worker 29: 67 steal requests handled
Worker 29: 371 steal requests declined
Worker 29: 28153 tasks executed
Worker 29: 24860 tasks sent
Worker 29: 0 tasks split
Worker 29: 25.25 % steal-one
Worker 29: 74.75 % steal-half
Worker 29: 0 futures converted
Worker 29: random victim fast path (slow path):   0 % (100 %)
Worker  5: 87 steal requests sent
Worker  5: 62 steal requests handled
Worker  5: 435 steal requests declined
Worker  5: 29092 tasks executed
Worker  5: 23770 tasks sent
Worker  9: 28407 tasks executed
Worker 18: 90 steal requests declined
Worker 14: 26.04 % steal-one
Worker 14: 73.96 % steal-half
Worker 14: 0 futures converted
Worker 24: 32.89 % steal-one
Worker 24: 67.11 % steal-half
Worker 24: 0 futures converted
Worker 24: random victim fast path (slow path):   0 % (100 %)
Worker  4: 111 steal requests sent
Worker  4: 60 steal requests handled
Worker 13: 64 steal requests sent
Worker 13: 59 steal requests handled
Worker 13: 546 steal requests declined
Worker 13: 28161 tasks executed
Worker  9: 102230 tasks sent
Worker 18: 26993 tasks executed
Worker 26: 86 steal requests sent
Worker 26: 122 steal requests handled
Worker 26: 337 steal requests declined
Worker 26: 27276 tasks executed
Worker 16: 72 steal requests sent
Worker  3: 410 steal requests declined
Worker  3: 29090 tasks executed
Worker  3: 25093 tasks sent
Worker  3: 0 tasks split
Worker  3: 26.60 % steal-one
Worker  3: 73.40 % steal-half
Worker  3: 0 futures converted
Worker  3: random victim fast path (slow path):   0 % (100 %)
Worker 14: random victim fast path (slow path):   0 % (100 %)
Worker 34: 67.11 % steal-half
Worker 34: 0 futures converted
Worker 34: random victim fast path (slow path):   0 % (100 %)
Worker  4: 419 steal requests declined
Worker  4: 29014 tasks executed
Worker  4: 23181 tasks sent
Worker  4: 0 tasks split
Worker  4: 22.52 % steal-one
Worker  4: 77.48 % steal-half
Worker  4: 0 futures converted
Worker  4: random victim fast path (slow path):   0 % (100 %)
Worker 26: 21116 tasks sent
Worker 26: 0 tasks split
Worker 26: 29.07 % steal-one
Worker 26: 70.93 % steal-half
Worker 26: 0 futures converted
Worker 26: random victim fast path (slow path):   0 % (100 %)
Worker  9: 0 tasks split
Worker  9: 32.05 % steal-one
Worker  9: 67.95 % steal-half
Worker  9: 0 futures converted
Worker  9: random victim fast path (slow path):   0 % (100 %)
Worker 10: 573 steal requests declined
Worker 10: 28782 tasks executed
Worker 10: 45335 tasks sent
Worker 10: 0 tasks split
Worker 10: 26.60 % steal-one
Worker 10: 73.40 % steal-half
Worker 10: 0 futures converted
Worker 10: random victim fast path (slow path):   0 % (100 %)
Worker 13: 62409 tasks sent
Worker 13: 0 tasks split
Worker 13: 39.06 % steal-one
Worker 13: 60.94 % steal-half
Worker 13: 0 futures converted
Worker 13: random victim fast path (slow path):   0 % (100 %)
Worker 18: 50792 tasks sent
Worker 18: 0 tasks split
Worker 18: 28.41 % steal-one
Worker 18: 71.59 % steal-half
Worker 18: 0 futures converted
Worker 18: random victim fast path (slow path):   0 % (100 %)
Worker 16: 53 steal requests handled
Worker 16: 401 steal requests declined
Worker 16: 28988 tasks executed
Worker 16: 38098 tasks sent
Worker 16: 0 tasks split
Worker 16: 34.72 % steal-one
Worker 16: 65.28 % steal-half
Worker 16: 0 futures converted
Worker 16: random victim fast path (slow path):   0 % (100 %)
Worker 17: 86 steal requests sent
Worker 17: 64 steal requests handled
Worker 17: 419 steal requests declined
Worker 17: 28864 tasks executed
Worker 17: 31653 tasks sent
Worker 17: 0 tasks split
Worker 17: 29.07 % steal-one
Worker 17: 70.93 % steal-half
Worker 17: 0 futures converted
Worker 17: random victim fast path (slow path):   0 % (100 %)
Worker  5: 0 tasks split
Worker  5: 28.74 % steal-one
Worker  5: 71.26 % steal-half
Worker  5: 0 futures converted
Worker  5: random victim fast path (slow path):   0 % (100 %)
Worker 19: 104 steal requests sent
Worker 19: 74 steal requests handled
Worker 19: 389 steal requests declined
Worker 19: 28664 tasks executed
Worker 19: 22238 tasks sent
Worker 19: 0 tasks split
Worker 19: 24.04 % steal-one
Worker 19: 75.96 % steal-half
Worker 19: 0 futures converted
Worker 19: random victim fast path (slow path):   0 % (100 %)
Worker  6: 404 steal requests declined
Worker  6: 28978 tasks executed
Worker  6: 20032 tasks sent
Worker  6: 0 tasks split
Worker  6: 29.41 % steal-one
Worker  6: 70.59 % steal-half
Worker  6: 0 futures converted
Worker  6: random victim fast path (slow path):   0 % (100 %)
+========================================+
--------------------------------------------------------------------------
Scheduler:                                    Weave (lazy flowvars)
Benchmark:                                    SPC (Single task Producer - multi Consumer)
Threads:                                      36
Time(ms)                                      440.39
Max RSS (KB):                                 390204
Runtime RSS (KB):                             316252
# of page faults:                             96776
--------------------------------------------------------------------------
# of tasks:                                   1000000
Task granularity (us):                        10
Polling / manual load balacing interval (us): 10.0

from weave.

mratsim avatar mratsim commented on August 17, 2024

Mystery solved, with 1 thread, the new runtime was doing 1.5x more work than expected due to mixing local and global timers in the benchmark: 10000 tasks of 1ms were talking 14.8s in single threaded instead of 10s.

DeepinScreenshot_select-area_20191205132422

from weave.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.