Deterministic execution of concurrent programs for testing by simulation.

122 views
Skip to first unread message

Seth Bunce

unread,
Aug 20, 2017, 11:40:24 PM8/20/17
to golan...@googlegroups.com, g...@golang.org
I recently watched the talk Testing Distributed Systems w/ Deterministic Simulation. They implemented a language (or pre-processor) on top of C++ to add concurrency primitives with some similarity to what go offers. They developed a distributed system (database) and tested it by deterministic simulation by mocking all their non-deterministic dependencies (network, disk, time, etc) and by doing deterministic scheduling of threads with a PRNG. This seems like a powerful way of testing that may require language support.

This seems similar to the approach outlined by Robert Griesemer (et al) in the Paxos Made Live paper. However, in that paper it says they reached a point where they where they had to sacrifice repeat-ability when multiple subsystems had to be made more concurrent.

I'm curious about what challenges there would be in implementing a "deterministic execution mode" in go. The idea is that there'd be some way to provide a seed to the runtime and have a repeatable (single-threaded) execution of a concurrent program. Then there'd be a panic if anything non-deterministic is done.

I think it's likely someone here has thought of this problem before but I haven't found anything when searching.
Reply all
Reply to author
Forward
0 new messages