Re: Linux kernel marker questions
Mathieu Desnoyers <[email protected]>
| Newsgroups | gmane.linux.systemtap,gmane.linux.kernel.tracing |
|---|---|
| Message-ID | <20070523071026.GB12337@Krystal> |
Hi David, I am currently on vacation, so I'll reply in full on May 28, when I'll be back. Meanwhile, you can get a head-start by looking at the new implementation of the markers in LTTng 0.9.6 (http://ltt.polymtl.ca): I modified it quite a bit, taking in consideration comments from the kernel community. The API did not change much though (just be cautious of the new return value of marker_arm_probe, which is the logical opposite of the old marker_set_probe). Regards, Mathieu * David Smith ([email protected]) wrote: > Mathieu, > > I've just finished checking in initial support for your new kernel > markers into systemtap. I've got some rough edges to work on, but in > general it works. > > As I implemented the marker support, I come up with several questions > I'd like some help/clarification with. > > 1) According to Documentation/marker.txt, the marker name > (subsystem_event) is "is an identifier unique to your event". > > Am I correct that unique marker names are not strictly enforced but > "uniqueness" is more of a convention? > > _marker_set_probe() seems to support the view that marker names aren't > unique since it doesn't stop looking for more marker matches once it > finds a match. > > 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? > > 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. > > 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? > > 3) From systemtap's point of view, _marker_set_probe() doesn't return > enough error information. Currently it just returns the number of > probes enabled. If _marker_set_probe returns a 0 (meaning no markers > were enabled), I don't know which of the following that means: > > - the marker name wasn't found > - the marker name was found, but format string didn't match the compiled > format string > - the marker name was found and the format strings matched, but the > marker flags didn't match the compiled marker flags > - the marker is already enabled (since markers can only have one > function attached to them at a time) > > Would there be any way of getting more detailed error information? > > Thanks for the help. > > -- > David Smith > [email protected] > Red Hat > http://www.redhat.com > 256.217.0141 (direct) > 256.837.0057 (fax) -- Mathieu Desnoyers Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68