Skip to contentSkip to conversation

rt-tests: pip_stress: Add option --usleep

PATCH Superseded Shizhao Chen 3 participants 5 messages Jan 23, 2025 – Jan 29, 2025

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 rt-tests: pip_stress: Add option --usleep

Different hardwares have different threasholds for usleep_val to reliably trigger an prio inversion, add option --usleep to allow specifying it at runtime, to facilitate testing of prio inheritance on different platforms.

---
 src/pi_tests/pip_stress.8 |  6 +++++-
 src/pi_tests/pip_stress.c | 10 ++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)
src/pi_tests/pip_stress.8 +5 -1
index 0d06dd2..f55e2d8 100644
@@ -5,7 +5,8 @@
 .B pip_stress \- Priority Inheritance with processes
 .SH SYNOPSIS
 .B pip_stress
-
+.RB [ \-u|\-\-usleep
+.IR TIME ]
 .SH DESCRIPTION
 This program demonstrates the technique of using priority inheritance (PI)
 mutexes with processes instead of threads.
@@ -41,6 +42,9 @@ merely increase the time that the low priority process sleeps while
 holding the lock. (usleep);
 Also note that you have to run as a user with permission to change
 scheduling priorities.
+.SH OPTIONS
+.IP "\-u TIME,\-\-usleep=TIME"
+Specify the sleep time of the low priority process. Defaults to 500(us).
 .BR
 .SH AUTHOR
 pip_stress was written by John Kacur <jkacur at redhat.com>
src/pi_tests/pip_stress.c +8 -2
index fb0391b..782e5db 100644
@@ -72,7 +72,9 @@ static void usage(int error)
 	printf("pip_stress V %1.2f\n", VERSION);
 	printf("Usage:\n"
 	       "pip_stress <options>\n"\
-	       "-h	--help                  Show this help menu.\n"
+	       "-h       --help          Show this help menu.\n"\
+	       "-u TIME  --usleep=TIME   Specify the sleep time of the low priority process.\n"\
+	       "                         Defaults to 500(us).\n"
 	       );
 	exit(error);
 }
@@ -88,16 +90,20 @@ int main(int argc, char *argv[])
 	for (;;) {
 		struct option long_options[] = {
 			{ "help",	no_argument,		NULL,	'h' },
+			{ "usleep",	required_argument,	NULL,	'u' },
 			{ NULL,		0,			NULL,	0 },
 		};
 
-		int c = getopt_long(argc, argv, "s:h", long_options, NULL);
+		int c = getopt_long(argc, argv, "hu:", long_options, NULL);
 		if (c == -1)
 			break;
 		switch (c) {
 		case 'h':
 			usage(0);
 			break;
+		case 'u':
+			usleep_val = (useconds_t)strtoul(optarg, NULL, 10);
+			break;
 		default:
 			usage(1);
 			break;
Signature · 1 line
2.47.1
#1 lore raw
Quoted 10 lines · Shizhao Chen

Different hardwares have different threasholds for usleep_val to reliably trigger an prio inversion, add option --usleep to allow specifying it at runtime, to facilitate testing of prio inheritance on different platforms.

---
 src/pi_tests/pip_stress.8 |  6 +++++-
 src/pi_tests/pip_stress.c | 10 ++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

Hmm, looks like there was an earlier attempt (53956b6712fef1, "pip_stress: parameterize usleep value to work-around platform issues") that was missing the actual call to getopt... and then another commit (1325cb7e9e3af08e, "Daniel Wagner <[email protected]>") that added getopt but removed usleep -- while also adding a "-s" option that does nothing. :-P

Some minor nits:

src/pi_tests/pip_stress.8 merely increase the time that the low priority process sleeps while · line 47

Quoted 7 lines
src/pi_tests/pip_stress.8 +3 -0
@@ -41,6 +42,9 @@ merely increase the time that the low priority process sleeps while
 holding the lock. (usleep);
 Also note that you have to run as a user with permission to change
 scheduling priorities.
+.SH OPTIONS
+.IP "\-u TIME,\-\-usleep=TIME"
+Specify the sleep time of the low priority process. Defaults to 500(us).

The unit should be part of the description, not the default:

Specify the sleep time in usec of the low priority process. Defaults to 500.

src/pi_tests/pip_stress.c static void usage(int error) · line 78

Quoted 5 lines
src/pi_tests/pip_stress.c +3 -1
-	       "-h	--help                  Show this help menu.\n"
+	       "-h       --help          Show this help menu.\n"\
+	       "-u TIME  --usleep=TIME   Specify the sleep time of the low priority process.\n"\
+	       "                         Defaults to 500(us).\n"
 	       );

Likewise here

src/pi_tests/pip_stress.c int main(int argc, char *argv[]) · line 106

Quoted 3 lines
src/pi_tests/pip_stress.c +3 -0
+		case 'u':
+			usleep_val = (useconds_t)strtoul(optarg, NULL, 10);
+			break;

Why is this cast needed?

-Crystal

#2 lore raw
Quoted 13 lines · Crystal Wood
Quoted 10 lines · Shizhao Chen

Different hardwares have different threasholds for usleep_val to reliably trigger an prio inversion, add option --usleep to allow specifying it at runtime, to facilitate testing of prio inheritance on different platforms.

---
 src/pi_tests/pip_stress.8 |  6 +++++-
 src/pi_tests/pip_stress.c | 10 ++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)
Quoted 6 lines

Hmm, looks like there was an earlier attempt (53956b6712fef1, "pip_stress: parameterize usleep value to work-around platform issues") that was missing the actual call to getopt... and then another commit (1325cb7e9e3af08e, "Daniel Wagner <[email protected]>") that added getopt but removed usleep -- while also adding a "-s" option that does nothing. :-P

Yeah I kinda stole the option from clark :)

Quoted 13 lines

Some minor nits:

src/pi_tests/pip_stress.8 merely increase the time that the low priority process sleeps while · line 47

Quoted 7 lines
src/pi_tests/pip_stress.8 +3 -0
@@ -41,6 +42,9 @@ merely increase the time that the low priority process sleeps while
 holding the lock. (usleep);
 Also note that you have to run as a user with permission to change
 scheduling priorities.
+.SH OPTIONS
+.IP "\-u TIME,\-\-usleep=TIME"
+Specify the sleep time of the low priority process. Defaults to 500(us).

The unit should be part of the description, not the default:

Quoted 2 lines

Specify the sleep time in usec of the low priority process. Defaults to 500.

I hesitated several times whether I should add the (us) at the end, your version looks much better, thanks!

Quoted 7 lines

src/pi_tests/pip_stress.c static void usage(int error) · line 78

Quoted 6 lines
src/pi_tests/pip_stress.c +3 -1
-            "-h      --help                  Show this help menu.\n"
+            "-h       --help          Show this help menu.\n"\
+            "-u TIME  --usleep=TIME   Specify the sleep time of the low priority process.\n"\
+            "                         Defaults to 500(us).\n"
             );
Quoted 7 lines

Likewise here

src/pi_tests/pip_stress.c int main(int argc, char *argv[]) · line 106

Quoted 3 lines
src/pi_tests/pip_stress.c +3 -0
+             case 'u':
+                     usleep_val = (useconds_t)strtoul(optarg, NULL, 10);
+                     break;

Why is this cast needed?

It's not needed - just me being unfamiliar with C. :P I'll remove it.

Quoted 4 lines

-Crystal

#3 lore raw

PATCH v2 1/1 rt-tests: pip_stress: Add option --usleep

Different hardwares have different threasholds for usleep_val to reliably trigger an prio inversion, add option --usleep to allow specifying it at runtime, to facilitate testing of prio inheritance on different platforms.

---
 src/pi_tests/pip_stress.8 |  6 +++++-
 src/pi_tests/pip_stress.c | 10 ++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)
src/pi_tests/pip_stress.8 +5 -1
index 0d06dd2..0f65ad1 100644
@@ -5,7 +5,8 @@
 .B pip_stress \- Priority Inheritance with processes
 .SH SYNOPSIS
 .B pip_stress
-
+.RB [ \-u|\-\-usleep
+.IR TIME ]
 .SH DESCRIPTION
 This program demonstrates the technique of using priority inheritance (PI)
 mutexes with processes instead of threads.
@@ -41,6 +42,9 @@ merely increase the time that the low priority process sleeps while
 holding the lock. (usleep);
 Also note that you have to run as a user with permission to change
 scheduling priorities.
+.SH OPTIONS
+.IP "\-u TIME,\-\-usleep=TIME"
+Specify the sleep time in usec of the low priority process. Defaults to 500.
 .BR
 .SH AUTHOR
 pip_stress was written by John Kacur <jkacur at redhat.com>
src/pi_tests/pip_stress.c +8 -2
index fb0391b..9bd225f 100644
@@ -72,7 +72,9 @@ static void usage(int error)
 	printf("pip_stress V %1.2f\n", VERSION);
 	printf("Usage:\n"
 	       "pip_stress <options>\n"\
-	       "-h	--help                  Show this help menu.\n"
+	       "-h       --help          Show this help menu.\n"\
+	       "-u TIME  --usleep=TIME   Specify the sleep time in usec of the low priority process.\n"\
+	       "                         Defaults to 500.\n"
 	       );
 	exit(error);
 }
@@ -88,16 +90,20 @@ int main(int argc, char *argv[])
 	for (;;) {
 		struct option long_options[] = {
 			{ "help",	no_argument,		NULL,	'h' },
+			{ "usleep",	required_argument,	NULL,	'u' },
 			{ NULL,		0,			NULL,	0 },
 		};
 
-		int c = getopt_long(argc, argv, "s:h", long_options, NULL);
+		int c = getopt_long(argc, argv, "hu:", long_options, NULL);
 		if (c == -1)
 			break;
 		switch (c) {
 		case 'h':
 			usage(0);
 			break;
+		case 'u':
+			usleep_val = strtoul(optarg, NULL, 10);
+			break;
 		default:
 			usage(1);
 			break;
Signature · 1 line
2.47.1
#4 lore raw
Quoted 77 lines · Shizhao Chen

Different hardwares have different threasholds for usleep_val to reliably trigger an prio inversion, add option --usleep to allow specifying it at runtime, to facilitate testing of prio inheritance on different platforms.

---
 src/pi_tests/pip_stress.8 |  6 +++++-
 src/pi_tests/pip_stress.c | 10 ++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)
src/pi_tests/pip_stress.8 +5 -1
index 0d06dd2..0f65ad1 100644
@@ -5,7 +5,8 @@
 .B pip_stress \- Priority Inheritance with processes
 .SH SYNOPSIS
 .B pip_stress
-
+.RB [ \-u|\-\-usleep
+.IR TIME ]
 .SH DESCRIPTION
 This program demonstrates the technique of using priority inheritance (PI)
 mutexes with processes instead of threads.
@@ -41,6 +42,9 @@ merely increase the time that the low priority process sleeps while
 holding the lock. (usleep);
 Also note that you have to run as a user with permission to change
 scheduling priorities.
+.SH OPTIONS
+.IP "\-u TIME,\-\-usleep=TIME"
+Specify the sleep time in usec of the low priority process. Defaults to 500.
 .BR
 .SH AUTHOR
 pip_stress was written by John Kacur <jkacur at redhat.com>
src/pi_tests/pip_stress.c +8 -2
index fb0391b..9bd225f 100644
@@ -72,7 +72,9 @@ static void usage(int error)
 	printf("pip_stress V %1.2f\n", VERSION);
 	printf("Usage:\n"
 	       "pip_stress <options>\n"\
-	       "-h	--help                  Show this help menu.\n"
+	       "-h       --help          Show this help menu.\n"\
+	       "-u TIME  --usleep=TIME   Specify the sleep time in usec of the low priority process.\n"\
+	       "                         Defaults to 500.\n"
 	       );
 	exit(error);
 }
@@ -88,16 +90,20 @@ int main(int argc, char *argv[])
 	for (;;) {
 		struct option long_options[] = {
 			{ "help",	no_argument,		NULL,	'h' },
+			{ "usleep",	required_argument,	NULL,	'u' },
 			{ NULL,		0,			NULL,	0 },
 		};
 
-		int c = getopt_long(argc, argv, "s:h", long_options, NULL);
+		int c = getopt_long(argc, argv, "hu:", long_options, NULL);
 		if (c == -1)
 			break;
 		switch (c) {
 		case 'h':
 			usage(0);
 			break;
+		case 'u':
+			usleep_val = strtoul(optarg, NULL, 10);
+			break;
 		default:
 			usage(1);
 			break;
Signature · 1 line
2.47.1