projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Close listen socket when done
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index 9b386c5b3a924ce92cce38d8f7d60e97b9e638e8..ce1645077380613fabac367f71f0dbb8962f92b7 100644
(file)
--- a/
init.c
+++ b/
init.c
@@
-19,10
+19,11
@@
#include "filehash.h"
#include "verify.h"
#include "profile.h"
#include "filehash.h"
#include "verify.h"
#include "profile.h"
+#include "server.h"
#include "lib/getopt.h"
#include "lib/getopt.h"
-static char fio_version_string[] = "fio 1.5
7
";
+static char fio_version_string[] = "fio 1.5
8
";
#define FIO_RANDSEED (0xb1899bedUL)
#define FIO_RANDSEED (0xb1899bedUL)
@@
-43,6
+44,8
@@
char **job_sections = NULL;
int nr_job_sections = 0;
char *exec_profile = NULL;
int warnings_fatal = 0;
int nr_job_sections = 0;
char *exec_profile = NULL;
int warnings_fatal = 0;
+int terse_version = 2;
+int is_backend = 0;
int write_bw_log = 0;
int read_only = 0;
int write_bw_log = 0;
int read_only = 0;
@@
-147,6
+150,16
@@
static struct option l_opts[FIO_NR_OPTIONS] = {
.has_arg = required_argument,
.val = 'j',
},
.has_arg = required_argument,
.val = 'j',
},
+ {
+ .name = (char *) "terse-version",
+ .has_arg = required_argument,
+ .val = 'V',
+ },
+ {
+ .name = (char *) "server",
+ .has_arg = no_argument,
+ .val = 'S',
+ },
{
.name = NULL,
},
{
.name = NULL,
},
@@
-515,6
+528,8
@@
void td_fill_rand_seeds(struct thread_data *td)
td_fill_rand_seeds_os(td);
else
td_fill_rand_seeds_internal(td);
td_fill_rand_seeds_os(td);
else
td_fill_rand_seeds_internal(td);
+
+ init_rand_seed(&td->buf_state, td->rand_seeds[7]);
}
/*
}
/*
@@
-616,6
+631,12
@@
static int add_job(struct thread_data *td, const char *jobname, int job_add_num)
td->mutex = fio_mutex_init(0);
td->mutex = fio_mutex_init(0);
+ td->ts.clat_percentiles = td->o.clat_percentiles;
+ if (td->o.overwrite_plist)
+ td->ts.percentile_list = td->o.percentile_list;
+ else
+ td->ts.percentile_list = NULL;
+
td->ts.clat_stat[0].min_val = td->ts.clat_stat[1].min_val = ULONG_MAX;
td->ts.slat_stat[0].min_val = td->ts.slat_stat[1].min_val = ULONG_MAX;
td->ts.lat_stat[0].min_val = td->ts.lat_stat[1].min_val = ULONG_MAX;
td->ts.clat_stat[0].min_val = td->ts.clat_stat[1].min_val = ULONG_MAX;
td->ts.slat_stat[0].min_val = td->ts.slat_stat[1].min_val = ULONG_MAX;
td->ts.lat_stat[0].min_val = td->ts.lat_stat[1].min_val = ULONG_MAX;
@@
-785,7
+806,7
@@
static int is_empty_or_comment(char *line)
/*
* This is our [ini] type file parser.
*/
/*
* This is our [ini] type file parser.
*/
-
static int parse_jobs_ini(char *file
, int stonewall_flag)
+
int parse_jobs_ini(char *file, int is_buf
, int stonewall_flag)
{
unsigned int global;
struct thread_data *td;
{
unsigned int global;
struct thread_data *td;
@@
-799,14
+820,18
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
char **opts;
int i, alloc_opts, num_opts;
char **opts;
int i, alloc_opts, num_opts;
- if (!strcmp(file, "-"))
- f = stdin;
- else
- f = fopen(file, "r");
+ if (is_buf)
+ f = NULL;
+ else {
+ if (!strcmp(file, "-"))
+ f = stdin;
+ else
+ f = fopen(file, "r");
- if (!f) {
- perror("fopen job file");
- return 1;
+ if (!f) {
+ perror("fopen job file");
+ return 1;
+ }
}
string = malloc(4096);
}
string = malloc(4096);
@@
-828,7
+853,10
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
* haven't handled.
*/
if (!skip_fgets) {
* haven't handled.
*/
if (!skip_fgets) {
- p = fgets(string, 4095, f);
+ if (is_buf)
+ p = strsep(&file, "\n");
+ else
+ p = fgets(string, 4095, f);
if (!p)
break;
}
if (!p)
break;
}
@@
-882,7
+910,14
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
num_opts = 0;
memset(opts, 0, alloc_opts * sizeof(char *));
num_opts = 0;
memset(opts, 0, alloc_opts * sizeof(char *));
- while ((p = fgets(string, 4096, f)) != NULL) {
+ while (1) {
+ if (is_buf)
+ p = strsep(&file, "\n");
+ else
+ p = fgets(string, 4096, f);
+ if (!p)
+ break;
+
if (is_empty_or_comment(p))
continue;
if (is_empty_or_comment(p))
continue;
@@
-935,7
+970,7
@@
static int parse_jobs_ini(char *file, int stonewall_flag)
free(string);
free(name);
free(opts);
free(string);
free(name);
free(opts);
- if (f != stdin)
+ if (
!is_buf &&
f != stdin)
fclose(f);
return ret;
}
fclose(f);
return ret;
}
@@
-1030,6
+1065,7
@@
static void usage(const char *name)
printf("\t--bandwidth-log\tGenerate per-job bandwidth logs\n");
printf("\t--minimal\tMinimal (terse) output\n");
printf("\t--version\tPrint version info and exit\n");
printf("\t--bandwidth-log\tGenerate per-job bandwidth logs\n");
printf("\t--minimal\tMinimal (terse) output\n");
printf("\t--version\tPrint version info and exit\n");
+ printf("\t--terse-version=x Terse version output format\n");
printf("\t--help\t\tPrint this page\n");
printf("\t--cmdhelp=cmd\tPrint command help, \"all\" for all of"
" them\n");
printf("\t--help\t\tPrint this page\n");
printf("\t--cmdhelp=cmd\tPrint command help, \"all\" for all of"
" them\n");
@@
-1191,6
+1227,14
@@
static int parse_cmd_line(int argc, char *argv[])
case 'v':
log_info("%s\n", fio_version_string);
exit(0);
case 'v':
log_info("%s\n", fio_version_string);
exit(0);
+ case 'V':
+ terse_version = atoi(optarg);
+ if (terse_version != 2) {
+ log_err("fio: bad terse version format\n");
+ exit_val = 1;
+ do_exit++;
+ }
+ break;
case 'e':
if (!strcmp("always", optarg))
eta_print = FIO_ETA_ALWAYS;
case 'e':
if (!strcmp("always", optarg))
eta_print = FIO_ETA_ALWAYS;
@@
-1259,6
+1303,9
@@
static int parse_cmd_line(int argc, char *argv[])
exit_val = 1;
}
break;
exit_val = 1;
}
break;
+ case 'S':
+ is_backend = 1;
+ break;
default:
do_exit++;
exit_val = 1;
default:
do_exit++;
exit_val = 1;
@@
-1269,6
+1316,9
@@
static int parse_cmd_line(int argc, char *argv[])
if (do_exit)
exit(exit_val);
if (do_exit)
exit(exit_val);
+ if (is_backend)
+ return fio_server();
+
if (td) {
if (!ret)
ret = add_job(td, td->o.name ?: "fio", 0);
if (td) {
if (!ret)
ret = add_job(td, td->o.name ?: "fio", 0);
@@
-1304,7
+1354,7
@@
int parse_options(int argc, char *argv[])
for (i = 0; i < job_files; i++) {
if (fill_def_thread())
return 1;
for (i = 0; i < job_files; i++) {
if (fill_def_thread())
return 1;
- if (parse_jobs_ini(ini_file[i], i))
+ if (parse_jobs_ini(ini_file[i],
0,
i))
return 1;
free(ini_file[i]);
}
return 1;
free(ini_file[i]);
}
@@
-1317,6
+1367,8
@@
int parse_options(int argc, char *argv[])
return 0;
if (exec_profile)
return 0;
return 0;
if (exec_profile)
return 0;
+ if (is_backend)
+ return 0;
log_err("No jobs(s) defined\n\n");
usage(argv[0]);
log_err("No jobs(s) defined\n\n");
usage(argv[0]);