fix(scheduler): align(64) on SchedulerStats to prevent false sharing
Adding slot_hits + slot_displacements in RFC 005 grew SchedulerStats from 16 to 32 bytes — exactly 2 per cache line. run_queue_len (written on every push/pop by thread N) then false-shared with fields of thread N+1, causing ~45-60% yield-storm regression at t≥8 visible equally in slot-on and slot-off paths.
This commit is contained in:
+141
-141
@@ -2,313 +2,313 @@
|
||||
"chained_spawn": {
|
||||
"smarm 1-thread": {
|
||||
"result": 1000,
|
||||
"median": 390,
|
||||
"min": 380,
|
||||
"max": 1872
|
||||
"median": 410,
|
||||
"min": 379,
|
||||
"max": 2167
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 1000,
|
||||
"median": 877,
|
||||
"min": 834,
|
||||
"max": 1289
|
||||
"median": 977,
|
||||
"min": 883,
|
||||
"max": 1154
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 1000,
|
||||
"median": 57,
|
||||
"min": 56,
|
||||
"max": 62
|
||||
"median": 72,
|
||||
"min": 71,
|
||||
"max": 80
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 1000,
|
||||
"median": 188,
|
||||
"min": 174,
|
||||
"max": 213
|
||||
"median": 216,
|
||||
"min": 171,
|
||||
"max": 257
|
||||
}
|
||||
},
|
||||
"yield_many": {
|
||||
"smarm 1-thread": {
|
||||
"result": 200000,
|
||||
"median": 16992,
|
||||
"min": 16132,
|
||||
"max": 20241
|
||||
"median": 15617,
|
||||
"min": 15039,
|
||||
"max": 16240
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 200000,
|
||||
"median": 110968,
|
||||
"min": 109901,
|
||||
"max": 113206
|
||||
"median": 155738,
|
||||
"min": 149294,
|
||||
"max": 157106
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 200000,
|
||||
"median": 4874,
|
||||
"min": 4812,
|
||||
"max": 4915
|
||||
"median": 4820,
|
||||
"min": 4771,
|
||||
"max": 5091
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 200000,
|
||||
"median": 8667,
|
||||
"min": 7713,
|
||||
"max": 9942
|
||||
"median": 8403,
|
||||
"min": 7445,
|
||||
"max": 9752
|
||||
}
|
||||
},
|
||||
"fan_out_compute": {
|
||||
"smarm 1-thread": {
|
||||
"result": 33860,
|
||||
"median": 13249,
|
||||
"min": 13189,
|
||||
"max": 13350
|
||||
"median": 13412,
|
||||
"min": 13361,
|
||||
"max": 13917
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 33860,
|
||||
"median": 2448,
|
||||
"min": 2279,
|
||||
"max": 3147
|
||||
"median": 2359,
|
||||
"min": 2158,
|
||||
"max": 2631
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 33860,
|
||||
"median": 12319,
|
||||
"min": 12299,
|
||||
"max": 12460
|
||||
"median": 14138,
|
||||
"min": 13512,
|
||||
"max": 14236
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 33860,
|
||||
"median": 1605,
|
||||
"min": 1363,
|
||||
"max": 2695
|
||||
"median": 1532,
|
||||
"min": 1455,
|
||||
"max": 2447
|
||||
}
|
||||
},
|
||||
"ping_pong_oneshot": {
|
||||
"smarm 1-thread": {
|
||||
"result": 1000,
|
||||
"median": 912,
|
||||
"min": 875,
|
||||
"max": 971
|
||||
"median": 983,
|
||||
"min": 853,
|
||||
"max": 1166
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 1000,
|
||||
"median": 1540,
|
||||
"min": 1430,
|
||||
"max": 1815
|
||||
"median": 1562,
|
||||
"min": 1466,
|
||||
"max": 1726
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 1000,
|
||||
"median": 376,
|
||||
"min": 360,
|
||||
"max": 548
|
||||
"median": 421,
|
||||
"min": 405,
|
||||
"max": 634
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 1000,
|
||||
"median": 10736,
|
||||
"min": 8365,
|
||||
"max": 13093
|
||||
"median": 9254,
|
||||
"min": 7836,
|
||||
"max": 11613
|
||||
}
|
||||
},
|
||||
"spawn_storm_busy": {
|
||||
"smarm 1-thread": {
|
||||
"result": 10000,
|
||||
"median": 106102,
|
||||
"min": 95978,
|
||||
"max": 111386
|
||||
"median": 108420,
|
||||
"min": 107179,
|
||||
"max": 110463
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 10000,
|
||||
"median": 69661,
|
||||
"min": 67241,
|
||||
"max": 72895
|
||||
"median": 49405,
|
||||
"min": 48118,
|
||||
"max": 51497
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 10000,
|
||||
"median": 1150,
|
||||
"min": 1141,
|
||||
"max": 1180
|
||||
"median": 1157,
|
||||
"min": 1152,
|
||||
"max": 1194
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 10000,
|
||||
"median": 18821,
|
||||
"min": 16107,
|
||||
"max": 25494
|
||||
"median": 20476,
|
||||
"min": 15912,
|
||||
"max": 31254
|
||||
}
|
||||
},
|
||||
"mpsc_contention": {
|
||||
"smarm 1-thread": {
|
||||
"result": 320000,
|
||||
"median": 3535,
|
||||
"min": 3439,
|
||||
"max": 3804
|
||||
"median": 6270,
|
||||
"min": 6133,
|
||||
"max": 6932
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 320000,
|
||||
"median": 36652,
|
||||
"min": 33385,
|
||||
"max": 39609
|
||||
"median": 34690,
|
||||
"min": 32198,
|
||||
"max": 38480
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 320000,
|
||||
"median": 5510,
|
||||
"min": 5402,
|
||||
"max": 6584
|
||||
"median": 6022,
|
||||
"min": 5901,
|
||||
"max": 6185
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 320000,
|
||||
"median": 52301,
|
||||
"min": 37540,
|
||||
"max": 78902
|
||||
"median": 59561,
|
||||
"min": 43293,
|
||||
"max": 72976
|
||||
}
|
||||
},
|
||||
"many_timers": {
|
||||
"smarm 1-thread": {
|
||||
"result": 10000,
|
||||
"median": 105353,
|
||||
"min": 101581,
|
||||
"max": 125061
|
||||
"median": 120756,
|
||||
"min": 108228,
|
||||
"max": 126568
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 10000,
|
||||
"median": 95839,
|
||||
"min": 92306,
|
||||
"max": 98854
|
||||
"median": 97810,
|
||||
"min": 93054,
|
||||
"max": 100845
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 10000,
|
||||
"median": 12568,
|
||||
"min": 12372,
|
||||
"max": 12675
|
||||
"median": 12554,
|
||||
"min": 12425,
|
||||
"max": 13280
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 10000,
|
||||
"median": 16393,
|
||||
"min": 15434,
|
||||
"max": 17018
|
||||
"median": 16463,
|
||||
"min": 15913,
|
||||
"max": 17058
|
||||
}
|
||||
},
|
||||
"multi_thread_scaling": {
|
||||
"smarm 1-thread": {
|
||||
"result": 33860,
|
||||
"median": 15063,
|
||||
"min": 14963,
|
||||
"max": 15957
|
||||
"median": 15086,
|
||||
"min": 15046,
|
||||
"max": 15274
|
||||
},
|
||||
"smarm 2-thread": {
|
||||
"result": 33860,
|
||||
"median": 8075,
|
||||
"min": 7799,
|
||||
"max": 13446
|
||||
"median": 8057,
|
||||
"min": 7948,
|
||||
"max": 8227
|
||||
},
|
||||
"smarm 4-thread": {
|
||||
"result": 33860,
|
||||
"median": 4396,
|
||||
"min": 4312,
|
||||
"max": 4650
|
||||
"median": 4476,
|
||||
"min": 4353,
|
||||
"max": 4605
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 33860,
|
||||
"median": 2278,
|
||||
"min": 2145,
|
||||
"max": 2480
|
||||
"median": 2383,
|
||||
"min": 2231,
|
||||
"max": 2868
|
||||
},
|
||||
"tokio multi 1-thread": {
|
||||
"result": 33860,
|
||||
"median": 14203,
|
||||
"min": 14163,
|
||||
"max": 14723
|
||||
"median": 14301,
|
||||
"min": 14176,
|
||||
"max": 14484
|
||||
},
|
||||
"tokio multi 2-thread": {
|
||||
"result": 33860,
|
||||
"median": 7346,
|
||||
"min": 7143,
|
||||
"max": 7587
|
||||
"median": 7293,
|
||||
"min": 7190,
|
||||
"max": 7455
|
||||
},
|
||||
"tokio multi 4-thread": {
|
||||
"result": 33860,
|
||||
"median": 3782,
|
||||
"min": 3699,
|
||||
"max": 4305
|
||||
"median": 3768,
|
||||
"min": 3690,
|
||||
"max": 3861
|
||||
},
|
||||
"tokio multi 24-thread": {
|
||||
"result": 33860,
|
||||
"median": 1757,
|
||||
"min": 1255,
|
||||
"max": 2058
|
||||
"median": 1585,
|
||||
"min": 1312,
|
||||
"max": 2239
|
||||
}
|
||||
},
|
||||
"deep_recursion": {
|
||||
"smarm 1-thread": {
|
||||
"result": 1,
|
||||
"median": 227,
|
||||
"min": 214,
|
||||
"max": 1685
|
||||
"median": 240,
|
||||
"min": 219,
|
||||
"max": 2111
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 1,
|
||||
"median": 744,
|
||||
"min": 706,
|
||||
"max": 802
|
||||
"median": 782,
|
||||
"min": 708,
|
||||
"max": 983
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 1,
|
||||
"median": 11,
|
||||
"median": 10,
|
||||
"min": 10,
|
||||
"max": 12
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 1,
|
||||
"median": 53,
|
||||
"min": 43,
|
||||
"max": 59
|
||||
"min": 40,
|
||||
"max": 70
|
||||
}
|
||||
},
|
||||
"yield_in_hot_loop": {
|
||||
"smarm 1-thread": {
|
||||
"result": 1000000,
|
||||
"median": 65826,
|
||||
"min": 64361,
|
||||
"max": 66076
|
||||
"median": 64650,
|
||||
"min": 64154,
|
||||
"max": 66049
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 1000000,
|
||||
"median": 75553,
|
||||
"min": 75338,
|
||||
"max": 76179
|
||||
"median": 73761,
|
||||
"min": 70903,
|
||||
"max": 74957
|
||||
}
|
||||
},
|
||||
"uncontended_channel": {
|
||||
"smarm 1-thread": {
|
||||
"result": 1000000,
|
||||
"median": 13502,
|
||||
"min": 10935,
|
||||
"max": 13626
|
||||
"median": 13745,
|
||||
"min": 11201,
|
||||
"max": 14048
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 1000000,
|
||||
"median": 16994,
|
||||
"min": 16968,
|
||||
"max": 17030
|
||||
"median": 17067,
|
||||
"min": 17054,
|
||||
"max": 17092
|
||||
}
|
||||
},
|
||||
"catch_unwind_panics": {
|
||||
"smarm 1-thread": {
|
||||
"result": 10000,
|
||||
"median": 108080,
|
||||
"min": 105901,
|
||||
"max": 122945
|
||||
"median": 109788,
|
||||
"min": 108526,
|
||||
"max": 113713
|
||||
},
|
||||
"smarm 24-thread": {
|
||||
"result": 10000,
|
||||
"median": 11650,
|
||||
"min": 11110,
|
||||
"max": 12260
|
||||
"median": 13864,
|
||||
"min": 12963,
|
||||
"max": 14602
|
||||
},
|
||||
"tokio current_thread": {
|
||||
"result": 10000,
|
||||
"median": 9680,
|
||||
"min": 9437,
|
||||
"max": 10924
|
||||
"median": 9624,
|
||||
"min": 9407,
|
||||
"max": 11185
|
||||
},
|
||||
"tokio multi-thread": {
|
||||
"result": 10000,
|
||||
"median": 5625,
|
||||
"min": 3051,
|
||||
"max": 7275
|
||||
"median": 5224,
|
||||
"min": 2805,
|
||||
"max": 7833
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -275,6 +275,7 @@ impl Default for Config {
|
||||
|
||||
/// Lockless per-scheduler-thread counters. Written only by the owning thread;
|
||||
/// readable from any thread (introspection actor, tests).
|
||||
#[repr(align(64))]
|
||||
pub struct SchedulerStats {
|
||||
/// PID index of the actor currently on-CPU, or `u32::MAX` when idle.
|
||||
pub current_pid_index: AtomicU32,
|
||||
|
||||
Reference in New Issue
Block a user