From: "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com>
To: rostedt@goodmis.org
Cc: linux-trace-devel@vger.kernel.org
Subject: [PATCH v3 14/25] trace-cmd library: Introduce sections in trace file reading logic
Date: Tue, 14 Sep 2021 16:14:27 +0300 [thread overview]
Message-ID: <20210914131438.3965484-15-tz.stoyanov@gmail.com> (raw)
In-Reply-To: <20210914131438.3965484-1-tz.stoyanov@gmail.com>
Trace file version 7 is based on sections. Added an internal sections
database and new helper functions to add, read, open and close file
sections.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
lib/trace-cmd/trace-input.c | 69 +++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c
index 85100aa4..978758c0 100644
--- a/lib/trace-cmd/trace-input.c
+++ b/lib/trace-cmd/trace-input.c
@@ -114,6 +114,14 @@ struct tsc2nsec {
unsigned long long offset;
};
+struct file_section {
+ int id;
+ unsigned long long section_offset;
+ unsigned long long data_offset;
+ enum tracecmd_section_flags flags;
+ struct file_section *next;
+};
+
struct tracecmd_input {
struct tep_handle *pevent;
unsigned long file_state;
@@ -153,6 +161,7 @@ struct tracecmd_input {
struct hook_list *hooks;
struct pid_addr_maps *pid_maps;
/* file information */
+ struct file_section *sections;
size_t header_files_start;
size_t ftrace_files_start;
size_t event_files_start;
@@ -376,6 +385,58 @@ static int read8(struct tracecmd_input *handle, unsigned long long *size)
return 0;
}
+static struct file_section *section_get(struct tracecmd_input *handle, int id)
+{
+ struct file_section *sec;
+
+ for (sec = handle->sections; sec; sec = sec->next) {
+ if (sec->id == id)
+ return sec;
+ }
+
+ return NULL;
+}
+
+static struct file_section *section_open(struct tracecmd_input *handle, int id)
+{
+ struct file_section *sec = section_get(handle, id);
+
+ if (!sec)
+ return NULL;
+
+ if (lseek64(handle->fd, sec->data_offset, SEEK_SET) == (off64_t)-1)
+ return NULL;
+ return sec;
+}
+
+static void section_close(struct tracecmd_input *handle, struct file_section *sec)
+{
+ /* To Do */
+}
+
+static int section_add_or_update(struct tracecmd_input *handle, int id, int flags,
+ unsigned long long section_offset,
+ unsigned long long data_offset)
+{
+ struct file_section *sec = section_get(handle, id);
+
+ if (!sec) {
+ sec = calloc(1, sizeof(struct file_section));
+ if (!sec)
+ return -1;
+ sec->next = handle->sections;
+ handle->sections = sec;
+ }
+ sec->id = id;
+ if (section_offset)
+ sec->section_offset = section_offset;
+ if (data_offset)
+ sec->data_offset = data_offset;
+ if (flags > 0)
+ sec->flags = flags;
+ return 0;
+}
+
static int read_header_files(struct tracecmd_input *handle)
{
struct tep_handle *pevent = handle->pevent;
@@ -3508,6 +3569,7 @@ void tracecmd_ref(struct tracecmd_input *handle)
*/
void tracecmd_close(struct tracecmd_input *handle)
{
+ struct file_section *del_sec;
int cpu;
int i;
@@ -3547,6 +3609,12 @@ void tracecmd_close(struct tracecmd_input *handle)
free(handle->version);
close(handle->fd);
+ while (handle->sections) {
+ del_sec = handle->sections;
+ handle->sections = handle->sections->next;
+ free(del_sec);
+ }
+
for (i = 0; i < handle->nr_buffers; i++)
free(handle->buffers[i].name);
free(handle->buffers);
@@ -3991,6 +4059,7 @@ tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx)
new_handle->nr_buffers = 0;
new_handle->buffers = NULL;
new_handle->version = NULL;
+ new_handle->sections = NULL;
new_handle->guest = NULL;
new_handle->ref = 1;
if (handle->trace_clock) {
--
2.31.1
next prev parent reply other threads:[~2021-09-14 13:15 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-14 13:14 [PATCH v3 00/25] Trace file version 7 - sections Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 01/25] trace-cmd library: Define trace file version 7 Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 02/25] trace-cmd library: Add cache functionality to network message handler Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 03/25] trace-cmd library: New APIs to get and set version of output handler Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 04/25] trace-cmd library: Add internal helper function for writing headers before file sections Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 05/25] trace-cmd library: Write header " Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 06/25] trace-cmd library: Add multiple options sections in trace file version 7 Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 07/25] trace-cmd library: Do not write CPU count section in trace files " Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 08/25] trace-cmd library: Move CPU flyrecord trace metadata into the buffer option, for trace file " Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 09/25] trace-cmd record: Append trace options after the trace data are written Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 10/25] trace-cmd library: Add section header before flyrecord trace data Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 11/25] trace-cmd library: Fit CPU latency trace data in the new trace file version 7 format Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 12/25] trace-cmd library: Do not write CPUs with empty trace data Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 13/25] trace-cmd library: Add macro to check file state on reading Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` Tzvetomir Stoyanov (VMware) [this message]
2021-09-14 13:14 ` [PATCH v3 15/25] trace-cmd library: Initialize internal sections database on file read Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 16/25] trace-cmd library: Use sections database when reading parts of the trace file Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 17/25] trace-cmd library: Read headers from trace file version 7 Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 18/25] trace-cmd library: Read extended BUFFER option Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 19/25] trace-cmd library: Handle the extended DONE option Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 20/25] trace-cmd library: Initialize CPU data for reading from version 7 trace files Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 21/25] trace-cmd library: Handle latency trace in version 7 files Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 22/25] trace-cmd library: Handle buffer trace data init for " Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 23/25] trace-cmd report: Use the new latency API to read data Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 24/25] trace-cmd: Call additional APIs when creating trace file Tzvetomir Stoyanov (VMware)
2021-09-14 13:14 ` [PATCH v3 25/25] trace-cmd report: Add new parameter for trace file version Tzvetomir Stoyanov (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=20210914131438.3965484-15-tz.stoyanov@gmail.com \
--to=tz.stoyanov@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).