| OCR Text |
Show represent a fairly modest overhead. The construction of filters with low passing rates can thus significantly speed up the introspection, especially since the passing rate of a filter does not considerably change the transfer time per event. Savings in event transfer time more than compensate for the time spent in evaluating filters. The execution of one instruction of hypothetical code takes around 4.5 //seconds. This is roughly two orders of magnitude slower than host code instructions. If we mix hypothetical code with host code and restrict the hypothetical code to the bare minimum, then the execution takes only 15 % longer than pure host code. An evaluation of a compiled filter per event takes around 1 //second plus around 0.25 /iseconds for each Boolean expression in the filter. A transfer of one event through the execution stream takes around 350 /iseconds in asynchronous mode and around 550 //seconds in synchronous mode. Another solution that speeds up event transfer is the buffering of events. Although it is not implemented in the latest version, an earlier implementation of Dynascope supported an event buffer. There was no significant performance degradation when a few hundred events were buffered together. The transfer time for one unbuffered event and the transfer time for more than hundred buffered events are practically the same. Buffering can thus bring the event transfer time in the range of the instruction execution time. If an application requires the transfer of a large number of events in the asynchronous mode, as in tracing, then the buffering of events considerably improves performance. 4.4.1 Speed of Interpretation Two programs were used in execution speed measurements: the Stanford benchmarks and an artificial life simulation. The Stanford benchmarks are a set of small programs without any system or library calls. The artificial life simulation uses a lot of calls to memory management routines. |