Finding Non-Terminating Executions in Distributed Asynchronous Programs - Archive ouverte HAL Accéder directement au contenu
Rapport Année : 2012

Finding Non-Terminating Executions in Distributed Asynchronous Programs

Résumé

Programming distributed and reactive asynchronous systems is complex due to the lack of synchronization between concurrently executing tasks, and arbitrary delay of message-based communication. As even simple programming mistakes have the capability to introduce divergent behavior, a key liveness property is eventual quiescence: for any finite number of external stimuli (e.g., client-generated events), only a finite number of internal messages are ever created. In this work we propose a practical three-step reduction-based approach for detecting divergent executions in asynchronous programs. As a first step, we give a code-to-code translation reducing divergence of an asynchronous program P to completed state-reachability--i.e., reachability to a given state with no pending asynchronous tasks--of a polynomially-sized asynchronous program P′. In the second step, we give a code-to-code translation under-approximating completed state-reachability of P′ by state-reachability of a polynomially-sized recursive sequential program P′′(K), for the given analysis parameter K ∈ N. Following Emmi et al. [8]'s delay-bounding approach, P′′(K) encodes a subset of P′'s, and thus of P's, behaviors by limiting scheduling nondeterminism. As K is increased, more possibly divergent behaviors of P are considered, and in the limit as K approaches infinity, our reduction is complete for programs with finite data domains. As the final step we give the resulting state-reachability query to an off-the-shelf SMT-based sequential program verification tool. We demonstrate the feasibility of our approach by implementing a prototype analysis tool called Alive, which detects divergent executions in several hand-coded variations of textbook distributed algorithms. As far as we are aware, our easy-to-implement prototype is the first tool which automatically detects divergence for distributed and reactive asynchronous programs.
Fichier principal
Vignette du fichier
tr-hal-EmmiL12.pdf (459.06 Ko) Télécharger le fichier
BcastAck.bpl (1.64 Ko) Télécharger le fichier
BellmanFord-bug.bpl (972 B) Télécharger le fichier
BellmanFord-bug.config (162 B) Télécharger le fichier
BellmanFord-correct.bpl (932 B) Télécharger le fichier
BellmanFord-correct.config (163 B) Télécharger le fichier
Bfs-bug.bpl (963 B) Télécharger le fichier
Bfs-bug.config (162 B) Télécharger le fichier
Bfs-correct.bpl (768 B) Télécharger le fichier
Bfs-correct.config (163 B) Télécharger le fichier
LCR.bpl (921 B) Télécharger le fichier
LeaderElection.bpl (1.79 Ko) Télécharger le fichier
Paxos-coordinating-loop.alive.manual.bpl (21.2 Ko) Télécharger le fichier
Paxos-coordinating-loop.bpl (3.02 Ko) Télécharger le fichier
Paxos-coordinating-loop.config (314 B) Télécharger le fichier
Paxos-individual-loop.alive.manual.bpl (20.36 Ko) Télécharger le fichier
Paxos-individual-loop.bpl (2.95 Ko) Télécharger le fichier
Paxos-individual-loop.config (314 B) Télécharger le fichier
PingPong-counting-mod2-needs-more-delay.bpl (567 B) Télécharger le fichier
PingPong-counting-mod2-needs-more-delay.config (173 B) Télécharger le fichier
PingPong-counting-mod2.bpl (567 B) Télécharger le fichier
PingPong-counting-mod2.config (173 B) Télécharger le fichier
PingPong-counting-mod3-needs-one-more-delay.bpl (567 B) Télécharger le fichier
PingPong-counting-mod3-needs-one-more-delay.config (173 B) Télécharger le fichier
PingPong-counting-mod3-needs-two-more-delay.bpl (567 B) Télécharger le fichier
PingPong-counting-mod3-needs-two-more-delay.config (173 B) Télécharger le fichier
PingPong-counting-mod3.bpl (567 B) Télécharger le fichier
PingPong-counting-mod3.config (173 B) Télécharger le fichier
PingPong.alive.bpl (5.26 Ko) Télécharger le fichier
PingPong.alive.manual.bpl (2.89 Ko) Télécharger le fichier
PingPong.bpl (479 B) Télécharger le fichier
PingPong.config (175 B) Télécharger le fichier
PingPongPung-needs-more-delay.bpl (904 B) Télécharger le fichier
PingPongPung-needs-more-delay.config (173 B) Télécharger le fichier
PingPongPung.bpl (904 B) Télécharger le fichier
PingPongPung.config (175 B) Télécharger le fichier
SpanningTree-bug.bpl (941 B) Télécharger le fichier
SpanningTree-bug.config (162 B) Télécharger le fichier
SpanningTree-correct.bpl (789 B) Télécharger le fichier
SpanningTree-correct.config (163 B) Télécharger le fichier
check.bat (26 B) Télécharger le fichier
check.sh (185 B) Télécharger le fichier
clean.sh (150 B) Télécharger le fichier
combtrace.sh (231 B) Télécharger le fichier
debug.out (0 B) Télécharger le fichier
explore.bat (84 B) Télécharger le fichier
index.html (4.97 Ko) Télécharger le fichier
index.md (4.08 Ko) Télécharger le fichier
run.list (404 B) Télécharger le fichier
run.sh (1.31 Ko) Télécharger le fichier
Origine : Fichiers produits par l'(les) auteur(s)
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Format : Autre
Loading...

Dates et versions

hal-00702306 , version 1 (30-05-2012)
hal-00702306 , version 2 (30-05-2012)
hal-00702306 , version 3 (30-05-2012)

Identifiants

  • HAL Id : hal-00702306 , version 3

Citer

Michael Emmi, Akash Lal. Finding Non-Terminating Executions in Distributed Asynchronous Programs. 2012. ⟨hal-00702306v3⟩
319 Consultations
342 Téléchargements

Partager

Gmail Facebook X LinkedIn More