Next: Exercises
Up: Analysis
Previous: Aggregates
Contents
Safety
The full expressivity of the scripting language raises good questions
of safety. Here is a set of Q&A:
- What about infinite loops? recursion? A probe handler is
bounded in time. The C code generated by systemtap includes explicit
checks that limit the total number of statements executed to a small
number. A similar limit is imposed on the nesting depth of function
calls. When either limit is exceeded, that probe handler cleanly
aborts and signals an error. The systemtap session is normally
configured to abort as a whole at that time.
- What about running out of memory? No dynamic memory
allocation whatsoever takes place during the execution of probe
handlers. Arrays, function contexts, and buffers are allocated during
initialization. These resources may run out during a session, and
generally result in errors.
- What about locking? If multiple probes seek conflicting
locks on the same global variables, one or more of them will time out,
and be aborted. Such events are tallied as ``skipped'' probes, and a
count is displayed at session end. A configurable number of skipped
probes can trigger an abort of the session.
- What about null pointers? division by zero? The C code
generated by systemtap translates potentially dangerous operations to
routines that check their arguments at run time. These signal errors
if they are invalid. Many arithmetic and string operations silently
overflow if the results exceed representation limits.
- What about bugs in the translator? compiler? While bugs
in the translator, or the runtime layer certainly exist3, our test suite gives some
assurance. Plus, the entire generated C code may be inspected (try
the
-p3 option). Compiler bugs are unlikely to be of any
greater concern for systemtap than for the kernel as a whole. In
other words, if it was reliable enough to build the kernel, it will
build the systemtap modules properly too.
- Is that the whole truth? In practice, there are several
weak points in systemtap and the underlying kprobes system at the time
of writing. Putting probes indiscriminately into unusually sensitive
parts of the kernel (low level context switching, interrupt
dispatching) has reportedly caused crashes in the past. We are
fixing these bugs as they are found, and
constructing a probe point ``blacklist'', but it is not complete.
Next: Exercises
Up: Analysis
Previous: Aggregates
Contents