Return-Path: Delivered-To: apmail-harmony-dev-archive@www.apache.org Received: (qmail 69875 invoked from network); 31 Dec 2006 15:26:51 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 31 Dec 2006 15:26:51 -0000 Received: (qmail 80842 invoked by uid 500); 31 Dec 2006 15:26:53 -0000 Delivered-To: apmail-harmony-dev-archive@harmony.apache.org Received: (qmail 80774 invoked by uid 500); 31 Dec 2006 15:26:52 -0000 Mailing-List: contact dev-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list dev@harmony.apache.org Received: (qmail 80764 invoked by uid 99); 31 Dec 2006 15:26:52 -0000 X-ASF-Spam-Status: No, hits=2.0 required=10.0 tests=HTML_MESSAGE,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: domain of weldonwjw@gmail.com designates 66.249.92.175 as permitted sender) Received: from [66.249.92.175] (HELO ug-out-1314.google.com) (66.249.92.175) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 31 Dec 2006 07:26:50 -0800 Received: by ug-out-1314.google.com with SMTP id z36so3915027uge for ; Sun, 31 Dec 2006 07:25:21 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=qjrxYaWfmRcaEpE2O1mrRuBTgxPvSzb4kYEYnnWqSdvHxKF0veJIszb4L1uFaeyznKFMQ3h1hZjz5iH2Uz8TFDB4unWiPn0MHoDFqgw1dsmlVUrsS9MMppUP2iT774Hb745i/n3qdoJ2PvG/JYIcbzHDLifGe5yOk0u+fZoq+2s= Received: by 10.78.17.4 with SMTP id 4mr3067955huq.1167578323656; Sun, 31 Dec 2006 07:18:43 -0800 (PST) Received: by 10.78.137.2 with HTTP; Sun, 31 Dec 2006 07:18:43 -0800 (PST) Message-ID: <4dd1f3f00612310718t23fd2cf6tb178d9cb0e97b9dd@mail.gmail.com> Date: Sun, 31 Dec 2006 07:18:43 -0800 From: "Weldon Washburn" To: dev@harmony.apache.org Subject: Re: [drlvm] finalizer design questions In-Reply-To: <783bf8b0612290350r6f175763ucf36f49b6db10879@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_159614_31882782.1167578323383" References: <4dd1f3f00612211832u447fa2e4i90b4eb108762af8f@mail.gmail.com> <4dd1f3f00612251705j1a331404sa60db8b43c40a30d@mail.gmail.com> <208da7a50612260642g4314df3es8ed8b57865f4e5b2@mail.gmail.com> <4dd1f3f00612260753r703a65a4yf3b5c1dfc632bdb@mail.gmail.com> <4AFE8DB0-26D1-4CA1-A7D9-FCAD13AC33A4@pobox.com> <9623c9a50612261730k1c7342c3m9ad6b3d158cedcd1@mail.gmail.com> <866ECD92-8D0F-4F0D-B214-1B27A8870C5A@pobox.com> <4dd1f3f00612271834j7afa7a06v5778d3783df525db@mail.gmail.com> <783bf8b0612280743k26dd70d9qe290fe635b70593b@mail.gmail.com> <783bf8b0612290350r6f175763ucf36f49b6db10879@mail.gmail.com> X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_159614_31882782.1167578323383 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline On 12/29/06, Pavel Afremov wrote: > > I've checked Weldon's finalization scheme and two existing schemes on > Weldon's test in mode 1 and 2. > On my Machine WinXP HT Pentium 4 I've got following results. > > Weldon's design (on my machine 2 threads with highest priority). > Mode 1: 1/50 (main loop/finalizer call) > Mode 2: 1/50 (main loop/finalizer call) This looks good to me. Its close enough for the current state of drlvm. In other words, don't try to precisely replicate the performance numbers I collected from Sun 1.5.0. Multithreading java scheme (old DRLVM scheme) > Mode 1: 1/1 (main loop/finalizer call) > Mode 2 1/250 (main loop/finalizer call) > One native thread with highest priority (like new GC v5 scheme) > Mode 1: 1/1 (main loop/finalizer call) > Mode 2: 1/1 (main loop/finalizer call) Its unclear if you actually ran GCv5 finalizer code or something "like new GC v5 scheme". I don't know what the data means. >From Weldon's data SUN 1.5.0 JVM has: > Mode 1: 1/50 (main loop/finalizer call) (may be 1/90) > Mode 2: 1/173 (main loop/finalizer call) (15 / 2600 = 1/173) > > As I understand the ideal finalization scheme should provide: > Mode 1: 1/1 (main loop/finalizer call) > Mode 2: 0/1 (main loop/finalizer call) The point is that the "ideal finalization" design needs to be driven by what important commercial workloads require. It will be a while before these workloads run fast and stable on drlvm. In other words, drlvm is not yet ready for investigating the final finalization scheme. Incidentally, the data collected on Sun 1.5.0 contradicts the "ideal finalization scheme" suggested above. Given a choice, I would rather do something similar to a commercial JVM implementation at this point in time. So relative performance of Weldon's scheme in mode 2 is not so high as for > SUN 1.5.0 JVM 15/ 2600 = 1/173 (main loop/finalizer call). I think you are talking about the difference between 1/50 and 1/173. In my opinion, this difference is in the noise. Its not material. I think that it can be improved by point 2 of my scheme (Using locks for > stopping user threads) As far as I can tell Sun 1.5.0 does not do this. Also, adding more thread suspend/resume logic to dlrvm does not help stability and actually may decrease stability. or by increasing quantity of finalizer threads like > in current scheme of finalization. As far as I can tell Sun 1.5.0 does not do this. Until additional evidence is available, I vote for the simplest possible finalizer scheme. This will help us a bunch in sorting out the problems in drlvm threading subsystem. Thanks. > Pavel Afremov > > On 12/28/06, Pavel Afremov wrote: > > > Did you check it on current implementation of DRLVM Finalization System? > > > > BR > > Pavel Afremov. > > > > > > On 12/28/06, Weldon Washburn wrote: > > > > > > On 12/27/06, Geir Magnusson Jr. wrote > > > > > > > > > > > > > [snip] > > > > > > > > > > > > > > > > > > > Why can't we simply mimic the rational behavior of the RI and other > > > > production VMs and leave it at that? > > > > > > > > geir > > > > > > > > > I agree. To discover what other JVMs do, I created a very simple > > > finalizer > > > probe then put it in JIRA HARMONY-2908. I ran this probe on Sun JVM > > > 1.5.0_07. Below are the results. It would be good if someone can > run > > > this > > > probe on other JVM/OS combinations. The probe is single threaded and > has > > > > > > three different execution modes ("java Finx 0", "java Finx 1" and > "java > > > Finx > > > 2"). By running each of the modes on WindowsXP and using Microsoft's > > > Process Viewer, one can learn what the different JVM threads are > doing. > > > More on this later. > > > > > > Mode 0 > > > This mode intentionally does not create any finalizable objects. The > > > main() > > > method simply runs a cpu intensive workload forever. After every > > > 1000000 > > > loops main() will print a distinctive string that includes a loop > count. > > > > > > > > > Mode 1 > > > main() creates 100K finalizable objects that are intentionally shoved > > > into a > > > state where their finalizer needs to be called. main() then proceeds > to > > > run > > > the same cpu intensive workload as above. The finalize() method will > > > execute just one call of the same cpu intensive workload then > > > returns. This > > > simulates a short running finalizer. finalize() prints a distinctive > > > string > > > to make it easy to quickly read the output which is comingled with > > > main(). > > > > > > Mode 2 > > > This mode is identical to Mode 1 except the finalize() method calls > the > > > cpu > > > intensive workload endlessly. > > > > > > The above describes how the probe is constructed. Below are > > > observations > > > from running this probe on Sun 1.5.0 JVM. > > > > > > Mode 0 > > > > > > There are seven threads. Thread 0 consumes 99% of the total cpu > > > time. And > > > is executing in user mode 100% of the time. Most likely this is the > > > java > > > app thread running main(). All the remaining threads do not > accumulate > > > any > > > significant cpu time. > > > > > > > > > > > > Mode 1 > > > > > > There are seven threads. Thread 0 accumulates roughly 2% of total cpu > > > time. Thread 3 accumulates the other 98%. Process Viewer reports > > > Thread 3 > > > having "above normal" priority. (I have not chased down the mapping > > > from > > > Process Viewer priority to win API priority). At the top of the > > > finalize() > > > method a static variable is incremented then printed out. This allows > > > us to > > > watch a rolling count of how many objects have been > finalized. Watching > > > the > > > console output for a few minutes, it looks like about 9000 objects are > > > finalized in the same time period that main() completes 100 > > > loops. Since > > > both main() and finalize() are running the same workload, it looks > > > like Thread 3 with "above normal" priority is the thread running the > > > finalizers. The disparity between 90:1 on console output and 50:1 in > > > Process Viewer is probably sampling noise. Also, it looks like Thread > 0 > > > is > > > running main() just like it was in Mode 0. > > > > > > > > > > > > Mode 2 > > > > > > Again the JVM is running exactly 7 threads. Only the one object's > > > finalize() method is ever called. Process Viewer shows Thread 3 has > > > "above > > > normal" priority and accumulating roughly 99% of the cpu > time. Watching > > > the > > > console output for a few minutes, it look like 2600 finalize() loops > to > > > 15 > > > main loops. It appears that no additional threads are created to > handle > > > to > > > remaining 99,999 waiting finalizable objects. These objects appear > to > > > be > > > blocked waiting for the first object to finish. Also it looks like > > > Thread 0 > > > is running main() just like Mode 0 and 1. Given that Process Viewer > > > shows > > > that Thread 0 continuously and slowly accumulates CPU time, it appears > > > that > > > main() is not suspended but continues to make forward progress. > > > > > > > > > > -- Weldon Washburn Intel Enterprise Solutions Software Division ------=_Part_159614_31882782.1167578323383--