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
------------------------------------------------------------
next prev parent 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