[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-hotspot-runtime-dev
Subject:    Re: UnsafeAtomicityTest crashes on SPARC
From:       Aleksey Shipilev <aleksey.shipilev () oracle ! com>
Date:       2015-10-30 14:06:09
Message-ID: 56337951.6020008 () oracle ! com
[Download RAW message or body]

I see.

Yes, I would think intercepting SIGBUS and failing with InternalError is
a marginally better JVM behavior, especially if it says something like
"Unrecoverable misaligned unsafe access, bye".

Let's see what runtime devs think about this?

-Aleksey

On 10/30/2015 04:02 PM, Doerr, Martin wrote:
> Hi Aleksey,
> 
> exactly, the putInt(offset, 0xFFFFFFFF) improves the situation. It uses \
> DEFINE_GETSETNATIVE which calls set_doing_unsafe_access before the access while the \
> other one uses DEFINE_GETSETOOP which doesn't do that (see unsafe.cpp). 
> The JVM will usually not run much longer after the SIGBUS was caught because \
> set_pending_unsafe_access_error() gets called afterwards which should eventually \
> lead to JVM exit with the asynchronous java.lang.InternalError exception (unless \
> one catches it which is rather uncommon). 
> Best regards,
> Martin
> 
> 
> -----Original Message-----
> From: Aleksey Shipilev [mailto:aleksey.shipilev@oracle.com] 
> Sent: Freitag, 30. Oktober 2015 13:06
> To: Doerr, Martin
> Cc: hotspot-runtime-dev@openjdk.java.net
> Subject: Re: UnsafeAtomicityTest crashes on SPARC
> 
> * PGP Signed by an unknown key
> 
> Hi Martin,
> 
> Thanks for a heads-up.
> 
> On 10/30/2015 02:52 PM, Doerr, Martin wrote:
> > we have seen JVM crashes when running the following test on SPARC:
> > org.openjdk.jcstress.tests.vjug.UnsafeAtomicityTest
> > 
> > Maybe it is not supposed to run on platforms which don't support
> > unaligned accesses?
> 
> Yes, unaligned Unsafe access might crash on platforms that do not
> support unaligned accesses. The test should have checked
> Unsafe.unalignedAccess() and/or used Unsafe.putIntUnaligned. Both APIs
> are not available in JDK 8, though.
> 
> > I see 2 problems:
> > 
> > 1.       The current implementation uses the version of
> > UnsafeHolder.U.putInt(null, offset, 0xFFFFFFFF) (and getInt) which is
> > designed to access object fields. Seems like the JVM is allowed to crash
> > with SIGBUS if it is misused for unaligned accesses. The JVM is designed
> > to catch SIGBUS only in the other version which only takes the address
> > UnsafeHolder.U.putInt(offset, 0xFFFFFFFF).
> 
> This is an odd difference. So, nominally, making the test to use
> putInt(offset, 0xFFFFFFFF) avoids the issue?
> 
> 
> > 2.       The signal handler in os_solaris_sparc needs a fix to catch
> > BUS_ADRALN as well. The part "&& info->si_code == BUS_OBJERR"  of the
> > condition "if (sig == SIGBUS && info->si_code == BUS_OBJERR &&
> > thread->doing_unsafe_access())" should get removed as it was done on
> > other platforms.
> 
> > With the problems fixed, it may be possible to catch the asynchronous
> > exception which may get generated by the Unsafe access. The following
> > stand-alone test program below can do it.
> 
> Yes, I think runtime folks might consider bullet-proofing this. Although
> I sometimes see the SIGBUS as a viable alternative for a creeping
> performance problem, at least in testing. (IIRC, some kernels are known
> to silently fix up this as well).
> 
> Thanks,
> -Aleksey
> 
> 
> * Unknown Key
> * 0x62A119A7
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic