Hotspot for BSD / opinion request

David Holmes david.holmes at oracle.com
Wed Feb 8 02:32:23 UTC 2017


Hi David,

Sorry for the long lag on this. I've been looking into the mutex 
attribute defaults and it is unfortunate that POSIX allowed 
PTHREAD_MUTEX_DEFAULT to be an implementation specific alias for one of 
the other three mutex types: PTHREAD_MUTEX_NORMAL, 
PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE. But even more 
unfortunate that FreeBSD decided to map it to ERRORCHECK instead of 
NORMAL as every other platform seems to do! (I note NetBSD defines a 
DEFAULT that is compatible with NORMAL, not ERRORCHECK.)

Fixing this for FreeBSD when it is not an officially supported platform 
is a little messy because we don't want to penalize all the other 
platforms with extra initialization code. Right now this could be 
confined to os_bsd.* but this code should be refactored into os_posix.* 
to be more widely shared.

That aside we do not need to keep an attr object per mutex as they will 
all share the same attributes. So we would have a single static instance 
and initialize it once during VM initialization, then use it when 
creating mutexes. Even then I would structure this so that the use of 
the attr object is hidden behind a macro so that it is a no-op on 
platforms that use NORMAL as the default.

I will file a RFE for sharing POSIX-based PlatformEvent/Parker code and 
include the mutex type issue as part of that.

Thanks,
David H.
-------


On 10/01/2017 3:37 AM, David CARLIER wrote:
> Hi sure thing
>
> diff --git a/src/os/bsd/vm/os_bsd.hpp b/src/os/bsd/vm/os_bsd.hpp
> --- a/src/os/bsd/vm/os_bsd.hpp
> +++ b/src/os/bsd/vm/os_bsd.hpp
> @@ -175,6 +175,7 @@
>    volatile int _Event;
>    volatile int _nParked;
>    pthread_mutex_t _mutex[1];
> +  pthread_mutexattr_t _attr[1];
>    pthread_cond_t  _cond[1];
>    double PostPad[2];
>    Thread * _Assoc;
> @@ -187,7 +188,11 @@
>      int status;
>      status = pthread_cond_init(_cond, NULL);
>      assert_status(status == 0, status, "cond_init");
> -    status = pthread_mutex_init(_mutex, NULL);
> +    status = pthread_mutexattr_init(_attr);
> +    assert_status(status == 0, status, "attr_init");
> +    status = pthread_mutexattr_settype(_attr, PTHREAD_MUTEX_NORMAL);
> +    assert_status(status == 0, status, "attr_settype");
> +    status = pthread_mutex_init(_mutex, _attr);
>      assert_status(status == 0, status, "mutex_init");
>      _Event   = 0;
>      _nParked = 0;
> @@ -206,6 +211,7 @@
>  class PlatformParker : public CHeapObj<mtInternal> {
>   protected:
>    pthread_mutex_t _mutex[1];
> +  pthread_mutexattr_t _attr[1];
>    pthread_cond_t  _cond[1];
>
>   public:       // TODO-FIXME: make dtor private
> @@ -216,7 +222,11 @@
>      int status;
>      status = pthread_cond_init(_cond, NULL);
>      assert_status(status == 0, status, "cond_init");
> -    status = pthread_mutex_init(_mutex, NULL);
> +    status = pthread_mutexattr_init(_attr);
> +    assert_status(status == 0, status, "attr_init");
> +    status = pthread_mutexattr_settype(_attr, PTHREAD_MUTEX_NORMAL);
> +    assert_status(status == 0, status, "attr_settype");
> +    status = pthread_mutex_init(_mutex, _attr);
>      assert_status(status == 0, status, "mutex_init");
>    }
>  };
>
>
>
> Kind regards.
>
> Thanks.
>
> On 9 January 2017 at 16:48, Daniel D. Daugherty
> <daniel.daugherty at oracle.com> wrote:
>> David C.,
>>
>> If you sent the patch as an attachment, then you should be advised that
>> the OpenJDK email servers strip attachments. If the patch is relatively
>> small, then you can send it in-line...
>>
>> Dan
>>
>>
>>
>> On 1/6/17 3:23 PM, David CARLIER wrote:
>>>
>>> Thanks, here a patch proposal. Kindest regards.
>>>
>>> On 24 December 2016 at 02:16, David Holmes <david.holmes at oracle.com>
>>> wrote:
>>>>
>>>> If there is a platform, we support, where the default settings are
>>>> inappropriate then setting them explicitly would be the right thing to
>>>> do.
>>>>
>>>> David
>>>>
>>>>
>>>> On 24/12/2016 10:23 AM, Vladimir Kozlov wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> Forwarding to mailing lists since I can't answer.
>>>>> May be someone can answer your question on these lists.
>>>>>
>>>>> Regards,
>>>>> Vladimir
>>>>>
>>>>> On 12/23/16 2:17 AM, David CARLIER wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> this is my first mail to the maiing list, I have difficulties to push
>>>>>> messages to any mailing lists, but as BSD user/dev I was
>>>>>> looking at code's part like this one
>>>>>>
>>>>>>
>>>>>>
>>>>>> http://hg.openjdk.java.net/jdk9/dev/hotspot/file/70c6fae64754/src/os/bsd/vm/os_bsd.hpp
>>>>>>
>>>>>>
>>>>>> I was wondering if it would be better to explicitally set the attr
>>>>>> type to PTHREAD_MUTEX_NORMAL to insure consistency with AIX and Linux
>>>>>> (on FreeBSD it is PTHREAD_MUTEX_ERRORCHECK by default).
>>>>>>
>>>>>> What do you think ?
>>>>>>
>>>>>> Thanks in advance.
>>>>>>
>>>>>> Kindest regards.
>>>>>>
>>


More information about the ppc-aix-port-dev mailing list