ping again - Show hash table stats when -fmem-report

Dimitrios Apostolou jimis@gmx.net
Fri Aug 3 16:21:00 GMT 2012


I'm always forgetting something, now it was the changelog, see attached 
(same as old, nothing significant changed).

On Fri, 3 Aug 2012, Dimitrios Apostolou wrote:

> Hi, I've updated this patch to trunk and rebootstrapped it, so I'm 
> resubmitting it, I'm also making a try to CC all relevant maintainers, sorry 
> for spamming but even though this patch is simple, it touches many parts.
>
> I'm also adding stats to pointer_{set,map} but it will come in a separate 
> patch. The notes quoted from earlier mail still apply:
>
> On Sun, 8 Jul 2012, Dimitrios Apostolou wrote:
>
>> Hi,
>> 
>> This patch adds many nice stats about hash tables when gcc is run with 
>> -fmem-report. Attached patch tested on x86, no regressions.
>> 
>> Also attached is sample output of -fmem-report when compiling reload.c with 
>> -O2 -g. Especially interesting is the extreme htab usage in var-tracking 
>> (ofcourse we already knew that... :-) and maybe symtab's slightly high 
>> collision rate (given it's a very hot hash table). Moreover it's notable 
>> that since last year, collision rate for mem_attrs_htab has been reduced 
>> from around 8 to 1, still not good enough but major improvement.
>> 
>> Jan: It has negligible overhead in runtime, that's why I'm pushing it again 
>> as it is. Having compile-time instrumentation is something different, but 
>> still I'm not quite sure if it's worth the effort. IMHO doing separate 
>> builds to get memory info is tedious and even I've stopped doing them. If 
>> it has no overhead maybe it's better as a runtime option?
>> Any way, compile-time instrumentation can come later.
>> 
>> Finally I repost some of my notes I'd like to get feedback on:
>> 
>> * Is it OK that I included <assert.h> in libiberty's hashtab.c? What's the 
>> proper way to assert stuff, since gcc_assert() is not accessible?
>> 
>> * Many hash tables are created with htab_create_ggc(), for example 
>> referenced_vars and default_defs in tree-ssa.c. I collect statistics in 
>> delete_tree_ssa() but maybe some are not deallocated in there but 
>> automatically garbage collected?
>> 
>> * Obviously hash table sizes are inflated where two entries might reference 
>> the same element (for example in symtab_hash) but I don't handle this.
>> 
>> * Changes that reduce load factor have been backed out since they brought 
>> controversy. I still think they are good, at least for symtab. I'll measure 
>> numbers separately for this after this patch makes it.
>> 
>> 
>> Thanks,
>> Dimitris
>
-------------- next part --------------
2012-05-21 Dimitrios Apostolou <jimis@gmx.net>

	Print various statistics about hash tables when called with
	-fmem-report. If the tables are created once use
	htab_dump_statistics(), if they are created/destroyed multiple
	times then introduce global variables to track statistics.

	* cgraph.c, cgraph.h:
	(cgraph_dump_stats): New function to dump stats about hash tables.
	* gcc/symtab.c, cgraph.h:
	(symtab_dump_stats): New function to dump stats about hash tables.
	* cgraph.c: (call_site_hash_{num,expands,searches,collisions}):
	New globals to keep statistics about call_site_hash hash tables.
	(cgraph_remove_node_callees,cgraph_remove_node): if (mem_report)
	then keep statistics about hash tables.
	* cselib.c, cselib.h (cselib_dump_stats): New function to dump
	stats about cselib_hash_table.
	* cselib.c (cselib_htab_{num,expands,searches,collisions}): New
	globals to keep hash table statistics.
	(cselib_finish): if (mem_report) keep hash table statistics.
	* dwarf2out.c (dwarf2out_finish): Call htab_dump_statistics() if
	-fmem_report.
	* emit-rtl.c, emit-rtl.h (mem_attrs_dump_stats): New function to
	dump statistics about mem_attrs_htab hash table.
	* tree.h, tree-ssa.c (tree_ssa_dump_stats): New function to print
	statistics about all referenced_vars and default_defs hash tables.
	* tree-ssa.c (default_defs_{num,expands,searches,collisions})
	(referenced_vars_{num,expands,searches,collisions}): new globals
	to keep statistics about hash tables.
	(delete_tree_ssa): Keep statistics for hash tables by
	increasing the new global variables.
	* tree.c (dump_tree_statistics): Call tree_ssa_dump_stats().
	(print_type_hash_statistics): Used the new htab_dump_statistics()
	function.
	* var-tracking.c (vars_htab_{num,expands,searches,collisions})
	(dropval_htab_{num,expands,searches,collisions})
	(cv_htab_{num,expands,searches,collisions}): new globals to keep
	hash table statistics.
	(shared_hash_destroy, vt_finalize): Keep statistics by
	increasing values of new global variables if -fmem-report.
	* var-tracking.c, rtl.h (vt_dump_stats): New function to dump
	stats about vars->htab, dropped_variables and value_chains hash
	tables.
	* toplev.c: Included cselib.h for cselib_dump_stats().
	(dump_memory_report): Call all the above functions to provide
	better statistics.

	* hashtab.c, hashtab.h: Added "expands" variable to htab_t for
	tracking total times the hash table was expanded.
	* hashtab.c, hashtab.h (htab_dump_statistics, htab_collisions_num)
	(htab_searches_num, htab_expands_num): New functions for  statistics.
	* hashtab.c: Included assert.h for checks in htab_dump_statistics.
	* cgraph.h, varpool.c (varpool_dump_stats): New function to dump
	stats about varpool_hash hash table.

	* libcpp/symtab.c, symtab.h: Added "expands" variable to
	hash_table type for tracking total times the hash table was
	expanded.
	* symtab.c (ht_dump_statistics): Beautified stats output.



More information about the Gcc-patches mailing list