<div dir="ltr"><div class="gmail_default" style="font-size:large">Sounds good.  If we have time this next week, we will see about getting a first test done during our face to face week.  It&#39;s a very busy week though, so we may not be able to until after next week.</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Thanks for the pointers.</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Andy</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 3, 2017 at 9:33 AM, David Lloyd <span dir="ltr">&lt;<a href="mailto:david.lloyd@redhat.com" target="_blank">david.lloyd@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The proposed change can be found here:<br>
<a href="https://github.com/dmlloyd/wildfly-core/tree/threadpool" rel="noreferrer" target="_blank">https://github.com/dmlloyd/<wbr>wildfly-core/tree/threadpool</a><br>
<br>
You can build that wildfly-core and then build a wildfly which uses<br>
the produced build.  The whole process with -DskipTests should take<br>
under 10 minutes.  I would be very happy to know what the performance<br>
team finds, particularly in high-contention scenarios.  Thanks!<br>
<div class="HOEnZb"><div class="h5"><br>
On Fri, Nov 3, 2017 at 10:17 AM, Andrig Miller &lt;<a href="mailto:anmiller@redhat.com">anmiller@redhat.com</a>&gt; wrote:<br>
&gt; I think it would be wise for the performance team to test this out at scale<br>
&gt; using our lab, as I&#39;m sure you would agree.<br>
&gt;<br>
&gt; If you could point us at a particular build, or point us at what to build,<br>
&gt; we can do that testing in parallel and give feedback on how this is working.<br>
&gt;<br>
&gt; Thanks.<br>
&gt;<br>
&gt; Andy<br>
&gt;<br>
&gt; On Fri, Nov 3, 2017 at 8:03 AM, David Lloyd &lt;<a href="mailto:david.lloyd@redhat.com">david.lloyd@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; For WildFly 12 I intend to introduce a new thread pool implementation<br>
&gt;&gt; [1] [2] that will replace most, if not all, uses of ThreadPoolExecutor<br>
&gt;&gt; in the main codebases of WildFly and WildFly Core, and also in several<br>
&gt;&gt; support projects such as JBoss MSC and XNIO.<br>
&gt;&gt;<br>
&gt;&gt; The thread pool has the following desirable characteristics:<br>
&gt;&gt;<br>
&gt;&gt; • Idle threads are always reused before queueing tasks or starting new<br>
&gt;&gt; threads<br>
&gt;&gt; • The most recently used idle thread is always preferred, which allows<br>
&gt;&gt; the pool to shrink when it is not fully utilized<br>
&gt;&gt; • Useful core/max thread pool size distinction<br>
&gt;&gt; • API-equivalent to ThreadPoolExecutor<br>
&gt;&gt; • Performance parity with common ThreadPoolExecutor configurations<br>
&gt;&gt; • Suitable as a replacement for other jboss-threads thread pool types as<br>
&gt;&gt; well<br>
&gt;&gt;<br>
&gt;&gt; In addition, it presents the following features:<br>
&gt;&gt;<br>
&gt;&gt; • Configure via a builder API<br>
&gt;&gt; • Configurable exception handler<br>
&gt;&gt; • Integrated task queue with optional size limit<br>
&gt;&gt; • Full complement of standard metrics, which can be disabled<br>
&gt;&gt; • Configurable rejection handler in the form of a handoff executor<br>
&gt;&gt; • An optional growth-resistance algorithm which can be applied to<br>
&gt;&gt; larger pools to create growth resistance between the core and maximum<br>
&gt;&gt; pool size<br>
&gt;&gt; • An optional post-terminate task<br>
&gt;&gt; • A few system property based adjustments that can be applied for<br>
&gt;&gt; experimental purposes<br>
&gt;&gt; • A global flag which can be set via system property to recommend that<br>
&gt;&gt; the new thread pool should be disabled, allowing an emergency fallback<br>
&gt;&gt; in case of an unexpected problem<br>
&gt;&gt;<br>
&gt;&gt; Design-wise, the thread pool is based on a special lock-free/wait-free<br>
&gt;&gt; combination FIFO/LIFO queue algorithm.  See [3] for a more complete<br>
&gt;&gt; explanation of internal operation, if you&#39;re curious about the gritty<br>
&gt;&gt; details.<br>
&gt;&gt;<br>
&gt;&gt; This change has a few implications with regards to the application server:<br>
&gt;&gt; • Thread pools with a core- and max-size which were locked together<br>
&gt;&gt; may now have these variables decoupled in a safe and useful manner<br>
&gt;&gt; • Thread pool configurations in the management model which previously<br>
&gt;&gt; featured only a max size can now have a core size attribute introduced<br>
&gt;&gt;<br>
&gt;&gt; Most of the thread pools we use are built and configured within the<br>
&gt;&gt; wildfly-core code base; that is where the first part of this change<br>
&gt;&gt; will be done.  Later on there will be a follow-up change for WildFly<br>
&gt;&gt; proper, but this of course can not happen until the core change is<br>
&gt;&gt; merged and a core release done, so expect that part somewhat later.<br>
&gt;&gt; The initial WIP change to wildfly-core can be found here [4].  Note<br>
&gt;&gt; that no pull request will be opened until all the components are<br>
&gt;&gt; Final.  I have done a good deal of testing already, but I will be<br>
&gt;&gt; doing more CI testing on other platforms and configurations before<br>
&gt;&gt; submitting the PR.<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ve made an attempt to link up all the JIRAs that are related to this<br>
&gt;&gt; effort from [1] (either directly or indirectly).  If you find another<br>
&gt;&gt; JIRA that you think is related, or if you have questions or concerns,<br>
&gt;&gt; ask on this list, or you can ping me directly on HipChat or IRC.<br>
&gt;&gt;<br>
&gt;&gt; Thanks!<br>
&gt;&gt;<br>
&gt;&gt; [1] <a href="https://issues.jboss.org/browse/JBTHR-38" rel="noreferrer" target="_blank">https://issues.jboss.org/<wbr>browse/JBTHR-38</a> - Introduce new thread<br>
&gt;&gt; pool implementation<br>
&gt;&gt; [2] <a href="https://github.com/jbossas/jboss-threads/commit/be95b8d6b42128" rel="noreferrer" target="_blank">https://github.com/jbossas/<wbr>jboss-threads/commit/<wbr>be95b8d6b42128</a><br>
&gt;&gt; [3]<br>
&gt;&gt; <a href="https://github.com/jbossas/jboss-threads/commit/be95b8d6b42128#diff-f5807a689506af0b70791d93ae81cc1cR67" rel="noreferrer" target="_blank">https://github.com/jbossas/<wbr>jboss-threads/commit/<wbr>be95b8d6b42128#diff-<wbr>f5807a689506af0b70791d93ae81cc<wbr>1cR67</a><br>
&gt;&gt; [4] <a href="https://github.com/dmlloyd/wildfly-core/tree/threadpool" rel="noreferrer" target="_blank">https://github.com/dmlloyd/<wbr>wildfly-core/tree/threadpool</a><br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; - DML<br>
&gt;&gt;<br>
&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt; wildfly-dev mailing list<br>
&gt;&gt; <a href="mailto:wildfly-dev@lists.jboss.org">wildfly-dev@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/wildfly-dev</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Andrig (Andy) T. Miller<br>
&gt; Global Platform Director, Middleware<br>
&gt; Red Hat, Inc.<br>
<br>
<br>
<br>
</div></div><span class="HOEnZb"><font color="#888888">--<br>
- DML<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div><font size="4">Andrig (Andy) T. Miller<br></font></div><font size="4">Global Platform Director, Middleware<br></font></div><font size="4">Red Hat, Inc.</font><br></div></div></div></div>
</div>