Jump to content

ProbeVue

From Alfawiki
ProbeVue
Company typeSoftware framework
IndustryComputer software
Founded2007; 19 years ago (2007)
ProductsDynamic tracing and monitoring tools for AIX
ParentIBM

ProbeVue represents IBM's streamlined dynamic tracing framework, first introduced with AIX version 6.1. It facilitates the inspection of active processes by gathering statistical insights and extracting process-related information. Its flexible architecture supports comprehensive monitoring of overall system performance as well as in-depth event tracking on specific threads or processes.

Due to its minimal impact design and the fact that it does not require alterations to the monitored processes or the operating system itself, ProbeVue is well-suited for deployment in live production systems where conventional tracing utilities might degrade performance.

Description

ProbeVue operates through probe point definitions that correspond to traceable events. Users author scripts using the Vue programming language, where probes consist of action blocks triggered by designated events. These blocks can be conditionally executed based on predicates. The syntax for these action blocks is reminiscent of C, featuring a constrained set of intrinsic functions.

For instance, a probe can be set to activate when a process with PID 123456 makes an entry into the read() system call, outputting a notification to the trace buffers.

<syntaxhighlight lang="c"> @@syscall:*:read:entry

when ( __pid == 123456)

{

  /* Process 123456 called read() */
  printf("read() system call entered.\n");

} </syntaxhighlight>

Such probes can be created and deployed without extensive validation because ProbeVue protects against inefficient or faulty tracing logic. Its ability to compile at runtime provides a robust environment for spontaneous data collection.

Probe point specifications

In AIX 6.1, IBM supplies multiple probe providers including syscall, uft, interval, trace, and specific ProbeVue probes (BEGIN and END). The syscall provider focuses on a subset of system calls. User Function Tracing (uft) probes monitor function entry points within C or C++ applications; these require accurate function prototypes within Vue scripts to access function parameters or return values. Interval probes activate based on timers set at 100-millisecond intervals. The trace provider interfaces with traditional trace hooks. BEGIN and END probes are triggered respectively at the start and termination of ProbeVue execution.

The Vue language

Designed for event-driven monitoring of operating system activities, ProbeVue processes data generated by these events in an event-driven manner.

Sharing similarities with many dynamic tracing languages found on Unix platforms, Vue adopts a syntax similar to C while differing substantially from C’s imperative style. Important aspects include:

Data types

ProbeVue accommodates all standard C data types and C structures, aligning with its emphasis on monitoring C-based applications. Additional supported types include String, list (arrays), and high-precision timestamp data types. Type casting and automatic type promotion behave comparably to C conventions.

Pointers in ProbeVue reference memory segments within other process spaces; however, accessing them requires copying into the local environment first. Unlike C, ProbeVue does not cause a page fault if referenced memory is paged out. Pointer size depends on whether the target application is 32-bit or 64-bit.

While floating point values can be assigned from traced processes, floating point operations themselves are not supported within ProbeVue code.

Data classifications

Vue enforces scoping principles similar to those in C, but modifies them to accommodate data sourced externally by probes. Not every data category is applicable in all contexts, such as within probes or script segments. The primary categories of data are:

globals – Variables accessible throughout the entire Vue script
shell – Variables adhering to shell conventions, derived from the Unix environment
kernel – Variables supplied by the operating system kernel
local – Variables confined to a specific probe action block
thread local – Variables restricted to a thread but accessible across multiple probe blocks
entry/exit – Variables established by and limited to the probe itself
built in – Predefined variables pertinent to the currently executing probe

Operators

Vue’s operators largely mirror those found in C, with an exception for string handling: the + operator performs string concatenation, while == is used for string comparison.

Control flow

Vue prohibits user-defined functions, recursion, and looping constructs. However, it permits conditional if-then statements within probe action blocks. This approach promotes lightweight scripting that avoids performance issues caused by complex loops or branching.

Tentative tracing

Tentative tracing enables output generated by code to be flagged as tentative, giving the option to either commit this output to trace buffers or discard it later—functionally comparable to transaction controls in SQL.

Usage

Vue scripts can be executed directly as shell scripts using the interpreter magic or provided as input to the ProbeVue command via command line or standard input. By convention, Vue scripts carry the .e extension.

Limitations

Vue does not support aggregations natively and instead offers a list data type with limited capabilities. In comparison, Solaris’s DTrace includes aggregation types and sophisticated aggregating functions for statistical analysis. Vue’s lists allow basic aggregation on individual items but lack features such as interval-based resets. IBM has plans to introduce associative arrays in forthcoming Vue releases.

Due to its longer development history, DTrace boasts a wider array of probe point specifications (known as Providers). IBM aims to broaden ProbeVue’s available probe points in upcoming AIX 6.1 technology levels and future major versions.

See also

External links