Dynamic program execution monitors allow programmers to observe and verify an application while it is running. Instrumentation-based dynamic program monitors often incur significant performance overhead due to instrumentation. Special hardware supports have been proposed to reduce this overhead. However, most of these supports often target specific monitoring requirements, and thus have limited applicability. Recently, with multi-core systems becoming mainstream, executing the monitored program and the monitor simultaneously on separate cores has emerged as an attractive option. However, due to the large amount of information forwarded to the monitor, existing approaches of dynamic monitoring on multi-core still suffers from significant performance overhead, unless adapt special-purpose hardware support. In this paper, we present a novel dynamic execution monitoring model on the multi-core architecture. This model is based on two observations: (1) a monitor only requires specific information from the monitored program; (2) some information can be easily computed by the monitor from information that have already been communicated. Based on these observations, we propose hardware and software support to build a dynamic execution monitoring system that only communicates information that is relevant to monitoring purposes. Furthermore, we developed optimization techniques that decide the set of data to forward to the monitor and the data set to compute by the monitor, so that the total execution time of the monitor is minimized. We evaluate the performance impact of the proposed dynamic program monitoring system with SPEC2006 integer benchmarks for two intensive monitoring tasks: taint-propagation and memory-bug-detection. Compared with instrumentation-based monitors, the proposed techniques is able to reduce the performance overhead of the two monitors by 3.7× and 2.2×, respectively.
- Compiler optimization
- Program monitoring