JSON cleanups and more tests updated
v3 cover JSON cleanups and more tests updated
v3:
- rebase
- two patches splitted into per test program change
- commit messsage added
v2:
- added 'return_code' to the common section of the JSON output
- dropped 'inversion' as we have 'return_code' in pip_stress
- dropped 'success' as we have 'return code in ssdd
All patches are also available at:
https://github.com/igaw/rt-tests/tree/json-output-2021-03-20
Daniel Wagner (33):
cyclictest: Remove unused include header
cyclicdeadline: Remove unused include header
signaltest: Add missing --output usage info
rt-util: Add rt_init function
cyclictest: Initialize rt-util
oslat: Initialize rt-util
pmqtest: Initialize rt-util
ptsematest: Initialize rt-util
rt-migrate-test: Initialize rt-util
cyclicdeadline: Initialize rt-util
signaltest: Initialize rt-util
sigwaittest: Initialize rt-util
svematest: Initialize rt-util
rt-util: Remove superfluous arguments from rt_write_json
rt-util: Introduce rt_test_start()
cyclictest: Record start of test execution
oslat: Record start of test execution
pmqtest: Record start of test execution
ptesematest: Record start of test execution
rt-migrate-test: Record start of test execution
cyclicdeadline: Record start of test execution
signaltest: Record start of test execution
sigwaittest: Record start of test execution
svsematest: Record start of test execution
rt-util: Add return_code to common section of JSON output
pip_stress: Move test result output to main
pip_stress: Return failure code if test fails
pip_stress: Prepare arg parser to accept only long options
pip_stress: Add JSON output feature
pi_stress: Prepare command line parser for long options only
pi_stress: Add JSON output feature
ssdd: Add quiet command line option
ssdd: Add JSON output feature
src/cyclictest/cyclictest.c | 5 +- src/include/rt-utils.h | 6 +- src/lib/rt-utils.c | 85 ++++++++++++++++----------- src/oslat/oslat.c | 6 +- src/pi_tests/pi_stress.c | 65 ++++++++++++++++---- src/pi_tests/pip_stress.c | 40 +++++++++---- src/pmqtest/pmqtest.c | 4 +- src/ptsematest/ptsematest.c | 4 +- src/rt-migrate-test/rt-migrate-test.c | 4 +- src/sched_deadline/cyclicdeadline.c | 6 +- src/signaltest/signaltest.c | 5 +- src/sigwaittest/sigwaittest.c | 4 +- src/ssdd/ssdd.c | 43 +++++++++++--- src/svsematest/svsematest.c | 4 +- 14 files changed, 199 insertions(+), 82 deletions(-)
Signature · 1 line
2.30.2
PATCH v3 1/33 cyclictest: Remove unused include header
The header was introduced by 24aaf9619bc2 ("cyclictest: Add JSON output feature") for PRIu64 format specifier. As PRIu64 was removed in commit f6881fc42baa ("cyclictest: Fix printf format specifier") remove the include header again.
--- src/cyclictest/cyclictest.c | 1 - 1 file changed, 1 deletion(-)
src/cyclictest/cyclictest.c +0 -1
@@ -11,7 +11,6 @@#include <stdio.h> #include <stdlib.h> #include <stdint.h> -#include <inttypes.h> #include <stdarg.h> #include <unistd.h> #include <fcntl.h>
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 01/33] cyclictest: Remove unused include header
Quoted 26 lines · Daniel Wagner
The header was introduced by
24aaf9619bc2("cyclictest: Add JSON output feature") for PRIu64 format specifier. As PRIu64 was removed in commitf6881fc42baa("cyclictest: Fix printf format specifier") remove the include header again.Signed-off-by Daniel Wagner <[email protected]>--- src/cyclictest/cyclictest.c | 1 - 1 file changed, 1 deletion(-)src/cyclictest/cyclictest.c +0
-1@@ -11,7 +11,6 @@#include <stdio.h> #include <stdlib.h> #include <stdint.h> -#include <inttypes.h> #include <stdarg.h> #include <unistd.h> #include <fcntl.h> Signature · 1 line
2.30.2
(In fact I pushed this awhile ago)
PATCH v3 2/33 cyclicdeadline: Remove unused include header
In reply to Daniel WagnerThe header was introduced by 68621f3c3322 ("cyclicdeadline: Add JSON output feature")for PRIu64 format specifier. As PRIu64 was removed in commit 51255cc14051 ("cyclicdeadline.c: Fix printf format specifier") remove the include header again.
--- src/sched_deadline/cyclicdeadline.c | 1 - 1 file changed, 1 deletion(-)
src/sched_deadline/cyclicdeadline.c +0 -1
@@ -18,7 +18,6 @@#include <errno.h> #include <signal.h> #include <getopt.h> -#include <inttypes.h> #include <sys/syscall.h> #include <sys/types.h>
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 02/33] cyclicdeadline: Remove unused include header
Quoted 26 lines · Daniel Wagner
The header was introduced by
68621f3c3322("cyclicdeadline: Add JSON output feature")for PRIu64 format specifier. As PRIu64 was removed in commit51255cc14051("cyclicdeadline.c: Fix printf format specifier") remove the include header again.Signed-off-by Daniel Wagner <[email protected]>--- src/sched_deadline/cyclicdeadline.c | 1 - 1 file changed, 1 deletion(-)src/sched_deadline/cyclicdeadline.c +0
-1@@ -18,7 +18,6 @@#include <errno.h> #include <signal.h> #include <getopt.h> -#include <inttypes.h> #include <sys/syscall.h> #include <sys/types.h> Signature · 1 line
2.30.2
PATCH v3 3/33 signaltest: Add missing --output usage info
In reply to Daniel Wagnerbdb20cdaa8d5 ("signaltest: Add JSON output feature") introduced the new command line option but forgot to add it to the usage string.
--- src/signaltest/signaltest.c | 1 + 1 file changed, 1 insertion(+)
src/signaltest/signaltest.c +1 -0
@@ -189,6 +189,7 @@ static void display_help(int error)"-h --help display usage information\n" "-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n" "-m --mlockall lock current and future memory allocations\n" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" "-p PRIO --prio=PRIO priority of highest prio thread\n" "-q --quiet print a summary only on exit\n" "-t NUM --threads=NUM number of threads: default=2\n"
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 03/33] signaltest: Add missing --output usage info
Quoted 24 lines · Daniel Wagner
bdb20cdaa8d5("signaltest: Add JSON output feature") introduced the new command line option but forgot to add it to the usage string.Signed-off-by Daniel Wagner <[email protected]>--- src/signaltest/signaltest.c | 1 + 1 file changed, 1 insertion(+)src/signaltest/signaltest.c +1
-0@@ -189,6 +189,7 @@ static void display_help(int error)"-h --help display usage information\n" "-l LOOPS --loops=LOOPS number of loops: default=0(endless)\n" "-m --mlockall lock current and future memory allocations\n" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" "-p PRIO --prio=PRIO priority of highest prio thread\n" "-q --quiet print a summary only on exit\n" "-t NUM --threads=NUM number of threads: default=2\n" Signature · 1 line
2.30.2
PATCH v3 4/33 rt-util: Add rt_init function
In reply to Daniel Wagnerrt_init() should be called as first in the test program. The main job for this function is to copy the command line before getopt() runs. By default, getopt_long() permutes the contents of argv as it scans, so that eventually all the nonoptions are at the end. This is confusing in the JSON output, thus copy the command line before we call getopt_long().
--- src/include/rt-utils.h | 2 ++ src/lib/rt-utils.c | 47 +++++++++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 7 deletions(-)
src/include/rt-utils.h +2 -0
@@ -80,6 +80,8 @@ static inline int64_t calctime(struct timespec t)return time; } +void rt_init (int argc,char *argv[]); +void rt_write_json (const char *filename,int argc,char *argv[],void (*cb)(FILE *,void *),void *data);
src/lib/rt-utils.c +40 -7
89 lines not on this page · raw message
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 04/33] rt-util: Add rt_init function
Quoted 129 lines · Daniel Wagner
rt_init()should be called as first in the test program. The main job for this function is to copy the command line beforegetopt()runs. By default,getopt_long()permutes the contents of argv as it scans, so that eventually all the nonoptions are at the end. This is confusing in the JSON output, thus copy the command line before we callgetopt_long().Signed-off-by Daniel Wagner <[email protected]>--- src/include/rt-utils.h | 2 ++ src/lib/rt-utils.c | 47 +++++++++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 7 deletions(-)src/include/rt-utils.h +2
-0@@ -80,6 +80,8 @@ static inline int64_t calctime(struct timespec t)return time; } +void rt_init (int argc,char *argv[]); +void rt_write_json (const char *filename,int argc,char *argv[],void (*cb)(FILE *,void *),void *data);src/lib/rt-utils.c +40
-7@@ -29,12 +29,15 @@#include "rt-error.h" #define TRACEBUFSIZ 1024 +#define MAX_COMMAND_LINE 4096static char debugfileprefix[MAX_PATH ];static char *fileprefix;static int trace_fd =-1 ;static int tracemark_fd =-1 ;static __threadchar tracebuf[TRACEBUFSIZ ]; +static char test_cmdline[MAX_COMMAND_LINE ]; +static int rt_init_run;/* * Finds the tracing directory in a mounted debugfs @@ -486,6 +489,34 @@ void disable_trace_mark(void)close_tracemark_fd (); } +void rt_init (int argc,char *argv[]) +{ +int offset =0 ; +int len, i; + + test_cmdline[0 ] ='\0' ; + +/* +* getopt_long() permutes the contents of argv as it scans, so +* that eventually all the nonoptions are at the end. Make a +* copy before calling getopt_long(). +*/ +for (i =0 ; i < argc;) { + len =strlen (argv[i]); +if (offset + len +1 >=MAX_COMMAND_LINE ) +break ; + +strcat (test_cmdline, argv[i]); + i++; +if (i < argc) +strcat (test_cmdline," " ); + + offset += len +1 ; + } + + rt_init_run =1 ; +} +static char *get_cmdline (int argc,char *argv[]) {char *cmdline;@@ -519,7 +550,7 @@ void rt_write_json(const char *filename, int argc, char *argv[],struct timeval tv;char tsbuf[64 ];struct tm *tm; -char *cmdline; +char *cmdline =NULL ;FILE *f, *s;time_t t;size_t n;@@ -533,10 +564,11 @@ void rt_write_json(const char *filename, int argc, char *argv[],err_exit (errno,"Failed to open '%s'\n" , filename); } - cmdline =get_cmdline (argc, argv); -if (!cmdline) -err_exit (ENOMEM ,"get_cmdline()" ); - +if (!rt_init_run) { + cmdline =get_cmdline (argc, argv); +if (!cmdline) +err_exit (ENOMEM ,"get_cmdline()" ); + }gettimeofday (&tv,NULL ); t = tv.tv_sec;@@ -557,7 +589,7 @@ void rt_write_json(const char *filename, int argc, char *argv[],fprintf (f,"{\n" );fprintf (f," \"file_version\": 1,\n" ); -fprintf (f," \"cmdline:\": \"%s\",\n" , cmdline); +fprintf (f," \"cmdline:\": \"%s\",\n" , rt_init_run? test_cmdline : cmdline);fprintf (f," \"rt_test_version:\": \"%1.2f\",\n" ,VERSION );fprintf (f," \"finished\": \"%s\",\n" , tsbuf);fprintf (f," \"sysinfo\": {\n" );@@ -573,7 +605,8 @@ void rt_write_json(const char *filename, int argc, char *argv[],fprintf (f,"}\n" ); -free (cmdline); +if (!rt_init_run) +free (cmdline);if (!filename ||strcmp ("-" , filename))fclose (f);Signature · 1 line
2.30.2
But I don't like the name, it's not initing any test state, it's copying the command line, and the name should reflect that.
Re: [PATCH rt-tests v3 04/33] rt-util: Add rt_init function
Quoted 2 lines · John Kacur
But I don't like the name, it's not initing any test state, it's copying the command line, and the name should reflect that.
I went for rt_init() because rt_test_start() code was part of it. But without this part we could name it something like:
rt_{copy|save|store}_{cmdline|args}
What's your preference?
PATCH v3 5/33 cyclictest: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/cyclictest/cyclictest.c | 1 + 1 file changed, 1 insertion(+)
src/cyclictest/cyclictest.c +1 -0
@@ -1778,6 +1778,7 @@ int main(int argc, char **argv)int i, ret =-1 ;int status; +rt_init (argc, argv);process_options (argc, argv, max_cpus);if (check_privs ())
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 05/33] cyclictest: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/cyclictest/cyclictest.c | 1 + 1 file changed, 1 insertion(+)src/cyclictest/cyclictest.c +1
-0@@ -1778,6 +1778,7 @@ int main(int argc, char **argv)int i, ret =-1 ;int status; +rt_init (argc, argv);process_options (argc, argv, max_cpus);if (check_privs ())Signature · 1 line
2.30.2
PATCH v3 6/33 oslat: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/oslat/oslat.c | 2 ++ 1 file changed, 2 insertions(+)
src/oslat/oslat.c +2 -0
@@ -796,6 +796,8 @@ int main(int argc, char *argv[])exit (1 ); } +rt_init (argc, argv); + g.app_name = argv[0 ]; g.rtprio =0 ; g.bucket_size =BUCKET_SIZE ;
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 06/33] oslat: Initialize rt-util
Quoted 24 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/oslat/oslat.c | 2 ++ 1 file changed, 2 insertions(+)src/oslat/oslat.c +2
-0@@ -796,6 +796,8 @@ int main(int argc, char *argv[])exit (1 ); } +rt_init (argc, argv); + g.app_name = argv[0 ]; g.rtprio =0 ; g.bucket_size =BUCKET_SIZE ;Signature · 1 line
2.30.2
PATCH v3 7/33 pmqtest: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/pmqtest/pmqtest.c | 1 + 1 file changed, 1 insertion(+)
src/pmqtest/pmqtest.c +1 -0
@@ -502,6 +502,7 @@ int main(int argc, char *argv[]) mqstat.mq_msgsize =8 ; mqstat.mq_flags =0 ; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 07/33] pmqtest: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/pmqtest/pmqtest.c | 1 + 1 file changed, 1 insertion(+)src/pmqtest/pmqtest.c +1
-0@@ -502,6 +502,7 @@ int main(int argc, char *argv[]) mqstat.mq_msgsize =8 ; mqstat.mq_flags =0 ; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())Signature · 1 line
2.30.2
PATCH v3 8/33 ptsematest: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/ptsematest/ptsematest.c | 1 + 1 file changed, 1 insertion(+)
src/ptsematest/ptsematest.c +1 -0
@@ -401,6 +401,7 @@ int main(int argc, char *argv[])sigset_t sigset;struct timespec maindelay; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 08/33] ptsematest: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/ptsematest/ptsematest.c | 1 + 1 file changed, 1 insertion(+)src/ptsematest/ptsematest.c +1
-0@@ -401,6 +401,7 @@ int main(int argc, char *argv[])sigset_t sigset;struct timespec maindelay; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())Signature · 1 line
2.30.2
PATCH v3 9/33 rt-migrate-test: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/rt-migrate-test/rt-migrate-test.c | 1 + 1 file changed, 1 insertion(+)
src/rt-migrate-test/rt-migrate-test.c +1 -0
@@ -535,6 +535,7 @@ int main (int argc, char **argv)struct timespec intv;struct sched_param param; +rt_init (argc, argv);parse_options (argc, argv);signal (SIGINT , stop_log);
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 09/33] rt-migrate-test: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/rt-migrate-test/rt-migrate-test.c | 1 + 1 file changed, 1 insertion(+)src/rt-migrate-test/rt-migrate-test.c +1
-0@@ -535,6 +535,7 @@ int main (int argc, char **argv)struct timespec intv;struct sched_param param; +rt_init (argc, argv);parse_options (argc, argv);signal (SIGINT , stop_log);Signature · 1 line
2.30.2
PATCH v3 10/33 cyclicdeadline: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/sched_deadline/cyclicdeadline.c | 2 ++ 1 file changed, 2 insertions(+)
src/sched_deadline/cyclicdeadline.c +2 -0
@@ -1009,6 +1009,8 @@ int main(int argc, char **argv)int i;int c; +rt_init (argc, argv); + cpu_count =sysconf (_SC_NPROCESSORS_CONF);if (cpu_count <1 )err_quit ("Can not calculate number of CPUS\n" );
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 10/33] cyclicdeadline: Initialize rt-util
Quoted 24 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/sched_deadline/cyclicdeadline.c | 2 ++ 1 file changed, 2 insertions(+)src/sched_deadline/cyclicdeadline.c +2
-0@@ -1009,6 +1009,8 @@ int main(int argc, char **argv)int i;int c; +rt_init (argc, argv); + cpu_count =sysconf (_SC_NPROCESSORS_CONF);if (cpu_count <1 )err_quit ("Can not calculate number of CPUS\n" );Signature · 1 line
2.30.2
PATCH v3 11/33 signaltest: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/signaltest/signaltest.c | 1 + 1 file changed, 1 insertion(+)
src/signaltest/signaltest.c +1 -0
@@ -414,6 +414,7 @@ int main(int argc, char **argv)int status, cpu;int max_cpus =sysconf (_SC_NPROCESSORS_ONLN); +rt_init (argc, argv);process_options (argc, argv, max_cpus);if (check_privs ())
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 11/33] signaltest: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/signaltest/signaltest.c | 1 + 1 file changed, 1 insertion(+)src/signaltest/signaltest.c +1
-0@@ -414,6 +414,7 @@ int main(int argc, char **argv)int status, cpu;int max_cpus =sysconf (_SC_NPROCESSORS_ONLN); +rt_init (argc, argv);process_options (argc, argv, max_cpus);if (check_privs ())Signature · 1 line
2.30.2
PATCH v3 12/33 sigwaittest: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/sigwaittest/sigwaittest.c | 1 + 1 file changed, 1 insertion(+)
src/sigwaittest/sigwaittest.c +1 -0
@@ -473,6 +473,7 @@ int main(int argc, char *argv[])char f_opt[14 ];struct timespec launchdelay, maindelay; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 12/33] sigwaittest: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/sigwaittest/sigwaittest.c | 1 + 1 file changed, 1 insertion(+)src/sigwaittest/sigwaittest.c +1
-0@@ -473,6 +473,7 @@ int main(int argc, char *argv[])char f_opt[14 ];struct timespec launchdelay, maindelay; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())Signature · 1 line
2.30.2
PATCH v3 13/33 svematest: Initialize rt-util
In reply to Daniel WagnerAllow rt-util make a copy of the command line.
--- src/svsematest/svsematest.c | 1 + 1 file changed, 1 insertion(+)
src/svsematest/svsematest.c +1 -0
@@ -514,6 +514,7 @@ int main(int argc, char *argv[])if (myfile ==NULL ) myfile = argv[0 ]; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 13/33] svematest: Initialize rt-util
Quoted 23 lines · Daniel Wagner
Allow rt-util make a copy of the command line.
Signed-off-by Daniel Wagner <[email protected]>--- src/svsematest/svsematest.c | 1 + 1 file changed, 1 insertion(+)src/svsematest/svsematest.c +1
-0@@ -514,6 +514,7 @@ int main(int argc, char *argv[])if (myfile ==NULL ) myfile = argv[0 ]; +rt_init (argc, argv);process_options (argc, argv);if (check_privs ())Signature · 1 line
2.30.2
PATCH v3 14/33 rt-util: Remove superfluous arguments from rt_write_json
In reply to Daniel WagnerWe copy the command line via the rt_init() API and don't need the argc, argv arguments for rt_write_json. Remove them.
--- src/cyclictest/cyclictest.c | 2 +- src/include/rt-utils.h | 2 +- src/lib/rt-utils.c | 41 ++------------------------- src/oslat/oslat.c | 3 +- src/pmqtest/pmqtest.c | 2 +- src/ptsematest/ptsematest.c | 2 +- src/rt-migrate-test/rt-migrate-test.c | 2 +- src/sched_deadline/cyclicdeadline.c | 2 +- src/signaltest/signaltest.c | 2 +- src/sigwaittest/sigwaittest.c | 2 +- src/svsematest/svsematest.c | 2 +- 11 files changed, 12 insertions(+), 50 deletions(-)
src/cyclictest/cyclictest.c +1 -1
@@ -2134,7 +2134,7 @@ int main(int argc, char **argv)printf ("\033[%dB" , num_threads +2 );if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats,NULL ); +rt_write_json (outfile, write_stats,NULL );if (quiet) quiet =2 ;
src/include/rt-utils.h +1 -1
@@ -82,7 +82,7 @@ static inline int64_t calctime(struct timespec t)void rt_init (int argc,char *argv[]); -void rt_write_json (const char *filename,int argc,char *argv[], +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data);
src/lib/rt-utils.c +2 -39
79 lines not on this page · raw message
src/oslat/oslat.c +1 -2
@@ -862,8 +862,7 @@ int main(int argc, char *argv[])write_summary (threads);if (strlen (g.outfile) !=0 ) -rt_write_json (g.outfile, argc, argv, - write_summary_json, threads); +rt_write_json (g.outfile, write_summary_json, threads);if (g.cpu_list) {free (g.cpu_list);
src/pmqtest/pmqtest.c +1 -1
@@ -651,7 +651,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nomem:
src/ptsematest/ptsematest.c +1 -1
@@ -519,7 +519,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nomem:
src/rt-migrate-test/rt-migrate-test.c +1 -1
@@ -663,7 +663,7 @@ int main (int argc, char **argv)print_results ();if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats,NULL ); +rt_write_json (outfile, write_stats,NULL );if (stop) {/*
src/sched_deadline/cyclicdeadline.c +1 -1
@@ -1227,7 +1227,7 @@ int main(int argc, char **argv) }if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats, sched_data); +rt_write_json (outfile, write_stats, sched_data);if (setcpu_buf)free (setcpu_buf);
src/signaltest/signaltest.c +1 -1
@@ -558,7 +558,7 @@ int main(int argc, char **argv)free (stat[i].values); }if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats, par); +rt_write_json (outfile, write_stats, par);free (stat); outpar:
src/sigwaittest/sigwaittest.c +1 -1
@@ -706,7 +706,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nomem:
src/svsematest/svsematest.c +1 -1
@@ -778,7 +778,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nosem:
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 14/33] rt-util: Remove superfluous arguments from rt_write_json
Quoted 242 lines · Daniel Wagner
We copy the command line via the
rt_init()API and don't need the argc, argv arguments forrt_write_json. Remove them.Signed-off-by Daniel Wagner <[email protected]>--- src/cyclictest/cyclictest.c | 2 +- src/include/rt-utils.h | 2 +- src/lib/rt-utils.c | 41 ++------------------------- src/oslat/oslat.c | 3 +- src/pmqtest/pmqtest.c | 2 +- src/ptsematest/ptsematest.c | 2 +- src/rt-migrate-test/rt-migrate-test.c | 2 +- src/sched_deadline/cyclicdeadline.c | 2 +- src/signaltest/signaltest.c | 2 +- src/sigwaittest/sigwaittest.c | 2 +- src/svsematest/svsematest.c | 2 +- 11 files changed, 12 insertions(+), 50 deletions(-)src/cyclictest/cyclictest.c +1
-1@@ -2134,7 +2134,7 @@ int main(int argc, char **argv)printf ("\033[%dB" , num_threads +2 );if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats,NULL ); +rt_write_json (outfile, write_stats,NULL );if (quiet) quiet =2 ;src/include/rt-utils.h +1
-1@@ -82,7 +82,7 @@ static inline int64_t calctime(struct timespec t)void rt_init (int argc,char *argv[]); -void rt_write_json (const char *filename,int argc,char *argv[], +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data);src/lib/rt-utils.c +2
-39@@ -37,7 +37,6 @@ static int trace_fd = -1;static int tracemark_fd =-1 ;static __threadchar tracebuf[TRACEBUFSIZ ];static char test_cmdline[MAX_COMMAND_LINE ]; -static int rt_init_run;/* * Finds the tracing directory in a mounted debugfs @@ -513,35 +512,9 @@ void rt_init(int argc, char *argv[]) offset += len +1 ; } - - rt_init_run =1 ; -} - -static char *get_cmdline (int argc,char *argv[]) -{ -char *cmdline; -int len, i; - - len =0 ; -for (i =0 ; i < argc; i++) - len +=strlen (argv[i]) +1 ; - - cmdline =malloc (len); -if (!cmdline) -err_exit (ENOMEM ,"Could not copy cmdline" ); - -memset (cmdline,0 , len); -for (i =0 ; i < argc;) { - cmdline =strcat (cmdline, argv[i]); - i++; -if (i < argc) - cmdline =strcat (cmdline," " ); - } - -return cmdline; } -void rt_write_json (const char *filename,int argc,char *argv[], +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data) {@@ -550,7 +523,6 @@ void rt_write_json(const char *filename, int argc, char *argv[],struct timeval tv;char tsbuf[64 ];struct tm *tm; -char *cmdline =NULL ;FILE *f, *s;time_t t;size_t n;@@ -564,12 +536,6 @@ void rt_write_json(const char *filename, int argc, char *argv[],err_exit (errno,"Failed to open '%s'\n" , filename); } -if (!rt_init_run) { - cmdline =get_cmdline (argc, argv); -if (!cmdline) -err_exit (ENOMEM ,"get_cmdline()" ); - } -gettimeofday (&tv,NULL ); t = tv.tv_sec; tm =localtime (&t);@@ -589,7 +555,7 @@ void rt_write_json(const char *filename, int argc, char *argv[],fprintf (f,"{\n" );fprintf (f," \"file_version\": 1,\n" ); -fprintf (f," \"cmdline:\": \"%s\",\n" , rt_init_run? test_cmdline : cmdline); +fprintf (f," \"cmdline:\": \"%s\",\n" , test_cmdline);fprintf (f," \"rt_test_version:\": \"%1.2f\",\n" ,VERSION );fprintf (f," \"finished\": \"%s\",\n" , tsbuf);fprintf (f," \"sysinfo\": {\n" );@@ -605,9 +571,6 @@ void rt_write_json(const char *filename, int argc, char *argv[],fprintf (f,"}\n" ); -if (!rt_init_run) -free (cmdline); -if (!filename ||strcmp ("-" , filename))fclose (f); }src/oslat/oslat.c +1
-2@@ -862,8 +862,7 @@ int main(int argc, char *argv[])write_summary (threads);if (strlen (g.outfile) !=0 ) -rt_write_json (g.outfile, argc, argv, - write_summary_json, threads); +rt_write_json (g.outfile, write_summary_json, threads);if (g.cpu_list) {free (g.cpu_list);src/pmqtest/pmqtest.c +1
-1@@ -651,7 +651,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nomem:src/ptsematest/ptsematest.c +1
-1@@ -519,7 +519,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nomem:src/rt-migrate-test/rt-migrate-test.c +1
-1@@ -663,7 +663,7 @@ int main (int argc, char **argv)print_results ();if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats,NULL ); +rt_write_json (outfile, write_stats,NULL );if (stop) {/* src/sched_deadline/cyclicdeadline.c +1
-1@@ -1227,7 +1227,7 @@ int main(int argc, char **argv) }if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats, sched_data); +rt_write_json (outfile, write_stats, sched_data);if (setcpu_buf)free (setcpu_buf);src/signaltest/signaltest.c +1
-1@@ -558,7 +558,7 @@ int main(int argc, char **argv)free (stat[i].values); }if (strlen (outfile) !=0 ) -rt_write_json (outfile, argc, argv, write_stats, par); +rt_write_json (outfile, write_stats, par);free (stat); outpar:src/sigwaittest/sigwaittest.c +1
-1@@ -706,7 +706,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nomem:src/svsematest/svsematest.c +1
-1@@ -778,7 +778,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, argc, argv, write_stats, &ps); +rt_write_json (outfile, write_stats, &ps); } nosem:Signature · 1 line
2.30.2
PATCH v3 15/33 rt-util: Introduce rt_test_start()
In reply to Daniel WagnerFor the JSON output records a timestamp when the test ended. Let's introduce a new API to record a timestamp when the test starts. We could put this into rt_init() but in this case we would meassure also the time test needs to setup or warm up.
--- src/include/rt-utils.h | 2 ++ src/lib/rt-utils.c | 34 ++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-)
src/include/rt-utils.h +2 -0
@@ -82,6 +82,8 @@ static inline int64_t calctime(struct timespec t)void rt_init (int argc,char *argv[]); +void rt_test_start (void ); +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data);
src/lib/rt-utils.c +24 -10
@@ -30,6 +30,7 @@#define TRACEBUFSIZ 1024#define MAX_COMMAND_LINE 4096 +#define MAX_TS_SIZE 64static char debugfileprefix[MAX_PATH ];static char *fileprefix;
@@ -37,6 +38,7 @@ static int trace_fd = -1;static int tracemark_fd =-1 ;static __threadchar tracebuf[TRACEBUFSIZ ];static char test_cmdline[MAX_COMMAND_LINE ]; +static char ts_start[MAX_TS_SIZE ];/* * Finds the tracing directory in a mounted debugfs
@@ -514,17 +516,32 @@ void rt_init(int argc, char *argv[]) } } +static void get_timestamp (char *tsbuf) +{ +struct timeval tv; +struct tm *tm; +time_t t; + +gettimeofday (&tv,NULL ); + t = tv.tv_sec; + tm =localtime (&t); +/* RFC 2822-compliant date format */ +strftime (tsbuf,MAX_TS_SIZE ,"%a, %d %b %Y %T %z" , tm); +} + +void rt_test_start (void ) +{ +get_timestamp (ts_start); +} +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data) {unsigned char buf[1 ];struct utsname uts; -struct timeval tv; -char tsbuf[64 ]; -struct tm *tm; +char ts_end[MAX_TS_SIZE ];FILE *f, *s; -time_t t;size_t n;int rt =0 ;
@@ -536,11 +553,7 @@ void rt_write_json(const char *filename,err_exit (errno,"Failed to open '%s'\n" , filename); } -gettimeofday (&tv,NULL ); - t = tv.tv_sec; - tm =localtime (&t); -/* RFC 2822-compliant date format */ -strftime (tsbuf,sizeof (tsbuf),"%a, %d %b %Y %T %z" , tm); +get_timestamp (ts_end); s =fopen ("/sys/kernel/realtime" ,"r" );if (s) {
@@ -557,7 +570,8 @@ void rt_write_json(const char *filename,fprintf (f," \"file_version\": 1,\n" );fprintf (f," \"cmdline:\": \"%s\",\n" , test_cmdline);fprintf (f," \"rt_test_version:\": \"%1.2f\",\n" ,VERSION ); -fprintf (f," \"finished\": \"%s\",\n" , tsbuf); +fprintf (f," \"start_time\": \"%s\",\n" , ts_start); +fprintf (f," \"end_time\": \"%s\",\n" , ts_end);fprintf (f," \"sysinfo\": {\n" );fprintf (f," \"sysname\": \"%s\",\n" , uts.sysname);fprintf (f," \"nodename\": \"%s\",\n" , uts.nodename);
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 15/33] rt-util: Introduce rt_test_start()
Quoted 108 lines · Daniel Wagner
For the JSON output records a timestamp when the test ended. Let's introduce a new API to record a timestamp when the test starts. We could put this into
rt_init()but in this case we would meassure also the time test needs to setup or warm up.Signed-off-by Daniel Wagner <[email protected]>--- src/include/rt-utils.h | 2 ++ src/lib/rt-utils.c | 34 ++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-)src/include/rt-utils.h +2
-0@@ -82,6 +82,8 @@ static inline int64_t calctime(struct timespec t)void rt_init (int argc,char *argv[]); +void rt_test_start (void ); +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data);src/lib/rt-utils.c +24
-10@@ -30,6 +30,7 @@#define TRACEBUFSIZ 1024#define MAX_COMMAND_LINE 4096 +#define MAX_TS_SIZE 64static char debugfileprefix[MAX_PATH ];static char *fileprefix;@@ -37,6 +38,7 @@ static int trace_fd = -1;static int tracemark_fd =-1 ;static __threadchar tracebuf[TRACEBUFSIZ ];static char test_cmdline[MAX_COMMAND_LINE ]; +static char ts_start[MAX_TS_SIZE ];/* * Finds the tracing directory in a mounted debugfs @@ -514,17 +516,32 @@ void rt_init(int argc, char *argv[]) } } +static void get_timestamp (char *tsbuf) +{ +struct timeval tv; +struct tm *tm; +time_t t; + +gettimeofday (&tv,NULL ); + t = tv.tv_sec; + tm =localtime (&t); +/* RFC 2822-compliant date format */ +strftime (tsbuf,MAX_TS_SIZE ,"%a, %d %b %Y %T %z" , tm); +} + +void rt_test_start (void ) +{ +get_timestamp (ts_start); +} +void rt_write_json (const char *filename,void (*cb)(FILE *,void *),void *data) {unsigned char buf[1 ];struct utsname uts; -struct timeval tv; -char tsbuf[64 ]; -struct tm *tm; +char ts_end[MAX_TS_SIZE ];FILE *f, *s; -time_t t;size_t n;int rt =0 ;@@ -536,11 +553,7 @@ void rt_write_json(const char *filename,err_exit (errno,"Failed to open '%s'\n" , filename); } -gettimeofday (&tv,NULL ); - t = tv.tv_sec; - tm =localtime (&t); -/* RFC 2822-compliant date format */ -strftime (tsbuf,sizeof (tsbuf),"%a, %d %b %Y %T %z" , tm); +get_timestamp (ts_end); s =fopen ("/sys/kernel/realtime" ,"r" );if (s) {@@ -557,7 +570,8 @@ void rt_write_json(const char *filename,fprintf (f," \"file_version\": 1,\n" );fprintf (f," \"cmdline:\": \"%s\",\n" , test_cmdline);fprintf (f," \"rt_test_version:\": \"%1.2f\",\n" ,VERSION ); -fprintf (f," \"finished\": \"%s\",\n" , tsbuf); +fprintf (f," \"start_time\": \"%s\",\n" , ts_start); +fprintf (f," \"end_time\": \"%s\",\n" , ts_end);fprintf (f," \"sysinfo\": {\n" );fprintf (f," \"sysname\": \"%s\",\n" , uts.sysname);fprintf (f," \"nodename\": \"%s\",\n" , uts.nodename);Signature · 1 line
2.30.2
I don't really like this. I think it looks "good" in the json output, but I don't think it is providing any kind of meaningful data. My fear is that users will try to assign some kind of significance to these numbers in relation to the tests.
I'm letting it in anyway, maybe people will tell me I'm wrong and they like it, but recording my objection for now anyway.
Re: [PATCH rt-tests v3 15/33] rt-util: Introduce rt_test_start()
Quoted 4 lines · John Kacur
I don't really like this. I think it looks "good" in the json output, but I don't think it is providing any kind of meaningful data. My fear is that users will try to assign some kind of significance to these numbers in relation to the tests.
The idea is that you are able to compare timestamps in the further logs and see if anything is out of the ordinary is logged when the test was executed.
PATCH v3 16/33 cyclictest: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/cyclictest/cyclictest.c | 1 + 1 file changed, 1 insertion(+)
src/cyclictest/cyclictest.c +1 -0
@@ -615,6 +615,7 @@ static void *timerthread(void *param)setitimer (ITIMER_REAL , &itimer,NULL ); } +rt_test_start (); stat->threadstarted++;while (!shutdown) {
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 16/33] cyclictest: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/cyclictest/cyclictest.c | 1 + 1 file changed, 1 insertion(+)src/cyclictest/cyclictest.c +1
-0@@ -615,6 +615,7 @@ static void *timerthread(void *param)setitimer (ITIMER_REAL , &itimer,NULL ); } +rt_test_start (); stat->threadstarted++;while (!shutdown) {Signature · 1 line
2.30.2
PATCH v3 17/33 oslat: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/oslat/oslat.c | 1 + 1 file changed, 1 insertion(+)
src/oslat/oslat.c +1 -0
@@ -854,6 +854,7 @@ int main(int argc, char *argv[])printf ("Test starts...\n" );/* Reset n_threads to always run on all the cores */ g.n_threads = g.n_threads_total; +rt_test_start ();run_expt (threads, g.runtime);if (!g.quiet)
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 17/33] oslat: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/oslat/oslat.c | 1 + 1 file changed, 1 insertion(+)src/oslat/oslat.c +1
-0@@ -854,6 +854,7 @@ int main(int argc, char *argv[])printf ("Test starts...\n" );/* Reset n_threads to always run on all the cores */ g.n_threads = g.n_threads_total; +rt_test_start ();run_expt (threads, g.runtime);if (!g.quiet)Signature · 1 line
2.30.2
PATCH v3 18/33 pmqtest: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/pmqtest/pmqtest.c | 1 + 1 file changed, 1 insertion(+)
src/pmqtest/pmqtest.c +1 -0
@@ -583,6 +583,7 @@ int main(int argc, char *argv[])sigemptyset (&sigset);pthread_sigmask (SIG_SETMASK , &sigset,NULL ); +rt_test_start (); do { int newsamples = 0, newtimeoutcount = 0; int minsamples = INT_MAX;
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 18/33] pmqtest: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/pmqtest/pmqtest.c | 1 + 1 file changed, 1 insertion(+)src/pmqtest/pmqtest.c +1
-0@@ -583,6 +583,7 @@ int main(int argc, char *argv[])sigemptyset (&sigset);pthread_sigmask (SIG_SETMASK , &sigset,NULL ); +rt_test_start (); do { int newsamples = 0, newtimeoutcount = 0; int minsamples = INT_MAX;Signature · 1 line
2.30.2
PATCH v3 19/33 ptesematest: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/ptsematest/ptsematest.c | 1 + 1 file changed, 1 insertion(+)
src/ptsematest/ptsematest.c +1 -0
@@ -468,6 +468,7 @@ int main(int argc, char *argv[]) maindelay.tv_sec =0 ; maindelay.tv_nsec =50000000 ;/* 50 ms */ +rt_test_start ();while (!shutdown) {for (i =0 ; i < num_threads; i++) shutdown |= receiver[i].shutdown | sender[i].shutdown;
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 19/33] ptesematest: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/ptsematest/ptsematest.c | 1 + 1 file changed, 1 insertion(+)src/ptsematest/ptsematest.c +1
-0@@ -468,6 +468,7 @@ int main(int argc, char *argv[]) maindelay.tv_sec =0 ; maindelay.tv_nsec =50000000 ;/* 50 ms */ +rt_test_start ();while (!shutdown) {for (i =0 ; i < num_threads; i++) shutdown |= receiver[i].shutdown | sender[i].shutdown;Signature · 1 line
2.30.2
PATCH v3 20/33 rt-migrate-test: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/rt-migrate-test/rt-migrate-test.c | 1 + 1 file changed, 1 insertion(+)
src/rt-migrate-test/rt-migrate-test.c +1 -0
@@ -621,6 +621,7 @@ int main (int argc, char **argv)setup_ftrace_marker (); +rt_test_start ();for (loop=0 ; loop < nr_runs; loop++) {unsigned long long end;
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 20/33] rt-migrate-test: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/rt-migrate-test/rt-migrate-test.c | 1 + 1 file changed, 1 insertion(+)src/rt-migrate-test/rt-migrate-test.c +1
-0@@ -621,6 +621,7 @@ int main (int argc, char **argv)setup_ftrace_marker (); +rt_test_start ();for (loop=0 ; loop < nr_runs; loop++) {unsigned long long end;Signature · 1 line
2.30.2
PATCH v3 21/33 cyclicdeadline: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/sched_deadline/cyclicdeadline.c | 1 + 1 file changed, 1 insertion(+)
src/sched_deadline/cyclicdeadline.c +1 -0
@@ -1213,6 +1213,7 @@ int main(int argc, char **argv)if (duration)alarm (duration); +rt_test_start ();loop (sched_data, nr_threads);for (i =0 ; i < nr_threads; i++) {
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 21/33] cyclicdeadline: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/sched_deadline/cyclicdeadline.c | 1 + 1 file changed, 1 insertion(+)src/sched_deadline/cyclicdeadline.c +1
-0@@ -1213,6 +1213,7 @@ int main(int argc, char **argv)if (duration)alarm (duration); +rt_test_start ();loop (sched_data, nr_threads);for (i =0 ; i < nr_threads; i++) {Signature · 1 line
2.30.2
PATCH v3 22/33 signaltest: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/signaltest/signaltest.c | 1 + 1 file changed, 1 insertion(+)
src/signaltest/signaltest.c +1 -0
@@ -500,6 +500,7 @@ int main(int argc, char **argv) strerror(status)); } +rt_test_start ();while (!shutdown) {int allstarted =1 ;
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 22/33] signaltest: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/signaltest/signaltest.c | 1 + 1 file changed, 1 insertion(+)src/signaltest/signaltest.c +1
-0@@ -500,6 +500,7 @@ int main(int argc, char **argv) strerror(status)); } +rt_test_start ();while (!shutdown) {int allstarted =1 ;Signature · 1 line
2.30.2
PATCH v3 23/33 sigwaittest: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/sigwaittest/sigwaittest.c | 1 + 1 file changed, 1 insertion(+)
src/sigwaittest/sigwaittest.c +1 -0
@@ -652,6 +652,7 @@ int main(int argc, char *argv[]) &sender[i]); } +rt_test_start ();while (!mustshutdown) {for (i =0 ; i < num_threads; i++) mustshutdown |= receiver[i].shutdown |
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 23/33] sigwaittest: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/sigwaittest/sigwaittest.c | 1 + 1 file changed, 1 insertion(+)src/sigwaittest/sigwaittest.c +1
-0@@ -652,6 +652,7 @@ int main(int argc, char *argv[]) &sender[i]); } +rt_test_start ();while (!mustshutdown) {for (i =0 ; i < num_threads; i++) mustshutdown |= receiver[i].shutdown |Signature · 1 line
2.30.2
PATCH v3 24/33 svsematest: Record start of test execution
In reply to Daniel WagnerUse rt_test_start() to record a timestamp when the test starts.
--- src/svsematest/svsematest.c | 1 + 1 file changed, 1 insertion(+)
src/svsematest/svsematest.c +1 -0
@@ -724,6 +724,7 @@ int main(int argc, char *argv[]) &sender[i]); } +rt_test_start ();while (!mustshutdown) {for (i =0 ; i < num_threads; i++) mustshutdown |= receiver[i].shutdown |
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 24/33] svsematest: Record start of test execution
Quoted 23 lines · Daniel Wagner
Use
rt_test_start()to record a timestamp when the test starts.Signed-off-by Daniel Wagner <[email protected]>--- src/svsematest/svsematest.c | 1 + 1 file changed, 1 insertion(+)src/svsematest/svsematest.c +1
-0@@ -724,6 +724,7 @@ int main(int argc, char *argv[]) &sender[i]); } +rt_test_start ();while (!mustshutdown) {for (i =0 ; i < num_threads; i++) mustshutdown |= receiver[i].shutdown |Signature · 1 line
2.30.2
PATCH v3 25/33 rt-util: Add return_code to common section of JSON output
In reply to Daniel WagnerMany rt-tests return an error code if the test fails. Let's add this information to the common section.
--- src/cyclictest/cyclictest.c | 2 +- src/include/rt-utils.h | 2 +- src/lib/rt-utils.c | 11 ++++++++--- src/oslat/oslat.c | 2 +- src/pmqtest/pmqtest.c | 2 +- src/ptsematest/ptsematest.c | 2 +- src/rt-migrate-test/rt-migrate-test.c | 2 +- src/sched_deadline/cyclicdeadline.c | 2 +- src/signaltest/signaltest.c | 2 +- src/sigwaittest/sigwaittest.c | 2 +- src/svsematest/svsematest.c | 2 +- 11 files changed, 18 insertions(+), 13 deletions(-)
src/cyclictest/cyclictest.c +1 -1
@@ -2135,7 +2135,7 @@ int main(int argc, char **argv)printf ("\033[%dB" , num_threads +2 );if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats,NULL ); +rt_write_json (outfile, ret, write_stats,NULL );if (quiet) quiet =2 ;
src/include/rt-utils.h +1 -1
@@ -84,7 +84,7 @@ void rt_init(int argc, char *argv[]);void rt_test_start (void ); -void rt_write_json (const char *filename, +void rt_write_json (const char *filename,int return_code,void (*cb)(FILE *,void *),void *data);
src/lib/rt-utils.c +8 -3
@@ -534,7 +534,7 @@ void rt_test_start(void)get_timestamp (ts_start); } -void rt_write_json (const char *filename, +void rt_write_json (const char *filename,int return_code,void (*cb)(FILE *,void *),void *data) {
@@ -572,6 +572,7 @@ void rt_write_json(const char *filename,fprintf (f," \"rt_test_version:\": \"%1.2f\",\n" ,VERSION );fprintf (f," \"start_time\": \"%s\",\n" , ts_start);fprintf (f," \"end_time\": \"%s\",\n" , ts_end); +fprintf (f," \"return_code\": %d,\n" , return_code);fprintf (f," \"sysinfo\": {\n" );fprintf (f," \"sysname\": \"%s\",\n" , uts.sysname);fprintf (f," \"nodename\": \"%s\",\n" , uts.nodename);
@@ -579,9 +580,13 @@ void rt_write_json(const char *filename,fprintf (f," \"version\": \"%s\",\n" , uts.version);fprintf (f," \"machine\": \"%s\",\n" , uts.machine);fprintf (f," \"realtime\": %d\n" , rt); -fprintf (f," },\n" ); - (cb)(f, data); +if (cb) { +fprintf (f," },\n" ); + (cb)(f, data); + }else { +fprintf (f," }\n" ); + }fprintf (f,"}\n" );
src/oslat/oslat.c +1 -1
@@ -863,7 +863,7 @@ int main(int argc, char *argv[])write_summary (threads);if (strlen (g.outfile) !=0 ) -rt_write_json (g.outfile, write_summary_json, threads); +rt_write_json (g.outfile,0 , write_summary_json, threads);if (g.cpu_list) {free (g.cpu_list);
src/pmqtest/pmqtest.c +1 -1
@@ -652,7 +652,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nomem:
src/ptsematest/ptsematest.c +1 -1
@@ -520,7 +520,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nomem:
src/rt-migrate-test/rt-migrate-test.c +1 -1
@@ -664,7 +664,7 @@ int main (int argc, char **argv)print_results ();if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats,NULL ); +rt_write_json (outfile, check <0 , write_stats,NULL );if (stop) {/*
src/sched_deadline/cyclicdeadline.c +1 -1
@@ -1228,7 +1228,7 @@ int main(int argc, char **argv) }if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats, sched_data); +rt_write_json (outfile,0 , write_stats, sched_data);if (setcpu_buf)free (setcpu_buf);
src/signaltest/signaltest.c +1 -1
@@ -559,7 +559,7 @@ int main(int argc, char **argv)free (stat[i].values); }if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats, par); +rt_write_json (outfile, ret, write_stats, par);free (stat); outpar:
src/sigwaittest/sigwaittest.c +1 -1
@@ -707,7 +707,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nomem:
src/svsematest/svsematest.c +1 -1
@@ -779,7 +779,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nosem:
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 25/33] rt-util: Add return_code to common section of JSON output
Quoted 189 lines · Daniel Wagner
Many rt-tests return an error code if the test fails. Let's add this information to the common section.
Signed-off-by Daniel Wagner <[email protected]>--- src/cyclictest/cyclictest.c | 2 +- src/include/rt-utils.h | 2 +- src/lib/rt-utils.c | 11 ++++++++--- src/oslat/oslat.c | 2 +- src/pmqtest/pmqtest.c | 2 +- src/ptsematest/ptsematest.c | 2 +- src/rt-migrate-test/rt-migrate-test.c | 2 +- src/sched_deadline/cyclicdeadline.c | 2 +- src/signaltest/signaltest.c | 2 +- src/sigwaittest/sigwaittest.c | 2 +- src/svsematest/svsematest.c | 2 +- 11 files changed, 18 insertions(+), 13 deletions(-)src/cyclictest/cyclictest.c +1
-1@@ -2135,7 +2135,7 @@ int main(int argc, char **argv)printf ("\033[%dB" , num_threads +2 );if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats,NULL ); +rt_write_json (outfile, ret, write_stats,NULL );if (quiet) quiet =2 ;src/include/rt-utils.h +1
-1@@ -84,7 +84,7 @@ void rt_init(int argc, char *argv[]);void rt_test_start (void ); -void rt_write_json (const char *filename, +void rt_write_json (const char *filename,int return_code,void (*cb)(FILE *,void *),void *data);src/lib/rt-utils.c +8
-3@@ -534,7 +534,7 @@ void rt_test_start(void)get_timestamp (ts_start); } -void rt_write_json (const char *filename, +void rt_write_json (const char *filename,int return_code,void (*cb)(FILE *,void *),void *data) {@@ -572,6 +572,7 @@ void rt_write_json(const char *filename,fprintf (f," \"rt_test_version:\": \"%1.2f\",\n" ,VERSION );fprintf (f," \"start_time\": \"%s\",\n" , ts_start);fprintf (f," \"end_time\": \"%s\",\n" , ts_end); +fprintf (f," \"return_code\": %d,\n" , return_code);fprintf (f," \"sysinfo\": {\n" );fprintf (f," \"sysname\": \"%s\",\n" , uts.sysname);fprintf (f," \"nodename\": \"%s\",\n" , uts.nodename);@@ -579,9 +580,13 @@ void rt_write_json(const char *filename,fprintf (f," \"version\": \"%s\",\n" , uts.version);fprintf (f," \"machine\": \"%s\",\n" , uts.machine);fprintf (f," \"realtime\": %d\n" , rt); -fprintf (f," },\n" ); - (cb)(f, data); +if (cb) { +fprintf (f," },\n" ); + (cb)(f, data); + }else { +fprintf (f," }\n" ); + }fprintf (f,"}\n" );src/oslat/oslat.c +1
-1@@ -863,7 +863,7 @@ int main(int argc, char *argv[])write_summary (threads);if (strlen (g.outfile) !=0 ) -rt_write_json (g.outfile, write_summary_json, threads); +rt_write_json (g.outfile,0 , write_summary_json, threads);if (g.cpu_list) {free (g.cpu_list);src/pmqtest/pmqtest.c +1
-1@@ -652,7 +652,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nomem:src/ptsematest/ptsematest.c +1
-1@@ -520,7 +520,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nomem:src/rt-migrate-test/rt-migrate-test.c +1
-1@@ -664,7 +664,7 @@ int main (int argc, char **argv)print_results ();if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats,NULL ); +rt_write_json (outfile, check <0 , write_stats,NULL );if (stop) {/* src/sched_deadline/cyclicdeadline.c +1
-1@@ -1228,7 +1228,7 @@ int main(int argc, char **argv) }if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats, sched_data); +rt_write_json (outfile,0 , write_stats, sched_data);if (setcpu_buf)free (setcpu_buf);src/signaltest/signaltest.c +1
-1@@ -559,7 +559,7 @@ int main(int argc, char **argv)free (stat[i].values); }if (strlen (outfile) !=0 ) -rt_write_json (outfile, write_stats, par); +rt_write_json (outfile, ret, write_stats, par);free (stat); outpar:src/sigwaittest/sigwaittest.c +1
-1@@ -707,7 +707,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nomem:src/svsematest/svsematest.c +1
-1@@ -779,7 +779,7 @@ int main(int argc, char *argv[]) .receiver = receiver, .sender = sender, }; -rt_write_json (outfile, write_stats, &ps); +rt_write_json (outfile,0 , write_stats, &ps); } nosem:Signature · 1 line
2.30.2
PATCH v3 26/33 pip_stress: Move test result output to main
In reply to Daniel WagnerInstead printing the result high() close directly move it to main() function to simplify the return code if the test fails.
--- src/pi_tests/pip_stress.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)
src/pi_tests/pip_stress.c +7 -8
@@ -146,6 +146,7 @@ int main(int argc, char *argv[])exit (1 ); }else if (pid1 !=0 ) {/* parent code */ low (pid1); +exit (0 ); }else {/* child code */ pid2 =fork ();/* parent code */ if (pid2 ==-1 ) {
@@ -155,9 +156,15 @@ int main(int argc, char *argv[])high (pid2); }else {/* child code */ medium (); +exit (0 ); } } +if (statep->inversion) +printf ("Successfully used priority inheritance to handle an inversion\n" ); +else +printf ("No inversion incurred\n" ); +exit (0 ); }
@@ -222,14 +229,6 @@ void high(pid_t pid)Pthread_mutex_unlock (resource);kill (pid,SIGKILL );/* kill the medium thread */ waitpid (pid, &status,0 ); - -Pthread_mutex_lock (statep->mutex); - -if (statep->inversion) -printf ("Successfully used priority inheritance to handle an inversion\n" ); -else -printf ("No inversion incurred\n" ); -Pthread_mutex_unlock (statep->mutex); }/* mmap a page of anonymous shared memory */
Signature · 1 line
2.30.2
John Kacur
NAKRe: [PATCH rt-tests v3 26/33] pip_stress: Move test result output to main
Quoted 55 lines · Daniel Wagner
Instead printing the result
high()close directly move it tomain()function to simplify the return code if the test fails.Signed-off-by Daniel Wagner <[email protected]>--- src/pi_tests/pip_stress.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-)src/pi_tests/pip_stress.c +7
-8@@ -146,6 +146,7 @@ int main(int argc, char *argv[])exit (1 ); }else if (pid1 !=0 ) {/* parent code */ low (pid1); +exit (0 ); }else {/* child code */ pid2 =fork ();/* parent code */ if (pid2 ==-1 ) {@@ -155,9 +156,15 @@ int main(int argc, char *argv[])high (pid2); }else {/* child code */ medium (); +exit (0 ); } } +if (statep->inversion) +printf ("Successfully used priority inheritance to handle an inversion\n" ); +else +printf ("No inversion incurred\n" ); +exit (0 ); }@@ -222,14 +229,6 @@ void high(pid_t pid)Pthread_mutex_unlock (resource);kill (pid,SIGKILL );/* kill the medium thread */ waitpid (pid, &status,0 ); - -Pthread_mutex_lock (statep->mutex); - -if (statep->inversion) -printf ("Successfully used priority inheritance to handle an inversion\n" ); -else -printf ("No inversion incurred\n" ); -Pthread_mutex_unlock (statep->mutex); }/* mmap a page of anonymous shared memory */ Signature · 1 line
2.30.2
NAK, see comments in the next patch
PATCH v3 27/33 pip_stress: Return failure code if test fails
In reply to Daniel WagnerLet the test return a failure code when the test fails.
--- src/pi_tests/pip_stress.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
src/pi_tests/pip_stress.c +4 -4
@@ -160,11 +160,11 @@ int main(int argc, char *argv[]) } } -if (statep->inversion) -printf ("Successfully used priority inheritance to handle an inversion\n" ); -else +if (!statep->inversion) {printf ("No inversion incurred\n" ); - +exit (1 ); + } +printf ("Successfully used priority inheritance to handle an inversion\n" );exit (0 ); }
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 27/33] pip_stress: Return failure code if test fails
Quoted 31 lines · Daniel Wagner
Let the test return a failure code when the test fails.
Signed-off-by Daniel Wagner <[email protected]>--- src/pi_tests/pip_stress.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)src/pi_tests/pip_stress.c +4
-4@@ -160,11 +160,11 @@ int main(int argc, char *argv[]) } } -if (statep->inversion) -printf ("Successfully used priority inheritance to handle an inversion\n" ); -else +if (!statep->inversion) {printf ("No inversion incurred\n" ); - +exit (1 ); + } +printf ("Successfully used priority inheritance to handle an inversion\n" );exit (0 ); }Signature · 1 line
2.30.2
It isn't really an error if no priority inheritance occurs.
An error from this program would be something like mmap returning an error code.
I'm not sure this one is suitable for the json treatment, it's more of a demonstration of how to use priority inheritance with processes instead of threads. Thomas told me this was possible and I was curious to see if this was true, so I scratched that itch. Not sure if it is useful as a test.
Let's leave pip_stress alone for now please
Re: [PATCH rt-tests v3 27/33] pip_stress: Return failure code if test fails
Quoted 10 lines
It isn't really an error if no priority inheritance occurs.
An error from this program would be something like mmap returning an error code.I'm not sure this one is suitable for the json treatment, it's more of a demonstration of how to use priority inheritance with processes instead of threads. Thomas told me this was possible and I was curious to see if this was true, so I scratched that itch. Not sure if it is useful as a test.
Let's leave
pip_stressalone for now please
If it's a for demonstration purposes only, could we remove it from the source tree? I don't think it should be left there if it's not considered a proper test.
Re: [PATCH rt-tests v3 27/33] pip_stress: Return failure code if test fails
Quoted 10 lines · Daniel Wagner
Quoted 10 lines
It isn't really an error if no priority inheritance occurs.
An error from this program would be something like mmap returning an error code.I'm not sure this one is suitable for the json treatment, it's more of a demonstration of how to use priority inheritance with processes instead of threads. Thomas told me this was possible and I was curious to see if this was true, so I scratched that itch. Not sure if it is useful as a test.
Quoted 6 lines
Quoted 1 line
Let's leave
pip_stressalone for now pleaseIf it's a for demonstration purposes only, could we remove it from the source tree? I don't think it should be left there if it's not considered a proper test.
I suppose this is a fair question, although another question would be is it useful in the rt-tests suites for other reasons?
It could be used as the "engine" of a test that would be similar to pi_stress, with a different kind of mechanism.
So then the question would be, is there a value in another pi_stress like test that avoids pthreads?
If so, I could work it up into a test.
John
Re: [PATCH rt-tests v3 27/33] pip_stress: Return failure code if test fails
Quoted 4 lines · John Kacur
I suppose this is a fair question, although another question would be is it useful in the rt-tests suites for other reasons?
It could be used as the "engine" of a test that would be similar topi_stress, with a different kind of mechanism.
If there is clear indication which code is provided as coding example and which is a RT test it would already help. I was under the impression pi_stress tries to test RT behavior. Maybe moving pi_stress to 'examples' would already be enough.
Quoted 4 lines
So then the question would be, is there a value in another
pi_stresslike test that avoids pthreads?If so, I could work it up into a test.
I suppose having more RT tests is good thing. IIRC there are more RT tests available, e.g. in LTP. So not sure if this is not already covered somewhere else.
PATCH v3 28/33 pip_stress: Prepare arg parser to accept only long options
In reply to Daniel WagnerIntroduce the option value enums to be able to parse only long options.
--- src/pi_tests/pip_stress.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
src/pi_tests/pip_stress.c +8 -3
@@ -77,6 +77,10 @@ static void usage(int error)exit (error); } +enum option_values { +OPT_HELP =1 +}; +int main (int argc,char *argv[]) {void *mptr;/* memory pointer */
@@ -87,14 +91,15 @@ int main(int argc, char *argv[])for (;;) {struct option long_options[] = { - {"help" , no_argument,NULL ,'h' }, - {NULL ,0 ,NULL ,0 }, + {"help" , no_argument,NULL ,OPT_HELP }, + {NULL ,0 ,NULL ,0 } }; -int c =getopt_long (argc, argv,"s:h" , long_options,NULL ); +int c =getopt_long (argc, argv,"h" , long_options,NULL );if (c ==-1 )break ;switch (c) { +case OPT_HELP :case 'h' :usage (0 );break ;
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 28/33] pip_stress: Prepare arg parser to accept only long options
Quoted 46 lines · Daniel Wagner
Introduce the option value enums to be able to parse only long options.
Signed-off-by Daniel Wagner <[email protected]>--- src/pi_tests/pip_stress.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)src/pi_tests/pip_stress.c +8
-3@@ -77,6 +77,10 @@ static void usage(int error)exit (error); } +enum option_values { +OPT_HELP =1 +}; +int main (int argc,char *argv[]) {void *mptr;/* memory pointer */ @@ -87,14 +91,15 @@ int main(int argc, char *argv[])for (;;) {struct option long_options[] = { - {"help" , no_argument,NULL ,'h' }, - {NULL ,0 ,NULL ,0 }, + {"help" , no_argument,NULL ,OPT_HELP }, + {NULL ,0 ,NULL ,0 } }; -int c =getopt_long (argc, argv,"s:h" , long_options,NULL ); +int c =getopt_long (argc, argv,"h" , long_options,NULL );if (c ==-1 )break ;switch (c) { +case OPT_HELP :case 'h' :usage (0 );break ;Signature · 1 line
2.30.2
PATCH v3 29/33 pip_stress: Add JSON output feature
In reply to Daniel WagnerWrite the test results as JSON output to a file. This allows to simplifies any parsing later on.
--- src/pi_tests/pip_stress.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
src/pi_tests/pip_stress.c +14 -2
@@ -67,18 +67,21 @@ struct State *statep;const int policy =SCHED_FIFO ;static int prio_min;/* Initialized for the minimum priority of policy */ +static char outfile[MAX_PATH ]; +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" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" );exit (error); }enum option_values { -OPT_HELP =1 +OPT_HELP =1 ,OPT_OUTPUT , };int main (int argc,char *argv[])
@@ -89,9 +92,11 @@ int main(int argc, char *argv[])int res;int *minimum_priority = (int *)&prio_min; +rt_init (argc, argv);for (;;) {struct option long_options[] = { {"help" , no_argument,NULL ,OPT_HELP }, + {"output" , required_argument,NULL ,OPT_OUTPUT }, {NULL ,0 ,NULL ,0 } };
@@ -103,6 +108,9 @@ int main(int argc, char *argv[])case 'h' :usage (0 );break ; +case OPT_OUTPUT : +strncpy (outfile, optarg,strnlen (optarg,MAX_PATH -1 )); +break ;default :usage (1 );break ;
@@ -145,6 +153,7 @@ int main(int argc, char *argv[])err_exit (err,NULL ); } +rt_test_start (); pid1 =fork ();if (pid1 ==-1 ) {perror ("fork" );
@@ -165,6 +174,9 @@ int main(int argc, char *argv[]) } } +if (strlen (outfile) !=0 ) +rt_write_json (outfile, !statep->inversion,NULL ,NULL ); +if (!statep->inversion) {printf ("No inversion incurred\n" );exit (1 );
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 29/33] pip_stress: Add JSON output feature
Quoted 80 lines · Daniel Wagner
Write the test results as JSON output to a file. This allows to simplifies any parsing later on.
Signed-off-by Daniel Wagner <[email protected]>--- src/pi_tests/pip_stress.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)src/pi_tests/pip_stress.c +14
-2@@ -67,18 +67,21 @@ struct State *statep;const int policy =SCHED_FIFO ;static int prio_min;/* Initialized for the minimum priority of policy */ +static char outfile[MAX_PATH ]; +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" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" );exit (error); }enum option_values { -OPT_HELP =1 +OPT_HELP =1 ,OPT_OUTPUT , };int main (int argc,char *argv[])@@ -89,9 +92,11 @@ int main(int argc, char *argv[])int res;int *minimum_priority = (int *)&prio_min; +rt_init (argc, argv);for (;;) {struct option long_options[] = { {"help" , no_argument,NULL ,OPT_HELP }, + {"output" , required_argument,NULL ,OPT_OUTPUT }, {NULL ,0 ,NULL ,0 } };@@ -103,6 +108,9 @@ int main(int argc, char *argv[])case 'h' :usage (0 );break ; +case OPT_OUTPUT : +strncpy (outfile, optarg,strnlen (optarg,MAX_PATH -1 )); +break ;default :usage (1 );break ;@@ -145,6 +153,7 @@ int main(int argc, char *argv[])err_exit (err,NULL ); } +rt_test_start (); pid1 =fork ();if (pid1 ==-1 ) {perror ("fork" );@@ -165,6 +174,9 @@ int main(int argc, char *argv[]) } } +if (strlen (outfile) !=0 ) +rt_write_json (outfile, !statep->inversion,NULL ,NULL ); +if (!statep->inversion) {printf ("No inversion incurred\n" );exit (1 );Signature · 1 line
2.30.2
I'm not opposed to json in this test in general, but need to think more about how this should look. Omiting for now, but I might be amendable in the future.
thanks
John
PATCH v3 30/33 pi_stress: Prepare command line parser for long options only
In reply to Daniel WagnerIntroduce option value enums in order to be able to parse long options only.
--- src/pi_tests/pi_stress.c | 45 ++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 13 deletions(-)
src/pi_tests/pi_stress.c +32 -13
@@ -1274,23 +1274,29 @@ int process_sched_line(const char *arg)return retval; } +enum option_values { +OPT_DEBUG =1 ,OPT_DURATION ,OPT_GROUPS ,OPT_HELP ,OPT_INVERSIONS , +OPT_MLOCKALL ,OPT_PROMPT ,OPT_QUIET ,OPT_RR ,OPT_SCHED , +OPT_UNIPROCESSOR ,OPT_VERBOSE ,OPT_VERSION , +}; +void process_command_line (int argc,char **argv) {for (;;) {struct option options[] = { - {"debug" , no_argument,NULL ,'d' }, - {"duration" , required_argument,NULL ,'D' }, - {"groups" , required_argument,NULL ,'g' }, - {"help" , no_argument,NULL ,'h' }, - {"inversions" , required_argument,NULL ,'i' }, - {"mlockall" , no_argument,NULL ,'m' }, - {"prompt" , no_argument,NULL ,'p' }, - {"quiet" , no_argument,NULL ,'q' }, - {"rr" , no_argument,NULL ,'r' }, - {"sched" , required_argument,NULL ,'s' }, - {"uniprocessor" , no_argument,NULL ,'u' }, - {"verbose" , no_argument,NULL ,'v' }, - {"version" , no_argument,NULL ,'V' }, + {"debug" , no_argument,NULL ,OPT_DEBUG }, + {"duration" , required_argument,NULL ,OPT_DURATION }, + {"groups" , required_argument,NULL ,OPT_GROUPS }, + {"help" , no_argument,NULL ,OPT_HELP }, + {"inversions" , required_argument,NULL ,OPT_INVERSIONS }, + {"mlockall" , no_argument,NULL ,OPT_MLOCKALL }, + {"prompt" , no_argument,NULL ,OPT_PROMPT }, + {"quiet" , no_argument,NULL ,OPT_QUIET }, + {"rr" , no_argument,NULL ,OPT_RR }, + {"sched" , required_argument,NULL ,OPT_SCHED }, + {"uniprocessor" , no_argument,NULL ,OPT_UNIPROCESSOR }, + {"verbose" , no_argument,NULL ,OPT_VERBOSE }, + {"version" , no_argument,NULL ,OPT_VERSION }, {NULL ,0 ,NULL ,0 }, };
@@ -1298,12 +1304,15 @@ void process_command_line(int argc, char **argv)if (c ==-1 )break ;switch (c) { +case OPT_DEBUG :case 'd' : debugging =1 ;break ; +case OPT_DURATION :case 'D' : duration =parse_time_string (optarg);break ; +case OPT_GROUPS :case 'g' : ngroups =strtol (optarg,NULL ,10 );if (ngroups > num_processors) {
@@ -1314,37 +1323,47 @@ void process_command_line(int argc, char **argv) }pi_info ("number of groups set to %d\n" , ngroups);break ; +case OPT_HELP :case 'h' :usage (0 );break ; +case OPT_INVERSIONS :case 'i' : inversions =strtol (optarg,NULL ,10 );pi_info ("doing %d inversion per group\n" , inversions);break ; +case OPT_MLOCKALL :case 'm' : lockall =1 ;break ; +case OPT_PROMPT :case 'p' : prompt =1 ;break ; +case OPT_QUIET :case 'q' : verbose =0 ; quiet =1 ;break ; +case OPT_RR :case 'r' : policy =SCHED_RR ;break ; +case OPT_SCHED :case 's' :if (process_sched_line (optarg))pi_error ("ignoring invalid options '%s'\n" , optarg);break ; +case OPT_UNIPROCESSOR :case 'u' : uniprocessor =1 ;break ; +case OPT_VERBOSE :case 'v' : verbose =1 ; quiet =0 ;break ; +case OPT_VERSION :case 'V' :printf ("pi_stress v%1.2f " ,VERSION );exit (0 );
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 30/33] pi_stress: Prepare command line parser for long options only
Quoted 123 lines · Daniel Wagner
Introduce option value enums in order to be able to parse long options only.
Signed-off-by Daniel Wagner <[email protected]>--- src/pi_tests/pi_stress.c | 45 ++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 13 deletions(-)src/pi_tests/pi_stress.c +32
-13@@ -1274,23 +1274,29 @@ int process_sched_line(const char *arg)return retval; } +enum option_values { +OPT_DEBUG =1 ,OPT_DURATION ,OPT_GROUPS ,OPT_HELP ,OPT_INVERSIONS , +OPT_MLOCKALL ,OPT_PROMPT ,OPT_QUIET ,OPT_RR ,OPT_SCHED , +OPT_UNIPROCESSOR ,OPT_VERBOSE ,OPT_VERSION , +}; +void process_command_line (int argc,char **argv) {for (;;) {struct option options[] = { - {"debug" , no_argument,NULL ,'d' }, - {"duration" , required_argument,NULL ,'D' }, - {"groups" , required_argument,NULL ,'g' }, - {"help" , no_argument,NULL ,'h' }, - {"inversions" , required_argument,NULL ,'i' }, - {"mlockall" , no_argument,NULL ,'m' }, - {"prompt" , no_argument,NULL ,'p' }, - {"quiet" , no_argument,NULL ,'q' }, - {"rr" , no_argument,NULL ,'r' }, - {"sched" , required_argument,NULL ,'s' }, - {"uniprocessor" , no_argument,NULL ,'u' }, - {"verbose" , no_argument,NULL ,'v' }, - {"version" , no_argument,NULL ,'V' }, + {"debug" , no_argument,NULL ,OPT_DEBUG }, + {"duration" , required_argument,NULL ,OPT_DURATION }, + {"groups" , required_argument,NULL ,OPT_GROUPS }, + {"help" , no_argument,NULL ,OPT_HELP }, + {"inversions" , required_argument,NULL ,OPT_INVERSIONS }, + {"mlockall" , no_argument,NULL ,OPT_MLOCKALL }, + {"prompt" , no_argument,NULL ,OPT_PROMPT }, + {"quiet" , no_argument,NULL ,OPT_QUIET }, + {"rr" , no_argument,NULL ,OPT_RR }, + {"sched" , required_argument,NULL ,OPT_SCHED }, + {"uniprocessor" , no_argument,NULL ,OPT_UNIPROCESSOR }, + {"verbose" , no_argument,NULL ,OPT_VERBOSE }, + {"version" , no_argument,NULL ,OPT_VERSION }, {NULL ,0 ,NULL ,0 }, };@@ -1298,12 +1304,15 @@ void process_command_line(int argc, char **argv)if (c ==-1 )break ;switch (c) { +case OPT_DEBUG :case 'd' : debugging =1 ;break ; +case OPT_DURATION :case 'D' : duration =parse_time_string (optarg);break ; +case OPT_GROUPS :case 'g' : ngroups =strtol (optarg,NULL ,10 );if (ngroups > num_processors) {@@ -1314,37 +1323,47 @@ void process_command_line(int argc, char **argv) }pi_info ("number of groups set to %d\n" , ngroups);break ; +case OPT_HELP :case 'h' :usage (0 );break ; +case OPT_INVERSIONS :case 'i' : inversions =strtol (optarg,NULL ,10 );pi_info ("doing %d inversion per group\n" , inversions);break ; +case OPT_MLOCKALL :case 'm' : lockall =1 ;break ; +case OPT_PROMPT :case 'p' : prompt =1 ;break ; +case OPT_QUIET :case 'q' : verbose =0 ; quiet =1 ;break ; +case OPT_RR :case 'r' : policy =SCHED_RR ;break ; +case OPT_SCHED :case 's' :if (process_sched_line (optarg))pi_error ("ignoring invalid options '%s'\n" , optarg);break ; +case OPT_UNIPROCESSOR :case 'u' : uniprocessor =1 ;break ; +case OPT_VERBOSE :case 'v' : verbose =1 ; quiet =0 ;break ; +case OPT_VERSION :case 'V' :printf ("pi_stress v%1.2f " ,VERSION );exit (0 );Signature · 1 line
2.30.2
PATCH v3 31/33 pi_stress: Add JSON output feature
In reply to Daniel WagnerWrite the test results as JSON output to a file. This allows to simplifies any parsing later on.
--- src/pi_tests/pi_stress.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)
src/pi_tests/pi_stress.c +21 -1
@@ -99,6 +99,9 @@ int debugging = 0;int quiet =0 ;/* turn off all prints, default = 0 (off) */ +/* filename for JSON output */ +char outfile[MAX_PATH ]; +/* prompt to start test */ int prompt =0 ;
@@ -209,6 +212,7 @@ int create_group(struct group_parameters *group);unsigned long total_inversions (void );void banner (void );void summary (void ); +void write_stats (FILE *f,void *data);void wait_for_termination (void );int barrier_init (pthread_barrier_t *b,const pthread_barrierattr_t *attr,unsigned int count,const char *name);
@@ -235,6 +239,7 @@ int main(int argc, char **argv)/* process command line arguments */ +rt_init (argc, argv);process_command_line (argc, argv);/* set default sched attributes */
@@ -299,6 +304,7 @@ int main(int argc, char **argv) }/* report */ banner (); +rt_test_start (); start =time (NULL );/* turn loose the threads */
@@ -335,6 +341,10 @@ int main(int argc, char **argv)kill (0 ,SIGTERM ); finish =time (NULL );summary (); + +if (strlen (outfile) !=0 ) +rt_write_json (outfile, retval, write_stats,NULL ); +if (lockall)munlockall ();exit (retval);
@@ -983,6 +993,7 @@ void usage(int error)"-h --help print this message\n" "-i INV --inversions=INV number of inversions per group (default is infinite)\n" "-m --mlockall lock current and future memory\n" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" "-p --prompt prompt before starting the test\n" "-q --quiet suppress running output\n" "-r --rr use SCHED_RR for test threads [SCHED_FIFO]\n"
@@ -1276,7 +1287,7 @@ int process_sched_line(const char *arg)enum option_values {OPT_DEBUG =1 ,OPT_DURATION ,OPT_GROUPS ,OPT_HELP ,OPT_INVERSIONS , -OPT_MLOCKALL ,OPT_PROMPT ,OPT_QUIET ,OPT_RR ,OPT_SCHED , +OPT_MLOCKALL ,OPT_OUTPUT ,OPT_PROMPT ,OPT_QUIET ,OPT_RR ,OPT_SCHED ,OPT_UNIPROCESSOR ,OPT_VERBOSE ,OPT_VERSION , };
@@ -1290,6 +1301,7 @@ void process_command_line(int argc, char **argv) {"help", no_argument, NULL, OPT_HELP}, {"inversions", required_argument, NULL, OPT_INVERSIONS}, {"mlockall", no_argument, NULL, OPT_MLOCKALL}, + {"output", required_argument, NULL, OPT_OUTPUT}, {"prompt", no_argument, NULL, OPT_PROMPT}, {"quiet", no_argument, NULL, OPT_QUIET}, {"rr", no_argument, NULL, OPT_RR},
@@ -1336,6 +1348,9 @@ void process_command_line(int argc, char **argv)case 'm' : lockall =1 ;break ; +case OPT_OUTPUT : +strncpy (outfile, optarg,strnlen (optarg,MAX_PATH -1 )); +break ;case OPT_PROMPT :case 'p' : prompt =1 ;
@@ -1439,6 +1454,11 @@ void summary(void) t->tm_yday, t->tm_hour, t->tm_min, t->tm_sec); } +void write_stats (FILE *f,void *data) +{ +fprintf (f," \"inversion\": %lu\n" ,total_inversions ()); +} +int barrier_init (pthread_barrier_t *b,const pthread_barrierattr_t *attr,unsigned int count,const char *name)
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 31/33] pi_stress: Add JSON output feature
Quoted 108 lines · Daniel Wagner
Write the test results as JSON output to a file. This allows to simplifies any parsing later on.
Signed-off-by Daniel Wagner <[email protected]>--- src/pi_tests/pi_stress.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-)src/pi_tests/pi_stress.c +21
-1@@ -99,6 +99,9 @@ int debugging = 0;int quiet =0 ;/* turn off all prints, default = 0 (off) */ +/* filename for JSON output */ +char outfile[MAX_PATH ]; +/* prompt to start test */ int prompt =0 ;@@ -209,6 +212,7 @@ int create_group(struct group_parameters *group);unsigned long total_inversions (void );void banner (void );void summary (void ); +void write_stats (FILE *f,void *data);void wait_for_termination (void );int barrier_init (pthread_barrier_t *b,const pthread_barrierattr_t *attr,unsigned int count,const char *name);@@ -235,6 +239,7 @@ int main(int argc, char **argv)/* process command line arguments */ +rt_init (argc, argv);process_command_line (argc, argv);/* set default sched attributes */ @@ -299,6 +304,7 @@ int main(int argc, char **argv) }/* report */ banner (); +rt_test_start (); start =time (NULL );/* turn loose the threads */ @@ -335,6 +341,10 @@ int main(int argc, char **argv)kill (0 ,SIGTERM ); finish =time (NULL );summary (); + +if (strlen (outfile) !=0 ) +rt_write_json (outfile, retval, write_stats,NULL ); +if (lockall)munlockall ();exit (retval);@@ -983,6 +993,7 @@ void usage(int error)"-h --help print this message\n" "-i INV --inversions=INV number of inversions per group (default is infinite)\n" "-m --mlockall lock current and future memory\n" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" "-p --prompt prompt before starting the test\n" "-q --quiet suppress running output\n" "-r --rr use SCHED_RR for test threads [SCHED_FIFO]\n" @@ -1276,7 +1287,7 @@ int process_sched_line(const char *arg)enum option_values {OPT_DEBUG =1 ,OPT_DURATION ,OPT_GROUPS ,OPT_HELP ,OPT_INVERSIONS , -OPT_MLOCKALL ,OPT_PROMPT ,OPT_QUIET ,OPT_RR ,OPT_SCHED , +OPT_MLOCKALL ,OPT_OUTPUT ,OPT_PROMPT ,OPT_QUIET ,OPT_RR ,OPT_SCHED ,OPT_UNIPROCESSOR ,OPT_VERBOSE ,OPT_VERSION , };@@ -1290,6 +1301,7 @@ void process_command_line(int argc, char **argv) {"help", no_argument, NULL, OPT_HELP}, {"inversions", required_argument, NULL, OPT_INVERSIONS}, {"mlockall", no_argument, NULL, OPT_MLOCKALL}, + {"output", required_argument, NULL, OPT_OUTPUT}, {"prompt", no_argument, NULL, OPT_PROMPT}, {"quiet", no_argument, NULL, OPT_QUIET}, {"rr", no_argument, NULL, OPT_RR},@@ -1336,6 +1348,9 @@ void process_command_line(int argc, char **argv)case 'm' : lockall =1 ;break ; +case OPT_OUTPUT : +strncpy (outfile, optarg,strnlen (optarg,MAX_PATH -1 )); +break ;case OPT_PROMPT :case 'p' : prompt =1 ;@@ -1439,6 +1454,11 @@ void summary(void) t->tm_yday, t->tm_hour, t->tm_min, t->tm_sec); } +void write_stats (FILE *f,void *data) +{ +fprintf (f," \"inversion\": %lu\n" ,total_inversions ()); +} +int barrier_init (pthread_barrier_t *b,const pthread_barrierattr_t *attr,unsigned int count,const char *name)Signature · 1 line
2.30.2
PATCH v3 32/33 ssdd: Add quiet command line option
In reply to Daniel WagnerThe quiet option is useful for automated test setups where only the final result of the run is interesting.
--- src/ssdd/ssdd.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)
src/ssdd/ssdd.c +20 -9
@@ -64,9 +64,11 @@ static const char *get_state_name(int state)#define unused __attribute__((unused)) +static int quiet; +static int got_sigchld; -enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP }; +enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP ,OPT_QUIET };static void usage (int error) {
@@ -75,6 +77,7 @@ static void usage(int error)"ssdd <options>\n\n" "-f --forks=NUM number of forks\n" "-h --help print this message\n" +"-q --quiet suppress running output\n" "-i --iters=NUM number of iterations\n" );exit (error);
@@ -176,7 +179,8 @@ static int forktests(int testid)if (!child)child_process (); -printf ("forktest#%d/%d/%d: STARTING\n" , testid, parent, child); +if (!quiet) +printf ("forktest#%d/%d/%d: STARTING\n" , testid, parent, child); act.sa_sigaction = sigchld;sigemptyset (&act.sa_mask);
@@ -278,8 +282,8 @@ static int forktests(int testid)/* There is no need for the tracer to kill the tracee. It will * automatically exit when its owner, ie, us, exits. */ - -printf ("forktest#%d/%d: EXITING, no error\n" , testid, parent); +if (!quiet) +printf ("forktest#%d/%d: EXITING, no error\n" , testid, parent);exit (0 ); }
@@ -297,10 +301,11 @@ int main(int argc, char **argv)static struct option long_options[] = { {"forks" , required_argument,NULL ,OPT_NFORKS }, {"help" , no_argument,NULL ,OPT_HELP }, + {"quiet" , no_argument,NULL ,OPT_QUIET }, {"iters" , required_argument,NULL ,OPT_NITERS }, {NULL ,0 ,NULL ,0 }, }; -int c =getopt_long (argc, argv,"f:hi:" , long_options, &option_index); +int c =getopt_long (argc, argv,"f:hqi:" , long_options, &option_index);if (c ==-1 )break ;switch (c) {
@@ -312,6 +317,10 @@ int main(int argc, char **argv)case OPT_HELP :usage (0 );break ; +case OPT_QUIET : +case 'q' : + quiet =1 ; +break ;case 'i' :case OPT_NITERS : nsteps =atoi (optarg);
@@ -322,10 +331,12 @@ int main(int argc, char **argv) } } -printf ("#main : %d\n" ,getpid ()); -printf ("#forks: %d\n" , nforks); -printf ("#steps: %d\n" , nsteps); -printf ("\n" ); +if (!quiet) { +printf ("#main : %d\n" ,getpid ()); +printf ("#forks: %d\n" , nforks); +printf ("#steps: %d\n" , nsteps); +printf ("\n" ); + }for (i =0 ; i < nforks; i++) { child =fork ();
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 32/33] ssdd: Add quiet command line option
Quoted 99 lines · Daniel Wagner
The quiet option is useful for automated test setups where only the final result of the run is interesting.
Signed-off-by Daniel Wagner <[email protected]>--- src/ssdd/ssdd.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)src/ssdd/ssdd.c +20
-9@@ -64,9 +64,11 @@ static const char *get_state_name(int state)#define unused __attribute__((unused)) +static int quiet; +static int got_sigchld; -enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP }; +enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP ,OPT_QUIET };static void usage (int error) {@@ -75,6 +77,7 @@ static void usage(int error)"ssdd <options>\n\n" "-f --forks=NUM number of forks\n" "-h --help print this message\n" +"-q --quiet suppress running output\n" "-i --iters=NUM number of iterations\n" );exit (error);@@ -176,7 +179,8 @@ static int forktests(int testid)if (!child)child_process (); -printf ("forktest#%d/%d/%d: STARTING\n" , testid, parent, child); +if (!quiet) +printf ("forktest#%d/%d/%d: STARTING\n" , testid, parent, child); act.sa_sigaction = sigchld;sigemptyset (&act.sa_mask);@@ -278,8 +282,8 @@ static int forktests(int testid)/* There is no need for the tracer to kill the tracee. It will * automatically exit when its owner, ie, us, exits. */ - -printf ("forktest#%d/%d: EXITING, no error\n" , testid, parent); +if (!quiet) +printf ("forktest#%d/%d: EXITING, no error\n" , testid, parent);exit (0 ); }@@ -297,10 +301,11 @@ int main(int argc, char **argv)static struct option long_options[] = { {"forks" , required_argument,NULL ,OPT_NFORKS }, {"help" , no_argument,NULL ,OPT_HELP }, + {"quiet" , no_argument,NULL ,OPT_QUIET }, {"iters" , required_argument,NULL ,OPT_NITERS }, {NULL ,0 ,NULL ,0 }, }; -int c =getopt_long (argc, argv,"f:hi:" , long_options, &option_index); +int c =getopt_long (argc, argv,"f:hqi:" , long_options, &option_index);if (c ==-1 )break ;switch (c) {@@ -312,6 +317,10 @@ int main(int argc, char **argv)case OPT_HELP :usage (0 );break ; +case OPT_QUIET : +case 'q' : + quiet =1 ; +break ;case 'i' :case OPT_NITERS : nsteps =atoi (optarg);@@ -322,10 +331,12 @@ int main(int argc, char **argv) } } -printf ("#main : %d\n" ,getpid ()); -printf ("#forks: %d\n" , nforks); -printf ("#steps: %d\n" , nsteps); -printf ("\n" ); +if (!quiet) { +printf ("#main : %d\n" ,getpid ()); +printf ("#forks: %d\n" , nforks); +printf ("#steps: %d\n" , nsteps); +printf ("\n" ); + }for (i =0 ; i < nforks; i++) { child =fork ();Signature · 1 line
2.30.2
PATCH v3 33/33 ssdd: Add JSON output feature
In reply to Daniel WagnerWrite the test results as JSON output to a file. This allows to simplifies any parsing later on.
--- src/ssdd/ssdd.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)
src/ssdd/ssdd.c +15 -1
@@ -36,6 +36,8 @@#include <sys/wait.h> #include <sys/ptrace.h> +#include "rt-utils.h" +/* do_wait return values */ #define STATE_EXITED 1#define STATE_STOPPED 2
@@ -65,10 +67,11 @@ static const char *get_state_name(int state)#define unused __attribute__((unused))static int quiet; +static char outfile[MAX_PATH ];static int got_sigchld; -enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP ,OPT_QUIET }; +enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP ,OPT_OUTPUT ,OPT_QUIET };static void usage (int error) {
@@ -77,6 +80,7 @@ static void usage(int error)"ssdd <options>\n\n" "-f --forks=NUM number of forks\n" "-h --help print this message\n" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" "-q --quiet suppress running output\n" "-i --iters=NUM number of iterations\n" );
@@ -295,12 +299,14 @@ int main(int argc, char **argv)setbuf (stdout,NULL ); +rt_init (argc, argv);for (;;) {int option_index =0 ;static struct option long_options[] = { {"forks" , required_argument,NULL ,OPT_NFORKS }, {"help" , no_argument,NULL ,OPT_HELP }, + {"output" , required_argument,NULL ,OPT_OUTPUT }, {"quiet" , no_argument,NULL ,OPT_QUIET }, {"iters" , required_argument,NULL ,OPT_NITERS }, {NULL ,0 ,NULL ,0 },
@@ -317,6 +323,9 @@ int main(int argc, char **argv)case OPT_HELP :usage (0 );break ; +case OPT_OUTPUT : +strncpy (outfile, optarg,strnlen (optarg,MAX_PATH -1 )); +break ;case OPT_QUIET :case 'q' : quiet =1 ;
@@ -348,6 +357,7 @@ int main(int argc, char **argv)forktests (i); } +rt_test_start ();for (i =0 ; i < nforks; i++) { status =do_wait (&wait_pid, &ret_sig);if (status !=STATE_EXITED ) {
@@ -363,5 +373,9 @@ int main(int argc, char **argv)printf ("%s.\n" , error ?"One or more tests FAILED" :"All tests PASSED" ); + +if (strlen (outfile) !=0 ) +rt_write_json (outfile, error,NULL ,NULL ); +exit (error); }
Signature · 1 line
2.30.2
Re: [PATCH rt-tests v3 33/33] ssdd: Add JSON output feature
Quoted 89 lines · Daniel Wagner
Write the test results as JSON output to a file. This allows to simplifies any parsing later on.
Signed-off-by Daniel Wagner <[email protected]>--- src/ssdd/ssdd.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-)src/ssdd/ssdd.c +15
-1@@ -36,6 +36,8 @@#include <sys/wait.h> #include <sys/ptrace.h> +#include "rt-utils.h" +/* do_wait return values */ #define STATE_EXITED 1#define STATE_STOPPED 2@@ -65,10 +67,11 @@ static const char *get_state_name(int state)#define unused __attribute__((unused))static int quiet; +static char outfile[MAX_PATH ];static int got_sigchld; -enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP ,OPT_QUIET }; +enum option_value {OPT_NFORKS =1 ,OPT_NITERS ,OPT_HELP ,OPT_OUTPUT ,OPT_QUIET };static void usage (int error) {@@ -77,6 +80,7 @@ static void usage(int error)"ssdd <options>\n\n" "-f --forks=NUM number of forks\n" "-h --help print this message\n" +" --output=FILENAME write final results into FILENAME, JSON formatted\n" "-q --quiet suppress running output\n" "-i --iters=NUM number of iterations\n" );@@ -295,12 +299,14 @@ int main(int argc, char **argv)setbuf (stdout,NULL ); +rt_init (argc, argv);for (;;) {int option_index =0 ;static struct option long_options[] = { {"forks" , required_argument,NULL ,OPT_NFORKS }, {"help" , no_argument,NULL ,OPT_HELP }, + {"output" , required_argument,NULL ,OPT_OUTPUT }, {"quiet" , no_argument,NULL ,OPT_QUIET }, {"iters" , required_argument,NULL ,OPT_NITERS }, {NULL ,0 ,NULL ,0 },@@ -317,6 +323,9 @@ int main(int argc, char **argv)case OPT_HELP :usage (0 );break ; +case OPT_OUTPUT : +strncpy (outfile, optarg,strnlen (optarg,MAX_PATH -1 )); +break ;case OPT_QUIET :case 'q' : quiet =1 ;@@ -348,6 +357,7 @@ int main(int argc, char **argv)forktests (i); } +rt_test_start ();for (i =0 ; i < nforks; i++) { status =do_wait (&wait_pid, &ret_sig);if (status !=STATE_EXITED ) {@@ -363,5 +373,9 @@ int main(int argc, char **argv)printf ("%s.\n" , error ?"One or more tests FAILED" :"All tests PASSED" ); + +if (strlen (outfile) !=0 ) +rt_write_json (outfile, error,NULL ,NULL ); +exit (error); }Signature · 1 line
2.30.2
Quoted 49 lines · Daniel Wagner
v3:
- rebase
- two patches splitted into per test program change
- commit messsage addedv2:
- added 'return_code' to the common section of the JSON output
- dropped 'inversion' as we have 'return_code' inpip_stress
- dropped 'success' as we have 'return code in ssddAll patches are also available at:
https://github.com/igaw/rt-tests/tree/json-output-2021-03-20
Daniel Wagner (33):
cyclictest: Remove unused include header
cyclicdeadline: Remove unused include header
signaltest: Add missing --output usage info
rt-util: Addrt_initfunction
cyclictest: Initialize rt-util
oslat: Initialize rt-util
pmqtest: Initialize rt-util
ptsematest: Initialize rt-util
rt-migrate-test: Initialize rt-util
cyclicdeadline: Initialize rt-util
signaltest: Initialize rt-util
sigwaittest: Initialize rt-util
svematest: Initialize rt-util
rt-util: Remove superfluous arguments fromrt_write_json
rt-util: Introducert_test_start()
cyclictest: Record start of test execution
oslat: Record start of test execution
pmqtest: Record start of test execution
ptesematest: Record start of test execution
rt-migrate-test: Record start of test execution
cyclicdeadline: Record start of test execution
signaltest: Record start of test execution
sigwaittest: Record start of test execution
svsematest: Record start of test execution
rt-util: Addreturn_codeto common section of JSON output
pip_stress: Move test result output to main
pip_stress: Return failure code if test fails
pip_stress: Prepare arg parser to accept only long options
pip_stress: Add JSON output feature
pi_stress: Prepare command line parser for long options only
pi_stress: Add JSON output feature
ssdd: Add quiet command line option
ssdd: Add JSON output feature
Quoted 20 lines
src/cyclictest/cyclictest.c | 5 +- src/include/rt-utils.h | 6 +- src/lib/rt-utils.c | 85 ++++++++++++++++----------- src/oslat/oslat.c | 6 +- src/pi_tests/pi_stress.c | 65 ++++++++++++++++---- src/pi_tests/pip_stress.c | 40 +++++++++---- src/pmqtest/pmqtest.c | 4 +- src/ptsematest/ptsematest.c | 4 +- src/rt-migrate-test/rt-migrate-test.c | 4 +- src/sched_deadline/cyclicdeadline.c | 6 +- src/signaltest/signaltest.c | 5 +- src/sigwaittest/sigwaittest.c | 4 +- src/ssdd/ssdd.c | 43 +++++++++++--- src/svsematest/svsematest.c | 4 +- 14 files changed, 199 insertions(+), 82 deletions(-)Signature · 1 line
2.30.2
Thanks Daniel! On this right away.
John