Re: [patch 1/4] Linux Kernel Markers - Architecture Independent Code

Mathieu Desnoyers
2007-10-15T23:17:31Z

* Frank Ch. Eigler (fche@redhat.com) wrote:
> Hi -
>
> I wrote:
>
> > [...]
> > > The marker metadata must be stored in at least one place in the kernel
> > > image - this just happens to be a convenient one that David Smith's
> > > recent systemtap code used. Without it, we'd probably have to do a
> > > more complicated search, following the pointers within the __markers
> > > structs. [...]
>
> Our team is farther along adapting to this change against 2.6.23-mm1,
> and we have run into a complication. It's more of a distribution
> issue.
>
> We would prefer to retain systemtap's capability to build
> instrumentation for a kernel other than the currently running one.
> Such instrumentation can be then copied and run on a distinct machine.
> This has meant relying on development data: make install_headers +
> Makefiles (as packaged by Fedora/RHEL), and to a lesser extent
> separated debugging information.
>
> Markers are attractive partly because they don't require debugging
> information, so the data needs to be found in an executable image.
> But we prefer not to force the executable image itself to be
> installed, for example because /boot is relatively small. So we would
> prefer something in between: something small that we can put into the
> development package.
>
> If there exists sympathy to this problem, Roland McGrath supposes we
> could implement a standardized solution, a file like Module.symvers,
> containing the marker names & format strings extracted at build time.
> Any opinions?
>

Hi Frank,

I think the main issue with the solution you propose is that it doesn't
deal with markers in modules, am I right ?

I will soon come with a marker iterator and a module that provides a
userspace -and in kernel- interface to enable/disable markers. Actually,
I already have the code ready in my LTTng snapshots. I can provide a
link if you want to have a look.

>
> PS. I wonder why the marker name/format strings are put into a
> __markers_strings object section at all, considering that the only
> place where that is used again appears to be this code in
> kernel/module.c:
>
> markersstringsindex = find_sec(hdr, sechdrs, secstrings,
> "__markers_strings");
>
> and the "markersstringsindex" variable is never used.
>

Considering that I want to minimize the impact on the system, I put the
marker strings in their own memory location rather than clobbering the
memory containing the kernel strings (which will likely be used more
often than markers). It makes sure that I don't pollute cachelines
otherwise containing useful kernel strings.

Mathieu

>
> - FChE