Re: Memory allocation overhead

Colin Paul Adams <[email protected]>
Newsgroups gmane.comp.lang.eiffel.gobo.devel
Message-ID <[email protected]>
>>>>> "Eric" == Eric Bezault <[email protected]> writes:

    Eric> I would surprise me that the level of inlining currently
    Eric> implemented in gec has anything to do with the time actually
    Eric> spent in the GC that was shown in your profiling results.

That may be the case, but there is some (doubtful) evidence to the
contrary.

Since currently my execution time is approaching 4 times faster than
when I previously profiled, I thought I would profile again to confirm
that GC problems are still predominant (I was fairly sure they were,
as top shows 200-300% CPU utilization still, which can only come from
parallel marking).

The new profile confirms this is the case, but there is the suggestion
that a failure to inline will be significant if the GC overhead could
be largely eliminated (I have named the top three calls - I'm assuming
the comment in the .h file immediately precedes the extern
declaration.):

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls   s/call   s/call  name    
 31.55    675.04   675.04                             GC_mark_from
 16.24   1022.55   347.51                             GC_steal_mark_stack
 16.17   1368.49   345.94                             GC_header_cache_miss
  8.08   1541.30   172.81                             GC_mark_local
  1.44   1572.07    30.77                             GC_reclaim_clear
  1.27   1599.21    27.14 530952040     0.00     0.00  T131f10 DS_ARRAYED_LIST [INTEGER_32].item
  1.19   1624.57    25.36                             GC_push_marked
  0.84   1642.47    17.90                             GC_generic_malloc_many
  0.81   1659.80    17.34 128695782     0.00     0.00  T171x16745 XM_XPATH_NODE.as_tree_node
  0.77   1676.37    16.57 262642848     0.00     0.00  T515f29 XM_XPATH_ATTRIBUTE_COLLECTION.is_attribute_index_valid
  0.64   1690.09    13.72                             GC_do_local_mark
  0.58   1702.48    12.39 181451145     0.00     0.00  T17x34
  0.52   1713.50    11.02 181905247     0.00     0.00  T15f4
  0.50   1724.23    10.73                             GC_malloc
  0.50   1734.90    10.67                             GC_block_was_dirty
  0.47   1745.00    10.10                             GC_apply_to_all_blocks
  0.34   1752.22     7.22
  GC_install_header

So we can see that the second highest Eiffel routine is
XM_XPATH_NODE.as_tree_node. Since the definition of this is:

	as_tree_node: XM_XPATH_TREE_NODE is
			-- `Current' seen as a tree node
		do
			Result := Current
		end

I would expect this to be a no-op. Is it not a call that provides
typing information only to the compiler, so that at run-time there is
not need for it?
-- 
Colin Adams
Preston Lancashire

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.