Indeed - great to see some of the thought going into this area of the project :)<div><br></div><div>If I make any progress on the actual HW I&#39;ll be sure to let you know.<div><br></div><div>Liam<br><br><div class="gmail_quote">
On Tue, Apr 5, 2011 at 1:51 PM, Dima Tisnek <span dir="ltr">&lt;<a href="mailto:dimaqq@gmail.com">dimaqq@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Armin, thanks for pointing me in the right direction.<br>
<br>
If minimark.py docstring is up to date, looks like it will do close to<br>
the right thing on arm5/9.<br>
<br>
Some of the older arms don&#39;t have L2 cache, I&#39;m not sure what<br>
/proc/cpuinfo reports in this case, perhaps L1 cache size or nothing.<br>
It seems if the cache line is missing in cpuinfo, get_L2cache_linux2<br>
would return maxint (ouch memory) or, if kernel prints 0 there, then 0<br>
(ouch cpu), or if -1 gets in the way, default nursery size, which is<br>
256 bytes (ouch cpu again). If anyone tries to run pypy under QEMU in<br>
system mode, results might be very very odd!<br>
<br>
Modern arm processors have L2 cache from 256KB to 1MB, thus the<br>
expected minimum threshold is 1MB to 4MB, seems reasonable enough, as<br>
importing a decent set of python standard library is around that.<br>
<br>
I&#39;m sure Liam is pleased :P<br>
<font color="#888888"><br>
d.<br>
</font><div><div></div><div class="h5"><br>
On 5 April 2011 13:00, Armin Rigo &lt;<a href="mailto:arigo@tunes.org">arigo@tunes.org</a>&gt; wrote:<br>
&gt; Hi Dima,<br>
&gt;<br>
&gt; On Tue, Apr 5, 2011 at 9:52 PM, Dima Tisnek &lt;<a href="mailto:dimaqq@gmail.com">dimaqq@gmail.com</a>&gt; wrote:<br>
&gt;&gt; What I mean<br>
&gt;&gt; to say is that there&#39;s gotta be a more clever way where gc thresholds<br>
&gt;&gt; depend on e.g. size of working set or rate of new allocations or<br>
&gt;&gt; something yet smarter.<br>
&gt;<br>
&gt; Yes, it does in PyPy; we do a full collection when the total amount of<br>
&gt; data reaches 1.82 times (by default) the amount of live data at the<br>
&gt; end of the previous collection, with additional tweaks to improve<br>
&gt; performance in various cases -- and one such tweak is to set the<br>
&gt; minimum threshold to 16MB (actually, now I think it is not fixed to<br>
&gt; 16MB but it depends on the amount of L2 cache).  It was all reached by<br>
&gt; various benchmarks on various desktop machines, including the minimum<br>
&gt; threshold.  You can see the various thresholds and their defaults at<br>
&gt; the start of pypy/rpython/memory/gc/minimark.py (and that&#39;s only if<br>
&gt; you are using minimark, our default GC).<br>
&gt;<br>
&gt; Of course all the numbers -- and even half of the algorithms -- are<br>
&gt; going to be bogus if you start to think about very different machines.<br>
&gt;  That&#39;s what I meant when I said that there is open work to do, and<br>
&gt; you or anyone with an interest in the area (and corresponding<br>
&gt; hardware) is welcome to attack it.<br>
&gt;<br>
&gt;<br>
&gt; A bientôt,<br>
&gt;<br>
&gt; Armin<br>
&gt;<br>
</div></div></blockquote></div><br></div></div>