Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
darshan
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
72
Issues
72
List
Boards
Labels
Milestones
Merge Requests
5
Merge Requests
5
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
darshan
darshan
Commits
6af7ad39
Commit
6af7ad39
authored
Mar 31, 2015
by
Shane Snyder
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more posix wrappers: sync*, seek*, & stream ops
parent
dc00384c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
352 additions
and
31 deletions
+352
-31
darshan-posix-log-format.h
darshan-posix-log-format.h
+28
-30
darshan-runtime/darshan-posix-ld-opts
darshan-runtime/darshan-posix-ld-opts
+10
-0
darshan-runtime/lib/darshan-posix.c
darshan-runtime/lib/darshan-posix.c
+306
-1
darshan-util/darshan-posix-parser.c
darshan-util/darshan-posix-parser.c
+8
-0
No files found.
darshan-posix-log-format.h
View file @
6af7ad39
...
...
@@ -14,40 +14,38 @@ enum darshan_posix_indices
POSIX_OPENS
,
/* count of posix opens */
POSIX_READS
,
/* count of posix reads */
POSIX_WRITES
,
/* count of posix writes */
#if 0
POSIX_SEEKS
,
/* count of posix seeks */
#if 0
POSIX_STATS, /* count of posix stat/lstat/fstats */
POSIX_MMAPS, /* count of posix mmaps */
#endif
POSIX_FOPENS
,
POSIX_FREADS
,
POSIX_FWRITES
,
#if 0
POSIX_FSEEKS,
POSIX_FSYNCS,
POSIX_FDSYNCS,
#endif
POSIX_MODE
,
/* mode of file */
POSIX_BYTES_READ
,
/* total bytes read */
POSIX_BYTES_WRITTEN
,
/* total bytes written */
POSIX_MAX_BYTE_READ
,
/* highest offset byte read */
POSIX_MAX_BYTE_WRITTEN
,
/* highest offset byte written */
POSIX_CONSEC_READS
,
/* count of consecutive reads */
POSIX_CONSEC_WRITES
,
/* count of consecutive writes */
POSIX_SEQ_READS
,
/* count of sequential reads */
POSIX_SEQ_WRITES
,
/* count of sequential writes */
POSIX_RW_SWITCHES
,
/* number of times switched between read and write */
POSIX_FOPENS
,
/* count of posix fopens */
POSIX_FREADS
,
/* count of posix freads */
POSIX_FWRITES
,
/* count of posix fwrites */
POSIX_FSEEKS
,
/* count of posix fseeks */
POSIX_FSYNCS
,
/* count of posix fsyncs */
POSIX_FDSYNCS
,
/* count of posix fdatasyncs */
POSIX_MODE
,
/* mode of file */
POSIX_BYTES_READ
,
/* total bytes read */
POSIX_BYTES_WRITTEN
,
/* total bytes written */
POSIX_MAX_BYTE_READ
,
/* highest offset byte read */
POSIX_MAX_BYTE_WRITTEN
,
/* highest offset byte written */
POSIX_CONSEC_READS
,
/* count of consecutive reads */
POSIX_CONSEC_WRITES
,
/* count of consecutive writes */
POSIX_SEQ_READS
,
/* count of sequential reads */
POSIX_SEQ_WRITES
,
/* count of sequential writes */
POSIX_RW_SWITCHES
,
/* number of times switched between read and write */
#if 0
MEM_NOT_ALIGNED,
/* count of accesses not mem aligned */
MEM_ALIGNMENT,
/* mem alignment in bytes */
FILE_NOT_ALIGNED,
/* count of accesses not file aligned */
FILE_ALIGNMENT,
/* file alignment in bytes */
MEM_NOT_ALIGNED, /* count of accesses not mem aligned */
MEM_ALIGNMENT, /* mem alignment in bytes */
FILE_NOT_ALIGNED, /* count of accesses not file aligned */
FILE_ALIGNMENT, /* file alignment in bytes */
#endif
POSIX_MAX_READ_TIME_SIZE
,
POSIX_MAX_WRITE_TIME_SIZE
,
#if 0
/* buckets */
SIZE_READ_0_100,
/* count of posix read size ranges */
SIZE_READ_0_100, /* count of posix read size ranges */
SIZE_READ_100_1K,
SIZE_READ_1K_10K,
SIZE_READ_10K_100K,
...
...
@@ -58,7 +56,7 @@ enum darshan_posix_indices
SIZE_READ_100M_1G,
SIZE_READ_1G_PLUS,
/* buckets */
SIZE_WRITE_0_100,
/* count of posix write size ranges */
SIZE_WRITE_0_100, /* count of posix write size ranges */
SIZE_WRITE_100_1K,
SIZE_WRITE_1K_10K,
SIZE_WRITE_10K_100K,
...
...
@@ -69,23 +67,23 @@ enum darshan_posix_indices
SIZE_WRITE_100M_1G,
SIZE_WRITE_1G_PLUS,
/* counters */
STRIDE1_STRIDE,
/* the four most frequently appearing strides */
STRIDE1_STRIDE, /* the four most frequently appearing strides */
STRIDE2_STRIDE,
STRIDE3_STRIDE,
STRIDE4_STRIDE,
STRIDE1_COUNT,
/* count of each of the most frequent strides */
STRIDE1_COUNT, /* count of each of the most frequent strides */
STRIDE2_COUNT,
STRIDE3_COUNT,
STRIDE4_COUNT,
ACCESS1_ACCESS,
/* the four most frequently appearing access sizes */
ACCESS1_ACCESS, /* the four most frequently appearing access sizes */
ACCESS2_ACCESS,
ACCESS3_ACCESS,
ACCESS4_ACCESS,
ACCESS1_COUNT,
/* count of each of the most frequent access sizes */
ACCESS1_COUNT, /* count of each of the most frequent access sizes */
ACCESS2_COUNT,
ACCESS3_COUNT,
ACCESS4_COUNT,
DEVICE,
/* device id reported by stat */
DEVICE, /* device id reported by stat */
SIZE_AT_OPEN,
FASTEST_RANK,
FASTEST_RANK_BYTES,
...
...
darshan-runtime/darshan-posix-ld-opts
View file @
6af7ad39
...
...
@@ -2,6 +2,8 @@
--wrap=open64
--wrap=creat
--wrap=creat64
--wrap=fopen
--wrap=fopen64
--wrap=read
--wrap=write
--wrap=pread
...
...
@@ -10,4 +12,12 @@
--wrap=pwrite64
--wrap=readv
--wrap=writev
--wrap=fread
--wrap=fwrite
--wrap=lseek
--wrap=lseek64
--wrap=fseek
--wrap=fsync
--wrap=fdatasync
--wrap=close
--wrap=fclose
darshan-runtime/lib/darshan-posix.c
View file @
6af7ad39
...
...
@@ -41,6 +41,8 @@ DARSHAN_FORWARD_DECL(open, int, (const char *path, int flags, ...));
DARSHAN_FORWARD_DECL
(
open64
,
int
,
(
const
char
*
path
,
int
flags
,
...));
DARSHAN_FORWARD_DECL
(
creat
,
int
,
(
const
char
*
path
,
mode_t
mode
));
DARSHAN_FORWARD_DECL
(
creat64
,
int
,
(
const
char
*
path
,
mode_t
mode
));
DARSHAN_FORWARD_DECL
(
fopen
,
FILE
*
,
(
const
char
*
path
,
const
char
*
mode
));
DARSHAN_FORWARD_DECL
(
fopen64
,
FILE
*
,
(
const
char
*
path
,
const
char
*
mode
));
DARSHAN_FORWARD_DECL
(
read
,
ssize_t
,
(
int
fd
,
void
*
buf
,
size_t
count
));
DARSHAN_FORWARD_DECL
(
write
,
ssize_t
,
(
int
fd
,
const
void
*
buf
,
size_t
count
));
DARSHAN_FORWARD_DECL
(
pread
,
ssize_t
,
(
int
fd
,
void
*
buf
,
size_t
count
,
off_t
offset
));
...
...
@@ -49,7 +51,17 @@ DARSHAN_FORWARD_DECL(pread64, ssize_t, (int fd, void *buf, size_t count, off64_t
DARSHAN_FORWARD_DECL
(
pwrite64
,
ssize_t
,
(
int
fd
,
const
void
*
buf
,
size_t
count
,
off64_t
offset
));
DARSHAN_FORWARD_DECL
(
readv
,
ssize_t
,
(
int
fd
,
const
struct
iovec
*
iov
,
int
iovcnt
));
DARSHAN_FORWARD_DECL
(
writev
,
ssize_t
,
(
int
fd
,
const
struct
iovec
*
iov
,
int
iovcnt
));
DARSHAN_FORWARD_DECL
(
fread
,
size_t
,
(
void
*
ptr
,
size_t
size
,
size_t
nmemb
,
FILE
*
stream
));
DARSHAN_FORWARD_DECL
(
fwrite
,
size_t
,
(
const
void
*
ptr
,
size_t
size
,
size_t
nmemb
,
FILE
*
stream
));
DARSHAN_FORWARD_DECL
(
lseek
,
off_t
,
(
int
fd
,
off_t
offset
,
int
whence
));
DARSHAN_FORWARD_DECL
(
lseek64
,
off64_t
,
(
int
fd
,
off64_t
offset
,
int
whence
));
DARSHAN_FORWARD_DECL
(
fseek
,
int
,
(
FILE
*
stream
,
long
offset
,
int
whence
));
/* stats */
/* mmaps */
DARSHAN_FORWARD_DECL
(
fsync
,
int
,
(
int
fd
));
DARSHAN_FORWARD_DECL
(
fdatasync
,
int
,
(
int
fd
));
DARSHAN_FORWARD_DECL
(
close
,
int
,
(
int
fd
));
DARSHAN_FORWARD_DECL
(
fclose
,
int
,
(
FILE
*
fp
));
static
void
posix_runtime_initialize
(
void
);
static
struct
posix_file_runtime
*
posix_file_by_name
(
const
char
*
name
);
...
...
@@ -373,6 +385,56 @@ int DARSHAN_DECL(creat64)(const char* path, mode_t mode)
return
(
ret
);
}
FILE
*
DARSHAN_DECL
(
fopen
)(
const
char
*
path
,
const
char
*
mode
)
{
FILE
*
ret
;
int
fd
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fopen
);
tm1
=
darshan_core_wtime
();
ret
=
__real_fopen
(
path
,
mode
);
tm2
=
darshan_core_wtime
();
if
(
ret
==
NULL
)
fd
=
-
1
;
else
fd
=
fileno
(
ret
);
POSIX_LOCK
();
posix_runtime_initialize
();
POSIX_RECORD_OPEN
(
fd
,
path
,
0
,
1
,
tm1
,
tm2
);
POSIX_UNLOCK
();
return
(
ret
);
}
FILE
*
DARSHAN_DECL
(
fopen64
)(
const
char
*
path
,
const
char
*
mode
)
{
FILE
*
ret
;
int
fd
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fopen64
);
tm1
=
darshan_core_wtime
();
ret
=
__real_fopen64
(
path
,
mode
);
tm2
=
darshan_core_wtime
();
if
(
ret
==
NULL
)
fd
=
-
1
;
else
fd
=
fileno
(
ret
);
POSIX_LOCK
();
posix_runtime_initialize
();
POSIX_RECORD_OPEN
(
fd
,
path
,
0
,
1
,
tm1
,
tm2
);
POSIX_UNLOCK
();
return
(
ret
);
}
ssize_t
DARSHAN_DECL
(
read
)(
int
fd
,
void
*
buf
,
size_t
count
)
{
ssize_t
ret
;
...
...
@@ -526,6 +588,7 @@ ssize_t DARSHAN_DECL(readv)(int fd, const struct iovec *iov, int iovcnt)
tm2
=
darshan_core_wtime
();
POSIX_LOCK
();
posix_runtime_initialize
();
POSIX_RECORD_READ
(
ret
,
fd
,
0
,
0
,
aligned_flag
,
0
,
tm1
,
tm2
);
POSIX_UNLOCK
();
...
...
@@ -553,12 +616,223 @@ ssize_t DARSHAN_DECL(writev)(int fd, const struct iovec *iov, int iovcnt)
tm2
=
darshan_core_wtime
();
POSIX_LOCK
();
posix_runtime_initialize
();
POSIX_RECORD_WRITE
(
ret
,
fd
,
0
,
0
,
aligned_flag
,
0
,
tm1
,
tm2
);
POSIX_UNLOCK
();
return
(
ret
);
}
size_t
DARSHAN_DECL
(
fread
)(
void
*
ptr
,
size_t
size
,
size_t
nmemb
,
FILE
*
stream
)
{
size_t
ret
;
int
aligned_flag
=
0
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fread
);
/* if((unsigned long)ptr % darshan_mem_alignment == 0) aligned_flag = 1; */
tm1
=
darshan_core_wtime
();
ret
=
__real_fread
(
ptr
,
size
,
nmemb
,
stream
);
tm2
=
darshan_core_wtime
();
POSIX_LOCK
();
posix_runtime_initialize
();
if
(
ret
>
0
)
{
POSIX_RECORD_READ
(
size
*
ret
,
fileno
(
stream
),
0
,
0
,
aligned_flag
,
1
,
tm1
,
tm2
);
}
else
{
POSIX_RECORD_READ
(
ret
,
fileno
(
stream
),
0
,
0
,
aligned_flag
,
1
,
tm1
,
tm2
);
}
POSIX_UNLOCK
();
return
(
ret
);
}
size_t
DARSHAN_DECL
(
fwrite
)(
const
void
*
ptr
,
size_t
size
,
size_t
nmemb
,
FILE
*
stream
)
{
size_t
ret
;
int
aligned_flag
=
0
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fwrite
);
/* if((unsigned long)ptr % darshan_mem_alignment == 0) aligned_flag = 1; */
tm1
=
darshan_core_wtime
();
ret
=
__real_fwrite
(
ptr
,
size
,
nmemb
,
stream
);
tm2
=
darshan_core_wtime
();
POSIX_LOCK
();
posix_runtime_initialize
();
if
(
ret
>
0
)
{
POSIX_RECORD_WRITE
(
size
*
ret
,
fileno
(
stream
),
0
,
0
,
aligned_flag
,
1
,
tm1
,
tm2
);
}
else
{
POSIX_RECORD_WRITE
(
ret
,
fileno
(
stream
),
0
,
0
,
aligned_flag
,
1
,
tm1
,
tm2
);
}
POSIX_UNLOCK
();
return
(
ret
);
}
off_t
DARSHAN_DECL
(
lseek
)(
int
fd
,
off_t
offset
,
int
whence
)
{
off_t
ret
;
struct
posix_file_runtime
*
file
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
lseek
);
tm1
=
darshan_core_wtime
();
ret
=
__real_lseek
(
fd
,
offset
,
whence
);
tm2
=
darshan_core_wtime
();
if
(
ret
>=
0
)
{
POSIX_LOCK
();
posix_runtime_initialize
();
file
=
posix_file_by_fd
(
fd
);
if
(
file
)
{
file
->
offset
=
ret
;
DARSHAN_COUNTER_F_INC_NO_OVERLAP
(
file
->
file_record
,
tm1
,
tm2
,
file
->
last_meta_end
,
POSIX_F_META_TIME
);
DARSHAN_COUNTER_INC
(
file
->
file_record
,
POSIX_SEEKS
,
1
);
}
POSIX_UNLOCK
();
}
return
(
ret
);
}
off_t
DARSHAN_DECL
(
lseek64
)(
int
fd
,
off_t
offset
,
int
whence
)
{
off_t
ret
;
struct
posix_file_runtime
*
file
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
lseek64
);
tm1
=
darshan_core_wtime
();
ret
=
__real_lseek64
(
fd
,
offset
,
whence
);
tm2
=
darshan_core_wtime
();
if
(
ret
>=
0
)
{
POSIX_LOCK
();
posix_runtime_initialize
();
file
=
posix_file_by_fd
(
fd
);
if
(
file
)
{
file
->
offset
=
ret
;
DARSHAN_COUNTER_F_INC_NO_OVERLAP
(
file
->
file_record
,
tm1
,
tm2
,
file
->
last_meta_end
,
POSIX_F_META_TIME
);
DARSHAN_COUNTER_INC
(
file
->
file_record
,
POSIX_SEEKS
,
1
);
}
POSIX_UNLOCK
();
}
return
(
ret
);
}
int
DARSHAN_DECL
(
fseek
)(
FILE
*
stream
,
long
offset
,
int
whence
)
{
int
ret
;
struct
posix_file_runtime
*
file
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fseek
);
tm1
=
darshan_core_wtime
();
ret
=
__real_fseek
(
stream
,
offset
,
whence
);
tm2
=
darshan_core_wtime
();
if
(
ret
>=
0
)
{
POSIX_LOCK
();
posix_runtime_initialize
();
file
=
posix_file_by_fd
(
fileno
(
stream
));
if
(
file
)
{
file
->
offset
=
ftell
(
stream
);
/* TODO: this seems wrong. ftell? */
DARSHAN_COUNTER_F_INC_NO_OVERLAP
(
file
->
file_record
,
tm1
,
tm2
,
file
->
last_meta_end
,
POSIX_F_META_TIME
);
DARSHAN_COUNTER_INC
(
file
->
file_record
,
POSIX_FSEEKS
,
1
);
}
POSIX_UNLOCK
();
}
return
(
ret
);
}
int
DARSHAN_DECL
(
fsync
)(
int
fd
)
{
int
ret
;
struct
posix_file_runtime
*
file
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fsync
);
tm1
=
darshan_core_wtime
();
ret
=
__real_fsync
(
fd
);
tm2
=
darshan_core_wtime
();
if
(
ret
<
0
)
return
(
ret
);
POSIX_LOCK
();
posix_runtime_initialize
();
file
=
posix_file_by_fd
(
fd
);
if
(
file
)
{
DARSHAN_COUNTER_F_INC_NO_OVERLAP
(
file
->
file_record
,
tm1
,
tm2
,
file
->
last_write_end
,
POSIX_F_WRITE_TIME
);
DARSHAN_COUNTER_INC
(
file
->
file_record
,
POSIX_FSYNCS
,
1
);
}
POSIX_UNLOCK
();
return
(
ret
);
}
int
DARSHAN_DECL
(
fdatasync
)(
int
fd
)
{
int
ret
;
struct
posix_file_runtime
*
file
;
double
tm1
,
tm2
;
MAP_OR_FAIL
(
fdatasync
);
tm1
=
darshan_core_wtime
();
ret
=
__real_fdatasync
(
fd
);
tm2
=
darshan_core_wtime
();
if
(
ret
<
0
)
return
(
ret
);
POSIX_LOCK
();
posix_runtime_initialize
();
file
=
posix_file_by_fd
(
fd
);
if
(
file
)
{
DARSHAN_COUNTER_F_INC_NO_OVERLAP
(
file
->
file_record
,
tm1
,
tm2
,
file
->
last_write_end
,
POSIX_F_WRITE_TIME
);
DARSHAN_COUNTER_INC
(
file
->
file_record
,
POSIX_FDSYNCS
,
1
);
}
POSIX_UNLOCK
();
return
(
ret
);
}
int
DARSHAN_DECL
(
close
)(
int
fd
)
{
struct
posix_file_runtime
*
file
;
...
...
@@ -589,6 +863,37 @@ int DARSHAN_DECL(close)(int fd)
return
(
ret
);
}
int
DARSHAN_DECL
(
fclose
)(
FILE
*
fp
)
{
struct
posix_file_runtime
*
file
;
int
fd
=
fileno
(
fp
);
double
tm1
,
tm2
;
int
ret
;
MAP_OR_FAIL
(
fclose
);
tm1
=
darshan_core_wtime
();
ret
=
__real_fclose
(
fp
);
tm2
=
darshan_core_wtime
();
POSIX_LOCK
();
posix_runtime_initialize
();
file
=
posix_file_by_fd
(
fd
);
if
(
file
)
{
file
->
last_byte_written
=
0
;
file
->
last_byte_read
=
0
;
DARSHAN_COUNTER_F_SET
(
file
->
file_record
,
POSIX_F_CLOSE_TIMESTAMP
,
darshan_core_wtime
());
DARSHAN_COUNTER_F_INC_NO_OVERLAP
(
file
->
file_record
,
tm1
,
tm2
,
file
->
last_meta_end
,
POSIX_F_META_TIME
);
posix_file_close_fd
(
fd
);
}
POSIX_UNLOCK
();
return
(
ret
);
}
/**********************************************************
* Internal functions for manipulating POSIX module state *
**********************************************************/
...
...
@@ -883,7 +1188,7 @@ static void posix_record_reduction_op(
tmp_file
.
rank
=
-
1
;
/* sum */
for
(
j
=
POSIX_OPENS
;
j
<=
POSIX_F
WRITE
S
;
j
++
)
for
(
j
=
POSIX_OPENS
;
j
<=
POSIX_F
DSYNC
S
;
j
++
)
{
tmp_file
.
counters
[
j
]
=
infile
->
counters
[
j
]
+
inoutfile
->
counters
[
j
];
}
...
...
darshan-util/darshan-posix-parser.c
View file @
6af7ad39
...
...
@@ -173,9 +173,13 @@ int main(int argc, char **argv)
"
\t\t
POSIX_OPENS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_READS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_WRITES:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_SEEKS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_FOPENS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_FREADS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_FWRITES:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_FSEEKS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_FSYNCS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_FDSYNCS:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_MODE:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_BYTES_READ:
\t
%"
PRIu64
"
\n
"
"
\t\t
POSIX_BYTES_WRITTEN:
\t
%"
PRIu64
"
\n
"
...
...
@@ -201,9 +205,13 @@ int main(int argc, char **argv)
next_file
.
counters
[
POSIX_OPENS
],
next_file
.
counters
[
POSIX_READS
],
next_file
.
counters
[
POSIX_WRITES
],
next_file
.
counters
[
POSIX_SEEKS
],
next_file
.
counters
[
POSIX_FOPENS
],
next_file
.
counters
[
POSIX_FREADS
],
next_file
.
counters
[
POSIX_FWRITES
],
next_file
.
counters
[
POSIX_FSEEKS
],
next_file
.
counters
[
POSIX_FSYNCS
],
next_file
.
counters
[
POSIX_FDSYNCS
],
next_file
.
counters
[
POSIX_MODE
],
next_file
.
counters
[
POSIX_BYTES_READ
],
next_file
.
counters
[
POSIX_BYTES_WRITTEN
],
...
...
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