Merge branch 'master' of ssh://router/data/git/fio
[fio.git] / init.c
diff --git a/init.c b/init.c
index 26c7d1def0e4891a06e3ac8630d20a348255d56f..7785e9e42649f9c509e1358c5c159edba43bad2f 100644 (file)
--- a/init.c
+++ b/init.c
@@ -20,7 +20,7 @@
 #include "filehash.h"
 #include "verify.h"
 
-static char fio_version_string[] = "fio 1.35";
+static char fio_version_string[] = "fio 1.37";
 
 #define FIO_RANDSEED           (0xb1899bedUL)
 
@@ -137,7 +137,7 @@ static struct option l_opts[FIO_NR_OPTIONS] = {
 };
 
 static const char *tiobench_opts[] = {
-       "buffered=0", "size=256*$mb_memory", "bs=4k", "timeout=600",
+       "buffered=0", "size=4*1024*$mb_memory", "bs=4k", "timeout=600",
        "numjobs=4", "group_reporting", "thread", "overwrite=1",
        "filename=.fio.tio.1:.fio.tio.2:.fio.tio.3:.fio.tio.4",
        "name=seqwrite", "rw=write", "end_fsync=1",
@@ -181,6 +181,8 @@ static struct thread_data *get_new_job(int global, struct thread_data *parent)
        td = &threads[thread_number++];
        *td = *parent;
 
+       td->o.uid = td->o.gid = -1U;
+
        dup_files(td, parent);
        options_mem_dupe(td);
 
@@ -203,21 +205,19 @@ static void put_job(struct thread_data *td)
 static int __setup_rate(struct thread_data *td, enum fio_ddir ddir)
 {
        unsigned int bs = td->o.min_bs[ddir];
-       unsigned long long rate;
-       unsigned long ios_per_msec;
+       unsigned long long bytes_per_sec;
 
-       if (td->o.rate[ddir]) {
-               rate = td->o.rate[ddir];
-               ios_per_msec = (rate * 1000LL) / bs;
-       } else
-               ios_per_msec = td->o.rate_iops[ddir] * 1000UL;
+       if (td->o.rate[ddir])
+               bytes_per_sec = td->o.rate[ddir];
+       else
+               bytes_per_sec = td->o.rate_iops[ddir] * bs;
 
-       if (!ios_per_msec) {
+       if (!bytes_per_sec) {
                log_err("rate lower than supported\n");
                return -1;
        }
 
-       td->rate_usec_cycle[ddir] = 1000000000ULL / ios_per_msec;
+       td->rate_nsec_cycle[ddir] = 1000000000ULL / bytes_per_sec;
        td->rate_pending_usleep[ddir] = 0;
        return 0;
 }
@@ -382,6 +382,17 @@ static int fixup_options(struct thread_data *td)
                                 " that isn't seekable. Pre-read disabled.\n");
        }
 
+#ifndef FIO_HAVE_FDATASYNC
+       if (td->o.fdatasync_blocks) {
+               log_info("fio: this platform does not support fdatasync()"
+                        " falling back to using fsync().  Use the 'fsync'"
+                        " option instead of 'fdatasync' to get rid of"
+                        " this warning\n");
+               td->o.fsync_blocks = td->o.fdatasync_blocks;
+               td->o.fdatasync_blocks = 0;
+       }
+#endif
+
        return 0;
 }
 
@@ -1024,7 +1035,7 @@ static int load_profile(const char *profile)
        int i, in_global = 1;
        char jobname[32];
 
-       dprint(FD_PARSE, "loading profile %s\n", profile);
+       dprint(FD_PARSE, "loading profile '%s'\n", profile);
 
        for (i = 0; i < PROFILE_END; i++) {
                if (!strcmp(profile, profiles[i]))
@@ -1032,7 +1043,7 @@ static int load_profile(const char *profile)
        }
 
        if (i == PROFILE_END) {
-               log_err("fio: unknown profile %s\n", profile);
+               log_err("fio: unknown profile '%s'\n", profile);
                return 1;
        }