diff options
Diffstat (limited to 'tools/misc/h5stat.c')
-rw-r--r-- | tools/misc/h5stat.c | 860 |
1 files changed, 378 insertions, 482 deletions
diff --git a/tools/misc/h5stat.c b/tools/misc/h5stat.c index d10e2d1..8f29519 100644 --- a/tools/misc/h5stat.c +++ b/tools/misc/h5stat.c @@ -274,33 +274,28 @@ ceil_log10(unsigned long x) * Programmer: Robb Matzke * Thursday, January 21, 1999 * - * Modifications: - * *------------------------------------------------------------------------- */ static void -sym_insert(H5G_stat_t *sb, const char *name) +sym_insert(H5O_info_t *oi, const char *name) { - haddr_t objno; /* Compact form of object's location */ - int n; - /* Don't add it if the link count is 1 because such an object can only * have one name. */ - if (sb->nlink<2) return; + if(oi->rc > 1) { + int n; - /* Extend the table */ - if (idtab_g.nobjs>=idtab_g.nalloc) { - idtab_g.nalloc = MAX(256, 2*idtab_g.nalloc); - idtab_g.obj = realloc(idtab_g.obj, - idtab_g.nalloc*sizeof(idtab_g.obj[0])); - } + /* Extend the table */ + if(idtab_g.nobjs >= idtab_g.nalloc) { + idtab_g.nalloc = MAX(256, 2 * idtab_g.nalloc); + idtab_g.obj = realloc(idtab_g.obj, idtab_g.nalloc * sizeof(idtab_g.obj[0])); + } /* end if */ - /* Insert the entry */ - n = idtab_g.nobjs++; - objno = (haddr_t)sb->objno[0] | ((haddr_t)sb->objno[1] << (8 * sizeof(long))); - idtab_g.obj[n].id = objno; - idtab_g.obj[n].name = strdup(name); -} + /* Insert the entry */ + n = idtab_g.nobjs++; + idtab_g.obj[n].id = oi->addr; + idtab_g.obj[n].name = strdup(name); + } /* end if */ +} /* end sym_insert() */ /*------------------------------------------------------------------------- @@ -320,20 +315,20 @@ sym_insert(H5G_stat_t *sb, const char *name) *------------------------------------------------------------------------- */ static char * -sym_lookup(H5G_stat_t *sb) +sym_lookup(H5O_info_t *oi) { - haddr_t objno; /* Compact form of object's location */ int n; - if (sb->nlink<2) - return NULL; /*only one name possible*/ - objno = (haddr_t)sb->objno[0] | ((haddr_t)sb->objno[1] << (8 * sizeof(long))); - for (n=0; n<idtab_g.nobjs; n++) { - if (idtab_g.obj[n].id==objno) + /*only one name possible*/ + if(oi->rc < 2) + return NULL; + + for(n = 0; n < idtab_g.nobjs; n++) + if(idtab_g.obj[n].id == oi->addr) return idtab_g.obj[n].name; - } + return NULL; -} +} /* end sym_lookup() */ /*------------------------------------------------------------------------- @@ -384,6 +379,57 @@ fix_name(const char *path, const char *base) s[len] = '\0'; return s; } + + +/*------------------------------------------------------------------------- + * Function: attribute_stats + * + * Purpose: Gather statistics about attributes on an object + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Quincey Koziol + * Tuesday, July 17, 2007 + * + *------------------------------------------------------------------------- + */ +static herr_t +attribute_stats(iter_t *iter, const H5O_info_t *oi) +{ + unsigned bin; /* "bin" the number of objects falls in */ + + /* Update dataset & attribute metadata info */ + iter->attrs_btree_storage_size += oi->meta_size.attr.index_size; + iter->attrs_heap_storage_size += oi->meta_size.attr.heap_size; + + /* Update small # of attribute count & limits */ + if(oi->num_attrs < SIZE_SMALL_ATTRS) + (iter->num_small_attrs[(size_t)oi->num_attrs])++; + if(oi->num_attrs > iter->max_attrs) + iter->max_attrs = oi->num_attrs; + + /* Add attribute count to proper bin */ + bin = ceil_log10((unsigned long)oi->num_attrs); + if((bin + 1) > iter->attr_nbins) { + iter->attr_bins = realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long)); + assert(iter->attr_bins); + + /* Initialize counts for intermediate bins */ + while(iter->attr_nbins < bin) + iter->attr_bins[iter->attr_nbins++] = 0; + iter->attr_nbins++; + + /* Initialize count for new bin */ + iter->attr_bins[bin] = 1; + } /* end if */ + else + (iter->attr_bins[bin])++; + + return 0; +} /* end attribute_stats() */ + /*------------------------------------------------------------------------- * Function: group_stats @@ -412,19 +458,14 @@ fix_name(const char *path, const char *base) *------------------------------------------------------------------------- */ static herr_t -group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t * _sb, H5G_iterate_t _walk, iter_t *_iter) +group_stats(hid_t group, const char *name, const char *fullname, + const H5O_info_t *oi, H5G_iterate_t walk, iter_t *iter) { hid_t gid; /* Group ID */ const char *last_container; hsize_t num_objs; unsigned bin; /* "bin" the number of objects falls in */ - iter_t *iter = (iter_t*)_iter; - H5G_stat_t *sb = _sb; - H5G_iterate_t walk = _walk; herr_t ret; - hsize_t num_attrs=0; - unsigned attr_bin; - H5O_info_t oinfo; /* Gather statistics about this type of object */ iter->uniq_groups++; @@ -432,23 +473,26 @@ group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t * iter->max_depth = iter->curr_depth; /* Get object header information */ - iter->group_ohdr_info.total_size += sb->ohdr.size; - iter->group_ohdr_info.free_size += sb->ohdr.free; + iter->group_ohdr_info.total_size += oi->hdr.space.total; + iter->group_ohdr_info.free_size += oi->hdr.space.free; gid = H5Gopen(group, name); assert(gid > 0); - H5Gget_num_objs(gid, &num_objs); + /* Get number of links in this group */ + ret = H5Gget_num_objs(gid, &num_objs); + assert(ret >= 0); + /* Update link stats */ if(num_objs < SIZE_SMALL_GROUPS) (iter->num_small_groups[(size_t)num_objs])++; if(num_objs > iter->max_fanout) iter->max_fanout = num_objs; /* Add group count to proper bin */ - bin = ceil_log10((unsigned long)num_objs); - if((bin + 1) > iter->group_nbins) { - /* Allocate more storage for info about dataset's datatype */ + bin = ceil_log10((unsigned long)num_objs); + if((bin + 1) > iter->group_nbins) { + /* Allocate more storage for info about dataset's datatype */ iter->group_bins = realloc(iter->group_bins, (bin + 1) * sizeof(unsigned long)); assert(iter->group_bins); @@ -459,64 +503,42 @@ group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t * /* Initialize count for new bin */ iter->group_bins[bin] = 1; - } /* end if */ - else { - (iter->group_bins[bin])++; - } /* end else */ - - ret = H5Oget_info(gid, ".", &oinfo, H5P_DEFAULT); - if (ret < 0) { - warn_msg(progname, "Unable to retrieve object info for \"%s\"\n", name); - } else { - num_attrs = oinfo.num_attrs; - iter->groups_btree_storage_size += oinfo.meta_size.obj.index_size; - iter->groups_heap_storage_size += oinfo.meta_size.obj.heap_size; - iter->attrs_btree_storage_size += oinfo.meta_size.attr.index_size; - iter->attrs_heap_storage_size += oinfo.meta_size.attr.heap_size; - } - - if(num_attrs < SIZE_SMALL_ATTRS) - (iter->num_small_attrs[(size_t)num_attrs])++; - if(num_attrs > iter->max_attrs) - iter->max_attrs = num_attrs; - - /* Add attribute count to proper bin */ - attr_bin = ceil_log10((unsigned long)num_attrs); - if((attr_bin + 1) > iter->attr_nbins) { - iter->attr_bins = realloc(iter->attr_bins, (attr_bin + 1) * sizeof(unsigned long)); - assert(iter->attr_bins); + } /* end if */ + else + (iter->group_bins[bin])++; - /* Initialize counts for intermediate bins */ - while(iter->attr_nbins < attr_bin) - iter->attr_bins[iter->attr_nbins++] = 0; - iter->attr_nbins++; + /* Update group metadata info */ + iter->groups_btree_storage_size += oi->meta_size.obj.index_size; + iter->groups_heap_storage_size += oi->meta_size.obj.heap_size; - /* Initialize count for new bin */ - iter->attr_bins[attr_bin] = 1; - } /* end if */ - else { - (iter->attr_bins[attr_bin])++; - } /* end else */ + /* Update attribute metadata info */ + ret = attribute_stats(iter, oi); + assert(ret >= 0); + /* Close current group */ ret = H5Gclose(gid); assert(ret >= 0); + /* Update current container info */ last_container = iter->container; iter->container = fullname; iter->curr_depth++; + /* Recursively descend into current group's objects */ H5Giterate(group, name, NULL, walk, iter); + /* Revert current container info */ iter->container = last_container; iter->curr_depth--; return 0; -} +} /* end group_stats() */ + /*------------------------------------------------------------------------- * Function: dataset_stats * - * Purpose: Gather statistics about the datset + * Purpose: Gather statistics about the dataset * * Return: Success: 0 * @@ -540,12 +562,9 @@ group_stats (hid_t group, const char *name, const char * fullname, H5G_stat_t * *------------------------------------------------------------------------- */ static herr_t -dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) +dataset_stats(hid_t group, const char *name, const H5O_info_t *oi, iter_t *iter) { unsigned bin; /* "bin" the number of objects falls in */ - iter_t *iter = (iter_t*)_iter; - H5G_stat_t *sb = _sb; - herr_t ret; hid_t did; /* Dataset ID */ hid_t sid; /* Dataspace ID */ hid_t tid; /* Datatype ID */ @@ -560,53 +579,24 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) int num_ext; /* Number of external files for a dataset */ int nfltr; /* Number of filters for a dataset */ H5Z_filter_t fltr; /* Filter identifier */ - - hsize_t num_attrs = 0; - unsigned attr_bin; - H5O_info_t oinfo; + herr_t ret; /* Gather statistics about this type of object */ iter->uniq_dsets++; /* Get object header information */ - iter->dset_ohdr_info.total_size += sb->ohdr.size; - iter->dset_ohdr_info.free_size += sb->ohdr.free; + iter->dset_ohdr_info.total_size += oi->hdr.space.total; + iter->dset_ohdr_info.free_size += oi->hdr.space.free; did = H5Dopen(group, name); assert(did > 0); - ret = H5Oget_info(did, ".", &oinfo, H5P_DEFAULT); - if (ret < 0) { - warn_msg(progname, "Unable to retrieve object info for \"%s\"\n", name); - } else { - num_attrs = oinfo.num_attrs; - iter->datasets_btree_storage_size += oinfo.meta_size.obj.index_size; - iter->attrs_btree_storage_size += oinfo.meta_size.attr.index_size; - iter->attrs_heap_storage_size += oinfo.meta_size.attr.heap_size; - } - - if(num_attrs < SIZE_SMALL_ATTRS) - (iter->num_small_attrs[(size_t)num_attrs])++; - if(num_attrs > iter->max_attrs) - iter->max_attrs = num_attrs; - - /* Add attribute count to proper bin */ - attr_bin = ceil_log10((unsigned long)num_attrs); - if((attr_bin + 1) > iter->attr_nbins) { - iter->attr_bins = realloc(iter->attr_bins, (attr_bin + 1) * sizeof(unsigned long)); - assert(iter->attr_bins); - - /* Initialize counts for intermediate bins */ - while(iter->attr_nbins < attr_bin) - iter->attr_bins[iter->attr_nbins++] = 0; - iter->attr_nbins++; + /* Update dataset metadata info */ + iter->datasets_btree_storage_size += oi->meta_size.obj.index_size; - /* Initialize count for new bin */ - iter->attr_bins[attr_bin] = 1; - } /* end if */ - else { - (iter->attr_bins[attr_bin])++; - } /* end else */ + /* Update attribute metadata info */ + ret = attribute_stats(iter, oi); + assert(ret >= 0); /* Get storage info */ storage = H5Dget_storage_size(did); @@ -628,7 +618,7 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) /* Only gather dim size statistics on 1-D datasets */ if(ndims == 1) { - iter->max_dset_dims = dims[0]; + iter->max_dset_dims = dims[0]; if(dims[0] < SIZE_SMALL_DSETS) (iter->small_dset_dims[(size_t)dims[0]])++; @@ -647,9 +637,8 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) /* Initialize count for this bin */ iter->dset_dim_bins[bin] = 1; } /* end if */ - else { + else (iter->dset_dim_bins[bin])++; - } /* end else */ } /* end if */ ret = H5Sclose(sid); @@ -665,9 +654,8 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) type_found = TRUE; break; } /* end for */ - if(type_found) { + if(type_found) (iter->dset_type_info[u].count)++; - } /* end if */ else { unsigned curr_ntype = iter->dset_ntypes; @@ -686,48 +674,47 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) /* Set index for later */ u = curr_ntype; - } /* end else */ + } /* end else */ - /* Check if the datatype is a named datatype */ - if(H5Tcommitted(tid) > 0) - (iter->dset_type_info[u].named)++; + /* Check if the datatype is a named datatype */ + if(H5Tcommitted(tid) > 0) + (iter->dset_type_info[u].named)++; - ret = H5Tclose(tid); - assert(ret >= 0); + ret = H5Tclose(tid); + assert(ret >= 0); - /* Gather layout statistics */ - dcpl = H5Dget_create_plist(did); - assert(dcpl > 0); + /* Gather layout statistics */ + dcpl = H5Dget_create_plist(did); + assert(dcpl > 0); - lout = H5Pget_layout(dcpl); - assert(lout >= 0); + lout = H5Pget_layout(dcpl); + assert(lout >= 0); - /* Track the layout type for dataset */ - (iter->dset_layouts[lout])++; + /* Track the layout type for dataset */ + (iter->dset_layouts[lout])++; - num_ext = H5Pget_external_count(dcpl); - assert (num_ext >= 0); + num_ext = H5Pget_external_count(dcpl); + assert (num_ext >= 0); - if(num_ext) iter->nexternal = iter->nexternal + num_ext; + if(num_ext) + iter->nexternal = iter->nexternal + num_ext; /* Track different filters */ - - if ((nfltr=H5Pget_nfilters(dcpl)) >= 0) { - - if (nfltr == 0) iter->dset_comptype[0]++; - for (u=0; u < (unsigned) nfltr; u++) { + if((nfltr = H5Pget_nfilters(dcpl)) >= 0) { + if(nfltr == 0) + iter->dset_comptype[0]++; + for(u = 0; u < (unsigned)nfltr; u++) { #ifdef H5_WANT_H5_V1_6_COMPAT - fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0); + fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0); #else /* H5_WANT_H5_V1_6_COMPAT */ - fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0, NULL); + fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0, NULL); #endif /* H5_WANT_H5_V1_6_COMPAT */ - if (fltr < (H5_NFILTERS_IMPL-1)) - iter->dset_comptype[fltr]++; - else - iter->dset_comptype[H5_NFILTERS_IMPL-1]++; /*other filters*/ - } - - } /*endif nfltr */ + if(fltr < (H5_NFILTERS_IMPL - 1)) + iter->dset_comptype[fltr]++; + else + iter->dset_comptype[H5_NFILTERS_IMPL - 1]++; /*other filters*/ + } /* end for */ + } /* endif nfltr */ ret = H5Pclose(dcpl); assert(ret >= 0); @@ -736,7 +723,7 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) assert(ret >= 0); return 0; -} +} /* end dataset_stats() */ /*------------------------------------------------------------------------- @@ -755,38 +742,39 @@ dataset_stats (hid_t group, const char *name, H5G_stat_t * _sb, iter_t *_iter) *------------------------------------------------------------------------- */ static herr_t -walk (hid_t group, const char *name, void *_iter) +walk(hid_t group, const char *name, void *_iter) { + iter_t *iter = (iter_t *)_iter; + H5O_info_t oi; char *fullname = NULL; char *s; - H5G_stat_t sb; - iter_t *iter = (iter_t*)_iter; herr_t ret; /* Generic return value */ /* Get the full object name */ fullname = fix_name(iter->container, name); + /* Get object information */ - ret = H5Gget_objinfo(group, name, FALSE, &sb); + ret = H5Oget_info(group, name, &oi, H5P_DEFAULT); assert(ret >= 0); /* If the object has already been printed then just show the object ID * and return. */ - if ((s=sym_lookup(&sb))) { + if((s = sym_lookup(&oi))) { printf("%s same as %s\n", name, s); } else { - sym_insert(&sb, fullname); + sym_insert(&oi, fullname); /* Gather some statistics about the object */ - if(sb.nlink > iter->max_links) - iter->max_links = sb.nlink; + if(oi.rc > iter->max_links) + iter->max_links = oi.rc; - switch(sb.type) { + switch(oi.type) { case H5G_GROUP: - group_stats(group, name, fullname, &sb, walk, iter); + group_stats(group, name, fullname, &oi, walk, iter); break; case H5G_DATASET: - dataset_stats(group, name, &sb, iter); + dataset_stats(group, name, &oi, iter); break; case H5G_TYPE: @@ -806,7 +794,7 @@ walk (hid_t group, const char *name, void *_iter) } /* end switch */ } - if (fullname) + if(fullname) free(fullname); return 0; @@ -840,7 +828,6 @@ parse_command_line(int argc, const char *argv[]) /* Allocate space to hold the command line info */ hand = calloc((size_t)argc, sizeof(struct handler_t)); - /* parse command line options */ while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) { switch ((char)opt) { @@ -920,87 +907,20 @@ parse_command_line(int argc, const char *argv[]) * Programmer: Elena Pourmal * Saturday, August 12, 2006 * - * Modifications: - * Vailin Choi 12 July 2007 - * Initialized storage info for: - * 1. btree/heap storage for groups and attributes - * 2. btree storage for chunked dataset - * 3. hdr/btree/list/heap storage for SOHM table - * 4. superblock extension size - * *------------------------------------------------------------------------- */ static herr_t -iter_init(iter_t * _iter) +iter_init(iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - herr_t ret =0; /* Generic return value */ - - unsigned u; /* Local index variable */ - - /* Initilaize file' metadata information */ - iter->container = "/"; - iter->uniq_groups = 0; - iter->uniq_dsets = 0; - iter->uniq_types = 0; - iter->uniq_links = 0; - iter->uniq_others = 0; - iter->curr_depth = 0; - iter->max_depth = 0; - iter->max_links = 0; - iter->max_fanout = 0; - for(u = 0; u < SIZE_SMALL_GROUPS; u++) - iter->num_small_groups[u] = 0; - - /* Initilaize groups' metadata information */ - iter->group_nbins = 0; - iter->group_bins = NULL; - iter->group_ohdr_info.total_size = 0; - iter->group_ohdr_info.free_size = 0; - - /* initialize attributes' information for groups and datasets */ - iter->max_attrs = 0; - for(u = 0; u < SIZE_SMALL_ATTRS; u++) - iter->num_small_attrs[u] = 0; - iter->attr_nbins = 0; - iter->attr_bins = NULL; - - /* Initilaize datasets' metadata information */ - iter->max_dset_rank = 0; - for(u = 0; u < H5S_MAX_RANK; u++) - iter->dset_rank_count[u] = 0; - iter->max_dset_dims = 0; - for(u = 0; u < SIZE_SMALL_DSETS; u++) - iter->small_dset_dims[u] = 0; - for(u = 0; u < H5D_NLAYOUTS; u++) - iter->dset_layouts[u] = 0; - for(u = 0; u < H5_NFILTERS_IMPL; u++) - iter->dset_comptype[u] = 0; - - iter->dset_ntypes = 0; - iter->dset_type_info = NULL; - iter->dset_dim_nbins = 0; - iter->dset_dim_bins = NULL; - iter->dset_ohdr_info.total_size = 0; - iter->dset_ohdr_info.free_size = 0; - iter->dset_storage_size = 0; - - /* Initialize storage info */ - iter->groups_btree_storage_size = 0; - iter->groups_heap_storage_size = 0; - iter->attrs_btree_storage_size = 0; - iter->attrs_heap_storage_size = 0; - iter->SM_hdr_storage_size = 0; - iter->SM_index_storage_size = 0; - iter->SM_heap_storage_size = 0; - iter->super_ext_size = 0; - iter->datasets_btree_storage_size = 0; - - iter->nexternal = 0; - iter->local = 0; - - return ret; + /* Clear everything to zeros */ + memset(iter, 0, sizeof(*iter)); + + /* Initialize non-zero information */ + iter->container = "/"; + + return 0; } + /*------------------------------------------------------------------------- * Function: print_file_info @@ -1019,22 +939,19 @@ iter_init(iter_t * _iter) *------------------------------------------------------------------------- */ static herr_t -print_file_info(iter_t * _iter) +print_file_info(const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - herr_t ret =0; /* Generic return value */ - - printf("File information\n"); - printf("\t# of unique groups: %lu\n", iter->uniq_groups); - printf("\t# of unique datasets: %lu\n", iter->uniq_dsets); - printf("\t# of unique named dataypes: %lu\n", iter->uniq_types); - printf("\t# of unique links: %lu\n", iter->uniq_links); - printf("\t# of unique other: %lu\n", iter->uniq_others); - printf("\tMax. # of links to object: %lu\n", iter->max_links); - printf("\tMax. depth of hierarchy: %lu\n", iter->max_depth); - HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout); - - return ret; + printf("File information\n"); + printf("\t# of unique groups: %lu\n", iter->uniq_groups); + printf("\t# of unique datasets: %lu\n", iter->uniq_dsets); + printf("\t# of unique named dataypes: %lu\n", iter->uniq_types); + printf("\t# of unique links: %lu\n", iter->uniq_links); + printf("\t# of unique other: %lu\n", iter->uniq_others); + printf("\tMax. # of links to object: %lu\n", iter->max_links); + printf("\tMax. depth of hierarchy: %lu\n", iter->max_depth); + HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout); + + return 0; } @@ -1061,37 +978,36 @@ print_file_info(iter_t * _iter) *------------------------------------------------------------------------- */ static herr_t -print_file_metadata(iter_t * _iter) +print_file_metadata(const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - herr_t ret =0; /* Generic return value */ - - printf("Object header size: (total/unused)\n"); - HDfprintf(stdout, "\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size, - iter->group_ohdr_info.free_size); - HDfprintf(stdout, "\tDatasets: %Hu/%Hu\n", iter->dset_ohdr_info.total_size, - iter->dset_ohdr_info.free_size); - - printf("Storage information:\n"); - HDfprintf(stdout, "\tGroups:\n"); - HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size); - HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size); - - HDfprintf(stdout, "\tAttributes:\n"); - HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size); - HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size); - - HDfprintf(stdout, "\tChunked datasets:\n"); - HDfprintf(stdout, "\t\tB-tree: %Hu\n", iter->datasets_btree_storage_size); - - HDfprintf(stdout, "\tShared Messages:\n"); - HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size); - HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size); - HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size); - - HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size); - return ret; + printf("Object header size: (total/unused)\n"); + HDfprintf(stdout, "\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size, + iter->group_ohdr_info.free_size); + HDfprintf(stdout, "\tDatasets: %Hu/%Hu\n", iter->dset_ohdr_info.total_size, + iter->dset_ohdr_info.free_size); + + printf("Storage information:\n"); + HDfprintf(stdout, "\tGroups:\n"); + HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size); + HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size); + + HDfprintf(stdout, "\tAttributes:\n"); + HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size); + HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size); + + HDfprintf(stdout, "\tChunked datasets:\n"); + HDfprintf(stdout, "\t\tB-tree: %Hu\n", iter->datasets_btree_storage_size); + + HDfprintf(stdout, "\tShared Messages:\n"); + HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size); + HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size); + HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size); + + HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size); + + return 0; } + /*------------------------------------------------------------------------- * Function: print_group_info @@ -1110,43 +1026,42 @@ print_file_metadata(iter_t * _iter) *------------------------------------------------------------------------- */ static herr_t -print_group_info(iter_t * _iter) +print_group_info(const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - herr_t ret =0; /* Generic return value */ - unsigned u; /* Local index variable */ - unsigned long power; /* Temporary "power" for bins */ - unsigned long total; /* Total count for various statistics */ - - printf("Small groups:\n"); - total = 0; - for(u = 0; u < SIZE_SMALL_GROUPS; u++) { - if(iter->num_small_groups[u] > 0) { - printf("\t# of groups of size %u: %lu\n", u, iter->num_small_groups[u]); - total += iter->num_small_groups[u]; - } /* end if */ - } /* end for */ - printf("\tTotal # of small groups: %lu\n", total); - - printf("Group bins:\n"); - total = 0; - if(iter->group_bins[0] > 0) { - printf("\t# of groups of size 0: %lu\n", iter->group_bins[0]); - total = iter->group_bins[0]; + unsigned long power; /* Temporary "power" for bins */ + unsigned long total; /* Total count for various statistics */ + unsigned u; /* Local index variable */ + + printf("Small groups:\n"); + total = 0; + for(u = 0; u < SIZE_SMALL_GROUPS; u++) { + if(iter->num_small_groups[u] > 0) { + printf("\t# of groups of size %u: %lu\n", u, iter->num_small_groups[u]); + total += iter->num_small_groups[u]; } /* end if */ - power = 1; - for(u = 1; u < iter->group_nbins; u++) { - if(iter->group_bins[u] > 0) { - printf("\t# of groups of size %lu - %lu: %lu\n", power, (power * 10) - 1, - iter->group_bins[u]); - total += iter->group_bins[u]; - } /* end if */ - power *= 10; - } /* end for */ - printf("\tTotal # of groups: %lu\n", total); + } /* end for */ + printf("\tTotal # of small groups: %lu\n", total); + + printf("Group bins:\n"); + total = 0; + if(iter->group_bins[0] > 0) { + printf("\t# of groups of size 0: %lu\n", iter->group_bins[0]); + total = iter->group_bins[0]; + } /* end if */ + power = 1; + for(u = 1; u < iter->group_nbins; u++) { + if(iter->group_bins[u] > 0) { + printf("\t# of groups of size %lu - %lu: %lu\n", power, (power * 10) - 1, + iter->group_bins[u]); + total += iter->group_bins[u]; + } /* end if */ + power *= 10; + } /* end for */ + printf("\tTotal # of groups: %lu\n", total); - return ret; + return 0; } + /*------------------------------------------------------------------------- * Function: print_attr_info @@ -1165,39 +1080,39 @@ print_group_info(iter_t * _iter) *------------------------------------------------------------------------- */ static herr_t -print_attr_info(iter_t * _iter) +print_attr_info(const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - herr_t ret =0; /* Generic return value */ - unsigned u; /* Local index variable */ - unsigned long power; /* Temporary "power" for bins */ - unsigned long total; /* Total count for various statistics */ - - printf("Small # of attributes:\n"); - total = 0; - for(u = 1; u < SIZE_SMALL_ATTRS; u++) { - if(iter->num_small_attrs[u] > 0) { - printf("\t# of objects with %u attributes: %lu\n", u, iter->num_small_attrs[u]); - total += iter->num_small_attrs[u]; - } /* end if */ - } /* end for */ - printf("\tTotal # of objects with small # of attributes: %lu\n", total); + unsigned long power; /* Temporary "power" for bins */ + unsigned long total; /* Total count for various statistics */ + unsigned u; /* Local index variable */ + + printf("Small # of attributes:\n"); + total = 0; + for(u = 1; u < SIZE_SMALL_ATTRS; u++) { + if(iter->num_small_attrs[u] > 0) { + printf("\t# of objects with %u attributes: %lu\n", u, iter->num_small_attrs[u]); + total += iter->num_small_attrs[u]; + } /* end if */ + } /* end for */ + printf("\tTotal # of objects with small # of attributes: %lu\n", total); + + printf("Attribute bins:\n"); + total = 0; + power = 1; + for(u = 1; u < iter->attr_nbins; u++) { + if(iter->attr_bins[u] > 0) { + printf("\t# of objects with %lu - %lu attributes: %lu\n", power, (power * 10) - 1, + iter->attr_bins[u]); + total += iter->attr_bins[u]; + } /* end if */ + power *= 10; + } /* end for */ + printf("\tTotal # of objects with attributes: %lu\n", total); + printf("\tMax. # of attributes to objects: %lu\n", (unsigned long)iter->max_attrs); - printf("Attribute bins:\n"); - total = 0; - power = 1; - for(u = 1; u < iter->attr_nbins; u++) { - if(iter->attr_bins[u] > 0) { - printf("\t# of objects with %lu - %lu attributes: %lu\n", power, (power * 10) - 1, - iter->attr_bins[u]); - total += iter->attr_bins[u]; - } /* end if */ - power *= 10; - } /* end for */ - printf("\tTotal # of objects with attributes: %lu\n", total); - printf("\tMax. # of attributes to objects: %lu\n", (unsigned long)iter->max_attrs); - return ret; + return 0; } + /*------------------------------------------------------------------------- * Function: print_dataset_info @@ -1216,101 +1131,94 @@ print_attr_info(iter_t * _iter) *------------------------------------------------------------------------- */ static herr_t -print_dataset_info(iter_t * _iter) +print_dataset_info(const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - herr_t ret =0; /* Generic return value */ - unsigned u; /* Local index variable */ - unsigned long power; /* Temporary "power" for bins */ - unsigned long total; /* Total count for various statistics */ - size_t dtype_size; /* Size of encoded datatype */ - - if(iter->uniq_dsets > 0) { - printf("Dataset dimension information:\n"); - printf("\tMax. rank of datasets: %lu\n", iter->max_dset_rank); - printf("\tDataset ranks:\n"); - for(u = 0; u < H5S_MAX_RANK; u++) - if(iter->dset_rank_count[u] > 0) - printf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]); - - printf("1-D Dataset information:\n"); - HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims); - printf("\tSmall 1-D datasets:\n"); + unsigned long power; /* Temporary "power" for bins */ + unsigned long total; /* Total count for various statistics */ + size_t dtype_size; /* Size of encoded datatype */ + unsigned u; /* Local index variable */ + + if(iter->uniq_dsets > 0) { + printf("Dataset dimension information:\n"); + printf("\tMax. rank of datasets: %lu\n", iter->max_dset_rank); + printf("\tDataset ranks:\n"); + for(u = 0; u < H5S_MAX_RANK; u++) + if(iter->dset_rank_count[u] > 0) + printf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]); + + printf("1-D Dataset information:\n"); + HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims); + printf("\tSmall 1-D datasets:\n"); + total = 0; + for(u = 0; u < SIZE_SMALL_DSETS; u++) { + if(iter->small_dset_dims[u] > 0) { + printf("\t\t# of dataset dimensions of size %u: %lu\n", u, + iter->small_dset_dims[u]); + total += iter->small_dset_dims[u]; + } /* end if */ + } /* end for */ + printf("\t\tTotal small datasets: %lu\n", total); + + /* Protect against no datasets in file */ + if(iter->dset_dim_nbins > 0) { + printf("\t1-D Dataset dimension bins:\n"); total = 0; - for(u = 0; u < SIZE_SMALL_DSETS; u++) { - if(iter->small_dset_dims[u] > 0) { - printf("\t\t# of dataset dimensions of size %u: %lu\n", u, - iter->small_dset_dims[u]); - total += iter->small_dset_dims[u]; + if(iter->dset_dim_bins[0] > 0) { + printf("\t\t# of datasets of size 0: %lu\n", iter->dset_dim_bins[0]); + total = iter->dset_dim_bins[0]; + } /* end if */ + power = 1; + for(u = 1; u < iter->dset_dim_nbins; u++) { + if(iter->dset_dim_bins[u] > 0) { + printf("\t\t# of datasets of size %lu - %lu: %lu\n", power, (power * 10) - 1, + iter->dset_dim_bins[u]); + total += iter->dset_dim_bins[u]; } /* end if */ + power *= 10; } /* end for */ - printf("\t\tTotal small datasets: %lu\n", total); - - /* Protect against no datasets in file */ - if(iter->dset_dim_nbins > 0) { - printf("\t1-D Dataset dimension bins:\n"); - total = 0; - if(iter->dset_dim_bins[0] > 0) { - printf("\t\t# of datasets of size 0: %lu\n", iter->dset_dim_bins[0]); - total = iter->dset_dim_bins[0]; - } /* end if */ - power = 1; - for(u = 1; u < iter->dset_dim_nbins; u++) { - if(iter->dset_dim_bins[u] > 0) { - printf("\t\t# of datasets of size %lu - %lu: %lu\n", power, (power * 10) - 1, - iter->dset_dim_bins[u]); - total += iter->dset_dim_bins[u]; - } /* end if */ - power *= 10; - } /* end for */ - printf("\t\tTotal # of datasets: %lu\n", total); - } /* end if */ - - printf("Dataset storage information:\n"); - HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size); - - printf("Dataset layout information:\n"); - for(u = 0; u < H5D_NLAYOUTS; u++) - printf("\tDataset layout counts[%s]: %lu\n", (u == 0 ? "COMPACT" : - (u == 1 ? "CONTIG" : "CHUNKED")), iter->dset_layouts[u]); - printf("\tNumber of external files : %lu\n", iter->nexternal); - printf("Dataset filters information:\n"); - printf("\tNumber of datasets with \n"); - - printf("\t NO filter: %lu\n", iter->dset_comptype[H5Z_FILTER_ERROR+1]); - - printf("\t GZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_DEFLATE]); - - printf("\t SHUFFLE filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SHUFFLE]); - - printf("\t FLETCHER32 filter: %lu\n", iter->dset_comptype[H5Z_FILTER_FLETCHER32]); - - printf("\t SZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SZIP]); - - printf("\t NBIT filter: %lu\n", iter->dset_comptype[H5Z_FILTER_NBIT]); + printf("\t\tTotal # of datasets: %lu\n", total); + } /* end if */ - printf("\t SCALEOFFSET filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SCALEOFFSET]); + printf("Dataset storage information:\n"); + HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size); - printf("\t USER-DEFINED filter: %lu\n", iter->dset_comptype[H5_NFILTERS_IMPL-1]); - if(display_dtype_metadata) { - printf("Dataset datatype information:\n"); - printf("\t# of unique datatypes used by datasets: %lu\n", iter->dset_ntypes); - total = 0; - for(u = 0; u < iter->dset_ntypes; u++) { - H5Tencode(iter->dset_type_info[u].tid, NULL, &dtype_size); - printf("\tDataset datatype #%u:\n", u); - printf("\t\tCount (total/named) = (%lu/%lu)\n", iter->dset_type_info[u].count, iter->dset_type_info[u].named); - printf("\t\tSize (desc./elmt) = (%lu/%lu)\n", (unsigned long)dtype_size, - (unsigned long)H5Tget_size(iter->dset_type_info[u].tid)); - H5Tclose(iter->dset_type_info[u].tid); - total += iter->dset_type_info[u].count; - } /* end for */ - printf("\tTotal dataset datatype count: %lu\n", total); - } - } /* end if */ + printf("Dataset layout information:\n"); + for(u = 0; u < H5D_NLAYOUTS; u++) + printf("\tDataset layout counts[%s]: %lu\n", (u == 0 ? "COMPACT" : + (u == 1 ? "CONTIG" : "CHUNKED")), iter->dset_layouts[u]); + printf("\tNumber of external files : %lu\n", iter->nexternal); + + printf("Dataset filters information:\n"); + printf("\tNumber of datasets with:\n"); + printf("\t\tNO filter: %lu\n", iter->dset_comptype[H5Z_FILTER_ERROR+1]); + printf("\t\tGZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_DEFLATE]); + printf("\t\tSHUFFLE filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SHUFFLE]); + printf("\t\tFLETCHER32 filter: %lu\n", iter->dset_comptype[H5Z_FILTER_FLETCHER32]); + printf("\t\tSZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SZIP]); + printf("\t\tNBIT filter: %lu\n", iter->dset_comptype[H5Z_FILTER_NBIT]); + printf("\t\tSCALEOFFSET filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SCALEOFFSET]); + printf("\t\tUSER-DEFINED filter: %lu\n", iter->dset_comptype[H5_NFILTERS_IMPL-1]); + + if(display_dtype_metadata) { + printf("Dataset datatype information:\n"); + printf("\t# of unique datatypes used by datasets: %lu\n", iter->dset_ntypes); + total = 0; + for(u = 0; u < iter->dset_ntypes; u++) { + H5Tencode(iter->dset_type_info[u].tid, NULL, &dtype_size); + printf("\tDataset datatype #%u:\n", u); + printf("\t\tCount (total/named) = (%lu/%lu)\n", iter->dset_type_info[u].count, iter->dset_type_info[u].named); + printf("\t\tSize (desc./elmt) = (%lu/%lu)\n", (unsigned long)dtype_size, + (unsigned long)H5Tget_size(iter->dset_type_info[u].tid)); + H5Tclose(iter->dset_type_info[u].tid); + total += iter->dset_type_info[u].count; + } /* end for */ + printf("\tTotal dataset datatype count: %lu\n", total); + } + } /* end if */ - return ret; + return 0; } + /*------------------------------------------------------------------------- * Function: print_file_statistics @@ -1329,28 +1237,25 @@ print_dataset_info(iter_t * _iter) *------------------------------------------------------------------------- */ static void -print_file_statistics(iter_t * _iter) +print_file_statistics(const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - - if(display_all) { - display_file = TRUE; - display_file_metadata = TRUE; - display_group = TRUE; - display_group_metadata = TRUE; - display_dset = TRUE; - display_dtype_metadata = TRUE; - display_attr = TRUE; - } - - - if(display_file) print_file_info(iter); - if(display_file_metadata) print_file_metadata(iter); - if(display_group) print_group_info(iter); - if(display_dset) print_dataset_info(iter); - if(display_attr) print_attr_info(iter); + if(display_all) { + display_file = TRUE; + display_file_metadata = TRUE; + display_group = TRUE; + display_group_metadata = TRUE; + display_dset = TRUE; + display_dtype_metadata = TRUE; + display_attr = TRUE; + } + if(display_file) print_file_info(iter); + if(display_file_metadata) print_file_metadata(iter); + if(display_group) print_group_info(iter); + if(display_dset) print_dataset_info(iter); + if(display_attr) print_attr_info(iter); } + /*------------------------------------------------------------------------- * Function: print_object_statistics @@ -1369,15 +1274,11 @@ print_file_statistics(iter_t * _iter) *------------------------------------------------------------------------- */ static void -print_object_statistics(char *name, iter_t UNUSED * _iter) +print_object_statistics(const char *name) { -/* Comment out for now to eliminate warnings since variable is not used - iter_t *iter = (iter_t*)_iter; - EIP 11/17/06 -*/ - - printf("Object name %s\n", name); + printf("Object name %s\n", name); } + /*------------------------------------------------------------------------- * Function: print_statistics @@ -1396,13 +1297,12 @@ print_object_statistics(char *name, iter_t UNUSED * _iter) *------------------------------------------------------------------------- */ static void -print_statistics(char *name, iter_t * _iter) +print_statistics(const char *name, const iter_t *iter) { - iter_t *iter = (iter_t*)_iter; - if(display_object) - print_object_statistics(name, iter); - else - print_file_statistics(iter); + if(display_object) + print_object_statistics(name); + else + print_file_statistics(iter); } @@ -1413,7 +1313,6 @@ main(int argc, const char *argv[]) const char *fname = NULL; hid_t fid; struct handler_t *hand; - herr_t status, reterr; char root[] = "/"; int i; H5F_info_t finfo; @@ -1443,13 +1342,11 @@ main(int argc, const char *argv[]) leave(EXIT_FAILURE); } - /* Initialize iter structure */ - status = iter_init(&iter); + iter_init(&iter); /* Get storge info for SOHM's btree/list/heap and superblock extension */ - reterr = H5Fget_info(fid, &finfo); - if (reterr < 0) + if(H5Fget_info(fid, &finfo) < 0) warn_msg(progname, "Unable to retrieve SOHM info\n"); else { iter.super_ext_size = finfo.super_ext_size; @@ -1458,20 +1355,19 @@ main(int argc, const char *argv[]) iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size; } - /* Walk the objects or all file */ - for (i = 0; i < argc; i++) { - if (hand[i].obj) { + for(i = 0; i < argc; i++) { + if(hand[i].obj) { if(hand[i].flag) { walk(fid, hand[i].obj, &iter); print_statistics(hand[i].obj, &iter); } } - } + free(hand); - H5Fclose(fid); - if (fid < 0) { + + if(H5Fclose(fid) < 0) { error_msg(progname, "unable to close file \"%s\"\n", fname); leave(EXIT_FAILURE); } |