Commit 376eefa8 authored by Shane Snyder's avatar Shane Snyder

modify register_record routine used by modules

Now, register_record() accepts an argument for the size of
the record being registered, and this is used to track how much
data each module has stored in their allocated memory region.
parent 523b19e4
......@@ -127,10 +127,10 @@ void darshan_core_unregister_module(
*/
void darshan_core_register_record(
void *name,
int len,
int name_len,
int rec_size,
darshan_module_id mod_id,
int printable_flag,
int mod_limit_flag,
darshan_record_id *rec_id,
int *file_alignment);
......
......@@ -1265,9 +1265,11 @@ void darshan_core_register_module(
return;
}
/* XXX how do we assign size and address */
/* XXX MMAP: how do we assign size and address */
*mod_buf = darshan_core->log_mod_p;
*mod_buf_size = 2*1024*1024;
*mod_buf_size = DARSHAN_MOD_MEM_MAX;
darshan_core->log_hdr_p->mod_map[mod_id].off =
((char *)darshan_core->log_mod_p - (char *)darshan_core->log_hdr_p);
/* this module has not been registered yet, allocate and initialize it */
mod = malloc(sizeof(*mod));
......@@ -1315,12 +1317,13 @@ void darshan_core_unregister_module(
return;
}
/* TODO: maybe a return code to distinguish between id 0 and a failure */
void darshan_core_register_record(
void *name,
int len,
int name_len,
int rec_size,
darshan_module_id mod_id,
int printable_flag,
int mod_limit_flag,
darshan_record_id *rec_id,
int *file_alignment)
{
......@@ -1328,14 +1331,16 @@ void darshan_core_register_record(
struct darshan_core_record_ref *ref;
*rec_id = 0;
*file_alignment = 0;
if(!darshan_core)
return;
/* TODO: what do you do with printable flag? */
/* TODO: what about partial flag? */
/* hash the input name to get a unique id for this record */
tmp_rec_id = darshan_hash(name, len, 0);
tmp_rec_id = darshan_hash(name, name_len, 0);
/* check to see if we've already stored the id->name mapping for this record */
DARSHAN_CORE_LOCK();
......@@ -1345,28 +1350,26 @@ void darshan_core_register_record(
/* record not found -- add it to the hash if this module has not already used
* all of its memory
*/
#if 0
if(mod_limit_flag)
darshan_add_record_hashref(darshan_core, name, tmp_rec_id, &ref);
if(!ref)
{
/* if this module is OOM, set a flag in the header to indicate this */
DARSHAN_MOD_FLAG_SET(darshan_core->log_header.partial_flag, mod_id);
/* just give up and return if adding this record failed */
DARSHAN_CORE_UNLOCK();
return;
}
#endif
darshan_add_record_hashref(darshan_core, name, tmp_rec_id, &ref);
}
if(ref)
if(!DARSHAN_MOD_FLAG_ISSET(ref->mod_flags, mod_id))
{
DARSHAN_MOD_FLAG_SET(ref->mod_flags, mod_id);
darshan_core->log_hdr_p->mod_map[mod_id].len += rec_size;
}
DARSHAN_CORE_UNLOCK();
if(file_alignment)
darshan_block_size_from_path(name, file_alignment);
*rec_id = 0; /* XXX */
*rec_id = tmp_rec_id;
return;
}
......
......@@ -1677,7 +1677,6 @@ static struct posix_file_runtime* posix_file_by_name(const char *name)
char *newname = NULL;
darshan_record_id file_id;
int file_alignment;
int limit_flag;
if(!posix_runtime || instrumentation_disabled)
return(NULL);
......@@ -1686,15 +1685,13 @@ static struct posix_file_runtime* posix_file_by_name(const char *name)
if(!newname)
newname = (char*)name;
limit_flag = (posix_runtime->file_array_ndx >= posix_runtime->file_array_size);
/* get a unique id for this file from darshan core */
darshan_core_register_record(
(void*)newname,
strlen(newname),
sizeof(struct darshan_posix_file),
DARSHAN_POSIX_MOD,
1,
limit_flag,
&file_id,
&file_alignment);
......@@ -2364,7 +2361,7 @@ static void posix_shutdown()
HASH_CLEAR(hlink, posix_runtime->file_hash); /* these entries are freed all at once below */
free(posix_runtime->file_runtime_array);
free(posix_runtime->file_record_array);
/* XXX: MMAP free(posix_runtime->file_record_array); */
free(posix_runtime);
posix_runtime = NULL;
......
......@@ -310,9 +310,9 @@ int main(int argc, char **argv)
}
/* print breakdown of each log file region's contribution to file size */
printf("\n# log file region sizes (compressed)\n");
printf("\n# log file region sizes\n");
printf("# -------------------------------------------------------\n");
printf("# header: %zu bytes (uncompressed)\n", sizeof(struct darshan_header));
printf("# header: %zu bytes\n", sizeof(struct darshan_header));
printf("# job data: %zu bytes\n", fd->job_map.len);
printf("# record table: %zu bytes\n", fd->rec_map.len);
for(i=0; i<DARSHAN_MAX_MODS; i++)
......
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