]> granicus.if.org Git - postgresql/commitdiff
Have program default to 1000 loops, and add file name and loop option.
authorBruce Momjian <bruce@momjian.us>
Thu, 18 Mar 2004 19:54:00 +0000 (19:54 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 18 Mar 2004 19:54:00 +0000 (19:54 +0000)
Make open/close loop testings the same.  Add descriptions for certain tests.

src/tools/fsync/README
src/tools/fsync/test_fsync.c

index 6da713afbf4721803b7fa0e5aa1a90e3dce4a187..570708ed5106a8accf0a4f02c730e2ad6454804d 100644 (file)
@@ -1,7 +1,5 @@
-This program tests fsync.  If first times a simple read.  Then, it times
-an fsync that is part of a write, and one that is done on a newly opened
-file.  Third, it tests various fsync methods.
+This program tests fsync.  The tests are described as part of the program output.
 
-The program writes to /var/tmp because /tmp is sometimes a memory file
-system.
+       Usage:  test_fsync [-f filename] [loops]
 
+Loops defaults to 1000.
index 1579eaaae0d10fa349cc886903c7b00b96d0a703..2a01c4ec11402c8bd47a055afa2c2fd436381a7b 100644 (file)
@@ -14,6 +14,8 @@
 #include <sys/time.h>
 #include <unistd.h>
 
+#define FSYNC_FILENAME "/var/tmp/test_fsync.out"
+
 /* O_SYNC and O_FSYNC are the same */
 #if defined(O_SYNC)
 #define OPEN_SYNC_FLAG         O_SYNC
@@ -36,12 +38,25 @@ main(int argc, char *argv[])
        struct timeval start_t;
        struct timeval elapse_t;
        int                     tmpfile,
-                               i;
+                               i,
+                               loops=1000;
        char       *strout = (char *) malloc(65536);
+       char       *filename = FSYNC_FILENAME;
 
+       if (argc > 2 && strcmp(argv[1],"-f") == 0)
+       {
+               filename = argv[2];
+               argv += 2;
+               argc -= 2;
+       }
+               
+       if (argc > 1)
+                       loops = atoi(argv[1]);
+               
        for (i = 0; i < 65536; i++)
                strout[i] = 'a';
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) == -1)
+
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        write(tmpfile, strout, 65536);
        fsync(tmpfile);                         /* fsync so later fsync's don't have to do
@@ -51,24 +66,35 @@ main(int argc, char *argv[])
        printf("Simple write timing:\n");
        /* write only */
        gettimeofday(&start_t, NULL);
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
-               die("can't open /var/tmp/test_fsync.out");
-       write(tmpfile, strout, 8192);
-       close(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
+                       die("can't open /var/tmp/test_fsync.out");
+               write(tmpfile, strout, 8192);
+               close(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        printf("\twrite                  ");
        print_elapse(start_t, elapse_t);
-       printf("\n\n");
+       printf("\n");
 
-       printf("Compare fsync before and after write's close:\n");
+       printf("\nCompare fsync times on write() and non-write() descriptor:\n");
+       printf("(If the times are similar, fsync() can sync data written\n on a different descriptor.)\n");
 
        /* write, fsync, close */
        gettimeofday(&start_t, NULL);
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
-               die("can't open /var/tmp/test_fsync.out");
-       write(tmpfile, strout, 8192);
-       fsync(tmpfile);
-       close(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
+                       die("can't open /var/tmp/test_fsync.out");
+               write(tmpfile, strout, 8192);
+               fsync(tmpfile);
+               close(tmpfile);
+               if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
+                       die("can't open /var/tmp/test_fsync.out");
+               /* do nothing but the open/close the tests are consistent. */
+               close(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        printf("\twrite, fsync, close    ");
        print_elapse(start_t, elapse_t);
@@ -76,15 +102,18 @@ main(int argc, char *argv[])
 
        /* write, close, fsync */
        gettimeofday(&start_t, NULL);
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
-               die("can't open /var/tmp/test_fsync.out");
-       write(tmpfile, strout, 8192);
-       close(tmpfile);
-       /* reopen file */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
-               die("can't open /var/tmp/test_fsync.out");
-       fsync(tmpfile);
-       close(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
+                       die("can't open /var/tmp/test_fsync.out");
+               write(tmpfile, strout, 8192);
+               close(tmpfile);
+               /* reopen file */
+               if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
+                       die("can't open /var/tmp/test_fsync.out");
+               fsync(tmpfile);
+               close(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        printf("\twrite, close, fsync    ");
        print_elapse(start_t, elapse_t);
@@ -93,10 +122,11 @@ main(int argc, char *argv[])
        printf("\nCompare one o_sync write to two:\n");
 
        /* 16k o_sync write */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | OPEN_SYNC_FLAG)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | OPEN_SYNC_FLAG)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 16384);
+       for (i = 0; i < loops; i++)
+               write(tmpfile, strout, 16384);
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\tone 16k o_sync write   ");
@@ -104,11 +134,14 @@ main(int argc, char *argv[])
        printf("\n");
 
        /* 2*8k o_sync writes */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | OPEN_SYNC_FLAG)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | OPEN_SYNC_FLAG)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       write(tmpfile, strout, 8192);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               write(tmpfile, strout, 8192);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\ttwo 8k o_sync writes   ");
@@ -119,10 +152,11 @@ main(int argc, char *argv[])
 
 #ifdef OPEN_DATASYNC_FLAG
        /* open_dsync, write */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | O_DSYNC)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | O_DSYNC)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
+       for (i = 0; i < loops; i++)
+               write(tmpfile, strout, 8192);
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\topen o_dsync, write    ");
@@ -133,10 +167,11 @@ main(int argc, char *argv[])
        printf("\n");
 
        /* open_fsync, write */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | OPEN_SYNC_FLAG)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | OPEN_SYNC_FLAG)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
+       for (i = 0; i < loops; i++)
+               write(tmpfile, strout, 8192);
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\topen o_sync, write     ");
@@ -145,11 +180,14 @@ main(int argc, char *argv[])
 
 #ifdef HAVE_FDATASYNC
        /* write, fdatasync */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       fdatasync(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               fdatasync(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\twrite, fdatasync       ");
@@ -160,11 +198,14 @@ main(int argc, char *argv[])
        printf("\n");
 
        /* write, fsync, close */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       fsync(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               fsync(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\twrite, fsync,          ");
@@ -176,11 +217,14 @@ main(int argc, char *argv[])
 
 #ifdef OPEN_DATASYNC_FLAG
        /* open_dsync, write */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | O_DSYNC)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | O_DSYNC)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       write(tmpfile, strout, 8192);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               write(tmpfile, strout, 8192);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\topen o_dsync, write    ");
@@ -191,11 +235,14 @@ main(int argc, char *argv[])
        printf("\n");
 
        /* open_fsync, write */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR | OPEN_SYNC_FLAG)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR | OPEN_SYNC_FLAG)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       write(tmpfile, strout, 8192);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               write(tmpfile, strout, 8192);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\topen o_sync, write     ");
@@ -204,12 +251,15 @@ main(int argc, char *argv[])
 
 #ifdef HAVE_FDATASYNC
        /* write, fdatasync */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       write(tmpfile, strout, 8192);
-       fdatasync(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               write(tmpfile, strout, 8192);
+               fdatasync(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\twrite, fdatasync       ");
@@ -220,19 +270,22 @@ main(int argc, char *argv[])
        printf("\n");
 
        /* write, fsync, close */
-       if ((tmpfile = open("/var/tmp/test_fsync.out", O_RDWR)) == -1)
+       if ((tmpfile = open(FSYNC_FILENAME, O_RDWR)) == -1)
                die("can't open /var/tmp/test_fsync.out");
        gettimeofday(&start_t, NULL);
-       write(tmpfile, strout, 8192);
-       write(tmpfile, strout, 8192);
-       fsync(tmpfile);
+       for (i = 0; i < loops; i++)
+       {
+               write(tmpfile, strout, 8192);
+               write(tmpfile, strout, 8192);
+               fsync(tmpfile);
+       }
        gettimeofday(&elapse_t, NULL);
        close(tmpfile);
        printf("\twrite, fsync,          ");
        print_elapse(start_t, elapse_t);
        printf("\n");
 
-       unlink("/var/tmp/test_fsync.out");
+       unlink(FSYNC_FILENAME);
 
        return 0;
 }
@@ -246,7 +299,7 @@ print_elapse(struct timeval start_t, struct timeval elapse_t)
                elapse_t.tv_usec += 1000000;
        }
 
-       printf("%ld.%06ld", (long) (elapse_t.tv_sec - start_t.tv_sec),
+       printf("%3ld.%06ld", (long) (elapse_t.tv_sec - start_t.tv_sec),
                   (long) (elapse_t.tv_usec - start_t.tv_usec));
 }