Re: Perf ABI (was: Re: [lttng-dev] [PATCH 09/11] sched: export task_prio to GPL modules)

Mathieu Desnoyers
2011-12-23T18:16:45Z

Hi Ted,

* Ted Ts'o (tytso@mit.edu) wrote:
> On Fri, Dec 23, 2011 at 11:46:29AM -0500, Mathieu Desnoyers wrote:
> > - It's doing so without even needing it: Perf is using an ABI versioning
> > scheme designed for filesystems, when it is not in fact driven by the
> > same constraints.
>
> Well, there are *some* constraints. I've been assured that despite
> the fact that the perf client is in the kernel sources (something
> which I still think is a bad idea, since it's leading to other bad
> choices like kvm-tool wanting to be bundled with kernel sources), that
> it is *not* a license to jerk the format around wildly --- that people
> will have installed userspace binaries that shouldn't randomly break
> they boot a new kernel.
>
> So I'm *glad* that Perf is using an ABI versioning scheme that accepts
> the same restraints as file systems. It means we don't randomly break
> userspace tools.
>
> So Mathieu, if you think it is the current standards of backwards
> compatibility are too rigid, what level of tool breakage do you think
> is acceptable? It's not just about the backwards compatibility of the
> trace files, it's also about compatibility of userspace utilities.
>
> For example, systemtap, where you had to recompile from source at
> each kernel revision, and pray it would still build goes too far in
> the other direction, wouldn't you agree? What is the correct level of
> kernel developer annoyance you think is appropriate to inflict on
> ourselves?

I completely agree that systemtap did not have the right level of
compatibility towards changes. It clearly does not make sense to require
the tools to be updated whenever the kernel version and instrumentation
changes. What makes sense to me, though, is to allow breakage when a
newly introduced tracer feature requires the ABI to break.

What I currently see as a tradeoff sweet-spot between compatibility
burden and ability to innovate is to split the ABI and handle
compatibility as follows:

- ABIs to control the tracer
- Versioned, ideally always incrementally adding features, but still
keeping room for major changes if needed. We should expect very,
very seldom breakages on this front. This requires update of tracer
control tools when the ABI is broken.

- ABIs to transport tracing data
- Versioned, can and should change when a feature or transport
performance enhancement require to break compatibility. This
requires update of trace data consumer tools when compability is
broken.

(note that ABI to control the tracer and ABI to transport data could
share the same version numbering if the control tools and transport
tools happen to reside in the same user-level packages)

- The trace data format
- Both versioned _and_ self-described.
Self-description of the event/field layout allows the same tools to
understand traces gathered on different kernel versions, on different
architectures, with different tracer configurations.
Versioning on top of the self-described trace format allows changes
to what the trace self-description can express.

So the breakages would happen only when required by tracer tool
capability enhancements, not randomly when a kernel instrumentation
source happens to change.

Best regards,

Mathieu

P.S.: my next replies will be slightly delayed, due to Christmas
holidays.

>
> Regards,
>
>
> - Ted

--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.