DF-2251 / run.log
=== uname === DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Sat Oct 17 15:01:40 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64 === SMP race runs (6 threads x 1e6 draws) === --- run 1 --- debug.rng_race: 0 -> 0 4294616 --- run 2 --- debug.rng_race: 0 -> 0 4028727 --- run 3 --- debug.rng_race: 0 -> 0 4423068 === CONTROL runs (1 thread pinned, 6e6 draws) === --- control run 1 --- debug.rng_race: 0 -> 0 0 --- control run 2 --- debug.rng_race: 0 -> 0 0 === DF-2251 prediction demo === debug.rng_pred: 0 -> 0 === console capture === RNGRACE: dup value=0x0000000000000424 A[cpu=0 idx=906032] B[cpu=5 idx=767962] RNGRACE: dup value=0x0000000000000424 A[cpu=5 idx=767962] B[cpu=4 idx=934872] RNGRACE: dup value=0x0000000000000424 A[cpu=4 idx=934872] B[cpu=3 idx=899452] RNGRACE: dup value=0x0000000000000424 A[cpu=3 idx=899452] B[cpu=1 idx=939566] RNGRACE: dup value=0x0000000000000424 A[cpu=1 idx=939566] B[cpu=2 idx=929644] RNGRACE: dup value=0x0000000000000a27 A[cpu=4 idx=394674] B[cpu=1 idx=402858] RNGRACE: dup value=0x00000000000025f2 A[cpu=4 idx=779594] B[cpu=3 idx=753985] RNGRACE: dup value=0x00000000000025f2 A[cpu=3 idx=753985] B[cpu=1 idx=768401] RNGRACE: mode=SMP threads=6 draws/thread=1000000 total=6000000 elapsed=318ms RNGRACE: duplicates=4294616 (rate per 1e6 draws: 715769.33) same-cpu-dups=49402 RNGRACE: dup value=0x0000000000000746 A[cpu=0 idx=557456] B[cpu=2 idx=859756] RNGRACE: dup value=0x0000000000000826 A[cpu=4 idx=88580] B[cpu=2 idx=86818] RNGRACE: dup value=0x0000000000000826 A[cpu=2 idx=86818] B[cpu=3 idx=75298] RNGRACE: dup value=0x0000000000000f2e A[cpu=1 idx=845651] B[cpu=3 idx=814747] RNGRACE: dup value=0x0000000000000f2e A[cpu=3 idx=814747] B[cpu=4 idx=979701] RNGRACE: dup value=0x0000000000000f2e A[cpu=4 idx=979701] B[cpu=5 idx=867643] RNGRACE: dup value=0x0000000000000f2e A[cpu=5 idx=867643] B[cpu=2 idx=836593] RNGRACE: dup value=0x0000000000001ebe A[cpu=2 idx=247790] B[cpu=4 idx=233456] RNGRACE: mode=SMP threads=6 draws/thread=1000000 total=6000000 elapsed=75ms RNGRACE: duplicates=4028727 (rate per 1e6 draws: 671454.50) same-cpu-dups=169174 RNGRACE: dup value=0x0000000000000832 A[cpu=5 idx=22575] B[cpu=3 idx=20590] RNGRACE: dup value=0x0000000000000832 A[cpu=3 idx=20590] B[cpu=4 idx=20451] RNGRACE: dup value=0x0000000000000832 A[cpu=4 idx=20451] B[cpu=3 idx=20442] RNGRACE: dup value=0x0000000000000832 A[cpu=3 idx=20442] B[cpu=1 idx=38362] RNGRACE: dup value=0x0000000000000832 A[cpu=1 idx=38362] B[cpu=1 idx=38482] RNGRACE: dup value=0x0000000000000832 A[cpu=1 idx=38482] B[cpu=0 idx=20418] RNGRACE: dup value=0x0000000000000832 A[cpu=0 idx=20418] B[cpu=1 idx=38749] RNGRACE: dup value=0x0000000000001542 A[cpu=5 idx=168137] B[cpu=3 idx=209345] RNGRACE: mode=SMP threads=6 draws/thread=1000000 total=6000000 elapsed=55ms RNGRACE: duplicates=4423068 (rate per 1e6 draws: 737178.00) same-cpu-dups=183167 RNGRACE: mode=CONTROL(1 thread pinned) threads=1 draws/thread=6000000 total=6000000 elapsed=48ms RNGRACE: duplicates=0 (rate per 1e6 draws: 0.00) same-cpu-dups=0 RNGRACE: control note: serial MINSTD chain never repeats within its 2^31-2 period; expected dups = 0 RNGRACE: mode=CONTROL(1 thread pinned) threads=1 draws/thread=6000000 total=6000000 elapsed=49ms RNGRACE: duplicates=0 (rate per 1e6 draws: 0.00) same-cpu-dups=0 RNGRACE: control note: serial MINSTD chain never repeats within its 2^31-2 period; expected dups = 0 RNGPRED: attempt 1 SUCCESS on real krandom(): RNGPRED: v0..v7 = 207482415 1790989824 2035175616 077048696 024794531 109854999 1644515420 1256127050 RNGPRED: forward x[n+1]=16807*x mod (2^31-1) from v0 reproduces v1..v7 exactly RNGPRED: backward x[n-1]=1407677000*x mod (2^31-1) from v7 recovers v6..v0 exactly RNGPRED: predicted NEXT 1000 real krandom() draws: 1000/1000 exact matches RNGPRED: i_gen consumer: g1=742485420 g2=998706240 state-recovered=1484970838 next-prediction-match=YES RNGPRED: chap-diff: found=YES recovered-state=1067768578 matches-real-state=YES (search <= 2^31 offline, ~seconds on one CPU) RNGPRED: RESULT: single observed output => full state (past via inverse, future via multiplier) for the REAL krandom()