<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>git.llucax.com.ar Git - software/dgc/cdgc.git/atom log</title>
<subtitle>Concurrent D Garbage Collector</subtitle>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git" />
<link rel="self" type="text/xml" href="http://git.llucax.com.ar/w" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git</id>
<author><name></name></author>
<icon>/static/git-favicon.png</icon>
<logo>/static/git-logo.png</logo>
<updated>2011-07-19T02:02:25Z</updated>
<generator version='1.7.5.4/1.7.5.4'>gitweb</generator>
<entry>
<title type="html">Don't leak weak pointers</title>
<updated>2011-07-19T02:02:25Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2011-07-19T02:02:25Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/68f7d87cf5eae6f656e43bb8472b555755a9cef4" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/68f7d87cf5eae6f656e43bb8472b555755a9cef4</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Don't leak weak pointers

The free() call after the return is never executed, so we have to move it
inside the locked() block of code.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/c8b9c37decb76b4667358e4d95ff928eb9f8fc8c..68f7d87cf5eae6f656e43bb8472b555755a9cef4:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/68f7d87cf5eae6f656e43bb8472b555755a9cef4?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Adapt conservative default to the compiler support</title>
<updated>2010-10-21T00:36:25Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-10-21T00:36:25Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c8b9c37decb76b4667358e4d95ff928eb9f8fc8c" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c8b9c37decb76b4667358e4d95ff928eb9f8fc8c</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Adapt conservative default to the compiler support

When compiling the GC with a compiler that doesn't provide PointerMap
information, the conservative option defaults to true, as most likely the
GC will be used with programs compiled with the same compiler and all data
will be scanned conservatively anyway.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/c7848730fed4af4c843bd887409acfe770a793ba..c8b9c37decb76b4667358e4d95ff928eb9f8fc8c:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/c8b9c37decb76b4667358e4d95ff928eb9f8fc8c?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Avoid compile error for LDC</title>
<updated>2010-10-21T00:30:49Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-10-21T00:30:49Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c7848730fed4af4c843bd887409acfe770a793ba" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c7848730fed4af4c843bd887409acfe770a793ba</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Avoid compile error for LDC

The variables used in scope(exit) must be declared before the scope
statement.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/b5c4d254c9df225484907a78437474f95c3e48c4..c7848730fed4af4c843bd887409acfe770a793ba:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/c7848730fed4af4c843bd887409acfe770a793ba?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Add (optional) early collection support</title>
<updated>2010-09-20T23:30:16Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-20T23:30:16Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/b5c4d254c9df225484907a78437474f95c3e48c4" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/b5c4d254c9df225484907a78437474f95c3e48c4</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Add (optional) early collection support

When early collection is enabled, the collection will be triggered before
the memory is actually exhausted (the min_free option is used to determine
how early the collection should be triggered). This could remove a little
pressure from the GC when eager allocation is not available (or when eager
allocation makes the heap grow too much).

The option is disabled by default and can be disabled with the
early_collect option.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/7b736090719c6f08e286b246d9b7509413716fcf..b5c4d254c9df225484907a78437474f95c3e48c4:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/b5c4d254c9df225484907a78437474f95c3e48c4?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/7b736090719c6f08e286b246d9b7509413716fcf..b5c4d254c9df225484907a78437474f95c3e48c4:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/b5c4d254c9df225484907a78437474f95c3e48c4?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Change the min_free default to 5%</title>
<updated>2010-09-20T23:25:58Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-20T23:25:58Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/7b736090719c6f08e286b246d9b7509413716fcf" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/7b736090719c6f08e286b246d9b7509413716fcf</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Change the min_free default to 5%

Empirical tests shown that the performance is a little better with a lower
memory footprint.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/5b2d2da5852125f6accb61bdaf6eeda0776ebf85..7b736090719c6f08e286b246d9b7509413716fcf:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/7b736090719c6f08e286b246d9b7509413716fcf?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Add (disabled) debug print of overriden options</title>
<updated>2010-09-20T23:22:36Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-20T23:22:36Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/5b2d2da5852125f6accb61bdaf6eeda0776ebf85" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/5b2d2da5852125f6accb61bdaf6eeda0776ebf85</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Add (disabled) debug print of overriden options
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/c13d9fa4737aed2c0849b1c73c0c11e2eddbcb28..5b2d2da5852125f6accb61bdaf6eeda0776ebf85:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/5b2d2da5852125f6accb61bdaf6eeda0776ebf85?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Make realloc() a little more readable</title>
<updated>2010-09-20T00:04:50Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-20T00:04:50Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c13d9fa4737aed2c0849b1c73c0c11e2eddbcb28" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c13d9fa4737aed2c0849b1c73c0c11e2eddbcb28</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Make realloc() a little more readable

This is only an aesthetic change, some unneeded indentation is remove by
removing some &quot;else&quot; blocks when return statements ensures that path
wouldn't be followed anyway.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/e888278340bec7db261d6593c42e687f7c29cb59..c13d9fa4737aed2c0849b1c73c0c11e2eddbcb28:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/c13d9fa4737aed2c0849b1c73c0c11e2eddbcb28?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Abstract how we know if a collection is in progress</title>
<updated>2010-09-19T23:53:19Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-19T23:53:19Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/e888278340bec7db261d6593c42e687f7c29cb59" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/e888278340bec7db261d6593c42e687f7c29cb59</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Abstract how we know if a collection is in progress
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/fab64ab48e28ed336fb0cdc638d656aacb89e614..e888278340bec7db261d6593c42e687f7c29cb59:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/e888278340bec7db261d6593c42e687f7c29cb59?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Accommodate the heap size to the working set size</title>
<updated>2010-09-16T03:35:35Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-16T03:35:35Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/fab64ab48e28ed336fb0cdc638d656aacb89e614" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/fab64ab48e28ed336fb0cdc638d656aacb89e614</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Accommodate the heap size to the working set size

The GC can have a lot of pressure if a collection recovers very little
memory, but enough to fulfill the current memory request, causing a lot of
collections with too little gain (when the key to a efficient GC is
recover the bigger amount of memory with as little work as possible).

This effect is greatly reduced when using eager allocation, because
eventually the GC will allocate more memory, but heap minimization can
trigger this effect again.

This patch adds an option, min_free, which specifies the minimum
percentage of heap that should be free after a collection. If the free
heap is less than min_free% of the total heap, the GC will allocate a new
pool, big enough to fulfill that requirement. If the free heap is bigger
than min_free% of the total heap, the GC will try to release some pools to
the OS to keep the heap occupancy near min_free%.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/fcae2848ff5191cadae251c0a1c5ce3ea66a02b8..fab64ab48e28ed336fb0cdc638d656aacb89e614:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/fab64ab48e28ed336fb0cdc638d656aacb89e614?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/fcae2848ff5191cadae251c0a1c5ce3ea66a02b8..fab64ab48e28ed336fb0cdc638d656aacb89e614:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/fab64ab48e28ed336fb0cdc638d656aacb89e614?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Try to keep the memory usage low more aggressively</title>
<updated>2010-09-15T01:15:29Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-15T01:15:29Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/fcae2848ff5191cadae251c0a1c5ce3ea66a02b8" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/fcae2848ff5191cadae251c0a1c5ce3ea66a02b8</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Try to keep the memory usage low more aggressively

Memory usage is minimize()d only when a big allocation is done. This could
be problematic for applications that only perform small objects
allocation, as their memory usage could grow a lot, specially if the eager
allocation option is used.

Trigger memory minimization even for small objects allocation to avoid
that pathological case.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/3389bc359d65b04c74bb41ef4b640367cb9aa617..fcae2848ff5191cadae251c0a1c5ce3ea66a02b8:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/fcae2848ff5191cadae251c0a1c5ce3ea66a02b8?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Make bigAlloc() a little bit more readable</title>
<updated>2010-09-15T00:14:17Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-15T00:14:17Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/3389bc359d65b04c74bb41ef4b640367cb9aa617" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/3389bc359d65b04c74bb41ef4b640367cb9aa617</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Make bigAlloc() a little bit more readable

bigAlloc() is implemented a weird state machine that even have some paths
that are not only unreadable, but useless.

The new implementation is still not ideal, but at least a human can read
it and even understand what's doing.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/9d60963df0295d680423c4b133a75ac26db398e2..3389bc359d65b04c74bb41ef4b640367cb9aa617:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/3389bc359d65b04c74bb41ef4b640367cb9aa617?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Use a function to round up sizes to PAGESIZE</title>
<updated>2010-09-14T23:28:35Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-14T23:28:35Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/9d60963df0295d680423c4b133a75ac26db398e2" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/9d60963df0295d680423c4b133a75ac26db398e2</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Use a function to round up sizes to PAGESIZE
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/8183938bc0141793deae76c17ea182b2774fd0df..9d60963df0295d680423c4b133a75ac26db398e2:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/9d60963df0295d680423c4b133a75ac26db398e2?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Add pre_alloc configuration option</title>
<updated>2010-09-14T23:14:10Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-14T23:14:10Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/8183938bc0141793deae76c17ea182b2774fd0df" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/8183938bc0141793deae76c17ea182b2774fd0df</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Add pre_alloc configuration option

The new option is used to pre-allocate pools of memory at program start.
This could be useful if your program need to load a starting working set
into memory before doing the actual work, as it might avoid some useless
initial collections while the program is just doing allocation but no
memory is yet freed.

The option takes a numeric parameter indicating the size of the initial
pool in MiB. It can optionally specify an arbitrary number of pools to
create by appending &quot;x&quot; and the numeric value of the number of pools. Each
pool will have the specified pool size.

For exmaple, pre_alloc=50 will allocate an initial pool of 50 MiB, while
pre_alloc=5x10 will allocate 10 pools with 5 MiB each. Anything that can't
be parsed correctly (like &quot;&quot;, &quot;5x&quot;, &quot;5a10&quot;, &quot;5x10x&quot;, etc.) make the
starts with no pre-allocated memory as usual.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/9457e6cc1d1c824901af4fa8baca99f9b753b9cd..8183938bc0141793deae76c17ea182b2774fd0df:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/8183938bc0141793deae76c17ea182b2774fd0df?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/9457e6cc1d1c824901af4fa8baca99f9b753b9cd..8183938bc0141793deae76c17ea182b2774fd0df:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/8183938bc0141793deae76c17ea182b2774fd0df?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Don't segfault if stats files can't be created</title>
<updated>2010-09-09T23:05:55Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-09T23:05:55Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/9457e6cc1d1c824901af4fa8baca99f9b753b9cd" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/9457e6cc1d1c824901af4fa8baca99f9b753b9cd</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Don't segfault if stats files can't be created

If any stats files (used by collect_stats_file and malloc_stats_file)
can't be created, the program segfauls trying to use a null FILE*.

It's extremely impolite to cause an strange segfault because of this, and
since there is no sensible error reporting mechanism either, we just
ignore those options if the selected files are not writable, as we do
with unknown options or any other wrong option parameters.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/c216b75a02d7b09c6949be6ec102b5557a060c08..9457e6cc1d1c824901af4fa8baca99f9b753b9cd:/rt/gc/cdgc/stats.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/9457e6cc1d1c824901af4fa8baca99f9b753b9cd?f=rt/gc/cdgc/stats.d">H</a>] rt/gc/cdgc/stats.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Change 'no_fork' option to 'fork'</title>
<updated>2010-09-09T21:33:56Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-09T21:33:56Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c216b75a02d7b09c6949be6ec102b5557a060c08" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/c216b75a02d7b09c6949be6ec102b5557a060c08</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Change 'no_fork' option to 'fork'

Even when using fork is a little more verbose, since fork=0 must be
specified to disable forking, it's more consistent with other options.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28..c216b75a02d7b09c6949be6ec102b5557a060c08:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/c216b75a02d7b09c6949be6ec102b5557a060c08?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Add eager allocation support when fork()ing</title>
<updated>2010-09-09T03:17:16Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-09T03:17:16Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Add eager allocation support when fork()ing

Eager allocation consist in allocating a new pool when a collection is
triggered (because an allocation failed to find enough free space in the
current pools). This enables the mutator to keep running when the mark
phase run in a fork()ed process in parallel. This completes the concurrent
GC, decreasing the maximum pause time (not only the stop-the-world time)
dramatically (almost by 2 orders of magnitude).

As a side effect, the total run-time is greatly reduced too because the GC
pressure is reduced due to the extra allocated pools. The number of
collections needed by a program can be reduced 3 to 9 times depending on
the load, which explains the total run-time reduction, even for
single-core environments.

To allow the mutator run in parallel with the mark phase, the freebits
of free pages must be set for *all* the possible block sizes, not only for
the start of the page, because the freebits are used as a starting point
for mark bits and the bin size of a freed page can be changed *after* the
mark phase is started, resulting in an inconsistency between mark bits and
free bits. Pools allocated during a parallel mark set all the mark bits
to avoid the sweep phase freeing those pages after the mark is done.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/b78600681ff7735e523edbae7adfeb3577db0f41..6a40cbf5959226bf1e6ec7bdb6c7e03253072c28:/rt/gc/cdgc/bits.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28?f=rt/gc/cdgc/bits.d">H</a>] rt/gc/cdgc/bits.d</li>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/b78600681ff7735e523edbae7adfeb3577db0f41..6a40cbf5959226bf1e6ec7bdb6c7e03253072c28:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/b78600681ff7735e523edbae7adfeb3577db0f41..6a40cbf5959226bf1e6ec7bdb6c7e03253072c28:/rt/gc/cdgc/opts.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28?f=rt/gc/cdgc/opts.d">H</a>] rt/gc/cdgc/opts.d</li>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/b78600681ff7735e523edbae7adfeb3577db0f41..6a40cbf5959226bf1e6ec7bdb6c7e03253072c28:/rt/gc/cdgc/os.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/6a40cbf5959226bf1e6ec7bdb6c7e03253072c28?f=rt/gc/cdgc/os.d">H</a>] rt/gc/cdgc/os.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Remove unused code for buggy OSs</title>
<updated>2010-09-06T02:16:26Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-06T02:16:26Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/b78600681ff7735e523edbae7adfeb3577db0f41" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/b78600681ff7735e523edbae7adfeb3577db0f41</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Remove unused code for buggy OSs
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/3f609656ee57bc578da59dc7fb4d27cdaea2ad18..b78600681ff7735e523edbae7adfeb3577db0f41:/rt/gc/cdgc/bits.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/b78600681ff7735e523edbae7adfeb3577db0f41?f=rt/gc/cdgc/bits.d">H</a>] rt/gc/cdgc/bits.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Build the freebits bit set incrementally</title>
<updated>2010-09-05T22:01:52Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-05T22:01:52Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/3f609656ee57bc578da59dc7fb4d27cdaea2ad18" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/3f609656ee57bc578da59dc7fb4d27cdaea2ad18</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Build the freebits bit set incrementally

As a side effect, we can't copy anymore the freebits as the starting mark
bits because we don't keep the freebits updated so precisely, doing so
would need a bit more work.

Since the freebits can be constructed in the mark phase, which we can do
in parallel, this might not be as useful as thought at first.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/e74b77edc55c73d1f1656131a645eed30a59727f..3f609656ee57bc578da59dc7fb4d27cdaea2ad18:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/3f609656ee57bc578da59dc7fb4d27cdaea2ad18?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Avoid output duplication because of FILE* buffers</title>
<updated>2010-09-06T02:02:45Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-06T02:02:45Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/e74b77edc55c73d1f1656131a645eed30a59727f" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/e74b77edc55c73d1f1656131a645eed30a59727f</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Avoid output duplication because of FILE* buffers

FILE* buffers are duplicated when fork()ing, and at program exit(), the C
library flushes the FILE* buffers, resulting in duplicated output.

To avoid this we flush all FILE* buffers before fork()ing.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/cc0ea21e4d2f60ad8cc8c4cc5da47264b8e0dc85..e74b77edc55c73d1f1656131a645eed30a59727f:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/e74b77edc55c73d1f1656131a645eed30a59727f?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
<entry>
<title type="html">Avoid redundant checks for finals bits</title>
<updated>2010-09-04T01:13:06Z</updated>
<author>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</author>
<contributor>
  <name>Leandro Lucarella</name>
  <email>llucax@gmail.com</email>
</contributor>
<published>2010-09-04T01:13:06Z</published>
<link rel="alternate" type="text/html" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/cc0ea21e4d2f60ad8cc8c4cc5da47264b8e0dc85" />
<id>http://git.llucax.com.ar/w/software/dgc/cdgc.git/commitdiff/cc0ea21e4d2f60ad8cc8c4cc5da47264b8e0dc85</id>
<content type="xhtml" xml:base="http://git.llucax.com.ar/w">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Avoid redundant checks for finals bits

In changeset b28fd72842fc9ce935bed74f7b2ba79f9cc59711 (Run the mark phase
in a fork()ed process) we inadvertently changed the lazy allocation of
finals bit set to eager allocation.

This change left a lot of finals bit set initialization checks that are
not really needed using eager allocation.

We remove this redundant check as we decided to go with the eager
allocation to trade some space for a little more speed, as the extra
checks takes time and is very rare that a whole pool doesn't have any
blocks that need finalization, making the space saving very rare too.

Lazy allocation can impact too in locality of reference, as is more likely
that all the bit sets are allocated near in space, except for the lazyly
allocated one.
</pre><ul>
<li>[<a title="diff" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/blobdiff/7e86fae368de25d7134db3e3afa586cdd588fdb6..cc0ea21e4d2f60ad8cc8c4cc5da47264b8e0dc85:/rt/gc/cdgc/gc.d">D</a><a title="history" href="http://git.llucax.com.ar/w/software/dgc/cdgc.git/history/cc0ea21e4d2f60ad8cc8c4cc5da47264b8e0dc85?f=rt/gc/cdgc/gc.d">H</a>] rt/gc/cdgc/gc.d</li>
</ul>
</div>
</content>
</entry>
</feed>

