Super Nested Block Method for Minimal Instrumentation Probe Insertion

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing methods for determining instrumentation probe insertion points in software programs, such as maximum spanning tree and super block dominator methods, require significant memory and execution counts, making them impractical for real-time systems, and do not allow for efficient inference of coverage information across all nodes in a control-flow graph.

Innovation Solution

The method partitions the control-flow graph into super nested blocks, inserting probes only into innermost basic blocks, allowing for minimal probe insertion while ensuring execution coverage information can be inferred for every node, using a recursive approach that identifies these blocks during or after control-flow graph construction.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Measurement precision

If probes are inserted at every node in the control-flow graph to ensure complete coverage, then measurement precision is improved, but device complexity and memory usage increase significantly

Engineering Contradiction:
Improvecoverage information accuracyVSAvoidprobe insertion complexity
Core Design Contradiction:
Measurement precisionVSDevice complexity

Solution Approach 1:

The control-flow graph is segmented into super nested blocks, where each block is represented by a single probe insertion point (the header node). This segmentation allows coverage information to be inferred for all nodes within a block through the representative probe, eliminating the need to insert probes at every individual node while maintaining complete coverage measurement capability.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

Instead of inserting physical probes at every node, the invention creates a simplified representation where one probe per super nested block copies the coverage measurement function for all nodes in that block. The probe at the block header effectively represents and measures coverage for the entire block, reducing probe count while preserving measurement precision.

Inventive Principle:
Principle #26Copying

2Measurement precision

If execution counts are maintained for each probe to track coverage, then measurement precision is improved, but memory usage increases significantly

Engineering Contradiction:
Improveexecution count tracking accuracyVSAvoidmemory consumption
Core Design Contradiction:
Measurement precisionVSQuantity of substance

Solution Approach 1:

Execution count tracking is merged at the super nested block level rather than at the individual node level. All nodes within a super nested block share a single execution count variable stored at the block header, combining the measurement function for multiple nodes into one memory location. This merging reduces the total number of execution count variables from potentially hundreds to a manageable number corresponding to the number of blocks.

Inventive Principle:
Principle #5Merging (Combining)

Solution Approach 2:

The execution count variable at each super nested block header serves a universal function, tracking coverage for all nodes within that block simultaneously. This multi-functional approach allows a single memory variable to represent the execution state of multiple program points, eliminating the need for separate counters and significantly reducing memory consumption while maintaining precise coverage tracking.

Inventive Principle:
Principle #6Universality (Multi-functionality)

3Productivity

If the maximum spanning tree method is used to determine probe locations, then coverage efficiency is improved, but the method becomes impractical for real-time systems due to memory constraints

Engineering Contradiction:
Improvecoverage efficiencyVSAvoidmemory availability
Core Design Contradiction:
ProductivityVSQuantity of substance

Solution Approach 1:

The invention changes the fundamental parameter of probe placement from individual node-level insertion to block-header-level insertion. By transforming the unit of probe placement from nodes to super nested blocks, the system achieves comparable coverage efficiency with dramatically reduced memory requirements, making the approach practical for resource-constrained real-time systems while maintaining the ability to track execution paths effectively.

Inventive Principle:
Principle #35Parameter changes

4Measurement precision

If counter values are allowed to grow large to maintain accurate execution counts, then measurement precision is improved, but the original application performance is degraded

Engineering Contradiction:
Improveexecution count accuracyVSAvoidapplication execution speed
Core Design Contradiction:
Measurement precisionVSSpeed

Solution Approach 1:

The counting overhead is extracted and concentrated at super nested block headers rather than being distributed at every node. This extraction allows the measurement mechanism to operate more efficiently with smaller, more manageable counter values at block boundaries, reducing the computational burden on the original application while maintaining the ability to accurately track and differentiate execution paths through the block-level representatives.

Inventive Principle:
Principle #2Taking out (Extraction)

Data Source

PatentUS8739145B2Super nested block method to minimize coverage testing overhead
Publication Date: 2014.05.27 AVAYA INC
  • US8739145B2 patent drawing
  • US8739145B2 patent drawing
  • US8739145B2 patent drawing

AI summary

A method for determining the number and location of instrumentation probes to be inserted into a program is disclosed. The method advantageously inserts the minimum number of probes that are required to obtain execution coverage for every node in the program's control-flow graph. In addition, the method requires only one bit to store each probe and does not require the assignment of weights to arcs or nodes of the control-flow graph. In the illustrative embodiment, the nodes of a control-flow graph are partitioned into non-empty sets, where each non-empty set corresponds to a super nested block of the program.