Thread (19 messages) flat view 19 messages, 5 authors, 2014-09-16

Re: [RFC 2/2] perf: Marker software event and ioctl

From: Pawel Moll <hidden>
Date: 2014-09-15 17:27:25
Also in: lkml

On Fri, 2014-09-12 at 17:19 +0100, Arnaldo Carvalho de Melo wrote:
Em Fri, Sep 12, 2014 at 02:58:55PM +0100, Pawel Moll escreveu:
quoted
On Fri, 2014-09-12 at 14:49 +0100, Arnaldo Carvalho de Melo wrote:
quoted
Perhaps both? I.e. an u64 followed from a string, if the u64 is zero,
then there is a string right after it?
 
quoted
How would this look like in userspace? Something like this?
 
quoted
8<----
struct perf_event_marker {
	uint64_t value;
	char *string;
} arg;
 
quoted
arg.value = 0x1234;
 
quoted
/* or */
 
quoted
arg.value = 0;
arg.string = "abcd";
 
quoted
ioctl(fd, PERF_EVENT_IOC_MARKER, &arg)
8<----
 
quoted
If so, maybe it would simpler just to go for classic size/data
structure?
 
quoted
8<-----
struct perf_event_marker {
	uint32_t size;
	void *data;
}
8<-----
 
quoted
This would directly map into struct perf_raw_record...
I can see the usefulness of having it all, i.e. if we do just:

perf trace --pid `pidof some-tool-in-debug-mode-using-this-interface`
Hm. I haven't thought about a situation when 3rd party wants to inject
something into "my" data stream... I guess it could be implemented (a
"pid" member of the struct perf_event_marker with default 0 meaning
"myself"?), but will definitely complicate the patch. Should I have a
look at it now or maybe leave it till we get a general agreement about
the marker ioctl existence?
Then 'perf trace' doesn't know about any binary format a tool may have,
getting strings there (hey, LD_PRELOADing some logging library to hook
into this comes to mind) and having it merged with other events
(syscalls, pagefaults, etc) looks useful.
But do you still mean a "magic" u64 before the rest? Injecting a string
would just mean:

	marker.size = strlen(s) + 1;
	marker.data = s;
As well as some specialized version of 'perf trace' that knows about
some binary protocol that would get app specific stats or lock status,
etc, perhaps even plugins for 'perf trace' that would be selected by
that first u64? Also seems useful.
	  
I.e. having a way to provide just strings and another that would allow
passing perf_raw_record.
Sounds interesting. But then maybe this stuff shouldn't go into "raw"
then? It could be something like this in the sample:

	{ u64 type; /* 0 means zero-terminated string in data */
	  u32 size;
	  char data[size]; } && PERF_SAMPLE_MARKER

Pawel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help