xfs
[Top] [All Lists]

Re: [2/8] xfstests: add different logging option to fsstress

To: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
Subject: Re: [2/8] xfstests: add different logging option to fsstress
From: Phil White <pwhite@xxxxxxx>
Date: Fri, 2 Dec 2011 15:27:57 -0800
Cc: xfs@xxxxxxxxxxx
User-agent: Mutt/1.5.21 (2010-09-15)
On Sat, Oct 29, 2011 at 12:48:11AM -0000, Dmitry Monakhov wrote:
> Currently the only way to log fsstress's output is to redirect it's shared
> stdout to pipe which is very painfull because:
> 
> 1) Pipe writers are serialized via i_mutex so we waste cpu-cores power on 
> stupid
>    sinchronization for loging purpose, instead of hunting real race 
> conditions,
>    and bugs inside file system.
> 2) Usually output is corrupted due to luck of sychronization on shared stdout.
> 
> Since fsstress's children operate on independend paths, let's just open 
> didicated
> log file for each child and simply avoid useless sycnhronization.
> 
> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
> Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
> 
> ---
> ltp/fsstress.c |   33 ++++++++++++++++++++++++++++++++-
>  1 files changed, 32 insertions(+), 1 deletions(-)
> 
> diff --git a/ltp/fsstress.c b/ltp/fsstress.c
> index 51ecda2..c7001f3 100644
> --- a/ltp/fsstress.c
> +++ b/ltp/fsstress.c
> @@ -258,6 +258,8 @@ int main(int argc, char **argv)
>       char            buf[10];
>       int             c;
>       char            *dirname = NULL;
> +     char            *logname = NULL;
> +     char            rpath[PATH_MAX];
>       int             fd;
>       int             i;
>       int             j;
> @@ -273,7 +275,7 @@ int main(int argc, char **argv)
>       nops = sizeof(ops) / sizeof(ops[0]);
>       ops_end = &ops[nops];
>       myprog = argv[0];
> -     while ((c = getopt(argc, argv, "d:e:f:i:m:n:p:rs:vwzHS")) != -1) {
> +     while ((c = getopt(argc, argv, "d:e:f:i:m:n:o:p:rs:vwzHS")) != -1) {
>               switch (c) {
>               case 'd':
>                       dirname = optarg;
> @@ -311,6 +313,10 @@ int main(int argc, char **argv)
>               case 'n':
>                       operations = atoi(optarg);
>                       break;
> +             case 'o':
> +                     logname = optarg;
> +                     break;
> +
>               case 'p':
>                       nproc = atoi(optarg);
>                       break;
> @@ -351,10 +357,26 @@ int main(int argc, char **argv)
>          }
>  
>       (void)mkdir(dirname, 0777);
> +     if (logname && logname[0] != '/') {
> +             if (getcwd(rpath, sizeof(rpath)) < 0){
> +                     perror("getcwd failed");
> +                     exit(1);
> +             }
> +     } else {
> +             rpath[0] = '\0';
> +     }
>       if (chdir(dirname) < 0) {
>               perror(dirname);
>               exit(1);
>       }
> +     if (logname) {
> +             char path[PATH_MAX];
> +             snprintf(path, sizeof(path), "%s/%s", rpath, logname);
> +             if (freopen(path, "a", stdout) == NULL) {
> +                     perror("freopen logfile failed");
> +                     exit(1);
> +             }
> +     }
>       sprintf(buf, "fss%x", (unsigned int)getpid());
>       fd = creat(buf, 0666);
>       if (lseek64(fd, (off64_t)(MAXFSIZE32 + 1ULL), SEEK_SET) < 0)
> @@ -409,6 +431,15 @@ int main(int argc, char **argv)
>               close(fd);
>       for (i = 0; i < nproc; i++) {
>               if (fork() == 0) {
> +                     if (logname) {
> +                             char path[PATH_MAX];
> +                             snprintf(path, sizeof(path), "%s/%s.%d",
> +                                      rpath, logname, i);
> +                             if (freopen(path, "a", stdout) == NULL) {
> +                                     perror("freopen logfile failed");
> +                                     exit(1);
> +                             }
> +                     }
>                       procid = i;
>                       doproc();
>                       return 0;

Looks good to me.

Reviewed-By: Phil White <pwhite@xxxxxxx>
Tested-By: Phil White <pwhite@xxxxxxx>

<Prev in Thread] Current Thread [Next in Thread>
  • Re: [2/8] xfstests: add different logging option to fsstress, Phil White <=