projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Server logging cleanup/functionality
[fio.git]
/
init.c
diff --git
a/init.c
b/init.c
index f55e5d71b3abcdfd6c03a3a0d0ff5bffdab62cc3..87052b9e5476aae581ffc6475293aa5529bf7590 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)
@@
-44,6
+45,9
@@
int nr_job_sections = 0;
char *exec_profile = NULL;
int warnings_fatal = 0;
int terse_version = 2;
char *exec_profile = NULL;
int warnings_fatal = 0;
int terse_version = 2;
+int is_backend = 0;
+int is_client = 0;
+char *client;
int write_bw_log = 0;
int read_only = 0;
int write_bw_log = 0;
int read_only = 0;
@@
-153,21
+157,26
@@
static struct option l_opts[FIO_NR_OPTIONS] = {
.has_arg = required_argument,
.val = 'V',
},
.has_arg = required_argument,
.val = 'V',
},
+ {
+ .name = (char *) "server",
+ .has_arg = no_argument,
+ .val = 'S',
+ },
+ {
+ .name = (char *) "net-port",
+ .has_arg = required_argument,
+ .val = 'P',
+ },
+ {
+ .name = (char *) "client",
+ .has_arg = required_argument,
+ .val = 'C',
+ },
{
.name = NULL,
},
};
{
.name = NULL,
},
};
-FILE *get_f_out()
-{
- return f_out;
-}
-
-FILE *get_f_err()
-{
- return f_err;
-}
-
/*
* Return a free job structure.
*/
/*
* Return a free job structure.
*/
@@
-799,7
+808,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;
@@
-813,14
+822,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);
@@
-842,7
+855,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;
}
@@
-896,7
+912,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;
@@
-949,7
+972,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;
}
@@
-1058,6
+1081,9
@@
static void usage(const char *name)
" (def 1024)\n");
printf("\t--warnings-fatal Fio parser warnings are fatal\n");
printf("\t--max-jobs\tMaximum number of threads/processes to support\n");
" (def 1024)\n");
printf("\t--warnings-fatal Fio parser warnings are fatal\n");
printf("\t--max-jobs\tMaximum number of threads/processes to support\n");
+ printf("\t--server\tStart a backend fio server\n");
+ printf("\t--client=hostname Talk to remove backend fio server at hostname\n");
+ printf("\t--net-port=port\tUse specified port for client/server connection\n");
printf("\nFio was written by Jens Axboe <jens.axboe@oracle.com>");
printf("\n Jens Axboe <jaxboe@fusionio.com>\n");
}
printf("\nFio was written by Jens Axboe <jens.axboe@oracle.com>");
printf("\n Jens Axboe <jaxboe@fusionio.com>\n");
}
@@
-1282,6
+1308,28
@@
static int parse_cmd_line(int argc, char *argv[])
exit_val = 1;
}
break;
exit_val = 1;
}
break;
+ case 'S':
+ if (is_client) {
+ log_err("fio: can't be both client and server\n");
+ do_exit++;
+ exit_val = 1;
+ break;
+ }
+ is_backend = 1;
+ break;
+ case 'P':
+ fio_net_port = atoi(optarg);
+ break;
+ case 'C':
+ if (is_backend) {
+ log_err("fio: can't be both client and server\n");
+ do_exit++;
+ exit_val = 1;
+ break;
+ }
+ is_client = 1;
+ client = strdup(optarg);
+ break;
default:
do_exit++;
exit_val = 1;
default:
do_exit++;
exit_val = 1;
@@
-1292,6
+1340,15
@@
static int parse_cmd_line(int argc, char *argv[])
if (do_exit)
exit(exit_val);
if (do_exit)
exit(exit_val);
+ if (is_client && fio_client_connect(client)) {
+ do_exit++;
+ exit_val = 1;
+ return 1;
+ }
+
+ 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);
@@
-1327,8
+1384,13
@@
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))
- return 1;
+ if (is_client) {
+ if (fio_client_send_ini(ini_file[i]))
+ return 1;
+ } else {
+ if (parse_jobs_ini(ini_file[i], 0, i))
+ return 1;
+ }
free(ini_file[i]);
}
free(ini_file[i]);
}
@@
-1340,6
+1402,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 || is_client)
+ return 0;
log_err("No jobs(s) defined\n\n");
usage(argv[0]);
log_err("No jobs(s) defined\n\n");
usage(argv[0]);