caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Gerd Stolpmann <info@gerd-stolpmann.de>
To: David MENTRE <dmentre@linux-france.org>
Cc: Oliver Bandel <oliver@first.in-berlin.de>,
	caml users <caml-list@inria.fr>
Subject: AW: [Caml-list] Behaviour of an OCaml program: any possible GC improvement?
Date: Wed, 24 Oct 2012 18:07:37 +0200	[thread overview]
Message-ID: <1351094857.12207.12@samsung> (raw)
In-Reply-To: <CAC3Lx=ZLMYb=o=EiQEDdZ-VyFqtD7Q0ZOyv_SrzYzTaY_90gEw@mail.gmail.com>

I don't think you can do much here by just setting parameters. (Btw.,  
there is no need to compile the mli's with -p.)

I've seen high CPU for garbage collection frequently for mainly  
functional programs. It's their nature - you generate lots of  
short-living intermediate results. You can change that only by changing  
the algorithm, e.g. by caching results that would otherwise be  
recomputed again. Some improvement is also possible with simple tricks,  
e.g. if you have something like

Number 0

where Number is from an algebraic type, and you use this term  
frequently, consider to add a constant for it,

let n0 = Number 0

so this isn't reallocated all the time (even: if n=0 then n0 else  
Number n). If this term is used often, this makes a noticeable  
difference.

Gerd

Am 24.10.2012 17:09:12 schrieb(en) David MENTRE:
> Hello,
> 
> 2012/10/24 David MENTRE <dmentre@linux-france.org>:
> > But, after recompiling everything from scratch and redoing my tests
> > (taking care of erasing old gmon.out file), I have the same result
> > (with <spontaneous> calling caml_call_gc). :-(
> 
> For the sake of completeness, I installed latest OCaml 4.00.1 (for the
> recall, Linux x86_64 platform), recompiled everything from scratch and
> re-did my tests. I obtain roughly the same results and the same
> <spontaneous> calling caml_call_gc. :-(
> 
> There should be something obvious that I missed.
> 
> """
> Flat profile:
> 
> Each sample counts as 0.01 seconds.
>   %   cumulative   self              self     total
>  time   seconds   seconds    calls   s/call   s/call  name
>  32.54    155.97   155.97    35791     0.00     0.01  mark_slice
>  19.87    251.24    95.26    58230     0.00     0.00  sweep_slice
>  12.35    310.42    59.18    88113     0.00     0.00   
> camlMap__map_1150
>   6.66    342.34    31.92    94021     0.00     0.00   
> caml_oldify_mopup
>   6.57    373.81    31.47 1986040761     0.00     0.00   
> caml_page_table_lookup
>   4.66    396.17    22.36 3792214394     0.00     0.00   
> caml_fl_allocate
>   4.33    416.94    20.77 3799622226     0.00     0.00   
> caml_oldify_one
>   3.39    433.18    16.24 3873315118     0.00     0.00   
> caml_fl_merge_block
>   2.51    445.20    12.03 3792214239     0.00     0.00  caml_alloc_shr
>   1.38    451.83     6.63 3882908903     0.00     0.00
> camlData_typing__apply_1255
>   1.26    457.88     6.05 3792214239     0.00     0.00  allocate_block
>   1.20    463.62     5.74        1     5.74     5.74   
> caml_realloc_ref_table
>   0.49    465.99     2.37   188042     0.00     0.00  clear_table
>   0.44    468.09     2.10 3881730105     0.00     0.00
> camlData_typing__fun_1445
>   0.42    470.08     1.99                             caml_fl_reset
>   0.31    471.57     1.50                              
> caml_set_allocation_policy
>   0.28    472.90     1.33   896098     0.00     0.00  caml_gc_message
>   0.24    474.06     1.16       74     0.02     0.02   
> camlMap__iter_1144
>   0.22    475.12     1.06      155     0.01     0.01  caml_add_to_heap
>   0.11    475.64     0.53                              
> camlData_typing__fun_1430
>   0.07    475.98     0.34
> camlData_typing__print_vset_1115
>   0.06    476.29     0.31    94021     0.00     0.00   
> caml_oldify_local_roots
>   0.04    476.46     0.17 10355866     0.00     0.00   
> camlFormat__doprn_1525
>   0.03    476.61     0.15 95566109     0.00     0.00  caml_modify
>   0.03    476.74     0.13  5946696     0.00     0.00   
> camlFormat__kpr_1514
>   0.03    476.86     0.12 10179867     0.00     0.00
> camlFormat__advance_loop_1173
>   0.02    476.97     0.11 16452591     0.00     0.00
> camlFormat__format_pp_token_1134
>   0.02    477.05     0.08 15459066     0.00     0.00  caml_putblock
>   0.02    477.13     0.08 16452612     0.00     0.00   
> camlFormat__add_queue_1087
> [...]
> granularity: each sample hit covers 2 byte(s) for 0.00% of 479.32  
> seconds
> 
> index % time    self  children    called     name
>                 0.00    0.11      25/94021       caml_alloc_small [75]
>                 0.00    0.56     133/94021       caml_alloc_string  
> [51]
>                 0.02  394.48   93863/94021        
> caml_garbage_collection [3]
> [1]     82.4    0.02  395.15   94021         caml_minor_collection [1]
>                 0.02  297.93   94021/94021        
> caml_major_collection_slice [4]
>                 0.01   97.19  188042/188042       
> caml_empty_minor_heap [7]
>                 0.00    0.00   94021/94021       caml_final_do_calls  
> [353]
> -----------------------------------------------
>                                                  <spontaneous>
> [2]     82.3    0.04  394.50                 caml_call_gc [2]
>                 0.00  394.50   93863/93863        
> caml_garbage_collection [3]
> -----------------------------------------------
>                 0.00  394.50   93863/93863       caml_call_gc [2]
> [3]     82.3    0.00  394.50   93863         caml_garbage_collection  
> [3]
>                 0.02  394.48   93863/94021        
> caml_minor_collection [1]
>                 0.00    0.00   93863/97401
> caml_process_pending_signals [352]
> -----------------------------------------------
>                 0.02  297.93   94021/94021        
> caml_minor_collection [1]
> [4]     62.2    0.02  297.93   94021          
> caml_major_collection_slice [4]
>               155.97   29.41   35791/35791       mark_slice [5]
>                95.26   16.33   58230/58230       sweep_slice [6]
>                 0.84    0.00  564126/896098      caml_gc_message [43]
>                 0.00    0.10    4652/4652        start_cycle [76]
>                 0.00    0.01    4651/4651         
> caml_compact_heap_maybe [135]
> -----------------------------------------------
>               155.97   29.41   35791/35791        
> caml_major_collection_slice [4]
> [5]     38.7  155.97   29.41   35791         mark_slice [5]
>                29.31    0.00 1849494323/1986040761
> caml_page_table_lookup [16]
>                 0.11    0.00   71582/896098      caml_gc_message [43]
>                 0.00    0.00       1/1           realloc_gray_vals  
> [269]
>                 0.00    0.00    4652/4652        caml_final_update  
> [377]
>                 0.00    0.00    4652/4653        caml_fl_init_merge  
> [375]
> -----------------------------------------------
>                95.26   16.33   58230/58230        
> caml_major_collection_slice [4]
> [6]     23.3   95.26   16.33   58230         sweep_slice [6]
>                16.24    0.00 3873315117/3873315118      
> caml_fl_merge_block [18]
>                 0.09    0.00   58230/896098      caml_gc_message [43]
>                 0.00    0.00       1/1            
> caml_finalize_channel [477]
> -----------------------------------------------
>                 0.01   97.19  188042/188042       
> caml_minor_collection [1]
> [7]     20.3    0.01   97.19  188042         caml_empty_minor_heap [7]
>                31.92   62.08   94021/94021       caml_oldify_mopup [8]
>                 2.37    0.00  188042/188042      clear_table [29]
>                 0.31    0.07   94021/94021        
> caml_oldify_local_roots [58]
>                 0.28    0.00  188042/896098      caml_gc_message [43]
>                 0.05    0.10 9383144/3799622226     caml_oldify_one  
> [14]
>                 0.00    0.00  188042/188042       
> caml_final_empty_young [344]
> -----------------------------------------------
>                31.92   62.08   94021/94021        
> caml_empty_minor_heap [7]
> [8]     19.6   31.92   62.08   94021         caml_oldify_mopup [8]
>                20.71   41.37 3787931806/3799622226      
> caml_oldify_one [14]
> -----------------------------------------------
> [...]
> """
> 
> Best regards,
> david
> 
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa.inria.fr/sympa/arc/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
> 
> 

-- 
------------------------------------------------------------
Gerd Stolpmann, Darmstadt, Germany    gerd@gerd-stolpmann.de
Creator of GODI and camlcity.org.
Contact details:        http://www.camlcity.org/contact.html
Company homepage:       http://www.gerd-stolpmann.de
------------------------------------------------------------

  reply	other threads:[~2012-10-24 16:08 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-24 10:08 David MENTRE
2012-10-24 10:33 ` John Whitington
2012-10-24 12:30   ` David MENTRE
2012-10-24 12:39     ` John Whitington
2012-10-24 12:45       ` Edgar Friendly
2012-10-24 12:53         ` John Whitington
2012-10-24 13:19       ` David MENTRE
2012-10-24 13:27         ` John Whitington
2012-10-24 13:38         ` Oliver Bandel
2012-10-24 14:30           ` David MENTRE
2012-10-24 15:09             ` David MENTRE
2012-10-24 16:07               ` Gerd Stolpmann [this message]
2012-10-24 17:23                 ` AW: " Martin Jambon
     [not found]               ` <1351094817.12207.11@samsung>
2012-10-25  6:48                 ` David MENTRE
2012-10-25  7:37                   ` David House
2012-10-24 10:38 ` Török Edwin
2012-10-25 10:06   ` David MENTRE
2012-10-25 10:16     ` Török Edwin
2012-10-25 10:19       ` David MENTRE
2012-11-07 11:52     ` David MENTRE

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1351094857.12207.12@samsung \
    --to=info@gerd-stolpmann.de \
    --cc=caml-list@inria.fr \
    --cc=dmentre@linux-france.org \
    --cc=gerd@edgespring.com \
    --cc=oliver@first.in-berlin.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).