The clock, used for trace time stamps, can vary between CPUs. When synchronizing host and guest trace time stamps, these variations could introduce inaccuracy. The algorithm for host - guest trace time stamps synchronization is modified to calculate the offset per each host CPU, depending on the CPU affinity of host tasks, running the guest's VCPUs. The calculated array per CPU is stored in the trace.dat file, using TRACECMD_OPTION_TIME_SHIFT option. The "trace-cmd dump --options" command and tracecmd_init_data() API are adjusted to read the new format of this option. In order this per CPU synchronization data to be used when host and guest files are merged, information about guest VCPUs migration between host CPUs is needed. This information is extracted from host trace data, thus the host trace must be recored with "-e sched" option. A new API tracecmd_open_merge() is introduced, which triggers this per CPU calculations when opening tracing files. This API must be used by KernelShark when opening host and guest files. There is a separate patch for this, not part of the series. Tzvetomir Stoyanov (VMware) (5): trace-cmd: Time stamp offset per host CPU trace-cmd: Fix reading of the traceid option from trace.dat file trace-cmd: Add new API to merge two trace files trace-cmd: Add a define to enable per CPU timestamps synchronization trace-cmd: Use per CPU synchronization data when calculating timestamps offsets include/trace-cmd/trace-cmd.h | 7 +- lib/trace-cmd/include/trace-tsync-local.h | 16 +- lib/trace-cmd/trace-input.c | 516 +++++++++++++++++++--- lib/trace-cmd/trace-timesync.c | 269 +++++++++-- tracecmd/include/trace-local.h | 4 + tracecmd/trace-dump.c | 60 ++- tracecmd/trace-record.c | 18 + tracecmd/trace-tsync.c | 144 +++--- 8 files changed, 832 insertions(+), 202 deletions(-) -- 2.25.1