.help = "Continue on non-fatal errors during I/O",
.def = "0",
},
+ {
+ .name = "profile",
+ .type = FIO_OPT_STR,
+ .off1 = td_var_offset(profile),
+ .posval = {
+ { .ival = "tiobench",
+ .oval = PROFILE_TIOBENCH,
+ .help = "Perform tiobench like test",
+ },
+ },
+ .help = "Select a specific builtin performance test",
+ },
+ {
+ .name = "cgroup_root",
+ .type = FIO_OPT_STR_STORE,
+ .off1 = td_var_offset(cgroup_root),
+ .help = "Root of mounted blkio cgroup",
+ .def = "/cgroup",
+ },
+ {
+ .name = "cgroup",
+ .type = FIO_OPT_STR_STORE,
+ .off1 = td_var_offset(cgroup),
+ .help = "Add job to cgroup of this name",
+ },
+ {
+ .name = "cgroup_weight",
+ .type = FIO_OPT_INT,
+ .off1 = td_var_offset(cgroup_weight),
+ .help = "Use given weight for cgroup",
+ .minval = 100,
+ .maxval = 1000,
+ .def = "0",
+ },
{
.name = NULL,
},
fio_keywords[2].replace = strdup(buf);
}
+#define BC_APP "bc"
+
+static char *bc_calc(char *str)
+{
+ char *buf, *tmp, opt[80];
+ FILE *f;
+ int ret;
+
+ /*
+ * No math, just return string
+ */
+ if (!strchr(str, '+') && !strchr(str, '-') && !strchr(str, '*') &&
+ !strchr(str, '/'))
+ return str;
+
+ /*
+ * Split option from value, we only need to calculate the value
+ */
+ tmp = strchr(str, '=');
+ if (!tmp)
+ return str;
+
+ tmp++;
+ memset(opt, 0, sizeof(opt));
+ strncpy(opt, str, tmp - str);
+
+ buf = malloc(128);
+
+ sprintf(buf, "which %s > /dev/null", BC_APP);
+ if (system(buf)) {
+ log_err("fio: bc is needed for performing math\n");
+ free(buf);
+ return NULL;
+ }
+
+ sprintf(buf, "echo %s | %s", tmp, BC_APP);
+ f = popen(buf, "r");
+ if (!f) {
+ free(buf);
+ return NULL;
+ }
+
+ ret = fread(buf, 1, 128, f);
+ if (ret <= 0) {
+ free(buf);
+ return NULL;
+ }
+
+ buf[ret - 1] = '\0';
+ strcat(opt, buf);
+ strcpy(buf, opt);
+ pclose(f);
+ free(str);
+ return buf;
+}
+
/*
* Look for reserved variable names and replace them with real values
*/
* replace opt and free the old opt
*/
opt = new;
- free(o_org);
+ //free(o_org);
+
+ /*
+ * Check for potential math and invoke bc, if possible
+ */
+ opt = bc_calc(opt);
}
}