Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
codes
codes
Commits
33008e39
Commit
33008e39
authored
Feb 17, 2014
by
Shane Snyder
Browse files
Final changes to build/use darshan workload api
parent
b073000d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Makefile.am
View file @
33008e39
...
...
@@ -36,7 +36,7 @@ include $(top_srcdir)/src/Makefile.subdir
include
$(top_srcdir)/tests/Makefile.subdir
if
USE_DARSHAN
AM_CPPFLAGS
+=
${DARSHAN_CFLAGS}
AM_CPPFLAGS
+=
${DARSHAN_CFLAGS}
"-DUSE_DARSHAN=1"
src_libcodes_base_a_SOURCES
+=
src/workload/codes-darshan-io-wrkld.c
tests_workload_codes_workload_test_LDADD
+=
${DARSHAN_LIBS}
tests_workload_codes_workload_mpi_replay_LDADD
+=
${DARSHAN_LIBS}
...
...
src/workload/codes-darshan-io-wrkld.c
View file @
33008e39
...
...
@@ -41,14 +41,6 @@ struct rank_io_context
struct
qhash_head
hash_link
;
};
struct
darshan_io_dat_array
{
struct
darshan_io_op
*
op_array
;
int64_t
op_arr_ndx
;
int64_t
op_arr_cnt
;
};
/* Darshan workload generator's implementation of the CODES workload API */
static
int
darshan_io_workload_load
(
const
char
*
params
,
int
rank
);
static
void
darshan_io_workload_get_next
(
int
rank
,
struct
codes_workload_op
*
op
);
...
...
@@ -60,6 +52,7 @@ static void darshan_insert_next_io_op(void *io_op_dat, struct darshan_io_op *io_
static
void
darshan_remove_next_io_op
(
void
*
io_op_dat
,
struct
darshan_io_op
*
io_op
,
double
last_op_time
);
static
void
darshan_finalize_io_op_dat
(
void
*
io_op_dat
);
static
void
darshan_print_io_ops
(
void
*
io_op_dat
,
int
rank
,
FILE
*
log_stream
);
static
int
darshan_io_op_compare
(
const
void
*
p1
,
const
void
*
p2
);
/* Helper functions for implementing the (complex, nonfactored) Darshan workload generator */
...
...
@@ -91,12 +84,6 @@ static void calc_io_delays(struct darshan_file *file, int64_t num_opens, int64_t
double
*
inter_open_delay
,
double
*
inter_io_delay
);
static
void
file_sanity_check
(
struct
darshan_file
*
file
,
struct
darshan_job
*
job
);
void
print_events
(
struct
darshan_io_op
*
event_list
,
int64_t
event_list_cnt
,
int
rank
,
FILE
*
log_stream
);
/* workload method name and function pointers for the CODES workload API */
struct
codes_workload_method
darshan_io_workload_method
=
{
...
...
@@ -194,8 +181,11 @@ static int darshan_io_workload_load(const char *params, int rank)
qhash_add
(
rank_tbl
,
&
(
my_ctx
->
my_rank
),
&
(
my_ctx
->
hash_link
));
rank_tbl_pop
++
;
struct
darshan_io_dat_array
*
arr
=
(
struct
darshan_io_dat_array
*
)
my_ctx
->
io_op_dat
;
print_events
(
arr
->
op_array
,
arr
->
op_arr_cnt
,
rank
,
d_params
->
stream
);
/* TODO: do we want this long-term */
if
(
d_params
->
stream
)
{
darshan_print_io_ops
(
my_ctx
->
io_op_dat
,
rank
,
d_params
->
stream
);
}
return
0
;
}
...
...
@@ -269,7 +259,6 @@ static int darshan_rank_hash_compare(
#define DARSHAN_IO_OP_INC_CNT 100000
#if 0
/* dynamically allocated array data structure for storing darshan i/o events */
struct
darshan_io_dat_array
{
...
...
@@ -277,7 +266,6 @@ struct darshan_io_dat_array
int64_t
op_arr_ndx
;
int64_t
op_arr_cnt
;
};
#endif
/* initialize the dynamic array data structure */
static
void
*
darshan_init_io_op_dat
()
...
...
@@ -371,6 +359,75 @@ static void darshan_finalize_io_op_dat(
return
;
}
/* print the events for this rank in order */
void
darshan_print_io_ops
(
void
*
io_op_dat
,
int
rank
,
FILE
*
log_stream
)
{
struct
darshan_io_dat_array
*
io_array
=
(
struct
darshan_io_dat_array
*
)
io_op_dat
;
struct
darshan_io_op
*
event_list
=
io_array
->
op_array
;
int64_t
event_list_cnt
=
io_array
->
op_arr_cnt
;
int64_t
i
;
if
(
!
event_list_cnt
)
return
;
for
(
i
=
0
;
i
<
event_list_cnt
;
i
++
)
{
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_OPEN
)
{
if
(
event_list
[
i
].
codes_op
.
u
.
open
.
create_flag
==
0
)
{
fprintf
(
log_stream
,
"Rank %d OPEN %"
PRIu64
" (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
open
.
file_id
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
{
fprintf
(
log_stream
,
"Rank %d CREATE %"
PRIu64
" (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
open
.
file_id
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_CLOSE
)
{
fprintf
(
log_stream
,
"Rank %d CLOSE %"
PRIu64
" (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
close
.
file_id
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_READ
)
{
fprintf
(
log_stream
,
"Rank %d READ %"
PRIu64
" [sz = %"
PRId64
", off = %"
PRId64
"] (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
read
.
file_id
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
read
.
size
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
read
.
offset
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_WRITE
)
{
fprintf
(
log_stream
,
"Rank %d WRITE %"
PRIu64
" [sz = %"
PRId64
", off = %"
PRId64
"] (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
write
.
file_id
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
write
.
size
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
write
.
offset
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_BARRIER
)
{
fprintf
(
log_stream
,
"****"
);
}
}
return
;
}
/* comparison function for sorting darshan_io_ops in order of start timestamps */
static
int
darshan_io_op_compare
(
const
void
*
p1
,
const
void
*
p2
)
...
...
@@ -1501,74 +1558,6 @@ static void file_sanity_check(
return
;
}
void
print_events
(
struct
darshan_io_op
*
event_list
,
int64_t
event_list_cnt
,
int
rank
,
FILE
*
log_stream
)
{
int64_t
i
;
if
(
!
event_list_cnt
)
return
;
for
(
i
=
0
;
i
<
event_list_cnt
;
i
++
)
{
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_OPEN
)
{
if
(
event_list
[
i
].
codes_op
.
u
.
open
.
create_flag
==
0
)
{
fprintf
(
log_stream
,
"Rank %d OPEN %"
PRIu64
" (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
open
.
file_id
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
{
fprintf
(
log_stream
,
"Rank %d CREATE %"
PRIu64
" (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
open
.
file_id
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_CLOSE
)
{
fprintf
(
log_stream
,
"Rank %d CLOSE %"
PRIu64
" (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
close
.
file_id
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_READ
)
{
fprintf
(
log_stream
,
"Rank %d READ %"
PRIu64
" [sz = %"
PRId64
", off = %"
PRId64
"] (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
read
.
file_id
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
read
.
size
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
read
.
offset
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_WRITE
)
{
fprintf
(
log_stream
,
"Rank %d WRITE %"
PRIu64
" [sz = %"
PRId64
", off = %"
PRId64
"] (%lf - %lf)
\n
"
,
rank
,
event_list
[
i
].
codes_op
.
u
.
write
.
file_id
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
write
.
size
,
(
int64_t
)
event_list
[
i
].
codes_op
.
u
.
write
.
offset
,
event_list
[
i
].
start_time
,
event_list
[
i
].
end_time
);
}
else
if
(
event_list
[
i
].
codes_op
.
op_type
==
CODES_WK_BARRIER
)
{
fprintf
(
log_stream
,
"****"
);
}
}
return
;
}
/*
* Local variables:
* c-indent-level: 4
...
...
tests/workload/codes-workload-mpi-replay.c
View file @
33008e39
...
...
@@ -49,7 +49,7 @@ void usage(char *exename)
{
fprintf
(
stderr
,
"Usage: %s [OPTIONS] --conf <conf_file_path>
\n
"
"--test-dir <workload_test_dir>
\n\n
"
,
exename
);
fprintf
(
stderr
,
"
\t
<conf_file_path> : path to a valid workload configuration file
\n
"
);
fprintf
(
stderr
,
"
\t
<conf_file_path> :
(absolute)
path to a valid workload configuration file
\n
"
);
fprintf
(
stderr
,
"
\t
<workload_test_dir> : the directory to replay the workload I/O in
\n
"
);
fprintf
(
stderr
,
"
\n\t
[OPTIONS] includes:
\n
"
);
fprintf
(
stderr
,
"
\t\t
--noop : do not perform i/o
\n
"
);
...
...
@@ -136,7 +136,12 @@ int load_workload(char *conf_path, int rank)
configuration_get_value
(
&
config
,
"PARAMS"
,
"aggregator_count"
,
aggregator_count
,
10
);
d_params
.
aggregator_cnt
=
atoi
(
aggregator_count
);
d_params
.
stream
=
NULL
;
#if 0
d_params.stream = log_stream;
opt_verbose = 0;
#endif
return
codes_workload_load
(
workload_type
,
(
char
*
)
&
d_params
,
rank
);
}
else
if
(
strcmp
(
workload_type
,
"bgp_io_workload"
)
==
0
)
...
...
@@ -212,29 +217,6 @@ int main(int argc, char *argv[])
goto
error_exit
;
}
#if 0
/* change the working directory to be the test directory */
ret = chdir(replay_test_path);
if (ret < 0)
{
fprintf(stderr, "Unable to change to testing directory (%s)\n", strerror(errno));
goto error_exit;
}
/* set the path for logging this rank's events, if verbose is turned on */
if (opt_verbose)
{
mkdir(log_dir, 0755);
snprintf(my_log_path, MAX_NAME_LENGTH_WKLD, "%s/rank-%d.log", log_dir, myrank);
log_stream = fopen(my_log_path, "w");
if (log_stream == NULL)
{
fprintf(stderr, "Unable to open log file %s\n", my_log_path);
goto error_exit;
}
}
/* initialize hash table for storing file descriptors */
fd_table
=
qhash_init
(
hash_file_compare
,
quickhash_64bit_hash
,
29
);
if
(
!
fd_table
)
...
...
@@ -265,13 +247,12 @@ int main(int argc, char *argv[])
}
}
if (
opt_verbose
)
if
(
log_stream
)
fclose
(
log_stream
);
/* destroy and finalize the file descriptor hash table */
qhash_destroy_and_finalize
(
fd_table
,
struct
file_info
,
hash_link
,
free
);
#endif
error_exit:
MPI_Finalize
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment