RFR: 8263718: unused-result warning happens at os_linux.cpp
Thomas Stüfe
thomas.stuefe at gmail.com
Sun Mar 21 07:22:14 UTC 2021
On Sun, Mar 21, 2021 at 7:43 AM Yasumasa Suenaga <ysuenaga at openjdk.java.net>
wrote:
> On Sat, 20 Mar 2021 12:35:18 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org>
> wrote:
>
> >> @YaSuenag The code generated by debug builds is often significantly
> different from release builds. You might want to check the latter instead
> to figure out if this has any effect on what we actually ship.
> >
> > @magicus I checked assembly code of release build, it is similar to
> fastdebug build. The stack (RSP) is expanded.
> > (I confirmed it with Visual Studio 16.9.2 because I received update
> notification before your reply...)
> > // Try to randomize the cache line index of hot stack frames.
> > // This helps when threads of the same stack traces evict each other's
> > // cache lines. The threads can be either from the same JVM instance,
> or
> > // from different JVM instances. The benefit is especially true for
> > // processors with hyperthreading technology.
> > static int counter = 0;
> > int pid = os::current_process_id();
> > 00007FF80F4E10ED mov eax,dword ptr [_initial_pid
> (07FF80F9D8164h)]
> > 00007FF80F4E10F3 test eax,eax
> > 00007FF80F4E10F5 jne thread_native_entry+3Dh (07FF80F4E10FDh)
> > 00007FF80F4E10F7 call qword ptr [__imp__getpid
> (07FF80F6EF748h)]
> > _alloca(((pid ^ counter++) & 7) * 128);
> > 00007FF80F4E10FD mov ecx,dword ptr [counter (07FF80F9D8300h)]
> > 00007FF80F4E1103 mov edx,ecx
> > 00007FF80F4E1105 xor edx,eax
> > 00007FF80F4E1107 inc ecx
> > 00007FF80F4E1109 mov dword ptr [counter (07FF80F9D8300h)],ecx
> > 00007FF80F4E110F and edx,7
> > 00007FF80F4E1112 shl edx,7
> > 00007FF80F4E1115 mov eax,edx
> > 00007FF80F4E1117 lea rcx,[rdx+0Fh]
> > 00007FF80F4E111B cmp rcx,rax
> > 00007FF80F4E111E ja thread_native_entry+6Ah (07FF80F4E112Ah)
> > 00007FF80F4E1120 mov rcx,0FFFFFFFFFFFFFF0h
> > 00007FF80F4E112A and rcx,0FFFFFFFFFFFFFFF0h
> > 00007FF80F4E112E mov rax,rcx
> > 00007FF80F4E1131 call __chkstk (07FF80F6ED370h)
> > 00007FF80F4E1136 sub rsp,rcx
>
> > Did you measure on Alpine too, with muslc? And the XXXBsds? Are we sure
> we
> > measure the right thing? I wish there were regression tests telling us
> when
> > to re-apply this optimization.
>
> I think we can decide by whether `alloca()` or equivalent stack operation
> is contained in current binary.
> If current binary does not contain it like JDK 17 Linux x64, we can remove
> it because it already does not work - performance degradation will not
> happen.
>
>
How do you know this? We may have had a performance degradation since years
without noticing. The question is, if a performance optimization,
considered necessary in the past, did bitrot, should we remove or repair it.
In its context, I think Alpine + musl libc is also ok to remove it because
> I confirmed JDK 17 for Alpine x64 (from jdk.java.net) does not contain
> stack operation same as x64.
>
> 0000000000b889b0 <thread_native_entry(Thread*)>:
> b889b0: 55 push %rbp
> b889b1: 48 89 e5 mov %rsp,%rbp
> b889b4: 41 56 push %r14
> b889b6: 41 55 push %r13
> b889b8: 49 89 fd mov %rdi,%r13
> b889bb: 41 54 push %r12
> b889bd: 53 push %rbx
> b889be: e8 6d a5 1a 00 callq d32f30
> <Thread::record_stack_base_and_size()>
> b889c3: e8 e8 fb 6a ff callq 2385b0 <getpid at plt>
> b889c8: 4c 89 ef mov %r13,%rdi
> b889cb: 83 05 b6 98 61 00 01 addl $0x1,0x6198b6(%rip)
> # 11a2288 <thread_native_entry(Thread*)::counter>
> b889d2: e8 f9 a4 1a 00 callq d32ed0
> <Thread::initialize_thread_current()>
> b889d7: 49 8b 9d 68 02 00 00 mov 0x268(%r13),%rbx
> b889de: 31 c0 xor %eax,%eax
>
>
which does not prove it is not beneficial, it just proves it is not there.
> > (Please leave the alloca in the AIX implementation; we currently don't
> have
> > the cycles to run regression tests for this)
>
> Ok, I got it.
>
>
Cheers, Thomas
> -------------
>
> PR: https://git.openjdk.java.net/jdk/pull/3042
>
More information about the hotspot-dev
mailing list