Re: [PATCH] kernel-shark-2.alpha: Use new tracecmd API to open guest tracing file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 3, 2020 at 6:09 PM Yordan Karadzhov (VMware)
<y.karadz@xxxxxxxxx> wrote:
>
>
>
> On 3.04.20 г. 15:26 ч., Tzvetomir Stoyanov wrote:
> > On Fri, Apr 3, 2020 at 2:39 PM Yordan Karadzhov (VMware)
> > <y.karadz@xxxxxxxxx> wrote:
> >>
> >>
> >>
> >> On 1.04.20 г. 19:45 ч., Tzvetomir Stoyanov (VMware) wrote:
> >>> From: Tzvetomir (VMware)  Stoyanov <tz.stoyanov@xxxxxxxxx>
> >>>
> >>> The new tracecmd API tracecmd_open_merge() is used to open guest
> >>> tracing file and synchronize it to the host file.
> >>> This change is for testing purposes only, to test the new per CPU
> >>> timestamps synchronization logic.
> >>> It assumes that the stream with id 0 is the host one, and all others are
> >>> guest streams.
> >>> This change depends on commit:
> >>>    "trace-cmd: Add new API to merge two trace files"
> >>> where the new tracecmd API is introduced.
> >>>
> >>> Signed-off-by: Tzvetomir (VMware)  Stoyanov <tz.stoyanov@xxxxxxxxx>
> >>> ---
> >>>    src/libkshark-tepdata.c | 13 +++++++++++--
> >>>    1 file changed, 11 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/src/libkshark-tepdata.c b/src/libkshark-tepdata.c
> >>> index 8678e12..b80b945 100644
> >>> --- a/src/libkshark-tepdata.c
> >>> +++ b/src/libkshark-tepdata.c
> >>> @@ -1008,8 +1008,17 @@ int kshark_tep_init_input(struct kshark_data_stream *stream,
> >>>        tep_handle = calloc(1, sizeof(*tep_handle));
> >>>        if (!tep_handle)
> >>>                return -EFAULT;
> >>> -
> >>> -     tep_handle->input = tracecmd_open(file);
> >>
> >> Hi Ceco,
> >>
> >> Is it possible to avoid the hard-coded ID number of the primary stream
> >> (zero in this case)?
> >
> > Yes, the first version of the patch is more a POC, to test the new
> > tracecmd_open_merge() API.
> >
> >>
> >> Maybe we can add data field to "struct tepdata_handle" that can be used
> >> to indicate if the stream is "primary" or not. Note that "struct
> >> tepdata_handle" is defined only for "libkshark-tepdata.c".
> >
> > I think a new "unsigned int flags" member should be added to
> > struct kshark_data_stream;
> > and flags should indicate if the stream is primary or not, depending
> > on the way the file is loaded:
> >   using "-i" option, or "File -> Open" from the menu - primary
> >   using "-a" option, or "File -> Append" from the menu - secondary
> >
>
> Maybe it has to be a bit more sophisticated. Does the "primary" stream
> know how to recognize its "secondary" streams?
>
Yes, there are tracing IDs in both host and guest files. When these IDs match,
files are from a same tracing session.
I can add "parent_stream_id" member in "struct kshark_data_stream" and
initialize it
when reading the files, according to the trace IDs. This can be useful
in KVMCombo
plugin also, for proper PID to VCPU mapping.

>
> >>
> >> Also do we consider a case when we will need to load more than one
> >> "primary" stream?
> >
> > In the host - guest tracing, there is no use case with more than one
> > primary stream,
> > but may be there could be other use cases where more than one primary
> > stream will
> > be needed ?
> >
> > Is it possible to append more than one secondary files, using the
> > current KernelShark 2 ?
> > I tried appending two files, specifying "-a" option twice, but only
> > the first "-a" file was appended.
> Yes, this can be done from the menus, but you are right that something
> goes wrong when trying to do this from the command line. I will
> investigate and will try to get it fixed.
>
> Thanks!
> Yordan
>
> >
> >>
> >> Thanks!
> >> Yordan
> >>
> >>
> >>> +     if (stream->stream_id > 0) {
> >>> +             struct kshark_data_stream *primary;
> >>> +
> >>> +             primary = kshark_get_data_stream(kshark_ctx, 0);
> >>> +             if (primary && primary->file)
> >>> +                     tep_handle->input = tracecmd_open_merge(file,
> >>> +                                                             primary->file);
> >>> +             else
> >>> +                     tep_handle->input = tracecmd_open(file);
> >>> +     } else
> >>> +             tep_handle->input = tracecmd_open(file);
> >>>        if (!tep_handle->input) {
> >>>                free(tep_handle);
> >>>                stream->interface.handle = NULL;
> >>>
> >
> >
> >



-- 
Tzvetomir (Ceco) Stoyanov
VMware Open Source Technology Center




[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux