Commit 60448173 by Martin Liska Committed by Martin Liska

Improve memory statistics report readability.

2019-02-26  Martin Liska  <mliska@suse.cz>

	* alloc-pool.h (struct pool_usage): Remove extra
	print_dash_line.
	* bitmap.h (struct bitmap_usage): Likewise.
	* ggc-common.c (struct ggc_usage): Likewise.
	* mem-stats.h (struct mem_usage): Likewise.
	(mem_alloc_description::dump): Print dash lines
	here and repeat header at the end of a table report.
	It's then more readable.
	* tree-phinodes.c (phinodes_print_statistics): Make
	horizontal alignment.
	* tree-ssanames.c (ssanames_print_statistics): Likewise.
	* vec.c (struct vec_usage): Remove extra print_dash_line.
	* vec.h (vec_safe_grow_cleared): Pass PASS_MEM_STAT.
2019-02-26  Martin Liska  <mliska@suse.cz>

	* symtab.c (ht_dump_statistics): Make
	horizontal alignment for statistics.

From-SVN: r269221
parent 24f0c842
2019-02-26 Martin Liska <mliska@suse.cz>
* alloc-pool.h (struct pool_usage): Remove extra
print_dash_line.
* bitmap.h (struct bitmap_usage): Likewise.
* ggc-common.c (struct ggc_usage): Likewise.
* mem-stats.h (struct mem_usage): Likewise.
(mem_alloc_description::dump): Print dash lines
here and repeat header at the end of a table report.
It's then more readable.
* tree-phinodes.c (phinodes_print_statistics): Make
horizontal alignment.
* tree-ssanames.c (ssanames_print_statistics): Likewise.
* vec.c (struct vec_usage): Remove extra print_dash_line.
* vec.h (vec_safe_grow_cleared): Pass PASS_MEM_STAT.
2019-02-26 Uroš Bizjak <ubizjak@gmail.com> 2019-02-26 Uroš Bizjak <ubizjak@gmail.com>
* doc/extend.texi (__builtin_object_size): * doc/extend.texi (__builtin_object_size):
......
...@@ -83,17 +83,14 @@ struct pool_usage: public mem_usage ...@@ -83,17 +83,14 @@ struct pool_usage: public mem_usage
{ {
fprintf (stderr, "%-32s%-48s %6s%11s%16s%17s%12s\n", "Pool name", name, fprintf (stderr, "%-32s%-48s %6s%11s%16s%17s%12s\n", "Pool name", name,
"Pools", "Leak", "Peak", "Times", "Elt size"); "Pools", "Leak", "Peak", "Times", "Elt size");
print_dash_line ();
} }
/* Dump footer. */ /* Dump footer. */
inline void inline void
dump_footer () dump_footer ()
{ {
print_dash_line ();
fprintf (stderr, "%s" PRsa(82) PRsa(10) "\n", "Total", fprintf (stderr, "%s" PRsa(82) PRsa(10) "\n", "Total",
SIZE_AMOUNT (m_instances), SIZE_AMOUNT (m_allocated)); SIZE_AMOUNT (m_instances), SIZE_AMOUNT (m_allocated));
print_dash_line ();
} }
/* Element size. */ /* Element size. */
......
...@@ -258,7 +258,6 @@ struct bitmap_usage: public mem_usage ...@@ -258,7 +258,6 @@ struct bitmap_usage: public mem_usage
{ {
fprintf (stderr, "%-48s %11s%16s%17s%12s%12s%10s\n", name, "Leak", "Peak", fprintf (stderr, "%-48s %11s%16s%17s%12s%12s%10s\n", name, "Leak", "Peak",
"Times", "N searches", "Search iter", "Type"); "Times", "N searches", "Search iter", "Type");
print_dash_line ();
} }
/* Number search operations. */ /* Number search operations. */
......
...@@ -910,9 +910,7 @@ struct ggc_usage: public mem_usage ...@@ -910,9 +910,7 @@ struct ggc_usage: public mem_usage
inline void inline void
dump_footer () dump_footer ()
{ {
print_dash_line ();
dump ("Total", *this); dump ("Total", *this);
print_dash_line ();
} }
/* Get balance which is GGC allocation leak. */ /* Get balance which is GGC allocation leak. */
...@@ -955,7 +953,6 @@ struct ggc_usage: public mem_usage ...@@ -955,7 +953,6 @@ struct ggc_usage: public mem_usage
{ {
fprintf (stderr, "%-48s %11s%17s%17s%16s%17s\n", name, "Garbage", "Freed", fprintf (stderr, "%-48s %11s%17s%17s%16s%17s\n", name, "Garbage", "Freed",
"Leak", "Overhead", "Times"); "Leak", "Overhead", "Times");
print_dash_line ();
} }
/* Freed memory in bytes. */ /* Freed memory in bytes. */
......
...@@ -219,10 +219,8 @@ struct mem_usage ...@@ -219,10 +219,8 @@ struct mem_usage
inline void inline void
dump_footer () const dump_footer () const
{ {
print_dash_line ();
fprintf (stderr, "%s" PRsa (53) PRsa (26) "\n", "Total", fprintf (stderr, "%s" PRsa (53) PRsa (26) "\n", "Total",
SIZE_AMOUNT (m_allocated), SIZE_AMOUNT (m_times)); SIZE_AMOUNT (m_allocated), SIZE_AMOUNT (m_times));
print_dash_line ();
} }
/* Return fraction of NOMINATOR and DENOMINATOR in percent. */ /* Return fraction of NOMINATOR and DENOMINATOR in percent. */
...@@ -247,7 +245,6 @@ struct mem_usage ...@@ -247,7 +245,6 @@ struct mem_usage
{ {
fprintf (stderr, "%-48s %11s%16s%10s%17s\n", name, "Leak", "Peak", fprintf (stderr, "%-48s %11s%16s%10s%17s\n", name, "Leak", "Peak",
"Times", "Type"); "Times", "Type");
print_dash_line ();
} }
/* Current number of allocated bytes. */ /* Current number of allocated bytes. */
...@@ -631,11 +628,17 @@ mem_alloc_description<T>::dump (mem_alloc_origin origin, ...@@ -631,11 +628,17 @@ mem_alloc_description<T>::dump (mem_alloc_origin origin,
mem_list_t *list = get_list (origin, &length, cmp); mem_list_t *list = get_list (origin, &length, cmp);
T total = get_sum (origin); T total = get_sum (origin);
T::print_dash_line ();
T::dump_header (mem_location::get_origin_name (origin)); T::dump_header (mem_location::get_origin_name (origin));
T::print_dash_line ();
for (int i = length - 1; i >= 0; i--) for (int i = length - 1; i >= 0; i--)
list[i].second->dump (list[i].first, total); list[i].second->dump (list[i].first, total);
T::print_dash_line ();
T::dump_header (mem_location::get_origin_name (origin));
T::print_dash_line ();
total.dump_footer (); total.dump_footer ();
T::print_dash_line ();
XDELETEVEC (list); XDELETEVEC (list);
......
...@@ -80,9 +80,9 @@ unsigned int phi_nodes_created; ...@@ -80,9 +80,9 @@ unsigned int phi_nodes_created;
void void
phinodes_print_statistics (void) phinodes_print_statistics (void)
{ {
fprintf (stderr, "PHI nodes allocated: " PRsa (11) "\n", fprintf (stderr, "%-32s" PRsa (11) "\n", "PHI nodes allocated:",
SIZE_AMOUNT (phi_nodes_created)); SIZE_AMOUNT (phi_nodes_created));
fprintf (stderr, "PHI nodes reused: " PRsa (11) "\n", fprintf (stderr, "%-32s" PRsa (11) "\n", "PHI nodes reused:",
SIZE_AMOUNT (phi_nodes_reused)); SIZE_AMOUNT (phi_nodes_reused));
} }
......
...@@ -112,9 +112,9 @@ fini_ssanames (struct function *fn) ...@@ -112,9 +112,9 @@ fini_ssanames (struct function *fn)
void void
ssanames_print_statistics (void) ssanames_print_statistics (void)
{ {
fprintf (stderr, "SSA_NAME nodes allocated: " PRsa (11) "\n", fprintf (stderr, "%-32s" PRsa (11) "\n", "SSA_NAME nodes allocated:",
SIZE_AMOUNT (ssa_name_nodes_created)); SIZE_AMOUNT (ssa_name_nodes_created));
fprintf (stderr, "SSA_NAME nodes reused: " PRsa (11) "\n", fprintf (stderr, "%-32s" PRsa (11) "\n", "SSA_NAME nodes reused:",
SIZE_AMOUNT (ssa_name_nodes_reused)); SIZE_AMOUNT (ssa_name_nodes_reused));
} }
......
...@@ -98,11 +98,9 @@ struct vec_usage: public mem_usage ...@@ -98,11 +98,9 @@ struct vec_usage: public mem_usage
inline void inline void
dump_footer () dump_footer ()
{ {
print_dash_line ();
fprintf (stderr, "%s" PRsa (64) PRsa (25) PRsa (16) "\n", fprintf (stderr, "%s" PRsa (64) PRsa (25) PRsa (16) "\n",
"Total", SIZE_AMOUNT (m_allocated), "Total", SIZE_AMOUNT (m_allocated),
SIZE_AMOUNT (m_times), SIZE_AMOUNT (m_items)); SIZE_AMOUNT (m_times), SIZE_AMOUNT (m_items));
print_dash_line ();
} }
/* Dump header with NAME. */ /* Dump header with NAME. */
...@@ -111,7 +109,6 @@ struct vec_usage: public mem_usage ...@@ -111,7 +109,6 @@ struct vec_usage: public mem_usage
{ {
fprintf (stderr, "%-48s %10s%11s%16s%10s%17s%11s\n", name, "sizeof(T)", fprintf (stderr, "%-48s %10s%11s%16s%10s%17s%11s\n", name, "sizeof(T)",
"Leak", "Peak", "Times", "Leak items", "Peak items"); "Leak", "Peak", "Times", "Leak items", "Peak items");
print_dash_line ();
} }
/* Current number of items allocated. */ /* Current number of items allocated. */
......
...@@ -739,7 +739,7 @@ inline void ...@@ -739,7 +739,7 @@ inline void
vec_safe_grow_cleared (vec<T, va_heap, vl_ptr> *&v, vec_safe_grow_cleared (vec<T, va_heap, vl_ptr> *&v,
unsigned len CXX_MEM_STAT_INFO) unsigned len CXX_MEM_STAT_INFO)
{ {
v->safe_grow_cleared (len); v->safe_grow_cleared (len PASS_MEM_STAT);
} }
......
2019-02-26 Martin Liska <mliska@suse.cz>
* symtab.c (ht_dump_statistics): Make
horizontal alignment for statistics.
2019-02-20 David Malcolm <dmalcolm@redhat.com> 2019-02-20 David Malcolm <dmalcolm@redhat.com>
PR c/89410 PR c/89410
......
...@@ -306,39 +306,41 @@ ht_dump_statistics (cpp_hash_table *table) ...@@ -306,39 +306,41 @@ ht_dump_statistics (cpp_hash_table *table)
nelts = table->nelements; nelts = table->nelements;
headers = table->nslots * sizeof (hashnode); headers = table->nslots * sizeof (hashnode);
fprintf (stderr, "\nString pool\nentries\t\t%lu\n", fprintf (stderr, "\nString pool\n%-32s%lu\n", "entries:",
(unsigned long) nelts); (unsigned long) nelts);
fprintf (stderr, "identifiers\t%lu (%.2f%%)\n", fprintf (stderr, "%-32s%lu (%.2f%%)\n", "identifiers:",
(unsigned long) nids, nids * 100.0 / nelts); (unsigned long) nids, nids * 100.0 / nelts);
fprintf (stderr, "slots\t\t%lu\n", fprintf (stderr, "%-32s%lu\n", "slots:",
(unsigned long) table->nslots); (unsigned long) table->nslots);
fprintf (stderr, "deleted\t\t%lu\n", fprintf (stderr, "%-32s%lu\n", "deleted:",
(unsigned long) deleted); (unsigned long) deleted);
if (table->alloc_subobject) if (table->alloc_subobject)
fprintf (stderr, "GGC bytes\t%lu%c\n", fprintf (stderr, "%-32s%lu%c\n", "GGC bytes:",
SCALE (total_bytes), LABEL (total_bytes)); SCALE (total_bytes), LABEL (total_bytes));
else else
{ {
overhead = obstack_memory_used (&table->stack) - total_bytes; overhead = obstack_memory_used (&table->stack) - total_bytes;
fprintf (stderr, "obstack bytes\t%lu%c (%lu%c overhead)\n", fprintf (stderr, "%-32s%lu%c (%lu%c overhead)\n",
"obstack bytes:",
SCALE (total_bytes), LABEL (total_bytes), SCALE (total_bytes), LABEL (total_bytes),
SCALE (overhead), LABEL (overhead)); SCALE (overhead), LABEL (overhead));
} }
fprintf (stderr, "table size\t%lu%c\n", fprintf (stderr, "%-32s%lu%c\n", "table size:",
SCALE (headers), LABEL (headers)); SCALE (headers), LABEL (headers));
exp_len = (double)total_bytes / (double)nelts; exp_len = (double)total_bytes / (double)nelts;
exp2_len = exp_len * exp_len; exp2_len = exp_len * exp_len;
exp_len2 = (double) sum_of_squares / (double) nelts; exp_len2 = (double) sum_of_squares / (double) nelts;
fprintf (stderr, "coll/search\t%.4f\n", fprintf (stderr, "%-32s%.4f\n", "coll/search:",
(double) table->collisions / (double) table->searches); (double) table->collisions / (double) table->searches);
fprintf (stderr, "ins/search\t%.4f\n", fprintf (stderr, "%-32s%.4f\n", "ins/search:",
(double) nelts / (double) table->searches); (double) nelts / (double) table->searches);
fprintf (stderr, "avg. entry\t%.2f bytes (+/- %.2f)\n", fprintf (stderr, "%-32s%.2f bytes (+/- %.2f)\n",
"avg. entry:",
exp_len, approx_sqrt (exp_len2 - exp2_len)); exp_len, approx_sqrt (exp_len2 - exp2_len));
fprintf (stderr, "longest entry\t%lu\n", fprintf (stderr, "%-32s%lu\n", "longest entry:",
(unsigned long) longest); (unsigned long) longest);
#undef SCALE #undef SCALE
#undef LABEL #undef LABEL
......
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