diff mbox series

[rt-tests,v2,04/18] cyclicdeadline: Add long command line options

Message ID 20201007085653.11961-5-dwagner@suse.de
State New
Headers show
Series Streamline command line | expand

Commit Message

Daniel Wagner Oct. 7, 2020, 8:56 a.m. UTC
Use getopt_long to parse long version of the commands.

Change the 'a/affinity' option to handle all cases including what '-c'
did. We still keep '-c' silently supported to avoid breaking existing
users.

Signed-off-by: Daniel Wagner <dwagner@suse.de>
---
 src/sched_deadline/cyclicdeadline.8 | 17 +++++-------
 src/sched_deadline/cyclicdeadline.c | 42 ++++++++++++++++++++---------
 2 files changed, 36 insertions(+), 23 deletions(-)

Comments

John Kacur Oct. 23, 2020, 4:07 p.m. UTC | #1
On Wed, 7 Oct 2020, Daniel Wagner wrote:

> Use getopt_long to parse long version of the commands.

> 

> Change the 'a/affinity' option to handle all cases including what '-c'

> did. We still keep '-c' silently supported to avoid breaking existing

> users.

> 

> Signed-off-by: Daniel Wagner <dwagner@suse.de>

> ---

>  src/sched_deadline/cyclicdeadline.8 | 17 +++++-------

>  src/sched_deadline/cyclicdeadline.c | 42 ++++++++++++++++++++---------

>  2 files changed, 36 insertions(+), 23 deletions(-)

> 

> diff --git a/src/sched_deadline/cyclicdeadline.8 b/src/sched_deadline/cyclicdeadline.8

> index 6df7faf445f9..def42f77044a 100644

> --- a/src/sched_deadline/cyclicdeadline.8

> +++ b/src/sched_deadline/cyclicdeadline.8

> @@ -17,7 +17,7 @@ cyclicdeadline \- This program is used to test the deadline scheduler (SCHED_DEA

>  .PP

>  .SH SYNOPSIS

>  .B cyclicdeadline

> -.RI "[-ha] [-c CPUSET] [-D TIME] [-i INTV] [-s STEP] [-t NUM]"

> +.RI "[-a [CPUSET]] [-D TIME] [-h]  [-i INTV] [-s STEP] [-t NUM]"

>  .PP

>  .SH DESCRIPTION

>  .B cyclicdeadline

> @@ -25,26 +25,23 @@ is a cyclictest style program for testing the deadline scheduler

>  .PP

>  .SH OPTIONS

>  .TP

> -.B \-a

> -Use all CPUs

> -.TP

> -.B \-c CPUSET

> +.B \-a \-\-affinity [CPUSET]

>  Comma / hypen separated list of CPUs to run deadline tasks on

>  .TP

> -.B \-D TIME

> +.B \-D \-\-duration TIME

>  Specify a length for the test to run

>  Append 'm', 'h', or 'd' to specify minutes, hours, or days

>  .TP

> -.B \-h

> +.B \-h \-\-help

>  Show this help menu

>  .TP

> -.B \-i INTV

> +.B \-i \-\-interval INTV

>  The shortest deadline for the tasks in us. (default 1000us)

>  .TP

> -.B \-s STEP

> +.B \-s \-\-step STEP

>  The amount to increase the deadline for each task in us. (default 500us)

>  .TP

> -.B \-t NUM

> +.B \-t \-\-threads NUM

>  The number of threads to run as deadline (default 1)

>  .br

>  .SH AUTHOR

> diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c

> index 310880805553..5f5cdfa08f14 100644

> --- a/src/sched_deadline/cyclicdeadline.c

> +++ b/src/sched_deadline/cyclicdeadline.c

> @@ -17,6 +17,7 @@

>  #include <ctype.h>

>  #include <errno.h>

>  #include <signal.h>

> +#include <getopt.h>

>  

>  #include <sys/syscall.h>

>  #include <sys/types.h>

> @@ -635,18 +636,19 @@ static void usage(int error)

>  	printf("cyclicdeadline V %1.2f\n", VERSION);

>  	printf("Usage:\n"

>  	       "cyclicdeadline <options>\n\n"

> -	       "-a                         Use all CPUs\n"

> -	       "-c CPUSET                  Comma/hyphen separated list of CPUs to run deadline\n"

> -	       "                           tasks on.\n"

> -	       "-D TIME                    Specify a length for the test run.\n"

> +	       "-a [CPUSET] --affinity     Comma/hyphen separated list of CPUs to run deadline\n"

> +	       "                           tasks on. An empty CPUSET runs on all CPUs a deadline\n"

> +	       "                           task.\n"

> +	       "                           on CPU 4, and thread #5 on CPU 5.\n"

> +	       "-D TIME     --duration     Specify a length for the test run.\n"

>  	       "                           Append 'm', 'h', or 'd' to specify minutes, hours or\n"

>  	       "                           days\n"

> -	       "-h                         Show this help menu.\n"

> -	       "-i INTV                    The shortest deadline for the tasks in us\n"

> +	       "-h          --help         Show this help menu.\n"

> +	       "-i INTV     --interval     The shortest deadline for the tasks in us\n"

>  	       "                           (default 1000us).\n"

> -	       "-s STEP                    The amount to increase the deadline for each task in us\n"

> +	       "-s STEP     --step         The amount to increase the deadline for each task in us\n"

>  	       "                           (default 500us).\n"

> -	       "-t NUM                     The number of threads to run as deadline (default 1).\n"

> +	       "-t NUM      --threads      The number of threads to run as deadline (default 1).\n"

>  	       );

>  	exit(error);

>  }

> @@ -1033,15 +1035,29 @@ int main (int argc, char **argv)

>  		exit(-1);

>  	}

>  

> -	while ((c = getopt(argc, argv, "+hac:i:s:t:D:")) >= 0) {

> +	for (;;) {

> +		static struct option options[] = {

> +			{ "affinity",	optional_argument,	NULL,	'a' },

> +			{ "duration",	required_argument,	NULL,	'D' },

> +			{ "help",	no_argument,		NULL,	'h' },

> +			{ "interval",	required_argument,	NULL,	'i' },

> +			{ "threads",	required_argument,	NULL,	't' },

> +			{ NULL,		0,			NULL,	0   },

> +		};

> +		c = getopt_long(argc, argv, "a::c:D:hi:t:", options, NULL);

> +		if (c == -1)

> +			break;

>  		switch (c) {

>  		case 'a':

> -			all_cpus = 1;

> +		case 'c':

>  			if (!nr_threads)

>  				nr_threads = cpu_count;

> -			break;

> -		case 'c':

> -			setcpu = optarg;

> +			if (optarg)

> +				setcpu = optarg;

> +			else if (optind < argc)

> +				setcpu = argv[optind];

> +			else

> +				all_cpus = 1;

>  			break;

>  		case 'i':

>  			interval = atoi(optarg);

> -- 

> 2.28.0

> 

> 

Signed-off-by: John Kacur <jkacur@redhat.com>


Go ahead and send me a patch to remove the -c option
no need to retain this for silent backwards compatibility.

Thanks
Daniel Wagner Oct. 27, 2020, 8:07 a.m. UTC | #2
On Fri, Oct 23, 2020 at 12:07:18PM -0400, John Kacur wrote:
> Go ahead and send me a patch to remove the -c option
> no need to retain this for silent backwards compatibility.

As I said, the reason I left the -c option is my attempt not to break
existing setups. It's usually a bit annoying as user if tools change
interfaces while keeping the same major version number.

But then there are properly not many users anyway and those are capable
to handle the change. I'll send a patch.
diff mbox series

Patch

diff --git a/src/sched_deadline/cyclicdeadline.8 b/src/sched_deadline/cyclicdeadline.8
index 6df7faf445f9..def42f77044a 100644
--- a/src/sched_deadline/cyclicdeadline.8
+++ b/src/sched_deadline/cyclicdeadline.8
@@ -17,7 +17,7 @@  cyclicdeadline \- This program is used to test the deadline scheduler (SCHED_DEA
 .PP
 .SH SYNOPSIS
 .B cyclicdeadline
-.RI "[-ha] [-c CPUSET] [-D TIME] [-i INTV] [-s STEP] [-t NUM]"
+.RI "[-a [CPUSET]] [-D TIME] [-h]  [-i INTV] [-s STEP] [-t NUM]"
 .PP
 .SH DESCRIPTION
 .B cyclicdeadline
@@ -25,26 +25,23 @@  is a cyclictest style program for testing the deadline scheduler
 .PP
 .SH OPTIONS
 .TP
-.B \-a
-Use all CPUs
-.TP
-.B \-c CPUSET
+.B \-a \-\-affinity [CPUSET]
 Comma / hypen separated list of CPUs to run deadline tasks on
 .TP
-.B \-D TIME
+.B \-D \-\-duration TIME
 Specify a length for the test to run
 Append 'm', 'h', or 'd' to specify minutes, hours, or days
 .TP
-.B \-h
+.B \-h \-\-help
 Show this help menu
 .TP
-.B \-i INTV
+.B \-i \-\-interval INTV
 The shortest deadline for the tasks in us. (default 1000us)
 .TP
-.B \-s STEP
+.B \-s \-\-step STEP
 The amount to increase the deadline for each task in us. (default 500us)
 .TP
-.B \-t NUM
+.B \-t \-\-threads NUM
 The number of threads to run as deadline (default 1)
 .br
 .SH AUTHOR
diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c
index 310880805553..5f5cdfa08f14 100644
--- a/src/sched_deadline/cyclicdeadline.c
+++ b/src/sched_deadline/cyclicdeadline.c
@@ -17,6 +17,7 @@ 
 #include <ctype.h>
 #include <errno.h>
 #include <signal.h>
+#include <getopt.h>
 
 #include <sys/syscall.h>
 #include <sys/types.h>
@@ -635,18 +636,19 @@  static void usage(int error)
 	printf("cyclicdeadline V %1.2f\n", VERSION);
 	printf("Usage:\n"
 	       "cyclicdeadline <options>\n\n"
-	       "-a                         Use all CPUs\n"
-	       "-c CPUSET                  Comma/hyphen separated list of CPUs to run deadline\n"
-	       "                           tasks on.\n"
-	       "-D TIME                    Specify a length for the test run.\n"
+	       "-a [CPUSET] --affinity     Comma/hyphen separated list of CPUs to run deadline\n"
+	       "                           tasks on. An empty CPUSET runs on all CPUs a deadline\n"
+	       "                           task.\n"
+	       "                           on CPU 4, and thread #5 on CPU 5.\n"
+	       "-D TIME     --duration     Specify a length for the test run.\n"
 	       "                           Append 'm', 'h', or 'd' to specify minutes, hours or\n"
 	       "                           days\n"
-	       "-h                         Show this help menu.\n"
-	       "-i INTV                    The shortest deadline for the tasks in us\n"
+	       "-h          --help         Show this help menu.\n"
+	       "-i INTV     --interval     The shortest deadline for the tasks in us\n"
 	       "                           (default 1000us).\n"
-	       "-s STEP                    The amount to increase the deadline for each task in us\n"
+	       "-s STEP     --step         The amount to increase the deadline for each task in us\n"
 	       "                           (default 500us).\n"
-	       "-t NUM                     The number of threads to run as deadline (default 1).\n"
+	       "-t NUM      --threads      The number of threads to run as deadline (default 1).\n"
 	       );
 	exit(error);
 }
@@ -1033,15 +1035,29 @@  int main (int argc, char **argv)
 		exit(-1);
 	}
 
-	while ((c = getopt(argc, argv, "+hac:i:s:t:D:")) >= 0) {
+	for (;;) {
+		static struct option options[] = {
+			{ "affinity",	optional_argument,	NULL,	'a' },
+			{ "duration",	required_argument,	NULL,	'D' },
+			{ "help",	no_argument,		NULL,	'h' },
+			{ "interval",	required_argument,	NULL,	'i' },
+			{ "threads",	required_argument,	NULL,	't' },
+			{ NULL,		0,			NULL,	0   },
+		};
+		c = getopt_long(argc, argv, "a::c:D:hi:t:", options, NULL);
+		if (c == -1)
+			break;
 		switch (c) {
 		case 'a':
-			all_cpus = 1;
+		case 'c':
 			if (!nr_threads)
 				nr_threads = cpu_count;
-			break;
-		case 'c':
-			setcpu = optarg;
+			if (optarg)
+				setcpu = optarg;
+			else if (optind < argc)
+				setcpu = argv[optind];
+			else
+				all_cpus = 1;
 			break;
 		case 'i':
 			interval = atoi(optarg);