Jump to content

Runtime predictive analysis

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by YSun1 (talk | contribs) at 22:05, 17 February 2020 (Polished text). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In computer science, runtime predictive analysis (or predictive analysis) is a runtime verification technique for detecting property violations in program executions inferred from an observed execution. An important class of predictive analysis methods has been developed for detecting concurrency errors (such as data races) in concurrent programs, where a runtime monitor is used to predict errors which did not happen in the observed run, but can happen in an alternative execution of the same program. The predictive capability comes from the fact that the analysis is performed on an abstract model extracted online from the observed execution, which admits a class of executions beyond the observed one.[1]

Overview

Informally, given an execution , predictive analysis checks errors in a reordered trace of . is called feasible from if any program that can generate can also generate .

In the context of concurrent programs, a predictive technique is sound if it only predicts concurrency errors in feasible executions of the causal model of the observed trace. Assuming the analysis has no knowledge about the source code of the program, the analysis is complete (also called maximal) if the inferred class of executions contains all executions that have the same program order and communication order prefix of the observed trace.

Applications

Predictive analysis has been applied to detect a wide class of concurrency errors, including:

Implementation

As is typical with dynamic program analysis, predictive analysis first instrument the source program. At runtime, the analysis can be performed online and detects errors on the fly. Alternatively, the online monitor can dump the execution trace for offline analysis. The latter approach is preferred for expensive refined predictive analysis that takes polynomial time or even exponential time in the trace size.

Incorporating data and control-flow analysis

Static analysis can be first conducted to gather data and control-flow dependence information about the source program, which can help construct the causal model during online executions. This allows predictive analysis to infer a larger class of executions based on the observed execution. Intuitively, a feasible reordering can change the last writer of a memory read (data dependence) if the read in turn cannot affect whether any accesses execute (control dependence).[citation needed]

Approaches

Partial order based techniques

Partial order based techniques are most often employed for online race detection. At runtime, a partial order over the events in the trace is constructed, and any unordered pairs of events are reported as races. Many predictive techniques for race detection are based on the happens-before relation or a weakened version of it. Such techniques can typically be implemented efficiently with vector clock algorithms, allowing only one pass of the whole input trace, and is thus suitable for online deployment.[citation needed]

SMT-based techniques

SMT encodings allow the analysis to extract a refined causal model from an execution trace. Furthermore, control-flow information can be incorporated into the model. SMT-based techniques can achieve soundness and completeness (also called maximality), but has exponential-time complexity with respect to the trace size. In practice, the analysis is typically deployed to bounded segments of an execution trace, thus trading completeness for scalability.[citation needed]

Other techniques

In the context of data race detection, sound and highly complete polynomial-time predictive analysis has been developed.[citation needed]

Tools

  • RV-predict: SMT-based predictive race detection.
  • Rapid: a lightweight framework for implementing dynamic race detection engines.
  • RoadRunner: a dynamic analysis framework designed to facilitate rapid prototyping and experimentation with dynamic analyses for concurrent Java programs.
  • UFO: SMT-based predictive use-after-free detection.

References

  1. ^ "Runtime Predictive Analysis". November, 2008. {{cite web}}: Check date values in: |date= (help)