Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8268276: Base64 Decoding optimization for x86 using AVX-512 #4368

Closed
wants to merge 435 commits into from

Conversation

asgibbons
Copy link
Contributor

@asgibbons asgibbons commented Jun 4, 2021

Add the Base64 Decode intrinsic for x86 to utilize AVX-512 for acceleration. Also allows for performance improvement for non-AVX-512 enabled platforms. Due to the nature of MIME-encoded inputs, modify the intrinsic signature to accept an additional parameter (isMIME) for fast-path MIME decoding.

A change was made to the signature of DecodeBlock in Base64.java to provide the intrinsic information as to whether MIME decoding was being done. This allows for the intrinsic to bypass the expensive setup of zmm registers from AVX tables, knowing there may be invalid Base64 characters every 76 characters or so. A change was also made here removing the restriction that the intrinsic must return an even multiple of 3 bytes decoded. This implementation handles the pad characters at the end of the string and will return the actual number of characters decoded.

The AVX portion of this code will decode in blocks of 256 bytes per loop iteration, then in chunks of 64 bytes, followed by end fixup decoding. The non-AVX code is an assembly-optimized version of the java DecodeBlock and behaves identically.

Running the Base64Decode benchmark, this change increases decode performance by an average of 2.6x with a maximum 19.7x for buffers > ~20k. The numbers are given in the table below.

Base Score is without intrinsic support, Optimized Score is using this intrinsic, and Gain is Base / Optimized.

Benchmark Name Base Score Optimized Score Gain
testBase64Decode size 1 15.36 15.32 1.00
testBase64Decode size 3 17.00 16.72 1.02
testBase64Decode size 7 20.60 18.82 1.09
testBase64Decode size 32 34.21 26.77 1.28
testBase64Decode size 64 54.43 38.35 1.42
testBase64Decode size 80 66.40 48.34 1.37
testBase64Decode size 96 73.16 52.90 1.38
testBase64Decode size 112 84.93 51.82 1.64
testBase64Decode size 512 288.81 32.04 9.01
testBase64Decode size 1000 560.48 40.79 13.74
testBase64Decode size 20000 9530.28 483.37 19.72
testBase64Decode size 50000 24552.24 1735.07 14.15
testBase64MIMEDecode size 1 22.87 21.36 1.07
testBase64MIMEDecode size 3 27.79 25.32 1.10
testBase64MIMEDecode size 7 44.74 43.81 1.02
testBase64MIMEDecode size 32 142.69 129.56 1.10
testBase64MIMEDecode size 64 256.90 243.80 1.05
testBase64MIMEDecode size 80 311.60 310.80 1.00
testBase64MIMEDecode size 96 364.00 346.66 1.05
testBase64MIMEDecode size 112 472.88 394.78 1.20
testBase64MIMEDecode size 512 1814.96 1671.28 1.09
testBase64MIMEDecode size 1000 3623.50 3227.61 1.12
testBase64MIMEDecode size 20000 70484.09 64940.77 1.09
testBase64MIMEDecode size 50000 191732.34 158158.95 1.21
testBase64WithErrorInputsDecode size 1 1531.02 1185.19 1.29
testBase64WithErrorInputsDecode size 3 1306.59 1170.99 1.12
testBase64WithErrorInputsDecode size 7 1238.11 1176.62 1.05
testBase64WithErrorInputsDecode size 32 1346.46 1138.47 1.18
testBase64WithErrorInputsDecode size 64 1195.28 1172.52 1.02
testBase64WithErrorInputsDecode size 80 1469.00 1180.94 1.24
testBase64WithErrorInputsDecode size 96 1434.48 1167.74 1.23
testBase64WithErrorInputsDecode size 112 1440.06 1162.56 1.24
testBase64WithErrorInputsDecode size 512 1362.79 1193.42 1.14
testBase64WithErrorInputsDecode size 1000 1426.07 1194.44 1.19
testBase64WithErrorInputsDecode size 20000 1398.44 1138.17 1.23
testBase64WithErrorInputsDecode size 50000 1409.41 1114.16 1.26

Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed

Issue

  • JDK-8268276: Base64 Decoding optimization for x86 using AVX-512

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.java.net/jdk pull/4368/head:pull/4368
$ git checkout pull/4368

Update a local copy of the PR:
$ git checkout pull/4368
$ git pull https://git.openjdk.java.net/jdk pull/4368/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 4368

View PR using the GUI difftool:
$ git pr show -t 4368

Using diff file

Download this PR as a diff file:
https://git.openjdk.java.net/jdk/pull/4368.diff

hns and others added 30 commits May 19, 2021 08:25
…escription.java SIGSEGV in memmove_ssse3

Reviewed-by: lmesnik, sspitsyn
Co-authored-by: Wang Huang <whuang@openjdk.org>
Co-authored-by: Ai Jiaming <aijiaming1@huawei.com>
Reviewed-by: kvn, jiefu
Reviewed-by: kvn, vlivanov, thartmann
Reviewed-by: hseigel, lfoltan, dholmes
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Outdated Show resolved Hide resolved
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Outdated Show resolved Hide resolved
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Outdated Show resolved Hide resolved
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Outdated Show resolved Hide resolved
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Outdated Show resolved Hide resolved
src/hotspot/cpu/x86/stubGenerator_x86_64.cpp Outdated Show resolved Hide resolved
1. Changed errorvec handling
2. Removed unnecessary register copies and aliasing
3. Streamlined mask generation
@sviswa7
Copy link

sviswa7 commented Jun 22, 2021

@asgibbons The patch looks good to me.

@vnkozlov We need one more review for this patch. Could you please help?

@dholmes-ora
Copy link
Member

What testing has been done for this change? I do not see that the Github Actions have been run for this PR. Has this been tested on a range of x86 systems with differing AVX capabilities?

Thanks,
David

@asgibbons
Copy link
Contributor Author

/test

@openjdk
Copy link

openjdk bot commented Jun 23, 2021

@asgibbons you need to get approval to run the tests in tier1 for commits up until 58461b8

@openjdk openjdk bot added the test-request label Jun 23, 2021
@mlbridge
Copy link

mlbridge bot commented Jun 23, 2021

Mailing list message from Gibbons, Scott on hotspot-dev:

Hi, David. I don't have permissions to run tests in this repo. I have tested on several x86 platforms (ICX, SKL) with several options. I'll be running more tests today.

Thanks,
--Scott

-----Original Message-----
From: hotspot-dev <hotspot-dev-retn at openjdk.java.net> On Behalf Of David Holmes
Sent: Tuesday, June 22, 2021 7:21 PM
To: build-dev at openjdk.java.net; core-libs-dev at openjdk.java.net; hotspot-dev at openjdk.java.net; hotspot-compiler-dev at openjdk.java.net
Subject: Re: RFR: 8268276: Base64 Decoding optimization for x86 using AVX-512 [v7]

On Wed, 23 Jun 2021 00:31:55 GMT, Scott Gibbons <github.com+6704669+asgibbons at openjdk.org> wrote:

Add the Base64 Decode intrinsic for x86 to utilize AVX-512 for acceleration. Also allows for performance improvement for non-AVX-512 enabled platforms. Due to the nature of MIME-encoded inputs, modify the intrinsic signature to accept an additional parameter (isMIME) for fast-path MIME decoding.

A change was made to the signature of DecodeBlock in Base64.java to provide the intrinsic information as to whether MIME decoding was being done. This allows for the intrinsic to bypass the expensive setup of zmm registers from AVX tables, knowing there may be invalid Base64 characters every 76 characters or so. A change was also made here removing the restriction that the intrinsic must return an even multiple of 3 bytes decoded. This implementation handles the pad characters at the end of the string and will return the actual number of characters decoded.

The AVX portion of this code will decode in blocks of 256 bytes per loop iteration, then in chunks of 64 bytes, followed by end fixup decoding. The non-AVX code is an assembly-optimized version of the java DecodeBlock and behaves identically.

Running the Base64Decode benchmark, this change increases decode performance by an average of 2.6x with a maximum 19.7x for buffers > ~20k. The numbers are given in the table below.

**Base Score** is without intrinsic support, **Optimized Score** is using this intrinsic, and **Gain** is **Base** / **Optimized**.

Benchmark Name | Base Score | Optimized Score | Gain
-- | -- | -- | --
testBase64Decode size 1 | 15.36 | 15.32 | 1.00 testBase64Decode size
3 | 17.00 | 16.72 | 1.02 testBase64Decode size 7 | 20.60 | 18.82 |
1.09 testBase64Decode size 32 | 34.21 | 26.77 | 1.28 testBase64Decode
size 64 | 54.43 | 38.35 | 1.42 testBase64Decode size 80 | 66.40 |
48.34 | 1.37 testBase64Decode size 96 | 73.16 | 52.90 | 1.38
testBase64Decode size 112 | 84.93 | 51.82 | 1.64 testBase64Decode
size 512 | 288.81 | 32.04 | 9.01 testBase64Decode size 1000 | 560.48
| 40.79 | 13.74 testBase64Decode size 20000 | 9530.28 | 483.37 |
19.72 testBase64Decode size 50000 | 24552.24 | 1735.07 | 14.15
testBase64MIMEDecode size 1 | 22.87 | 21.36 | 1.07
testBase64MIMEDecode size 3 | 27.79 | 25.32 | 1.10
testBase64MIMEDecode size 7 | 44.74 | 43.81 | 1.02
testBase64MIMEDecode size 32 | 142.69 | 129.56 | 1.10
testBase64MIMEDecode size 64 | 256.90 | 243.80 | 1.05
testBase64MIMEDecode size 80 | 311.60 | 310.80 | 1.00
testBase64MIMEDecode size 96 | 364.00 | 346.66 | 1.05
testBase64MIMEDecode size 112 | 472.88 | 394.78 | 1.20
testBase64MIMEDecode size 512 | 1814.96 | 1671.28 | 1.09
testBase64MIMEDecode size 1000 | 3623.50 | 3227.61 | 1.12
testBase64MIMEDecode size 20000 | 70484.09 | 64940.77 | 1.09
testBase64MIMEDecode size 50000 | 191732.34 | 158158.95 | 1.21
testBase64WithErrorInputsDecode size 1 | 1531.02 | 1185.19 | 1.29
testBase64WithErrorInputsDecode size 3 | 1306.59 | 1170.99 | 1.12
testBase64WithErrorInputsDecode size 7 | 1238.11 | 1176.62 | 1.05
testBase64WithErrorInputsDecode size 32 | 1346.46 | 1138.47 | 1.18
testBase64WithErrorInputsDecode size 64 | 1195.28 | 1172.52 | 1.02
testBase64WithErrorInputsDecode size 80 | 1469.00 | 1180.94 | 1.24
testBase64WithErrorInputsDecode size 96 | 1434.48 | 1167.74 | 1.23
testBase64WithErrorInputsDecode size 112 | 1440.06 | 1162.56 | 1.24
testBase64WithErrorInputsDecode size 512 | 1362.79 | 1193.42 | 1.14
testBase64WithErrorInputsDecode size 1000 | 1426.07 | 1194.44 | 1.19
testBase64WithErrorInputsDecode size 20000 | 1398.44 | 1138.17 | 1.23
testBase64WithErrorInputsDecode size 50000 | 1409.41 | 1114.16 | 1.26

Scott Gibbons has updated the pull request incrementally with one additional commit since the last revision:

Fixing Windows build warnings

What testing has been done for this change? I do not see that the Github Actions have been run for this PR. Has this been tested on a range of x86 systems with differing AVX capabilities?

Thanks,
David

-------------

PR: https://git.openjdk.java.net/jdk/pull/4368

@vnkozlov
Copy link
Contributor

I will run our internal testing before approving this.

@vnkozlov
Copy link
Contributor

I hit strange failure in compiler/intrinsics/base64/TestBase64.java test on Windows machine which have Intel 8167M cpu (AVX512).

#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ff92bcbd99e, pid=24628, tid=6804
#
# Problematic frame:
# V  [jvm.dll+0xabd99e]  ObjectMonitor::object_peek+0xe
#

Current thread (0x0000016c923de2c0):  JavaThread "MainThread" [_thread_in_Java, id=6804, stack(0x00000060df600000,0x00000060df700000)]

Stack: [0x00000060df600000,0x00000060df700000],  sp=0x00000060df6fcb50,  free space=1010k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [jvm.dll+0xabd99e]  ObjectMonitor::object_peek+0xe  (objectMonitor.cpp:304)
V  [jvm.dll+0xc48d5b]  ObjectSynchronizer::quick_enter+0x9b  (synchronizer.cpp:331)
V  [jvm.dll+0xb9b6f6]  SharedRuntime::monitor_enter_helper+0x36  (sharedRuntime.cpp:2112)
V  [jvm.dll+0x389894]  Runtime1::monitorenter+0x94  (c1_Runtime1.cpp:748)
C  0x0000016c99c4a757

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
v  ~RuntimeStub::monitorenter_nofpu Runtime1 stub
J 40 c1 java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; java.base@18-internal (432 bytes) @ 0x0000016c9a1801f8 [0x0000016c9a17e6a0+0x0000000000001b58]
J 43 c1 java.util.concurrent.ConcurrentHashMap.putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; java.base@18-internal (8 bytes) @ 0x0000016c9a181c34 [0x0000016c9a181bc0+0x0000000000000074]
j  java.lang.ClassLoader.getClassLoadingLock(Ljava/lang/String;)Ljava/lang/Object;+23 java.base@18-internal
j  jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Ljava/lang/String;Z)Ljava/lang/Class;+2 java.base@18-internal
j  jdk.internal.loader.BuiltinClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class;+3 java.base@18-internal
j  jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class;+36 java.base@18-internal
j  java.lang.ClassLoader.loadClass(Ljava/lang/String;)Ljava/lang/Class;+3 java.base@18-internal
v  ~StubRoutines::call_stub
j  compiler.intrinsics.base64.TestBase64.test0(Lcompiler/intrinsics/base64/TestBase64$FileType;Lcompiler/intrinsics/base64/TestBase64$Base64Type;Ljava/util/Base64$Encoder;Ljava/util/Base64$Decoder;Ljava/lang/String;Ljava/lang/String;I)V+25
j  compiler.intrinsics.base64.TestBase64.main([Ljava/lang/String;)V+116
v  ~StubRoutines::call_stub
j  jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0 java.base@18-internal
j  jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+133 java.base@18-internal
j  jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+6 java.base@18-internal
j  java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+59 java.base@18-internal
j  com.sun.javatest.regtest.agent.MainWrapper$MainThread.run()V+172
j  java.lang.Thread.run()V+11 java.base@18-internal
v  ~StubRoutines::call_stub

siginfo: EXCEPTION_ACCESS_VIOLATION (0xc0000005), reading address 0x00000000000000bc


Register to memory mapping:

RIP=0x00007ff92bcbd99e jvm.dll::ObjectMonitor::object_peek + 0xe
RAX=0x00000000000000ac is an unknown value
RBX=0x00000000000000ac is an unknown value
RCX=0x00000000000000ac is an unknown value
RDX=0x0 is NULL
RSP=0x00000060df6fcb50 is pointing into the stack for thread: 0x0000016c923de2c0
RBP=0x00000060df6fd110 is pointing into the stack for thread: 0x0000016c923de2c0
RSI=0x0000016c923de2c0 is a thread
RDI=0x0000016c923de2c0 is a thread
R8 =0x00000060df6fd1f0 is pointing into the stack for thread: 0x0000016c923de2c0
R9 =0x00000000000002f8 is an unknown value
R10=0x00007ff92b589800 jvm.dll::Runtime1::monitorenter + 0x0
R11=0x00000060df6fcc78 is pointing into the stack for thread: 0x0000016c923de2c0
R12=0x0 is NULL
R13=0x0000000000000200 is an unknown value
R14=0x0000000000000396 is an unknown value
R15=0x0000016c923de2c0 is a thread


Registers:
RAX=0x00000000000000ac, RBX=0x00000000000000ac, RCX=0x00000000000000ac, RDX=0x0000000000000000
RSP=0x00000060df6fcb50, RBP=0x00000060df6fd110, RSI=0x0000016c923de2c0, RDI=0x0000016c923de2c0
R8 =0x00000060df6fd1f0, R9 =0x00000000000002f8, R10=0x00007ff92b589800, R11=0x00000060df6fcc78
R12=0x0000000000000000, R13=0x0000000000000200, R14=0x0000000000000396, R15=0x0000016c923de2c0
RIP=0x00007ff92bcbd99e, EFLAGS=0x0000000000010206

Top of Stack: (sp=0x00000060df6fcb50)
0x00000060df6fcb50:   0000016c923de2c0 0000000000000000
0x00000060df6fcb60:   0000000000000000 00007ff92b8980a0
0x00000060df6fcb70:   0000016c923de2c0 00007ff92be48d5b
0x00000060df6fcb80:   00000000000000ac 000000074bd727d0
0x00000060df6fcb90:   0000000000000000 0000000000000000
0x00000060df6fcba0:   0000000000000000 00007ff92c1de2b0
0x00000060df6fcbb0:   0000016c923de2c0 00007ff92b8980a0
0x00000060df6fcbc0:   00000060df6fd1f0 00007ff92bd9b6f6
0x00000060df6fcbd0:   000000074bd727d0 0000016c923de2c0
0x00000060df6fcbe0:   00000060df6fd1f0 0000016c923de2c0
0x00000060df6fcbf0:   0000000000000000 0000000000000000
0x00000060df6fcc00:   0000000000000000 0000000000000000
0x00000060df6fcc10:   0000000000000000 0000000000000000
0x00000060df6fcc20:   000000074bd727d0 00007ff92b589894
0x00000060df6fcc30:   000000074bd727d0 00000060df6fd1f0
0x00000060df6fcc40:   0000016c923de2c0 00007ff92b8980a0 

Instructions: (pc=0x00007ff92bcbd99e)
0x00007ff92bcbd89e:   ff 48 8b c8 48 8b d8 48 8b 10 ff 52 48 48 8b 13
0x00007ff92bcbd8ae:   48 8b cb 84 c0 0f 84 83 00 00 00 ff 52 48 84 c0
0x00007ff92bcbd8be:   75 24 4c 8d 0d f1 7b 2e 00 ba 91 05 00 00 4c 8d
0x00007ff92bcbd8ce:   05 05 7c 2e 00 48 8d 0d c6 8b 2d 00 e8 71 aa a0
0x00007ff92bcbd8de:   ff e8 3c c3 01 00 8b 83 88 03 00 00 83 c0 fa a9
0x00007ff92bcbd8ee:   fd ff ff ff 74 23 4c 8d 0d c5 25 4f 00 41 b8 05
0x00007ff92bcbd8fe:   01 00 00 48 8d 15 e0 25 4f 00 b9 00 00 00 e0 e8
0x00007ff92bcbd90e:   4e a7 a0 ff e8 09 c3 01 00 48 8b 03 48 8b cb ff
0x00007ff92bcbd91e:   90 b8 00 00 00 84 c0 75 40 4c 8d 0d fa 25 4f 00
0x00007ff92bcbd92e:   ba 07 01 00 00 4c 8d 05 0e 26 4f 00 eb 1a ff 52
0x00007ff92bcbd93e:   40 84 c0 75 24 4c 8d 0d 7e 86 2d 00 ba 0b 01 00
0x00007ff92bcbd94e:   00 4c 8d 05 22 26 4f 00 48 8d 0d 8b 25 4f 00 e8
0x00007ff92bcbd95e:   ee a9 a0 ff e8 b9 c2 01 00 48 8b 44 24 30 48 8b
0x00007ff92bcbd96e:   48 10 48 85 c9 75 08 33 c0 48 83 c4 20 5b c3 48
0x00007ff92bcbd97e:   83 c4 20 5b 48 ff 25 8f f4 6f 00 cc cc cc cc cc
0x00007ff92bcbd98e:   cc cc 48 89 4c 24 08 48 83 ec 28 48 8b 44 24 30
0x00007ff92bcbd99e:   48 8b 48 10 48 85 c9 75 07 33 c0 48 83 c4 28 c3
0x00007ff92bcbd9ae:   48 83 c4 28 48 ff 25 5f f5 6f 00 cc cc cc cc cc
0x00007ff92bcbd9be:   cc cc 48 89 5c 24 18 48 89 54 24 10 48 89 4c 24
0x00007ff92bcbd9ce:   08 57 48 83 ec 20 48 8b 5c 24 30 48 8d 15 68 37
0x00007ff92bcbd9de:   4f 00 48 8b 7c 24 38 4c 8b c3 48 8b cf e8 50 8f
0x00007ff92bcbd9ee:   02 00 4c 8b 43 08 48 8d 15 6d 37 4f 00 48 8b cf
0x00007ff92bcbd9fe:   e8 3d 8f 02 00 48 8b 4b 10 48 85 c9 75 04 33 c0
0x00007ff92bcbda0e:   eb 06 ff 15 02 f5 6f 00 4c 8b c0 48 8d 15 60 37
0x00007ff92bcbda1e:   4f 00 48 8b cf e8 18 8f 02 00 48 8d 15 69 37 4f
0x00007ff92bcbda2e:   00 48 8b cf e8 09 8f 02 00 48 8d 15 6a 37 4f 00
0x00007ff92bcbda3e:   48 8b cf e8 fa 8e 02 00 48 8d 15 6b 37 4f 00 48
0x00007ff92bcbda4e:   8b cf e8 eb 8e 02 00 41 b8 2f 00 00 00 48 8d 15
0x00007ff92bcbda5e:   5e 37 4f 00 48 8b cf e8 d6 8e 02 00 48 8d 15 5f
0x00007ff92bcbda6e:   37 4f 00 48 8b cf e8 c7 8e 02 00 4c 8b 43 48 48
0x00007ff92bcbda7e:   8d 15 54 37 4f 00 48 8b cf e8 b4 8e 02 00 4c 8b
0x00007ff92bcbda8e:   43 50 48 8d 15 59 37 4f 00 48 8b cf e8 a1 8e 02 

Stack slot to memory mapping:
stack at sp + 0 slots: 0x0000016c923de2c0 is a thread
stack at sp + 1 slots: 0x0 is NULL
stack at sp + 2 slots: 0x0 is NULL
stack at sp + 3 slots: 0x00007ff92b8980a0 jvm.dll::VMEntryWrapper::VMEntryWrapper + 0x110
stack at sp + 4 slots: 0x0000016c923de2c0 is a thread
stack at sp + 5 slots: 0x00007ff92be48d5b jvm.dll::ObjectSynchronizer::quick_enter + 0x9b
stack at sp + 6 slots: 0x00000000000000ac is an unknown value
stack at sp + 7 slots: 0x000000074bd727d0 is an oop: java.util.concurrent.ConcurrentHashMap$Node 
{0x000000074bd727d0} - klass: 'java/util/concurrent/ConcurrentHashMap$Node'
 - ---- fields (total size 4 words):
 - final 'hash' 'I' @12  683507634 (28bd7fb2)
 - final 'key' 'Ljava/lang/Object;' @16  "java.util.Base64"{0x000000074bd72788} (e97ae4f1)
 - volatile 'val' 'Ljava/lang/Object;' @20  a 'java/lang/Object'{0x000000074bd727c0} (e97ae4f8)
 - volatile 'next' 'Ljava/util/concurrent/ConcurrentHashMap$Node;' @24  NULL (0)

@vnkozlov
Copy link
Contributor

The rest of testing hs-tier1-4 and xcomp is finished and clean.
So this is the only failure. I attached hs_err file to RFE.

@asgibbons
Copy link
Contributor Author

Hi, @vnkozlov. I just pushed a change that fixes a register overwrite. Can you please start the tests again?

Thanks

Copy link
Contributor

@vnkozlov vnkozlov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Latest update fixed TestBase64.java test issue.

@asgibbons
Copy link
Contributor Author

/integrate

@openjdk openjdk bot added the sponsor Pull request is ready to be sponsored label Jun 24, 2021
@openjdk
Copy link

openjdk bot commented Jun 24, 2021

@asgibbons
Your change (at version 1729232) is now ready to be sponsored by a Committer.

@sviswa7
Copy link

sviswa7 commented Jun 25, 2021

Thanks a lot @vnkozlov for the review and test.

@sviswa7
Copy link

sviswa7 commented Jun 25, 2021

/sponsor

@openjdk
Copy link

openjdk bot commented Jun 25, 2021

Going to push as commit c37988d.
Since your change was applied there have been 298 commits pushed to the master branch:

  • 08ee7ae: 8268855: Cleanup name handling in the Thread class and subclasses
  • c79034e: 8269303: Remove unnecessary forward declaration of PSPromotionManager in cpCache.hpp
  • 42968db: 8269293: ObjectMonitor thread id fields should be 64 bits.
  • 2fd7943: 8256425: Obsolete Biased Locking in JDK 18
  • 595446b: 8269087: CheckSegmentedCodeCache test fails in an emulated-client VM
  • 7c31903: 8267075: jcmd VM.cds should print directory of the output files
  • e515873: 8269216: Useless initialization in com/sun/crypto/provider/PBES2Parameters.java
  • 51d9159: 8236212: CompiledMethodLoad and CompiledMethodUnload events can be posted in START phase
  • 280f2d5: 8268433: serviceability/dcmd/framework/VMVersionTest.java fails with Unable to send object throw not established PipeIO Listener Thread connection
  • f375916: 8269186: [REDO] Remove CodeCache::mark_for_evol_deoptimization() method
  • ... and 288 more: https://git.openjdk.java.net/jdk/compare/48dc72b74d6b4b7b8fb605b62fc0057b5f4652e1...master

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot closed this Jun 25, 2021
@openjdk openjdk bot added integrated Pull request has been integrated and removed ready Pull request is ready to be integrated rfr Pull request is ready for review sponsor Pull request is ready to be sponsored labels Jun 25, 2021
@openjdk
Copy link

openjdk bot commented Jun 25, 2021

@sviswa7 @asgibbons Pushed as commit c37988d.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

@asgibbons asgibbons deleted the base64_decode branch June 25, 2021 18:36
@eastig
Copy link
Member

eastig commented Dec 8, 2023

We found this optimization causes https://bugs.openjdk.org/browse/JDK-8321599

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build build-dev@openjdk.org core-libs core-libs-dev@openjdk.org hotspot hotspot-dev@openjdk.org hotspot-compiler hotspot-compiler-dev@openjdk.org integrated Pull request has been integrated test-request