Later, the probe is turned on and off using: Using markers has a negligible overhead thanks in part to Immediate Values,[3] another support mechanism that embeds switches in the code that can be dynamically turned on and off, without using a memory reference and thus saving cache lines.
[4] The initial motivation to create this static instrumentation infrastructure was the large performance overhead induced by the predating dynamic instrumentation mechanism Kprobe mechanism, which depends on breakpoints.
By identifying the branch executing stack setup and function call as unlikely (using the gcc built-in expect()), a hint is given to the compiler to position the tracing instructions away from cache lines involved in standard kernel execution.
[5] Two Kernel Markers drawbacks were identified[5] which led to its replacement by Tracepoints: A patch-set implementing them was merged into version 2.6.24,[6] which was released on January 24, 2008.
To address issues regarding kernel markers, Mathieu Desnoyers, their original author, implemented a simpler and more type-safe version of static probe points named Tracepoints.