Commit e9a4062e authored by Daniel Bristot de Oliveira's avatar Daniel Bristot de Oliveira
Browse files

rtla: Add --trace-buffer-size option

Add the option allow the users to set a different buffer size for the
trace. For example, in large systems, the user might be interested on
reducing the trace buffer to avoid large tracing files.

The buffer size is specified in kB, and it is only affecting
the tracing instance.

The function trace_set_buffer_size() appears on libtracefs v1.6,
so increase the minimum required version on Makefile.config.

Link: https://lkml.kernel.org/r/e7c9ca5b3865f28e131a49ec3b984fadf2d056c6.1715860611.git.bristot@kernel.org



Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: John Kacur <jkacur@redhat.com>
Signed-off-by: default avatarDaniel Bristot de Oliveira <bristot@kernel.org>
parent fb9e90a6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -54,6 +54,9 @@

        After starting the workload, let it run for *s* seconds before starting collecting the data, allowing the system to warm-up. Statistical data generated during warm-up is discarded.

**--trace-buffer-size** *kB*
        Set the per-cpu trace buffer size in kB for the tracing output.

**-h**, **--help**

        Print help menu.
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
STOP_ERROR :=

LIBTRACEEVENT_MIN_VERSION = 1.5
LIBTRACEFS_MIN_VERSION = 1.3
LIBTRACEFS_MIN_VERSION = 1.6

define lib_setup
  $(eval LIB_INCLUDES += $(shell sh -c "$(PKG_CONFIG) --cflags lib$(1)"))
+12 −1
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ struct osnoise_hist_params {
	int			bucket_size;
	int			entries;
	int			warmup;
	int			buffer_size;
};

struct osnoise_hist_cpu {
@@ -469,6 +470,7 @@ static void osnoise_hist_usage(char *usage)
		"		d:runtime[us|ms|s]:period[us|ms|s] - use SCHED_DEADLINE with runtime and period",
		"						       in nanoseconds",
		"	     --warm-up: let the workload run for s seconds before collecting data",
		"	     --trace-buffer-size kB: set the per-cpu trace buffer size in kB",
		NULL,
	};

@@ -533,13 +535,14 @@ static struct osnoise_hist_params
			{"trigger",		required_argument,	0, '4'},
			{"filter",		required_argument,	0, '5'},
			{"warm-up",		required_argument,	0, '6'},
			{"trace-buffer-size",	required_argument,	0, '7'},
			{0, 0, 0, 0}
		};

		/* getopt_long stores the option index here. */
		int option_index = 0;

		c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:p:P:r:s:S:t::T:01234:5:6:",
		c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:p:P:r:s:S:t::T:01234:5:6:7:",
				 long_options, &option_index);

		/* detect the end of the options. */
@@ -685,6 +688,9 @@ static struct osnoise_hist_params
		case '6':
			params->warmup = get_llong_from_str(optarg);
			break;
		case '7':
			params->buffer_size = get_llong_from_str(optarg);
			break;
		default:
			osnoise_hist_usage("Invalid option");
		}
@@ -891,6 +897,11 @@ int osnoise_hist_main(int argc, char *argv[])
				goto out_hist;
		}

		if (params->buffer_size > 0) {
			retval = trace_set_buffer_size(&record->trace, params->buffer_size);
			if (retval)
				goto out_hist;
		}
	}

	/*
+13 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ struct osnoise_top_params {
	int			cgroup;
	int			hk_cpus;
	int			warmup;
	int			buffer_size;
	cpu_set_t		hk_cpu_set;
	struct sched_attr	sched_param;
	struct trace_events	*events;
@@ -309,6 +310,7 @@ static void osnoise_top_usage(struct osnoise_top_params *params, char *usage)
		"		d:runtime[us|ms|s]:period[us|ms|s] - use SCHED_DEADLINE with runtime and period",
		"						       in nanoseconds",
		"	     --warm-up s: let the workload run for s seconds before collecting data",
		"	     --trace-buffer-size kB: set the per-cpu trace buffer size in kB",
		NULL,
	};

@@ -384,13 +386,14 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)
			{"trigger",		required_argument,	0, '0'},
			{"filter",		required_argument,	0, '1'},
			{"warm-up",		required_argument,	0, '2'},
			{"trace-buffer-size",	required_argument,	0, '3'},
			{0, 0, 0, 0}
		};

		/* getopt_long stores the option index here. */
		int option_index = 0;

		c = getopt_long(argc, argv, "a:c:C::d:De:hH:p:P:qr:s:S:t::T:0:1:2:",
		c = getopt_long(argc, argv, "a:c:C::d:De:hH:p:P:qr:s:S:t::T:0:1:2:3:",
				 long_options, &option_index);

		/* Detect the end of the options. */
@@ -517,6 +520,9 @@ struct osnoise_top_params *osnoise_top_parse_args(int argc, char **argv)
		case '2':
			params->warmup = get_llong_from_str(optarg);
			break;
		case '3':
			params->buffer_size = get_llong_from_str(optarg);
			break;
		default:
			osnoise_top_usage(params, "Invalid option");
		}
@@ -725,6 +731,12 @@ int osnoise_top_main(int argc, char **argv)
			if (retval)
				goto out_top;
		}

		if (params->buffer_size > 0) {
			retval = trace_set_buffer_size(&record->trace, params->buffer_size);
			if (retval)
				goto out_top;
		}
	}

	/*
+13 −1
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ struct timerlat_hist_params {
	int			bucket_size;
	int			entries;
	int			warmup;
	int			buffer_size;
};

struct timerlat_hist_cpu {
@@ -669,6 +670,7 @@ static void timerlat_hist_usage(char *usage)
		"	  -k/--kernel-threads: use timerlat kernel-space threads instead of rtla user-space threads",
		"	  -U/--user-load: enable timerlat for user-defined user-space workload",
		"	     --warm-up s: let the workload run for s seconds before collecting data",
		"	     --trace-buffer-size kB: set the per-cpu trace buffer size in kB",
		NULL,
	};

@@ -745,13 +747,14 @@ static struct timerlat_hist_params
			{"no-aa",		no_argument,		0, '9'},
			{"dump-task",		no_argument,		0, '\1'},
			{"warm-up",		required_argument,	0, '\2'},
			{"trace-buffer-size",	required_argument,	0, '\3'},
			{0, 0, 0, 0}
		};

		/* getopt_long stores the option index here. */
		int option_index = 0;

		c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:i:knp:P:s:t::T:uU0123456:7:8:9\1\2:",
		c = getopt_long(argc, argv, "a:c:C::b:d:e:E:DhH:i:knp:P:s:t::T:uU0123456:7:8:9\1\2:\3",
				 long_options, &option_index);

		/* detect the end of the options. */
@@ -926,6 +929,9 @@ static struct timerlat_hist_params
		case '\2':
			params->warmup = get_llong_from_str(optarg);
			break;
		case '\3':
			params->buffer_size = get_llong_from_str(optarg);
			break;
		default:
			timerlat_hist_usage("Invalid option");
		}
@@ -1179,6 +1185,12 @@ int timerlat_hist_main(int argc, char *argv[])
			if (retval)
				goto out_hist;
		}

		if (params->buffer_size > 0) {
			retval = trace_set_buffer_size(&record->trace, params->buffer_size);
			if (retval)
				goto out_hist;
		}
	}

	if (!params->no_aa) {
Loading