Return-Path: Delivered-To: apmail-harmony-dev-archive@www.apache.org Received: (qmail 51778 invoked from network); 21 Apr 2007 02:23:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 21 Apr 2007 02:23:33 -0000 Received: (qmail 84674 invoked by uid 500); 21 Apr 2007 02:23:38 -0000 Delivered-To: apmail-harmony-dev-archive@harmony.apache.org Received: (qmail 84641 invoked by uid 500); 21 Apr 2007 02:23:38 -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 84632 invoked by uid 99); 21 Apr 2007 02:23:38 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 20 Apr 2007 19:23:38 -0700 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of nbeyer@gmail.com designates 64.233.184.227 as permitted sender) Received: from [64.233.184.227] (HELO wr-out-0506.google.com) (64.233.184.227) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 20 Apr 2007 19:23:28 -0700 Received: by wr-out-0506.google.com with SMTP id i31so1101457wra for ; Fri, 20 Apr 2007 19:23:07 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:sender:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references:x-google-sender-auth; b=NaAejF87MiqBAZmBodE/BKwwv0zn4YYPCkRt3z7Walw2KFiysFnLqLM0O/8D+3BiZy4gAAIeq6Y/rV6PhZmaFco+DjIVzgdDgW/zn03/RmPN1vj9ZsuWEkF4EfcUpHhchT4UBPjJAZDvk3pDtq29vOU99pWzxaNx+grsg1XcPVg= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:sender:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references:x-google-sender-auth; b=UK2wzLaJXNeXpghJUP6wqa6HyaPFR4EGbe7rYkoH9vulNuGc7WRCi99yw3uiTYBs6RVO5J9DuBuydziovoMdkcXXMCWQ+OPorQlWZIueRvxT7QZiTAJXa3o+uTQ43B9zRp0740gFwLDx6DkFwe/C6DoeE2a+WGuCEiSECGYMJ9g= Received: by 10.114.25.3 with SMTP id 3mr1505121way.1177122186230; Fri, 20 Apr 2007 19:23:06 -0700 (PDT) Received: by 10.114.195.5 with HTTP; Fri, 20 Apr 2007 19:23:06 -0700 (PDT) Message-ID: <3b3f27c60704201923l43ee5celaae5381a523eb604@mail.gmail.com> Date: Fri, 20 Apr 2007 21:23:06 -0500 From: "Nathan Beyer" Sender: nbeyer@gmail.com To: dev@harmony.apache.org Subject: Re: [drlvm] Another mfence operation??? fast_thread_array??? In-Reply-To: <51d555c70704201903v5796d358y26303fb5d1009882@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <3b3f27c60704172203n5234bb77h1ca067fa1be87752@mail.gmail.com> <3b3f27c60704172242k66778658x211331e3e0a05df3@mail.gmail.com> <51d555c70704201748p577de077md90feebf5393c048@mail.gmail.com> <3b3f27c60704201824o4a3b9598u84e8da4c85246ec7@mail.gmail.com> <51d555c70704201903v5796d358y26303fb5d1009882@mail.gmail.com> X-Google-Sender-Auth: 74115945d3332c40 X-Virus-Checked: Checked by ClamAV on apache.org Okay, it's clear as mud now! :) Thanks. I'll patch this in now. -Nathan On 4/20/07, Rana Dasgupta wrote: > On 4/20/07, Nathan Beyer wrote: > > I agree that we need to add the lock as well on windows. BTW - the > > locking for RW barriers was pulled from this document [1]. The lock > > instruction seemed the best of the three options; use mfence (not an > > option), use no-op lock or cpuid, which is apparently very slow. > > Yes, I agree this is the safest if you really want a real read write > barrier that can be used anywhere, with least common denominator code > on x86, using a single binary image. But the penalty needs to be the > same on Windows and Linux. > > > > Another option would be looking at the operation just after the > > barrier; according to this [1], any lock-prefixed instruction will > > work on x86, so instead of a lock and wasted instruction, we could > > lock with the next instruction. Though, this may only be something a > > JIT would do. > > Not all instructions can take the lock prefix that causes an assert on > the bus, which is what you need for the instruction to serialize, so > this "may" not always work. > > > > What does the EM64T mean? > > Isn't that just saying P4? I'm still not > > quite clear on the differences between EM6T, IPF, x86_64/x64, etc? > > I agree, there are just too many acronyms that seem to be ever > changing! EM64T here indicates 64 bit x86, also called AMD64 > elsewhere, or x64. It does have a seperate binary for us, and for it > we use the VS2005 compiler. (For reference, your Linux part of the > patch seperates this out very nicely). Unfortunately, for VS2005, we > can't do __asm{ mfence } etc. since Microsoft does not support inline > assembly in this new compiler. So a seperate .asm file ( above ) is > needed. The build file will have to be modified to assemble this( see > other port/atomic/win etc. )directories, sorry I didn't add the build > change. So the above code will use mfence only on EM64T ( as in Linux > ) , but use the "lock add..." on all 32 bit x86 platforms. IPF ( also > referred to as iA64 ) is Itanium, and we only support it on Linux > where you use "asm volatile("mf:::memory" which is correct. We don't > need to worry about it on Windows. > > >How > > do these map to the builds? There's not a separate EM64T end state, > > right? > > > > If that does just mean a P4, I don't think this code snippet is > > correct, unless we're going to start separating our builds that way. > > > > [1] http://gee.cs.oswego.edu/dl/jmm/cookbook.html > > > > -Nathan > > > > On 4/20/07, Rana Dasgupta wrote: > > > Nathan, > > > I was going through your patch and had a small suggestion. We had > > > discussed on other related threads that on Windows we wanted to use > > > the MSVC provided _ReadWriteBarrier intrinsic and the patch does that, > > > but this may not be enough. This generates no instruction, but is a > > > compiler fence only. x86 does not need a store fence, but for smp the > > > load fence can be certainly needed. > > > That's the assumption on Linux where in apr_memory_rw_barrier() we > > > insert both a compiler and an instruction fence, eg., > > > > > > apr_memory_rw_barrier() > > > { > > > ... > > > #else > > > asm volatile ("lock; addl $0, 0(%%esp)":::"memory"); > > > ... > > > } > > > > > > I agree that since there is no mfence on PIII, probably the dummy lock > > > is the safest option for x86 wide code. But "lock" is expensive, > > > specially for Pentium 4 , Centrino etc. which have the "mfence" > > > instruction. And this penalty on current platforms is only on Linux. > > > My suggestion is to do the same on Windows as well. If we need the > > > real fence, we need it on both....So on Windows... > > > > > > On Windows in apr_thread_ext.c: > > > ================================ > > > #if _MSC_VER < 1400 > > > extern void _ReadWriteBarrier(); > > > #else > > > #include > > > #endif > > > #pragma intrinsic (_ReadWriteBarrier) > > > > > > APR_DECLARE(void) apr_memory_rw_barrier(){ > > > #ifdef _EM64T_ > > > // create rwfence64() in asm file port\src\thread\win\rwfence.asm > > > rwfence64(); > > > #else > > > __asm {lock add [esp], 0 } > > > #endif > > > _ReadWriteBarrier(); > > > } > > > > > > In port\src\thread\win\rwfence.asm: > > > =================================== > > > PUBLIC rwfence64 > > > > > > _TEXT SEGMENT > > > > > > rwfence64 PROC > > > > > > mfence > > > > > > > > > PROC ENDP > > > TEXT ENDS > > > > > > What do you think? > > > > > > Thanks, > > > Rana > > > > > > On 4/17/07, Nathan Beyer wrote: > > > > I think I have this resolved with this commit [1]. I'm now able to run > > > > DRLVM in interpreted mode on my Quad P3 ... at least a 'Hello World' > > > > app. > > > > > > > > -Nathan > > > > > > > > [1] http://svn.apache.org/viewvc?view=rev&rev=529880 > > > > > > > > On 4/18/07, Nathan Beyer wrote: > > > > > I've run into another SSE2 operation in DRLVM, this time it's in the > > > > > hythr library, but I can't find the specific instance. According to > > > > > GDB, it's happening in fast_thread_array() in libhythr.so. > > > > > > > > > > Is this from the 'apr_thread_ext.c' file? I'm going to attempt to > > > > > modify this to be like the changes I made to the 'atomics.cpp', so > > > > > that this can run on P3 (SSE) CPUs. > > > > > > > > > > nathan@pants:~/harmony/drlvm-trunk/build/lnx_ia32_gcc_debug/deploy/jdk/jre/bin$ > > > > > ./java -Xint -cp /home/nathan/workspace/helloworld/bin HelloWorld > > > > > Illegal instruction > > > > > nathan@pants:~/harmony/drlvm-trunk/build/lnx_ia32_gcc_debug/deploy/jdk/jre/bin$ > > > > > gdb --args ./java -Xint -cp /home/nathan/workspace/helloworld/bin > > > > > HelloWorld > > > > > GNU gdb 6.6-debian > > > > > Copyright (C) 2006 Free Software Foundation, Inc. > > > > > GDB is free software, covered by the GNU General Public License, and you are > > > > > welcome to change it and/or distribute copies of it under certain conditions. > > > > > Type "show copying" to see the conditions. > > > > > There is absolutely no warranty for GDB. Type "show warranty" for details. > > > > > This GDB was configured as "i486-linux-gnu"... > > > > > Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1". > > > > > (gdb) run > > > > > Starting program: > > > > > /home/nathan/harmony/drlvm-trunk/build/lnx_ia32_gcc_debug/deploy/jdk/jre/bin/java > > > > > -Xint -cp /home/nathan/workspace/helloworld/bin HelloWorld > > > > > [Thread debugging using libthread_db enabled] > > > > > [New Thread -1214834000 (LWP 32414)] > > > > > [New Thread -1215992944 (LWP 32417)] > > > > > [New process 32414] > > > > > [New LWP 32414] > > > > > > > > > > Program received signal SIGILL, Illegal instruction. > > > > > 0xb7bc543f in fast_thread_array () > > > > > from /home/nathan/harmony/drlvm-trunk/build/lnx_ia32_gcc_debug/deploy/jdk/jre/bin/libhythr.so > > > > > (gdb) x/1i $eip > > > > > 0xb7bc543f : mfence > > > > > (gdb) > > > > > > > > > > > > > > >