* [PATCH v5 21/25] trace-cmd library: Handle latency trace in version 7 files
2021-11-11 15:11 [PATCH v5 20/25] trace-cmd library: Initialize CPU data for reading from version 7 trace files Tzvetomir Stoyanov (VMware)
@ 2021-11-11 15:11 ` Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 22/25] trace-cmd library: Handle buffer trace data init for " Tzvetomir Stoyanov (VMware)
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Tzvetomir Stoyanov (VMware) @ 2021-11-11 15:11 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel
Latency trace data is saved the same was as flyrecord buffer data
in trace files version 7. There is a BUFFER_TEXT option which holds the
latency specific trace metadata and points to the section in the file
with the trace data. A new API is added to read latency data:
tracecmd_latency_data_read()
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
.../include/private/trace-cmd-private.h | 5 +++-
lib/trace-cmd/trace-input.c | 29 ++++++++++++++++++-
lib/trace-cmd/trace-output.c | 5 +++-
tracecmd/trace-record.c | 3 +-
4 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/lib/trace-cmd/include/private/trace-cmd-private.h b/lib/trace-cmd/include/private/trace-cmd-private.h
index 1a43b7e3..879640ac 100644
--- a/lib/trace-cmd/include/private/trace-cmd-private.h
+++ b/lib/trace-cmd/include/private/trace-cmd-private.h
@@ -221,6 +221,8 @@ tracecmd_peek_data_ref(struct tracecmd_input *handle, int cpu)
return rec;
}
+int tracecmd_latency_data_read(struct tracecmd_input *handle, char **buf, size_t *size);
+
struct tep_record *
tracecmd_read_prev(struct tracecmd_input *handle, struct tep_record *record);
@@ -295,7 +297,8 @@ int tracecmd_output_write_init(struct tracecmd_output *handler);
int tracecmd_output_write_headers(struct tracecmd_output *handler,
struct tracecmd_event_list *list);
-struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus);
+struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus,
+ int file_version);
struct tracecmd_output *tracecmd_create_init_fd(int fd);
struct tracecmd_output *tracecmd_create_init_file(const char *output_file);
diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c
index 5d9f24e8..5efa4859 100644
--- a/lib/trace-cmd/trace-input.c
+++ b/lib/trace-cmd/trace-input.c
@@ -3193,6 +3193,24 @@ static int read_options_type(struct tracecmd_input *handle)
return 0;
}
+int tracecmd_latency_data_read(struct tracecmd_input *handle, char **buf, size_t *size)
+{
+ if (!handle || !buf || !size)
+ return -1;
+ if (handle->file_state != TRACECMD_FILE_CPU_LATENCY)
+ return -1;
+
+ /* Read data from a file */
+ if (!(*buf)) {
+ *size = BUFSIZ;
+ *buf = malloc(*size);
+ if (!(*buf))
+ return -1;
+ }
+
+ return do_read(handle, *buf, *size);
+}
+
static int init_cpu_data(struct tracecmd_input *handle)
{
enum kbuffer_long_size long_size;
@@ -3255,6 +3273,12 @@ static int init_cpu_data(struct tracecmd_input *handle)
return -1;
}
+int init_latency_data(struct tracecmd_input *handle)
+{
+ /* To do */
+ return 0;
+}
+
static int init_buffer_cpu_data(struct tracecmd_input *handle, struct input_buffer_instance *buffer)
{
unsigned long long offset;
@@ -3269,7 +3293,10 @@ static int init_buffer_cpu_data(struct tracecmd_input *handle, struct input_buff
return -1;
if (read_section_header(handle, &id, &flags, NULL, NULL))
return -1;
-
+ if (buffer->latency) {
+ handle->file_state = TRACECMD_FILE_CPU_LATENCY;
+ return init_latency_data(handle) == 0 ? 1 : -1;
+ }
handle->file_state = TRACECMD_FILE_CPU_FLYRECORD;
handle->cpus = buffer->cpus;
if (handle->max_cpu < handle->cpus)
diff --git a/lib/trace-cmd/trace-output.c b/lib/trace-cmd/trace-output.c
index 1d666775..e06931ce 100644
--- a/lib/trace-cmd/trace-output.c
+++ b/lib/trace-cmd/trace-output.c
@@ -1778,7 +1778,8 @@ out_add_buffer_option_v7(struct tracecmd_output *handle, const char *name,
return option;
}
-struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus)
+struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, int cpus,
+ int file_version)
{
enum tracecmd_section_flags flags = 0;
struct tracecmd_output *handle;
@@ -1793,6 +1794,8 @@ struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, in
handle = tracecmd_output_allocate(fd);
if (!handle)
goto out_free;
+ if (file_version && tracecmd_output_set_version(handle, file_version))
+ goto out_free;
if (tracecmd_output_write_init(handle))
goto out_free;
if (tracecmd_output_write_headers(handle, NULL))
diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
index 32270e20..0b1dc508 100644
--- a/tracecmd/trace-record.c
+++ b/tracecmd/trace-record.c
@@ -4505,7 +4505,8 @@ static void record_data(struct common_record_context *ctx)
return;
if (latency) {
- handle = tracecmd_create_file_latency(ctx->output, local_cpu_count);
+ handle = tracecmd_create_file_latency(ctx->output, local_cpu_count,
+ ctx->file_version);
tracecmd_set_quiet(handle, quiet);
} else {
if (!local_cpu_count)
--
2.33.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v5 22/25] trace-cmd library: Handle buffer trace data init for version 7 files
2021-11-11 15:11 [PATCH v5 20/25] trace-cmd library: Initialize CPU data for reading from version 7 trace files Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 21/25] trace-cmd library: Handle latency trace in version 7 files Tzvetomir Stoyanov (VMware)
@ 2021-11-11 15:11 ` Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 23/25] trace-cmd report: Use the new latency API to read data Tzvetomir Stoyanov (VMware)
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Tzvetomir Stoyanov (VMware) @ 2021-11-11 15:11 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel
CPU data initialization is different for trace files version 6 and 7.
When a new input handler to trace buffer is created, initialize the CPU
data according to the file version.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
lib/trace-cmd/trace-input.c | 55 +++++++++++++++++++------------------
1 file changed, 29 insertions(+), 26 deletions(-)
diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c
index 5efa4859..f9978dde 100644
--- a/lib/trace-cmd/trace-input.c
+++ b/lib/trace-cmd/trace-input.c
@@ -4466,34 +4466,37 @@ tracecmd_buffer_instance_handle(struct tracecmd_input *handle, int indx)
new_handle->flags |= TRACECMD_FL_BUFFER_INSTANCE;
new_handle->pid_maps = NULL;
+ if (!HAS_SECTIONS(handle)) {
+ /* Save where we currently are */
+ offset = lseek64(handle->fd, 0, SEEK_CUR);
- /* Save where we currently are */
- offset = lseek64(handle->fd, 0, SEEK_CUR);
-
- ret = lseek64(handle->fd, buffer->offset, SEEK_SET);
- if (ret < 0) {
- tracecmd_warning("could not seek to buffer %s offset %ld\n",
- buffer->name, buffer->offset);
- goto error;
- }
-
- /*
- * read_options_type() is called right after the CPU count so update
- * file state accordingly.
- */
- new_handle->file_state = TRACECMD_FILE_CPU_COUNT;
- ret = read_options_type(new_handle);
- if (!ret)
- ret = read_cpu_data(new_handle);
- if (ret < 0) {
- tracecmd_warning("failed to read sub buffer %s\n", buffer->name);
- goto error;
- }
+ ret = lseek64(handle->fd, buffer->offset, SEEK_SET);
+ if (ret == (off64_t)-1) {
+ tracecmd_warning("could not seek to buffer %s offset %ld\n",
+ buffer->name, buffer->offset);
+ goto error;
+ }
+ /*
+ * read_options_type() is called right after the CPU count so update
+ * file state accordingly.
+ */
+ new_handle->file_state = TRACECMD_FILE_CPU_COUNT;
+ ret = read_options_type(new_handle);
+ if (!ret)
+ ret = read_cpu_data(new_handle);
- ret = lseek64(handle->fd, offset, SEEK_SET);
- if (ret < 0) {
- tracecmd_warning("could not seek to back to offset %ld\n", offset);
- goto error;
+ if (ret < 0) {
+ tracecmd_warning("failed to read sub buffer %s\n", buffer->name);
+ goto error;
+ }
+ ret = lseek64(handle->fd, offset, SEEK_SET);
+ if (ret < 0) {
+ tracecmd_warning("could not seek to back to offset %ld\n", offset);
+ goto error;
+ }
+ } else {
+ if (init_buffer_cpu_data(new_handle, buffer) < 0)
+ goto error;
}
return new_handle;
--
2.33.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v5 23/25] trace-cmd report: Use the new latency API to read data
2021-11-11 15:11 [PATCH v5 20/25] trace-cmd library: Initialize CPU data for reading from version 7 trace files Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 21/25] trace-cmd library: Handle latency trace in version 7 files Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 22/25] trace-cmd library: Handle buffer trace data init for " Tzvetomir Stoyanov (VMware)
@ 2021-11-11 15:11 ` Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 24/25] trace-cmd: Call additional APIs when creating trace file Tzvetomir Stoyanov (VMware)
2021-11-11 15:11 ` [PATCH v5 25/25] trace-cmd report: Add new parameter for trace file version Tzvetomir Stoyanov (VMware)
4 siblings, 0 replies; 7+ messages in thread
From: Tzvetomir Stoyanov (VMware) @ 2021-11-11 15:11 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel
When reading latency trace data, use the new API
tracecmd_latency_data_read()
It handles reading latency trace data from both version 6 and 7 trace
files.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
tracecmd/trace-read.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/tracecmd/trace-read.c b/tracecmd/trace-read.c
index f7ffb89e..cafceffe 100644
--- a/tracecmd/trace-read.c
+++ b/tracecmd/trace-read.c
@@ -948,18 +948,20 @@ void trace_show_data(struct tracecmd_input *handle, struct tep_record *record)
printf("\n");
}
-static void read_rest(void)
+static void read_latency(struct tracecmd_input *handle)
{
- char buf[BUFSIZ + 1];
+ char *buf = NULL;
+ size_t size = 0;
int r;
do {
- r = read(input_fd, buf, BUFSIZ);
- if (r > 0) {
- buf[r] = 0;
- printf("%s", buf);
- }
+ r = tracecmd_latency_data_read(handle, &buf, &size);
+ if (r > 0)
+ printf("%.*s", r, buf);
} while (r > 0);
+
+ printf("\n");
+ free(buf);
}
static int
@@ -1243,7 +1245,7 @@ static void read_data_info(struct list_head *handle_list, enum output_type otype
if (ret > 0) {
if (multi_inputs)
die("latency traces do not work with multiple inputs");
- read_rest();
+ read_latency(handles->handle);
return;
}
--
2.33.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v5 24/25] trace-cmd: Call additional APIs when creating trace file
2021-11-11 15:11 [PATCH v5 20/25] trace-cmd library: Initialize CPU data for reading from version 7 trace files Tzvetomir Stoyanov (VMware)
` (2 preceding siblings ...)
2021-11-11 15:11 ` [PATCH v5 23/25] trace-cmd report: Use the new latency API to read data Tzvetomir Stoyanov (VMware)
@ 2021-11-11 15:11 ` Tzvetomir Stoyanov (VMware)
2021-11-24 19:51 ` Steven Rostedt
2021-11-11 15:11 ` [PATCH v5 25/25] trace-cmd report: Add new parameter for trace file version Tzvetomir Stoyanov (VMware)
4 siblings, 1 reply; 7+ messages in thread
From: Tzvetomir Stoyanov (VMware) @ 2021-11-11 15:11 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel
When creating a trace file, two more APIs should be called, compared to
the old flow:
- tracecmd_write_buffer_info(), to write version 6 buffers metadata in
the file.
- tracecmd_write_options() after the trace data is written, for version
7 trace files, as the buffer metadata is appended to the options at
the end.
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
tracecmd/trace-listen.c | 6 ++++++
tracecmd/trace-record.c | 4 ++++
tracecmd/trace-restore.c | 3 ++-
tracecmd/trace-split.c | 3 +++
4 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/tracecmd/trace-listen.c b/tracecmd/trace-listen.c
index 45ba1211..28be6e7b 100644
--- a/tracecmd/trace-listen.c
+++ b/tracecmd/trace-listen.c
@@ -604,6 +604,9 @@ static int put_together_file(int cpus, int ofd, const char *node,
if (write_options) {
ret = tracecmd_write_cpus(handle, cpus);
+ if (ret)
+ goto out;
+ ret = tracecmd_write_buffer_info(handle);
if (ret)
goto out;
ret = tracecmd_write_options(handle);
@@ -612,6 +615,9 @@ static int put_together_file(int cpus, int ofd, const char *node,
}
ret = tracecmd_write_cpu_data(handle, cpus, temp_files, NULL);
+ if (!ret && tracecmd_get_out_file_version(handle) >= FILE_VERSION_SECTIONS)
+ tracecmd_write_options(handle);
+
out:
tracecmd_output_close(handle);
for (cpu--; cpu >= 0; cpu--) {
diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
index 0b1dc508..338a6a8a 100644
--- a/tracecmd/trace-record.c
+++ b/tracecmd/trace-record.c
@@ -3729,6 +3729,9 @@ setup_connection(struct buffer_instance *instance, struct common_record_context
if (ret)
goto error;
ret = tracecmd_write_cpus(network_handle, instance->cpu_count);
+ if (ret)
+ goto error;
+ ret = tracecmd_write_buffer_info(network_handle);
if (ret)
goto error;
ret = tracecmd_write_options(network_handle);
@@ -4092,6 +4095,7 @@ static void setup_agent(struct buffer_instance *instance,
add_options(network_handle, ctx);
tracecmd_write_cmdlines(network_handle);
tracecmd_write_cpus(network_handle, instance->cpu_count);
+ tracecmd_write_buffer_info(network_handle);
tracecmd_write_options(network_handle);
tracecmd_msg_finish_sending_data(instance->msg_handle);
instance->network_handle = network_handle;
diff --git a/tracecmd/trace-restore.c b/tracecmd/trace-restore.c
index 8d2fcae8..a903c21a 100644
--- a/tracecmd/trace-restore.c
+++ b/tracecmd/trace-restore.c
@@ -163,6 +163,7 @@ void trace_restore (int argc, char **argv)
if (tracecmd_append_cpu_data(handle, args, &argv[first_arg]) < 0)
die("failed to append data");
-
+ if (tracecmd_get_out_file_version(handle) >= FILE_VERSION_SECTIONS)
+ tracecmd_write_options(handle);
return;
}
diff --git a/tracecmd/trace-split.c b/tracecmd/trace-split.c
index e4a0c3b3..671d6e9f 100644
--- a/tracecmd/trace-split.c
+++ b/tracecmd/trace-split.c
@@ -391,6 +391,9 @@ static double parse_file(struct tracecmd_input *handle,
if (tracecmd_append_cpu_data(ohandle, cpus, cpu_list) < 0)
die("Failed to append tracing data\n");
+ if (tracecmd_get_out_file_version(ohandle) >= FILE_VERSION_SECTIONS)
+ tracecmd_write_options(ohandle);
+
current = end;
for (cpu = 0; cpu < cpus; cpu++) {
/* Set the tracecmd cursor to the next set of records */
--
2.33.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v5 24/25] trace-cmd: Call additional APIs when creating trace file
2021-11-11 15:11 ` [PATCH v5 24/25] trace-cmd: Call additional APIs when creating trace file Tzvetomir Stoyanov (VMware)
@ 2021-11-24 19:51 ` Steven Rostedt
0 siblings, 0 replies; 7+ messages in thread
From: Steven Rostedt @ 2021-11-24 19:51 UTC (permalink / raw)
To: Tzvetomir Stoyanov (VMware); +Cc: linux-trace-devel
On Thu, 11 Nov 2021 17:11:32 +0200
"Tzvetomir Stoyanov (VMware)" <tz.stoyanov@gmail.com> wrote:
> diff --git a/tracecmd/trace-restore.c b/tracecmd/trace-restore.c
> index 8d2fcae8..a903c21a 100644
> --- a/tracecmd/trace-restore.c
> +++ b/tracecmd/trace-restore.c
> @@ -163,6 +163,7 @@ void trace_restore (int argc, char **argv)
>
> if (tracecmd_append_cpu_data(handle, args, &argv[first_arg]) < 0)
> die("failed to append data");
> -
> + if (tracecmd_get_out_file_version(handle) >= FILE_VERSION_SECTIONS)
> + tracecmd_write_options(handle);
I wonder if we are just missing a tracecmd_output_close() here?
And that will write the options as I mentioned before.
> return;
> }
> diff --git a/tracecmd/trace-split.c b/tracecmd/trace-split.c
> index e4a0c3b3..671d6e9f 100644
> --- a/tracecmd/trace-split.c
> +++ b/tracecmd/trace-split.c
> @@ -391,6 +391,9 @@ static double parse_file(struct tracecmd_input *handle,
> if (tracecmd_append_cpu_data(ohandle, cpus, cpu_list) < 0)
> die("Failed to append tracing data\n");
>
> + if (tracecmd_get_out_file_version(ohandle) >= FILE_VERSION_SECTIONS)
> + tracecmd_write_options(ohandle);
> +
And no more is written here to ohandle, and the close should fix it as well.
-- Steve
> current = end;
> for (cpu = 0; cpu < cpus; cpu++) {
> /* Set the tracecmd cursor to the next set of records */
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 25/25] trace-cmd report: Add new parameter for trace file version
2021-11-11 15:11 [PATCH v5 20/25] trace-cmd library: Initialize CPU data for reading from version 7 trace files Tzvetomir Stoyanov (VMware)
` (3 preceding siblings ...)
2021-11-11 15:11 ` [PATCH v5 24/25] trace-cmd: Call additional APIs when creating trace file Tzvetomir Stoyanov (VMware)
@ 2021-11-11 15:11 ` Tzvetomir Stoyanov (VMware)
4 siblings, 0 replies; 7+ messages in thread
From: Tzvetomir Stoyanov (VMware) @ 2021-11-11 15:11 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel
By default, "trace-cmd report" writes in trace file version 6.
A new parameter is added, which can be used to set desired version
the output trace file.
"trace-cmd report --file-version <version>"
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
---
tracecmd/trace-record.c | 21 +++++++++++++++++++++
tracecmd/trace-usage.c | 2 +-
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
index 338a6a8a..fab34361 100644
--- a/tracecmd/trace-record.c
+++ b/tracecmd/trace-record.c
@@ -3698,6 +3698,8 @@ static struct tracecmd_output *create_net_output(struct common_record_context *c
out = tracecmd_output_allocate(-1);
if (!out)
return NULL;
+ if (ctx->file_version && tracecmd_output_set_version(out, ctx->file_version))
+ goto error;
if (tracecmd_output_set_msg(out, msg_handle))
goto error;
if (tracecmd_output_write_headers(out, listed_events))
@@ -3744,6 +3746,8 @@ setup_connection(struct buffer_instance *instance, struct common_record_context
network_handle = tracecmd_output_allocate(msg_handle->fd);
if (!network_handle)
goto error;
+ if (tracecmd_output_set_version(network_handle, ctx->file_version))
+ goto error;
if (tracecmd_output_write_headers(network_handle, listed_events))
goto error;
tracecmd_set_quiet(network_handle, quiet);
@@ -4475,6 +4479,8 @@ static struct tracecmd_output *create_output(struct common_record_context *ctx)
out = tracecmd_output_allocate(fd);
if (!out)
goto error;
+ if (ctx->file_version && tracecmd_output_set_version(out, ctx->file_version))
+ goto error;
if (tracecmd_output_write_headers(out, listed_events))
goto error;
return out;
@@ -5785,6 +5791,7 @@ void init_top_instance(void)
}
enum {
+ OPT_file_ver = 238,
OPT_verbose = 239,
OPT_tsc2nsec = 240,
OPT_fork = 241,
@@ -6224,6 +6231,7 @@ static void parse_record_options(int argc,
{"tsc2nsec", no_argument, NULL, OPT_tsc2nsec},
{"poll", no_argument, NULL, OPT_poll},
{"verbose", optional_argument, NULL, OPT_verbose},
+ {"file-version", required_argument, NULL, OPT_file_ver},
{NULL, 0, NULL, 0}
};
@@ -6649,6 +6657,19 @@ static void parse_record_options(int argc,
cmd_check_die(ctx, CMD_set, *(argv+1), "--poll");
recorder_flags |= TRACECMD_RECORD_POLL;
break;
+ case OPT_file_ver:
+ cmd_check_die(ctx, CMD_start, *(argv+1), "--file_version");
+ cmd_check_die(ctx, CMD_set, *(argv+1), "--file_version");
+ cmd_check_die(ctx, CMD_extract, *(argv+1), "--file_version");
+ cmd_check_die(ctx, CMD_stream, *(argv+1), "--file_version");
+ cmd_check_die(ctx, CMD_profile, *(argv+1), "--file_version");
+ ctx->file_version = atoi(optarg);
+ if (ctx->file_version < FILE_VERSION_MIN ||
+ ctx->file_version > FILE_VERSION_MAX)
+ die("Unsupported file version %d, "
+ "supported versions are from %d to %d",
+ ctx->file_version, FILE_VERSION_MIN, FILE_VERSION_MAX);
+ break;
case OPT_quiet:
case 'q':
quiet = true;
diff --git a/tracecmd/trace-usage.c b/tracecmd/trace-usage.c
index 32b38bfd..ac12b066 100644
--- a/tracecmd/trace-usage.c
+++ b/tracecmd/trace-usage.c
@@ -69,7 +69,7 @@ static struct usage_help usage_help[] = {
" If 0 is specified, no loop is performed - timestamps offset is calculated only twice,"
" at the beginnig and at the end of the trace\n"
" --poll don't block while reading from the trace buffer\n"
- " --verbose 'level' Set the desired log level\n"
+ " --file-version set the desired trace file version\n"
},
{
"set",
--
2.33.1
^ permalink raw reply related [flat|nested] 7+ messages in thread