Add more job info
[fio.git] / init.c
diff --git a/init.c b/init.c
index d7d801181c435247e24217d5d53bfcc372698837..f1446ca18550d4112c3d50345f309eb3ba44d87e 100644 (file)
--- a/init.c
+++ b/init.c
@@ -555,6 +555,19 @@ static int fixup_options(struct thread_data *td)
        }
 #endif
 
+#ifdef WIN32
+       /*
+        * Windows doesn't support O_DIRECT or O_SYNC with the _open interface,
+        * so fail if we're passed those flags
+        */
+       if ((td->io_ops->flags & FIO_SYNCIO) && (td->o.odirect || td->o.sync_io)) {
+               log_err("fio: Windows does not support direct or non-buffered io with"
+                               " the synchronous ioengines. Use the 'windowsaio' ioengine"
+                               " with 'direct=1' and 'iodepth=1' instead.\n");
+               ret = 1;
+       }
+#endif
+
        return ret;
 }
 
@@ -660,31 +673,6 @@ void td_fill_rand_seeds(struct thread_data *td)
        init_rand_seed(&td->buf_state, td->rand_seeds[7]);
 }
 
-/*
- * Initialize the various random states we need (random io, block size ranges,
- * read/write mix, etc).
- */
-static int init_random_state(struct thread_data *td)
-{
-       int fd;
-
-       fd = open("/dev/urandom", O_RDONLY);
-       if (fd == -1) {
-               td_verror(td, errno, "open");
-               return 1;
-       }
-
-       if (read(fd, td->rand_seeds, sizeof(td->rand_seeds)) <
-           (int) sizeof(td->rand_seeds)) {
-               td_verror(td, EIO, "read");
-               close(fd);
-               return 1;
-       }
-
-       close(fd);
-       td_fill_rand_seeds(td);
-       return 0;
-}
 
 /*
  * Initializes the ioengine configured for a job, if it has not been done so
@@ -749,8 +737,6 @@ int ioengine_load(struct thread_data *td)
  */
 static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
 {
-       const char *ddir_str[] = { NULL, "read", "write", "rw", NULL,
-                                  "randread", "randwrite", "randrw" };
        unsigned int i;
        char fname[PATH_MAX];
        int numjobs, file_alloced;
@@ -839,8 +825,10 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
        td->groupid = groupid;
        prev_group_jobs++;
 
-       if (init_random_state(td))
+       if (init_random_state(td, td->rand_seeds, sizeof(td->rand_seeds))) {
+               td_verror(td, errno, "init_random_state");
                goto err;
+       }
 
        if (setup_rate(td))
                goto err;
@@ -860,6 +848,9 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
 
        if (!terse_output) {
                if (!job_add_num) {
+                       if (is_backend)
+                               fio_server_send_add_job(&td->o, td->io_ops->name);
+
                        if (!strcmp(td->io_ops->name, "cpuio")) {
                                log_info("%s: ioengine=cpu, cpuload=%u,"
                                         " cpucycle=%u\n", td->o.name,
@@ -876,7 +867,7 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
                                log_info("%s: (g=%d): rw=%s, bs=%s-%s/%s-%s,"
                                         " ioengine=%s, iodepth=%u\n",
                                                td->o.name, td->groupid,
-                                               ddir_str[td->o.td_ddir],
+                                               ddir_str(td->o.td_ddir),
                                                c1, c2, c3, c4,
                                                td->io_ops->name,
                                                td->o.iodepth);
@@ -1581,10 +1572,8 @@ int parse_cmd_line(int argc, char *argv[])
        return ini_idx;
 }
 
-int parse_options(int argc, char *argv[])
+int fio_init_options(void)
 {
-       int job_files, i;
-
        f_out = stdout;
        f_err = stderr;
 
@@ -1596,6 +1585,16 @@ int parse_options(int argc, char *argv[])
        if (fill_def_thread())
                return 1;
 
+       return 0;
+}
+
+int parse_options(int argc, char *argv[])
+{
+       int job_files, i;
+
+       if (fio_init_options())
+               return 1;
+
        job_files = parse_cmd_line(argc, argv);
 
        if (job_files > 0) {