[PATCH] Linux implementation for set_native_thread_name()

David Holmes david.holmes at oracle.com
Thu Jul 26 05:41:49 PDT 2012


On 26/07/2012 10:18 PM, Roman Kennke wrote:
> Am Donnerstag, den 26.07.2012, 22:00 +1000 schrieb David Holmes:
>> Roman,
>>
>> On 25/07/2012 7:10 AM, Roman Kennke wrote:
>>>> I think it looks fine.
>>>
>>> Great! I posted an updated webrev for this (replaced snprint with
>>> jio_snprintf):
>>
>> You are assuming that these non-posix pthread extensions will always
>> exist. Do we know that is true for all Linux's - including potentially
>> custom distributions on embedded systems? I think we need dynamic lookup
>> of the function, as done elsewhere, to verify that it exists.
>
> Do you mean at runtime, using dlopen or such? Or at compile time, using
> #ifdefs ?

Runtime using dlsym, the same way we look for the "optional" POSIX 
functions like clock_gettime. The support for this in linux/libc is very 
recent (in OS terms):

http://sourceware.org/ml/libc-help/2010-03/msg00015.html

You might also follow the BSD version and add a Java prefix:

   if (name != NULL) {
     // Add a "Java: " prefix to the name
     char buf[MAXTHREADNAMESIZE];
     snprintf(buf, sizeof(buf), "Java: %s", name);
     pthread_setname_np(buf);
   }

though that concerns me if MAXTHREADNAMESIZE is only 16!

Can you tell me where this max name size is coming from? I can google 
different docs for pthread_setname_np and some say it internally limits 
the name length, while others say if the name is too long it gives an 
E2BIG error. The source code at

http://sourceware.org/ml/libc-help/2010-03/msg00015.html

does not set a specific limit on the length but will return a error if 
it can't write the full name. In contrast the cygwin version:

http://www.mail-archive.com/cygwin-patches@cygwin.com/msg05387.html

sets a limit of 16(actually 15 characters plus NUL) and returns ERANGE.

This is why we try to stay away from the ill-defined _np functions.

David
-----

>
>>> http://cr.openjdk.java.net/~rkennke/linux_threadname/webrev.01/
>>
>> This also has the distribute_processes etc changes, which should be
>> handled seperately.
>
> Uff. I messed up something there. Please find the real webrev here:
>
> http://cr.openjdk.java.net/~rkennke/linux_threadname/webrev.02/
>
>
>>>> Do you have a bug number for this?
>>>
>>> No. (I don't have access to bugster anymore).
>>
>> Bugster is nearly dead - long live Jira :)
>
> Wow, cool!
>
>>   But for now someone will need
>> to create a bug for this ... though it may already exist from when this
>> function was added.
>>
>>>>     Also, how do we verify the result?
>>>
>>> I verified it using htop and by inspecting /proc/$PID/task/$TID/stat.
>>> Unfortuntately, I couldn't get top or ps to show the thread name, but
>>> maybe I'm just stupid (and I did not try very hard).
>>
>> gdb? Not sure how this shows up on OSX. If the name doesn't appear in
>> anything useful then there's not much point implementing the method.
>
> Yes, gdb shows the thread name as well (dunno why I forgot about this
> most obvious use case).
>
>>> Also: which of the many repositories do I need to push this to?
>>
>> It would go into hsx/hotspot-rt forest, but you can't push it directly.
>> All hotspot changes must go via JPRT so you will need a sponsor.
>
> Ok. I think Keith said he can do this. :-)
>
> Thanks!
>
> Regards,
> Roman
>
>


More information about the hotspot-dev mailing list