From: "Yordan Karadzhov (VMware)" <y.karadz@gmail.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-trace-devel@vger.kernel.org
Subject: Re: [PATCH v3 04/20] kernel-shark: Introduce Data streams
Date: Fri, 13 Nov 2020 15:47:04 +0200 [thread overview]
Message-ID: <164442c9-0732-2fda-d6d2-96077d6f170e@gmail.com> (raw)
In-Reply-To: <20201112155051.18e226e9@gandalf.local.home>
On 12.11.20 г. 22:50 ч., Steven Rostedt wrote:
> On Thu, 12 Nov 2020 16:23:42 +0200
> "Yordan Karadzhov (VMware)" <y.karadz@gmail.com> wrote:
>
>> With the help of Data stream, KernelShark will be able to load and
>> merge multiple trace files (streams). Each stream can have different
>> plugins or filters, registered for it, which means that the raw trace
>> data of the streams can have different formats, and will allow for a
>> great degree of customization of the provided data visualization. In
>> this patch we only provide the basic definitions. The actual integration
>> of the Data streams into the C API of KernelShark will happen in the
>> following patches.
>>
>> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
>> ---
>> src/libkshark.h | 216 ++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 216 insertions(+)
>>
>> diff --git a/src/libkshark.h b/src/libkshark.h
>> index cc20077f..c8fdd266 100644
>> --- a/src/libkshark.h
>> +++ b/src/libkshark.h
>> @@ -121,6 +121,222 @@ void kshark_hash_id_free(struct kshark_hash_id *hash);
>>
>> int *kshark_hash_ids(struct kshark_hash_id *hash);
>>
>> +struct kshark_data_stream;
>> +
>> +/** A function type to be used to initialize the interface of the data stream. */
>> +typedef int (*interface_init_func) (struct kshark_data_stream *,
>> + const char *);
>> +
>> +/** A function type to be used to initialize the interface of the data stream. */
>> +typedef int (*interface_close_func) (struct kshark_data_stream *,
>> + const char *);
>
> These two typedefs should probably be introduced when a patch that uses them
> is added. Otherwise they are basically meaningless for the reviewer.
>
> Also, it the above looks like a cut-and-paste error as the close has the
> same description as the init.
>
> I don't even see the above used in later patches :-/
>
You are right. This is a dead code left over from previous versions of
the way input plugins have been loaded.
>
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef char *(*stream_get_str_func) (struct kshark_data_stream *,
>> + const struct kshark_entry *);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef const int (*stream_get_int_func) (struct kshark_data_stream *,
>> + const struct kshark_entry *);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef int (*stream_find_id_func) (struct kshark_data_stream *,
>> + const char *);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef int *(*stream_get_ids_func) (struct kshark_data_stream *);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef int (*stream_get_names_func) (struct kshark_data_stream *,
>> + const struct kshark_entry *,
>> + char ***);
>> +
>> +/** Event field format identifier. */
>> +typedef enum kshark_event_field_format {
>> + /** A field of unknown type. */
>> + KS_INVALIDE_FIELD,
>
> KS_INVALID_FIELD ?
>
My idea is this identifier to be used for event fields having type that
is not supported by the interface. For example strings or arrays.
>> +
>> + /** Integer number */
>> + KS_INTEGER_FIELD,
>> +
>> + /** Floating-point number */
>> + KS_FLOAT_FIELD
>> +} kshark_event_field_format;
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef kshark_event_field_format
>> +(*stream_event_field_type) (struct kshark_data_stream *,
>> + const struct kshark_entry *,
>> + const char *);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef const int (*stream_read_event_field) (struct kshark_data_stream *,
>> + const struct kshark_entry *,
>> + const char *,
>> + int64_t *);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef const int (*stream_read_record_field) (struct kshark_data_stream *,
>> + void *,
>> + const char *,
>> + int64_t *);
>> +
>> +struct kshark_context;
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef ssize_t (*load_entries_func) (struct kshark_data_stream *,
>> + struct kshark_context *,
>> + struct kshark_entry ***);
>> +
>> +/** A function type to be used by the method interface of the data stream. */
>> +typedef ssize_t (*load_matrix_func) (struct kshark_data_stream *,
>> + struct kshark_context *,
>> + int16_t **event_array,
>> + int16_t **cpu_array,
>> + int32_t **pid_array,
>> + int64_t **offset_array,
>> + int64_t **ts_array);
>> +
>> +/** Data format identifier. */
>> +typedef enum kshark_data_format {
>> + /** A data of unknown type. */
>> + KS_INVALIDE_DATA,
>
> KS_INVALID_DATA ?
this identifier will be used in the case you are trying to open an
arbitrary file that contains no tracing data (.jpeg for example).
>
>> +
>> + /** Ftrace data. */
>> + KS_TEP_DATA,
>> +
>> + /** VMware SchedTrace data. */
>> + KS_VMW_ST_DATA,
>> +} kshark_data_format;
>
> I wonder if this should be a string value that gets registered? Otherwise
> we will have to be the registry of every new stream format added.
>
> This is the approach that Tzvetomir took for protocol ids, because that way
> we don't need to keep track of them:
>
> https://lore.kernel.org/r/20201029111816.247241-2-tz.stoyanov@gmail.com
>
I wonder how we can avoid name collisions, especially in the case when
some of the data readout plugins will be proprietary.
Also I don't think we can expect more than a dozen of distinct data
formats to be supported.
Thanks!
Yordan
> -- Steve
>
>> +
>> +/** Data interface identifier. */
>> +typedef enum kshark_data_interface_id {
>> + /** An interface with unknown type. */
>> + KS_INVALIDE_INTERFACE,
>> +
>> + /** Generic interface suitable for Ftrace data. */
>> + KS_GENERIC_DATA_INTERFACE,
>> +} kshark_data_interface_id;
>> +
next prev parent reply other threads:[~2020-11-13 13:47 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-12 14:23 [PATCH v3 00/20] Start KernelShark v2 transformation Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 01/20] kernel-shark: Use only signed types in kshark_entry Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 02/20] kernel-shark: Add stream_id to kshark_entry Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 03/20] kernel-shark: Introduce libkshark-hash Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 04/20] kernel-shark: Introduce Data streams Yordan Karadzhov (VMware)
2020-11-12 20:50 ` Steven Rostedt
2020-11-13 13:47 ` Yordan Karadzhov (VMware) [this message]
2020-11-13 14:42 ` Steven Rostedt
2020-11-13 14:49 ` Steven Rostedt
2020-11-13 15:08 ` Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 05/20] kernel-shark: Rename static methods in libkshark Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 06/20] kernel-shark: Add basic methods for Data streams Yordan Karadzhov (VMware)
2020-11-12 21:17 ` Steven Rostedt
2020-11-13 13:55 ` Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 07/20] kernel-shark: Housekeeping before implementing stream interface Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 08/20] kernel-shark: Add stream interface for trace-cmd data Yordan Karadzhov (VMware)
2020-11-12 22:10 ` Steven Rostedt
2020-11-13 13:58 ` Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 09/20] kernel-shark: Start introducing KernelShark 2.0 Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 10/20] kernel-shark: Start using data streams Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 11/20] kernel-shark: Remove dead code Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 12/20] kernel-shark: Redesign the plugin interface Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 13/20] kernel-shark: Complete the stream integration Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 14/20] kernel-shark: Provide merging of multiple data streams Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 15/20] kernel-shark: Integrate the stream definitions with data model Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 16/20] kernel-shark: Use only signed types for model defs Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 17/20] kernel-shark: Add ksmodel_get_bin() Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 18/20] kernel-shark: Protect ksmodel_set_in_range_bining() Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 19/20] kernel-shark: Add methods for time calibration Yordan Karadzhov (VMware)
2020-11-12 14:23 ` [PATCH v3 20/20] kernel-shark: Integrate streams with libkshark-configio Yordan Karadzhov (VMware)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=164442c9-0732-2fda-d6d2-96077d6f170e@gmail.com \
--to=y.karadz@gmail.com \
--cc=linux-trace-devel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).