On Sat, 2022-05-07 at 08:02 +0300, Tzvetomir Stoyanov wrote: > On Fri, May 6, 2022 at 7:18 PM christopher lee > <christopher.lee.eu@xxxxxxxxx> wrote: > > > > Hi all, > > > > I use libtraceevent in my trace tool to parse the event log. Now I > > allocated an instance, but no idea how to use > > tep_register_event_handler() to register a handler for the > > instance. Is > > it possilbe to register handler for the event in the instance? > > > > Hi Chrit, > All trace events are the same across all trace instances, thus the > handler registered with tep_register_event_handler() handles events > from all instances with a given id. That's why there are no > "instance" > oriented APIs in that library. I would suggest looking at the tracefs > library, which is instance aware. It can be used to allocate trace > instances and read events from a given instance. > > https://trace-cmd.org/Documentation/libtracefs/ > Hi Tzvetomir Stoyanov, Thanks, instance event handlers work now, but I'm confused with these codes, do I have to read trace_pipe_raw? I found that if I didn't read this file, the handler would not be able to get trace information. Becuase if I read this file, and also call tep_print_event() will consume lots of CPU resoruce. how can I parse the trace event info without reading this file? for (i = 0; ; i++) { char *raw_buf; char *cpu; ret = asprintf(&cpu, "%s/cpu%d", per_cpu, i); if (ret < 0) pdie("Could not allocate memory for cpu buffer %d name", i); ret = stat(cpu, &st); if (ret < 0 || !S_ISDIR(st.st_mode)) { free(cpu); goto start; } ret = asprintf(&raw_buf, "%s/trace_pipe_raw", cpu); if (ret < 0) pdie("Could not allocate memory for cpu %d raw buffer name", i); read_raw_buffer(i, raw_buf); free(raw_buf); free(cpu); } Best regards, Christ >