RFR: JDK-8152690: main thread does not have native thread name
David Holmes
david.holmes at oracle.com
Thu Apr 14 12:32:30 UTC 2016
On 14/04/2016 1:52 PM, Yasumasa Suenaga wrote:
> Hi,
>
> On 2016/04/14 9:34, David Holmes wrote:
>> Hi,
>>
>> On 14/04/2016 1:28 AM, Yasumasa Suenaga wrote:
>>> Hi David,
>>>
>>> Thanks for your comment.
>>>
>>> I exported new JVM function to set native thread name, and JLI uses it
>>> in new webrev.
>>
>> First the launcher belongs to another team so core-libs will need to
>> review and approve this (in particular Kumar) - now cc'd.
>
> Thanks!
> I'm waiting to review :-)
>
>
>> Personally I would have used a Java upcall to Thread.setName rather
>> than exporting JVM_SetNativeThreadName. No hotspot changes needed in
>> that case.
>
> As I wrote [1] in JBS, I changed to use Thread#setName() in Thread#init(),
> but I could not change native thread name.
At Thread.init time the thread is not alive, which is why the native
name is not set.
> I guess that caller of main() is JNI attached thread.
That is an interesting question which I haven't had time to check -
sorry. If the main thread is considered a JNI-attached thread then my
suggestion wont work. If it isn't then my suggestion should work (but it
means we have an inconsistency in our treatment of JNI-attached threads :( )
I'll wait to see what Kumar thinks about this. I don't like exposing a
new JVM function this way.
Thanks,
David
-----
> Thus I think that we have to provide a function to set native thread name.
>
>
> Thanks,
>
> Yasumasa
>
>
> [1]
> https://bugs.openjdk.java.net/browse/JDK-8152690?focusedCommentId=13926851&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13926851
>
>
>> Thanks,
>> David
>>
>>> Could you review again?
>>>
>>> - hotspot:
>>>
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.02/hotspot/
>>>
>>> - jdk:
>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.02/jdk/
>>>
>>>
>>> Thanks,
>>>
>>> Yasumasa
>>>
>>>
>>> On 2016/04/13 22:00, David Holmes wrote:
>>>> I'll answer on this original thread as well ...
>>>>
>>>> Hi Yasumasa,
>>>>
>>>> Please see my updates to the bug (sorry have been on vacation). This
>>>> needs to be done in the launcher to be correct as we do not set the
>>>> name of threads that attach via JNI, which includes the "main" thread.
>>>>
>>>> David
>>>>
>>>> On 31/03/2016 9:49 AM, Yasumasa Suenaga wrote:
>>>>> Thanks Robbin,
>>>>>
>>>>> I'm waiting a sponsor and more reviewer :-)
>>>>>
>>>>> Yasumasa
>>>>> 2016/03/31 5:58 "Robbin Ehn" <robbin.ehn at oracle.com>:
>>>>>
>>>>>> FYI: I'm not a Reviewer.
>>>>>>
>>>>>> /Robbin
>>>>>>
>>>>>> On 03/30/2016 10:55 PM, Robbin Ehn wrote:
>>>>>>
>>>>>>> Thanks, looks good.
>>>>>>>
>>>>>>> /Robbin
>>>>>>>
>>>>>>> On 03/30/2016 03:47 PM, Yasumasa Suenaga wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I uploaded new webrev.
>>>>>>>> Could you review it?
>>>>>>>>
>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.01/
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Yasumasa
>>>>>>>>
>>>>>>>>
>>>>>>>> On 2016/03/30 19:10, Robbin Ehn wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> On 03/30/2016 11:41 AM, Yasumasa Suenaga wrote:
>>>>>>>>>
>>>>>>>>>> Hi Robbin,
>>>>>>>>>>
>>>>>>>>>> 2016/03/30 18:22 "Robbin Ehn" <robbin.ehn at oracle.com
>>>>>>>>>> <mailto:robbin.ehn at oracle.com>>:
>>>>>>>>>> >
>>>>>>>>>> > Hi Yasumasa,
>>>>>>>>>> >
>>>>>>>>>> >
>>>>>>>>>> > On 03/25/2016 12:48 AM, Yasumasa Suenaga wrote:
>>>>>>>>>> >>
>>>>>>>>>> >> Hi Robbin,
>>>>>>>>>> >> 2016/03/25 1:51 "Robbin Ehn" <robbin.ehn at oracle.com
>>>>>>>>>> <mailto:robbin.ehn at oracle.com>
>>>>>>>>>> >> <mailto:robbin.ehn at oracle.com
>>>>>>>>>> <mailto:robbin.ehn at oracle.com>>>:
>>>>>>>>>> >>
>>>>>>>>>> >> >
>>>>>>>>>> >> > Hi Yasumasa,
>>>>>>>>>> >> >
>>>>>>>>>> >> > I'm not sure why you don't set it:
>>>>>>>>>> >> >
>>>>>>>>>> >> > diff -r ded6ef79c770 src/share/vm/runtime/thread.cpp
>>>>>>>>>> >> > --- a/src/share/vm/runtime/thread.cpp Thu Mar 24
>>>>>>>>>> 13:09:16 2016
>>>>>>>>>> +0000
>>>>>>>>>> >> > +++ b/src/share/vm/runtime/thread.cpp Thu Mar 24
>>>>>>>>>> 17:40:09 2016
>>>>>>>>>> +0100
>>>>>>>>>> >> > @@ -3584,6 +3584,7 @@
>>>>>>>>>> >> > JavaThread* main_thread = new JavaThread();
>>>>>>>>>> >> > main_thread->set_thread_state(_thread_in_vm);
>>>>>>>>>> >> > main_thread->initialize_thread_current();
>>>>>>>>>> >> > + main_thread->set_native_thread_name("main");
>>>>>>>>>> >> > // must do this before set_active_handles
>>>>>>>>>> >> > main_thread->record_stack_base_and_size();
>>>>>>>>>> >> >
>>>>>>>>>> main_thread->set_active_handles(JNIHandleBlock::allocate_block());
>>>>>>>>>>
>>>>>>>>>> >> >
>>>>>>>>>> >> > here instead? Am I missing something?
>>>>>>>>>> >>
>>>>>>>>>> >> Native thread name is the same to thread name in Thread
>>>>>>>>>> class.
>>>>>>>>>> >> It is set in c'tor in Thread or setName().
>>>>>>>>>> >> If you create new thread in Java app, native thread name
>>>>>>>>>> will be
>>>>>>>>>> set at
>>>>>>>>>> >> startup. However, main thread is already starte in VM.
>>>>>>>>>> >> Thread name for "main" is set in create_initial_thread().
>>>>>>>>>> >> I think that the place of setting thrrad name should be the
>>>>>>>>>> same.
>>>>>>>>>> >
>>>>>>>>>> >
>>>>>>>>>> > Yes, I see your point. But then something like this is
>>>>>>>>>> nicer, no?
>>>>>>>>>> >
>>>>>>>>>> > --- a/src/share/vm/runtime/thread.cpp Tue Mar 29 09:43:05
>>>>>>>>>> 2016
>>>>>>>>>> +0200
>>>>>>>>>> > +++ b/src/share/vm/runtime/thread.cpp Wed Mar 30 10:51:12
>>>>>>>>>> 2016
>>>>>>>>>> +0200
>>>>>>>>>> > @@ -981,6 +981,7 @@
>>>>>>>>>> > // Creates the initial Thread
>>>>>>>>>> > static oop create_initial_thread(Handle thread_group,
>>>>>>>>>> JavaThread*
>>>>>>>>>> thread,
>>>>>>>>>> > TRAPS) {
>>>>>>>>>> > + static const char* initial_thread_name = "main";
>>>>>>>>>> > Klass* k =
>>>>>>>>>> SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(),
>>>>>>>>>> true,
>>>>>>>>>> CHECK_NULL);
>>>>>>>>>> > instanceKlassHandle klass (THREAD, k);
>>>>>>>>>> > instanceHandle thread_oop =
>>>>>>>>>> klass->allocate_instance_handle(CHECK_NULL);
>>>>>>>>>> > @@ -988,8 +989,10 @@
>>>>>>>>>> > java_lang_Thread::set_thread(thread_oop(), thread);
>>>>>>>>>> > java_lang_Thread::set_priority(thread_oop(),
>>>>>>>>>> NormPriority);
>>>>>>>>>> > thread->set_threadObj(thread_oop());
>>>>>>>>>> > -
>>>>>>>>>> > - Handle string = java_lang_String::create_from_str("main",
>>>>>>>>>> CHECK_NULL);
>>>>>>>>>> > +
>>>>>>>>>> > + thread->set_native_thread_name(initial_thread_name);
>>>>>>>>>> > +
>>>>>>>>>> > + Handle string =
>>>>>>>>>> java_lang_String::create_from_str(initial_thread_name,
>>>>>>>>>> CHECK_NULL);
>>>>>>>>>> >
>>>>>>>>>> > JavaValue result(T_VOID);
>>>>>>>>>> > JavaCalls::call_special(&result, thread_oop,
>>>>>>>>>>
>>>>>>>>>> Okay, I will upload new webrev later.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> >> > The launcher seem to name itself 'java' and naming this
>>>>>>>>>> thread
>>>>>>>>>> just
>>>>>>>>>> >> > 'main' is confusing to me.
>>>>>>>>>> >> >
>>>>>>>>>> >> > E.g. so main thread of the process (and thus the
>>>>>>>>>> process) is
>>>>>>>>>> 'java' but
>>>>>>>>>> >> > first JavaThread is 'main'.
>>>>>>>>>> >>
>>>>>>>>>> >> The native main thread in the process is not JavaThread.
>>>>>>>>>> It is
>>>>>>>>>> waiting
>>>>>>>>>> >> for ending of Java main thread with pthread_join().
>>>>>>>>>> >> set_native_thread_name() is for JavaThread. So I think that
>>>>>>>>>> we do
>>>>>>>>>> not
>>>>>>>>>> >> need to call it for native main thread.
>>>>>>>>>> >
>>>>>>>>>> >
>>>>>>>>>> > Not sure if we can change it anyhow, since we want java and
>>>>>>>>>> native
>>>>>>>>>> name to be the same and java thread name might have some
>>>>>>>>>> dependents.
>>>>>>>>>> >
>>>>>>>>>> > The name is visible in e.g. /proc.
>>>>>>>>>> >
>>>>>>>>>> > $ ps H -C java -o 'pid tid comm' | head -4
>>>>>>>>>> > PID TID COMMAND
>>>>>>>>>> > 6423 6423 java
>>>>>>>>>> > 6423 6424 main
>>>>>>>>>> > 6423 6425 GC Thread#0
>>>>>>>>>> >
>>>>>>>>>> > It would be nice with something like 'Java Main Thread'.
>>>>>>>>>>
>>>>>>>>>> I do not think so.
>>>>>>>>>> Native main thread might not be a Java launcher - e.g. Apache
>>>>>>>>>> commons-daemon, JNI application, etc.
>>>>>>>>>>
>>>>>>>>>> If you want to change native main thread name, I think that we
>>>>>>>>>> have to
>>>>>>>>>> change Java launcher code.
>>>>>>>>>> Should I include it in new webrev?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> No
>>>>>>>>>
>>>>>>>>> Thanks again!
>>>>>>>>>
>>>>>>>>> /Robbin
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>>
>>>>>>>>>> Yasumasa
>>>>>>>>>>
>>>>>>>>>> > Thanks
>>>>>>>>>> >
>>>>>>>>>> > /Robbin
>>>>>>>>>> >
>>>>>>>>>> >
>>>>>>>>>> >>
>>>>>>>>>> >> Thanks,
>>>>>>>>>> >>
>>>>>>>>>> >> Yasumasa
>>>>>>>>>> >>
>>>>>>>>>> >> > Thanks!
>>>>>>>>>> >> >
>>>>>>>>>> >> > /Robbin
>>>>>>>>>> >> >
>>>>>>>>>> >> > On 03/24/2016 03:26 PM, Yasumasa Suenaga wrote:
>>>>>>>>>> >> > > Hi all,
>>>>>>>>>> >> > >
>>>>>>>>>> >> > > HotSpot for Linux will set thread name via
>>>>>>>>>> pthread_setname_np().
>>>>>>>>>> >> > > However, main thread does not have it.
>>>>>>>>>> >> > >
>>>>>>>>>> >> > > All JavaThread have native name, and main thread is
>>>>>>>>>> JavaThread.
>>>>>>>>>> >> > > For consistency, main thread should have native thread
>>>>>>>>>> name.
>>>>>>>>>> >> > >
>>>>>>>>>> >> > > I uploaded a webrev. Could you review it?
>>>>>>>>>> >> > >
>>>>>>>>>> >> > >
>>>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8152690/webrev.00/
>>>>>>>>>> >> > >
>>>>>>>>>> >> > > I cannot access JPRT.
>>>>>>>>>> >> > > So I need a sponsor.
>>>>>>>>>> >> > >
>>>>>>>>>> >> > >
>>>>>>>>>> >> > > Thanks,
>>>>>>>>>> >> > >
>>>>>>>>>> >> > > Yasumasa
>>>>>>>>>> >> > >
>>>>>>>>>> >>
>>>>>>>>>>
>>>>>>>>>>
More information about the hotspot-runtime-dev
mailing list