Hello Jason,

Intuitively,  to play with timing of goroutines,
*to manually inject delays where none exists,*
is what new comers do, 
to experiment with deadlocks,
or simply build better understanding, 
at least *I* did that very often.
Therefor your suggestion definitely makes sense,
to me, a *non* low level programmer perspective.

(*not a useful email*, i only want to show some support 
to your various posts which i read with lots of interest,
others too... but physically speaking 
it is hard to follow everybody,
I liked the last post from Robert Griesemer
I like all the post of the Go blog anyway...... 
and the coroutines.... *c'est interminable*...= )

Thank you,
Thank you all.

Le jeudi 5 juin 2025 à 22:28:07 UTC+2, Jason E. Aten a écrit :

> Hmm. Maybe rr found a bug in runtime GC code(?)... or
> maybe it will be hard to use rr on Go. Let's see what the runtime folks say
> on this issue:
>
> https://github.com/golang/go/issues/74019
>
> On Wednesday, June 4, 2025 at 12:18:45 PM UTC+1 Jason E. Aten wrote:
>
>> This is a fascinating approach to finding hard to
>> reproduce event-interleaving related bugs.
>>
>> I'm particularly interested in this approach 
>> because rr record and replay plus chaos 
>> mode is directly applicable to 
>> Go programs -- whereas deterministic simulation
>> testing (DST) is next to impossible in a Go program 
>> using more than 4GB of memory (like most of my
>> programs) because this rules out wasm.
>>
>> In contrast to DST, the rr+chaos approach
>> accepts you will be randomly 
>> sampling executions, but by recording all of them you
>> can still get reproducibility when you do hit the issue.  
>>
>> rr is very efficient at recording. Green test runs can be quickly
>> discarded.
>>
>> In a blog from 2016, Robert O'Callahan, one of the principal rr authors,
>> talks about the design of rr's chaos mode for provoking hard to find 
>> concurrency bugs:
>>
>> > To cut a long story short, here's an approach that works. 
>> > Use just two thread priorities, "high" and "low". Make 
>> > most threads high-priority; I give each thread a 0.1 
>> > probability of being low priority. Periodically re-randomize 
>> > thread priorities. Randomize timeslice lengths. 
>> >
>> > Here's the good part: periodically choose a short random interval, 
>> > up to a few seconds long, and during that interval do not 
>> > allow low-priority threads to run at all, even if they're 
>> > the only runnable threads. Since these intervals can 
>> > prevent all forward progress (no control of priority inversion),
>> >  limit their length to no more than 20% of total run time. 
>> >
>> > The intuition is that many of our intermittent test failures 
>> > depend on CPU starvation (e.g. a machine temporarily 
>> > hanging), so we're emulating intense starvation of a few 
>> > "victim" threads, and allowing high-priority threads to 
>> > wait for timeouts or input from the environment 
>> > without interruption.
>> >
>> > With this approach, rr can reproduce my bug 
>> <https://bugzilla.mozilla.org/show_bug.cgi?id=1213938> in 
>> > several runs out of a thousand. I've also been able 
>> > to reproduce a top intermittent 
>> <https://bugzilla.mozilla.org/show_bug.cgi?id=1237176> (now being fixed),
>> > an intermittent test failure 
>> <https://bugzilla.mozilla.org/show_bug.cgi?id=1203417> that was assigned 
>> to me, 
>> > and an intermittent shutdown hang in IndexedDB 
>> <https://bugzilla.mozilla.org/show_bug.cgi?id=1150737#c197> 
>> > we've been chasing for a while. A couple of other 
>> > people have found this enabled reproducing their 
>> > bugs. I'm sure there are still bugs this approach 
>> > can't reproduce, but it's good progress.
>> > 
>> > I just landed all this work on rr master. The 
>> > normal scheduler doesn't do this randomization, 
>> > because it reduces throughput, i.e. slows down
>> > recording for easy-to-reproduce bugs. 
>> > Run rr record -h to enable chaos mode for 
>> > hard-to-reproduce bugs.
>>  -- https://robert.ocallahan.org/2016/02/introducing-rr-chaos-mode.html
>>
>> Links to more info and background on rr:
>>
>> https://rr-project.org/
>> https://github.com/rr-debugger/rr
>> https://github.com/rr-debugger/rr/wiki/Usage
>> https://github.com/rr-debugger/rr/wiki/Testimonials
>> https://github.com/rr-debugger/rr/wiki/Building-And-Installing
>>
>> https://arxiv.org/pdf/1705.05937
>>
>> https://fitzgen.com/2015/11/02/back-to-the-futurre.html
>>
>>
>> https://www.percona.com/blog/replay-the-execution-of-mysql-with-rr-record-and-replay/
>> https://www.youtube.com/watch?v=61kD3x4Pu8I
>>
>> Robert's talk, "Taming Non-determinism" from 9 years ago is
>> a good technical introduction to rr.
>> https://www.youtube.com/watch?v=H4iNuufAe_8
>>
>> NB The Delve debugger for Go supports rr, so you can get goroutine stack 
>> traces.
>>
>> Enjoy.
>>
>> - Jason
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/23ea9941-43ea-48aa-ba30-f592bafb6a5dn%40googlegroups.com.

Reply via email to