<div dir="ltr">On Tue, Apr 9, 2013 at 3:02 PM, Laurent Bourgès <span dir="ltr"><<a href="mailto:bourges.laurent@gmail.com" target="_blank">bourges.laurent@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Dear Java2D members,<br><br>Could someone review the following webrev concerning Java2D Pisces to enhance its performance and reduce its memory footprint (RendererContext stored in thread local or concurrent queue):<br>
<a href="http://jmmc.fr/~bourgesl/share/java2d-pisces/webrev-1/" target="_blank">http://jmmc.fr/~bourgesl/share/java2d-pisces/webrev-1/</a><br>
<br>FYI I fixed file headers in this patch and signed my OCA 3 weeks ago.<br><br>Remaining work:<br>- cleanup (comments ...)<br>- statistics to perform auto-tuning<br>- cache / memory cleanup (SoftReference ?): use hints or System properties to adapt it to use cases<br>

- another problem: fix clipping performance in Dasher / Stroker for segments out of bounds<br><br>Could somebody support me ? ie help me working on these tasks or just to discuss on Pisces algorithm / implementation ?<br>
</blockquote><div><br></div><div style>Hi,</div><div style>I would like to express my support for this patch. </div><div style>Given that micro-benchmarks have already been run, I took the patch for a spin in a large, real world benchmark instead,</div>
<div style>the OSGeo WMS Shootout 2010 benchmark, for which you can see the results here:</div><div style><a href="http://www.slideshare.net/gatewaygeomatics.com/wms-performance-shootout-2010">http://www.slideshare.net/gatewaygeomatics.com/wms-performance-shootout-2010</a><br>
</div><div style><br></div><div style>The presentation is long, but suffice it to say all Java based implementations took quite the beating due to the</div><div style>poor scalability of Ductus with antialiased rendering of vector data (for an executive summary just look</div>
<div style>at slide 27 and slide 66, where GeoServer, Oracle MapViewer and Constellation SDI were the </div><div style>Java based ones)</div><div style><br></div><div style>I took the same tests and run them again on my machine (different hardware than the tests, don't try to compare</div>
<div style>the absolute values), using Oracle JDK 1.7.0_17, OpenJDK 8 (a checkout a couple of weeks old) and the</div><div style>same, but with Laurent's patches applied. <br>Here are the results, throughput (in maps generated per second) with the load generator (JMeter) going</div>
<div style>up from one client to 64 concurrent clients:</div><div style><br></div><div style>
        
        
        
        



<table cellspacing="0" cols="5" border="0">
        <colgroup width="111"></colgroup>
        <colgroup width="110"></colgroup>
        <colgroup span="2" width="154"></colgroup>
        <colgroup width="139"></colgroup>
        <tbody><tr>
                <td style="border:1px solid rgb(0,0,0)" height="32" align="LEFT"><b>Threads</b></td>
                <td style="border:1px solid rgb(0,0,0)" align="LEFT"><b>JDK 1.7.0_17</b></td>
                <td style="border:1px solid rgb(0,0,0)" align="LEFT"><b>OpenJDK 8, vanilla</b></td>
                <td style="border:1px solid rgb(0,0,0)" align="LEFT"><b>OpenJDK 8 + pisces renderer improvements</b></td>
                <td style="border:1px solid rgb(0,0,0)" align="LEFT"><b>Pisces renderer performance gain, %</b></td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">1</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">13,97</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">12,43</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">13,03</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">4,75%</td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">2</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">22,08</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">20,60</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">20,77</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">0,81%</td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">4</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">34,36</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">33,15</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">33,36</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">0,62%</td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">8</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">39,39</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">40,51</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">41,71</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">2,96%</td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">16</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">40,61</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">44,57</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">46,98</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">5,39%</td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">32</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">41,41</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">44,73</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">48,16</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">7,66%</td>
        </tr>
        <tr>
                <td style="border:1px solid rgb(0,0,0)" height="16" align="RIGHT">64</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">37,09</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">42,19</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">45,28</td>
                <td style="border:1px solid rgb(0,0,0)" align="RIGHT">7,32%</td>
        </tr>
</tbody></table></div><div style><br></div><div style>Well, first of all, congratulations to the JDK developers, don't know what changed in JDK 8, but</div><div style>GeoServer seems to like it quite a bit :-).</div>
<div style>That said, Laurent's patch also gives a visible boost, especially when several concurrent clients are</div><div style>asking for the maps.</div><div style><br></div><div style>Mind, as I said, this is no micro-benchmark, it is a real application loading doing a lot of I/O</div>
<div style>(from the operating system file cache), other processing before the data reaches the rendering</div><div style>pipeline, and then has to PNG encode the output BufferedImage (PNG encoding being rather</div><div style>
expensive), so getting this speedup from just a change in the rendering pipeline is significant.</div><div style><br></div><div style>Long story short... personally I'd be very happy if this patch was going to be integrated in Java 8 :-)</div>
<div style><br></div><div style>Cheers</div><div style>Andrea</div><div style><br></div></div>-- <br><div dir="ltr"><div>==</div><div>GeoServer training in Milan, 6th & 7th June 2013!  Visit <a href="http://geoserver.geo-solutions.it/" style="color:rgb(17,85,204)" target="_blank">http://geoserver.geo-solutions.it</a> for more information.<br>
==<br></div><div><br></div><div>Ing. Andrea Aime </div><div>@geowolf</div><div>Technical Lead</div><div><br></div><div>GeoSolutions S.A.S.</div><div>Via Poggio alle Viti 1187</div><div>55054  Massarosa (LU)</div><div>Italy</div>
<div>phone: +39 0584 962313</div><div>fax: +39 0584 1660272</div><div>mob: +39  339 8844549</div><div><br></div><div><a href="http://www.geo-solutions.it" target="_blank">http://www.geo-solutions.it</a></div><div><a href="http://twitter.com/geosolutions_it" target="_blank">http://twitter.com/geosolutions_it</a></div>
<div><br></div><div>-------------------------------------------------------</div></div>
</div></div>