]> git.llucax.com Git - personal/website.git/blob - source/blog/posts/2009/10/08-stats-for-the-basic-gc.rst
Import personal website to git
[personal/website.git] / source / blog / posts / 2009 / 10 / 08-stats-for-the-basic-gc.rst
1 Title: Stats for the basic GC
2 Tags: en, d, dgc, gc, basic, dgcbench, benchmark, statistics
3
4 Here are some graphs made from my `D GC benchmarks`__ using the Tango__
5 (0.99.8) basic collector, similar to the naive__ ones__ but using histograms
6 for allocations (time and space):
7
8 __ http://git.llucax.com.ar/w/software/dgc/dgcbench.git
9 __ http://www.dsource.org/projects/tango/
10 __ http://git.llucax.com.ar/w/software/dgc/naive.git
11 __ http://llucax.com.ar/blog/blog/post/37e6cb2a
12
13 .. container:: center
14
15     |big_arrays| |rnd_data| |rnd_data_2| |split| |tree|
16
17 .. |big_arrays| image:: ##POST_URL##/08-stats-for-the-basic-gc/big_arrays.mini.png
18    :target: ##POST_URL##/08-stats-for-the-basic-gc/big_arrays.png
19
20 .. |rnd_data_2| image:: ##POST_URL##/08-stats-for-the-basic-gc/rnd_data_2.mini.png
21    :target: ##POST_URL##/08-stats-for-the-basic-gc/rnd_data_2.png
22
23 .. |rnd_data| image:: ##POST_URL##/08-stats-for-the-basic-gc/rnd_data.mini.png
24    :target: ##POST_URL##/08-stats-for-the-basic-gc/rnd_data.png
25
26 .. |split| image:: ##POST_URL##/08-stats-for-the-basic-gc/split.mini.png
27    :target: ##POST_URL##/08-stats-for-the-basic-gc/split.png
28
29 .. |tree| image:: ##POST_URL##/08-stats-for-the-basic-gc/tree.mini.png
30    :target: ##POST_URL##/08-stats-for-the-basic-gc/tree.png
31
32 Some comments:
33
34 * The *Wasted* space is the *Uncommitted* space (since the basic GC doesn't
35   track the real size of the stored object).
36 * The *Stop-the-world* time is the time all the threads are stopped, which is
37   almost the same as the time spent scanning the heap.
38 * The *Collect* time is the total time spent in a collection. The
39   difference with the *Stop-the-world* time is almost the same as the time
40   spent in the sweep phase, which is done after the threads have being resumed
41   (except the thread that triggered the collection).
42
43 There are a few observations to do about the results:
44
45 * The *stop the world* time varies a lot. There are tests where is almost
46   unnoticeable (``tree``), tests where it's almost equals to the total
47   collection time (``rnd_data``, ``rnd_data_2``, ``split``) and test where it's
48   in the middle (``big_arrays``). I can't see a pattern though (like heap
49   occupancy).
50 * There are tests where it seems that collections are triggered for no reason;
51   there is plenty of free space when it's triggered (``tree`` and
52   ``big_arrays``).  I haven't investigated this yet, so if you can see
53   a reason, please let me know.
54
55
56 .. vim: set et sw=4 sts=4 :