Linux kernel marker questions
David Smith
dsmith@redhat.com
Tue May 29 13:24:00 GMT 2007
Mathieu Desnoyers wrote:
> * David Smith (dsmith@redhat.com) wrote:
>> Am I correct that unique marker names are not strictly enforced but
>> "uniqueness" is more of a convention?
>
> Yes. A marker can be declared more than once, but bears the same
> semantics and should have the same parameter types.
OK.
>> One problem this creates for systemtap is that systemtap's probe syntax
>> looks like 'kernel.mark("marker_name")' and
>> 'module("module_name").mark('marker_name'). I believe with the current
>> code if a marker exists with the same name, format string, and flags in
>> the kernel and a loadable module there isn't any way to only enable the
>> marker in one place or the other - you can only enable both markers
>> (assuming the module is loaded). Am I correct?
>>
>
> Correct. It could be fixed by adapting _marker_set_probe, making it take
> an optinional struct module* argument.
That might be useful. I can see situations where you would want to
enable a marker only in a specific module.
>> 2) _marker_set_probe() expects the marker name, format string, and flags
>> that were specified when the marker was inserted. If marker names were
>> truly unique, I would really only need the marker name to enable a marker.
>>
>
> format string and flags are only there to make sure nobody writes
> foolishly a "bad" probe without considering the reentrancy impact and
> by expecting the wrong arguments. Note that passing a NULL format string
> is valid and means that the probe will parse the string dynamicall,
> therefore getting around the verification.
OK, so I can pass a NULL as the format string. I'm more worried at this
point about the flags than the format string, since I currently don't
have a way to retrieve the flags.
>> Since systemtap can compile modules for a kernel that isn't running, I
>> can't really use marker_list_probe() for getting a list of markers
>> present (even if the output of marker_list_probe() was more than just
>> printks). So, currently to get a list of markers for a particular
>> kernel, the code reads and parses the kernel/module '__markers_strings'
>> elf section, which gets systemtap the marker names and format strings.
>> (Getting the marker flags out of a kernel/module elf file is possible,
>> but won't be easy.)
>>
>> Currently systemtap can only enable markers that used the MF_DEFAULT set
>> of flags.
>>
>> Have you got any ideas on how systemtap (or any other program) can get a
>> list of all the data _marker_set_probe needs?
>>
>
> Hrm.. well, isn't this information is a __markers section, which points
> to a __markers data section ? It seems to me that it could be extracted
> from the binary too, just like the __markers_strings. Please keep in
> mind that these sections and data structures will change in the
> forthcoming markers version.
In the kernel that I built using your patches, I end up with a
'__markers' section (which basically contains the enabled state of each
marker), and the '__markers_strings' section, which contains the marker
names and format strings. The '__markers_data' section doesn't exist as
a separate section, it is just part of the data section.
Of course another problem I've got is that the definitions of the data
structures aren't available from user-space.
>> 3) From systemtap's point of view, _marker_set_probe() doesn't return
>> enough error information.
>>
>> Would there be any way of getting more detailed error information?
>>
>
> It will change in the new version. I guess we should rediscuss it once I
> submit the new patches.
Great. Do you have any ideas on when you plan on submitting the new
patches?
--
David Smith
dsmith@redhat.com
Red Hat
http://www.redhat.com
256.217.0141 (direct)
256.837.0057 (fax)
More information about the Systemtap
mailing list