This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: [RFC] perf-cache command interface design
- From: Masami Hiramatsu <masami dot hiramatsu dot pt at hitachi dot com>
- To: Namhyung Kim <namhyung at kernel dot org>
- Cc: Hemant Kumar <hemant at linux dot vnet dot ibm dot com>, Arnaldo Carvalho de Melo <acme at redhat dot com>, linux-kernel at vger dot kernel dot org, srikar at linux dot vnet dot ibm dot com, peterz at infradead dot org, oleg at redhat dot com, hegdevasant at linux dot vnet dot ibm dot com, mingo at redhat dot com, systemtap at sourceware dot org, aravinda at linux dot vnet dot ibm dot com, penberg at iki dot fi, brendan dot d dot gregg at gmail dot com, "yrl dot pp-manager dot tt at hitachi dot com" <yrl dot pp-manager dot tt at hitachi dot com>
- Date: Sat, 08 Nov 2014 13:38:39 +0900
- Subject: Re: [RFC] perf-cache command interface design
- Authentication-results: sourceware.org; auth=none
- References: <20141102105006 dot 21708 dot 28734 dot stgit at hemant-fedora> <20141102105557 dot 21708 dot 19032 dot stgit at hemant-fedora> <87lhnr5sbl dot fsf at sejong dot aot dot lge dot com> <54588905 dot 7040002 at linux dot vnet dot ibm dot com> <5458CD15 dot 4010101 at hitachi dot com> <874muew2hk dot fsf at sejong dot aot dot lge dot com> <5459E865 dot 6050207 at hitachi dot com> <545B1DDE dot 9000202 at linux dot vnet dot ibm dot com> <545C80F4 dot 4020905 at hitachi dot com> <1415371407 dot 1648 dot 37 dot camel at leonhard>
(2014/11/07 23:43), Namhyung Kim wrote:
> Hi Masami,
>
> 2014-11-07 (ê), 17:21 +0900, Masami Hiramatsu:
>> Hello,
>>
>> Here, I've tried to describe my idea of perf-cache subcommand interface.
>> It is just a design review, not implemented yet :)
>> Please give me your comments/ideas!
>>
>> Command-line Synopsis
>> =====================
>>
>> Current "perf buildid-cache [options]" are directly mapped to
>> "perf cache --buildid [options]".
>>
>> And adding --sdt for managing SDT caches as below.
>>
>> Add or update SDT events in <FILES>
>> perf cache --sdt --add|--update <FILES>
>>
>> Remove all SDT events for <FILES>
>> perf cache --sdt --remove <FILES>
>>
>> List all SDT events
>> perf cache --sdt --list
>>
>> And --probes for managing probe-caches as below.
>>
>> Add new probe-cache entries for kernel, <PATH> or <MOD>.
>> perf cache --probe [--exec <PATH>|--module <MOD>] --add <SPEC>
>>
>> Delete existing probe-cache entries for kernel, <PATH> or/and <BUILDID>.
>> perf cache --probe --del [<GROUP>:]<EVENT>[@<PATH>][#<BUILDID>]
>>
>> Or remove all entires for given FILES
>> perf cache --probe --remove <FILES>
>>
>> List the probe caches(including SDT) for kernel, <PATH>, or/and <BUILDID>.
>> perf cache --probe --list [@<PATH>][#<BUILDID>]
>>
>> Query the probe definitions.
>> perf cache --probe --query [<GROUP>:]<EVENT>[@<PATH>][#<BUILDID>]
>>
>> Note that --probes also can be used for managing SDT events, which has % prefix
>> e.g.
>> Add all SDT events for <PATH>
>> perf cache --probe --exec <PATH> --add '%*:*'
>>
>> Remove some SDT events for <PATH>
>> perf cache --probe --del '%some:events@<PATH>'
>>
>> Or remove all SDT events for <BUILDID>
>> perf cache --probe --del '%*:*#<BUILDID>'
>
> I'd prefer sub-command to option for this mandatory (and exclusive)
> behavior. What about like this?
I consider this will also confusing users because it's different from
other subcommands. And Arnaldo gives us a better solution :)
>
> perf cache kprobe add [-m <module>] <spec> [<spec>...]
> perf cache kprobe del [<group>:]<event> [<event>...]
> perf cache kprobe list [-m <module>]
>
> perf cache uprobe add -x <path> <spec> [<spec>...]
> perf cache uprobe del [<group>:]<event> [<event>...]
> perf cache uprobe list [-x <path>]
Since perf has only "probe" subcommand, we shouldn't separate
uprobe and kprobe.
>
> perf cache sdt [add|del|update] <file> [<file>...]
> perf cache sdt list [-b <build-id>] [<file>...]
>
>
>>
>>
>> File Format
>> ===========
>> All the cache files are placed under ~/.debug/ by default.
>> The paths of buildid cache of binary/symbols are not changed.
>>
>> The SDT/probe caches are placed under the ~/.debug/.probes/path/to/bin/bu/ildid
>> and that is linked to ~/.debug/.probes/.buildid/bu/ildid
>> # To avoid conflict with files under /probes/*, I picked up .probes/.
>
> However, to be used with perf record, we need a way to find a matching
> probe cache file from a event name (or group/provider name, preferably).
> What about having something like below:
>
> $ cat ~/.debug/.probes/event.map
> PROVIDER1 /path/to/some/where
> PROVIDER2 /path/to/other/place
Hmm, agreed. We'd better have this kind of provider index file to
accelerate searching.
> When perf record see a cached event used, it first searches its
> provider/group name from the event.map file. And then read bulid-id
> from the matching file on the path and finally find a cached event
> definition from ~/.debug/.probes/.buildid/bu/ildid file.
>
>
>>
>> This SDT/probe caches contain probe-definitions as following format.
>> ----
>> #buildid:BUILDID
>> #path:PATH
>> p:%PROVIDER/EVENT PATH:OFFSET [ARGS]
>
> It seems PATH is redundant and we don't need to repeat it everyline
> IMHO. Since it need post-processing anyway, maybe it's better to just
> make it simpler, like:
>
> %:PROVIDER/EVENT OFFSET [ARGS]
Hmm, this is not good because this line will not be able to pass to
tracing/uprobe_events...
And also, I think we can compress this cache with gzip, then such
redundancy will not be a problem.
Thank you,
--
Masami HIRAMATSU
Software Platform Research Dept. Linux Technology Research Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com