Commit 78920873 authored by Shane Snyder's avatar Shane Snyder

Enhancements to codes workload dump utility

parent 8816ef0d
...@@ -8,9 +8,11 @@ ...@@ -8,9 +8,11 @@
#include <getopt.h> #include <getopt.h>
#include <stdio.h> #include <stdio.h>
#include "codes/codes-workload.h" #include "codes/codes-workload.h"
#include <inttypes.h>
static char type[128] = {'\0'}; static char type[128] = {'\0'};
static darshan_params d_params = {NULL, "", 0}; static darshan_params d_params = {NULL, "", 0};
static bgp_params b_params = {0, "", "", "", ""};
static int n = -1; static int n = -1;
static struct option long_opts[] = static struct option long_opts[] =
...@@ -19,6 +21,9 @@ static struct option long_opts[] = ...@@ -19,6 +21,9 @@ static struct option long_opts[] =
{"num-ranks", required_argument, NULL, 'n'}, {"num-ranks", required_argument, NULL, 'n'},
{"d-log", required_argument, NULL, 'l'}, {"d-log", required_argument, NULL, 'l'},
{"d-aggregator-cnt", required_argument, NULL, 'a'}, {"d-aggregator-cnt", required_argument, NULL, 'a'},
{"i-meta", required_argument, NULL, 'm'},
{"i-bgp-config", required_argument, NULL, 'b'},
{"i-rank-cnt", required_argument, NULL, 'r'},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
...@@ -26,16 +31,29 @@ void usage(){ ...@@ -26,16 +31,29 @@ void usage(){
fprintf(stderr, fprintf(stderr,
"Usage: codes-workload-dump --type TYPE --num-ranks N " "Usage: codes-workload-dump --type TYPE --num-ranks N "
"[--d-log LOG --d-aggregator-cnt CNT]\n" "[--d-log LOG --d-aggregator-cnt CNT]\n"
"--type: type of workload (currently only \"darshan_io_workload\")\n" "--type: type of workload (\"darshan_io_workload\" or \"bgp_io_workload\")\n"
"--num-ranks: number of ranks to process\n" "--num-ranks: number of ranks to process\n"
"--d-log: darshan log file\n" "--d-log: darshan log file\n"
"--d-aggregator-cnt: number of aggregators for collective I/O in darshan\n"); "--d-aggregator-cnt: number of aggregators for collective I/O in darshan\n"
"--i-meta: i/o language kernel meta file path\n"
"--i-bgp-config: i/o language bgp config file\n"
"--i-rank-cnt: i/o language rank count\n"
"-s: print final workload stats\n");
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int print_stats = 0;
double total_delay = 0.0;
int64_t num_barriers = 0;
int64_t num_opens = 0;
int64_t num_reads = 0;
int64_t read_size = 0;
int64_t num_writes = 0;
int64_t write_size = 0;
char ch; char ch;
while ((ch = getopt_long(argc, argv, "t:n:l:a:", long_opts, NULL)) != -1){ while ((ch = getopt_long(argc, argv, "t:n:l:a:m:b:r:s", long_opts, NULL)) != -1){
switch (ch){ switch (ch){
case 't': case 't':
strcpy(type, optarg); strcpy(type, optarg);
...@@ -50,6 +68,18 @@ int main(int argc, char *argv[]) ...@@ -50,6 +68,18 @@ int main(int argc, char *argv[])
case 'a': case 'a':
d_params.aggregator_cnt = atol(optarg); d_params.aggregator_cnt = atol(optarg);
break; break;
case 'm':
strcpy(b_params.io_kernel_meta_path, optarg);
break;
case 'b':
strcpy(b_params.bgp_config_file, optarg);
break;
case 'r':
b_params.num_cns = atoi(optarg);
break;
case 's':
print_stats = 1;
break;
} }
} }
...@@ -81,6 +111,26 @@ int main(int argc, char *argv[]) ...@@ -81,6 +111,26 @@ int main(int argc, char *argv[])
wparams = (char*)&d_params; wparams = (char*)&d_params;
} }
} }
else if (strcmp(type, "bgp_io_workload") == 0){
if (b_params.num_cns == 0){
fprintf(stderr, "Expected \"--i-rank-cnt\" argument for bgp io workload\n");
usage();
return 1;
}
else if (b_params.io_kernel_meta_path[0] == '\0'){
fprintf(stderr, "Expected \"--i-meta\" argument for bgp io workload\n");
usage();
return 1;
}
else if (b_params.bgp_config_file[0] == '\0'){
fprintf(stderr, "Expected \"--i-bgp-conf\" argument for bgp io workload\n");
usage();
return 1;
}
else{
wparams = (char *)&b_params;
}
}
else { else {
fprintf(stderr, "Invalid type argument\n"); fprintf(stderr, "Invalid type argument\n");
usage(); usage();
...@@ -94,9 +144,43 @@ int main(int argc, char *argv[]) ...@@ -94,9 +144,43 @@ int main(int argc, char *argv[])
do { do {
codes_workload_get_next(id, i, &op); codes_workload_get_next(id, i, &op);
codes_workload_print_op(stdout, &op, i); codes_workload_print_op(stdout, &op, i);
switch(op.op_type)
{
case CODES_WK_OPEN:
num_opens++;
break;
case CODES_WK_BARRIER:
num_barriers++;
break;
case CODES_WK_DELAY:
total_delay += op.u.delay.seconds;
break;
case CODES_WK_READ:
num_reads++;
read_size += op.u.write.size;
break;
case CODES_WK_WRITE:
num_writes++;
write_size += op.u.write.size;
break;
default:
break;
}
} while (op.op_type != CODES_WK_END); } while (op.op_type != CODES_WK_END);
} }
if (print_stats)
{
fprintf(stderr, "\n* * * * * FINAL STATS * * * * * *\n");
fprintf(stderr, "NUM_OPENS:\t%"PRId64"\n", num_opens);
fprintf(stderr, "NUM_BARRIERS:\t%"PRId64"\n", num_barriers);
fprintf(stderr, "TOTAL_DELAY:\t%.4lf\n", total_delay);
fprintf(stderr, "NUM_READS:\t%"PRId64"\n", num_reads);
fprintf(stderr, "READ_SIZE:\t%"PRId64"\n", read_size);
fprintf(stderr, "NUM_WRITES:\t%"PRId64"\n", num_writes);
fprintf(stderr, "WRITE_SIZE:\t%"PRId64"\n", write_size);
}
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment