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, 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.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.
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;