Detail publikace

Healing Data Races On-The-Fly

Originální název

Healing Data Races On-The-Fly

Anglický název

Healing Data Races On-The-Fly

Jazyk

en

Originální abstrakt

Testing of concurrent software is extremely difficult. Despite all the progress in the testing and verification technology, concurrent bugs, the most common of which are deadlocks and races, make it to the field. This paper describes a set of techniques, implemented in a tool called ConTest, allowing concurrent programs to self-heal at run-time. Concurrent bugs have the very desirable property for healing that some of the interleaving produce correct results while in others bugs manifest. Healing concurrency problems is about limiting, or changing the probability of interleaving, such that bugs will be seen less.  When healing concurrent programs, if a deadlock does not result from limiting the interleaving, we are sure that the result of the healed program could have been in the original program and therefore no new functional bug has been introduced. In this initial work which deals with different types of data races, we suggest three types of healing mechanisms:  (1)changing the probability of interleaving by introducing sleep or yield statements or by changing thread priorities, (2) removing interleaving using synchronisation commands like locking and unlocking certain mutexes or waits and notifies, and (3) removing the result of "bad interleaving" by replacing the value of variables by the one that "should" have been taken. We also classify races according to the relevant healing strategies to apply.

Anglický abstrakt

Testing of concurrent software is extremely difficult. Despite all the progress in the testing and verification technology, concurrent bugs, the most common of which are deadlocks and races, make it to the field. This paper describes a set of techniques, implemented in a tool called ConTest, allowing concurrent programs to self-heal at run-time. Concurrent bugs have the very desirable property for healing that some of the interleaving produce correct results while in others bugs manifest. Healing concurrency problems is about limiting, or changing the probability of interleaving, such that bugs will be seen less.  When healing concurrent programs, if a deadlock does not result from limiting the interleaving, we are sure that the result of the healed program could have been in the original program and therefore no new functional bug has been introduced. In this initial work which deals with different types of data races, we suggest three types of healing mechanisms:  (1)changing the probability of interleaving by introducing sleep or yield statements or by changing thread priorities, (2) removing interleaving using synchronisation commands like locking and unlocking certain mutexes or waits and notifies, and (3) removing the result of "bad interleaving" by replacing the value of variables by the one that "should" have been taken. We also classify races according to the relevant healing strategies to apply.

BibTex


@inproceedings{BUT28803,
  author="Bohuslav {Křena} and Zdeněk {Letko} and Rachel {Tzoref} and Shmuel {Ur} and Tomáš {Vojnar}",
  title="Healing Data Races On-The-Fly",
  annote="Testing of concurrent software is extremely difficult. Despite all the progress
in the testing and verification technology, concurrent bugs, the most common of
which are deadlocks and races, make it to the field. This paper describes a set
of techniques, implemented in a tool called ConTest, allowing concurrent programs
to self-heal at run-time. 

Concurrent bugs have the very desirable property for healing that some of the
interleaving produce correct results while in others bugs manifest. Healing
concurrency problems is about limiting, or changing the probability of
interleaving, such that bugs will be seen less.  When healing concurrent
programs, if a deadlock does not result from limiting the interleaving, we are
sure that the result of the healed program could have been in the original
program and therefore no new functional bug has been introduced.

In this initial work which deals with different types of data races, we suggest
three types of healing mechanisms:  (1)changing the probability of interleaving
by introducing sleep or yield statements or by changing thread priorities, (2)
removing interleaving using synchronisation commands like locking and unlocking
certain mutexes or waits and notifies, and (3) removing the result of "bad
interleaving" by replacing the value of variables by the one that "should" have
been taken. We also classify races according to the relevant healing strategies
to apply.",
  address="Association for Computing Machinery",
  booktitle="Proceedings of 5th International Workshop on Parallel and Distributed Systems: Testing and Debugging Modelling - PADTAD'07",
  chapter="28803",
  howpublished="print",
  institution="Association for Computing Machinery",
  year="2007",
  month="july",
  pages="54--64",
  publisher="Association for Computing Machinery",
  type="conference paper"
}