Skip to content

Conversation

@vpaprotsk
Copy link
Contributor

@vpaprotsk vpaprotsk commented Apr 2, 2024

Performance. Before:

Benchmark                        (algorithm)  (dataSize)  (keyLength)  (provider)   Mode  Cnt     Score    Error  Units
SignatureBench.ECDSA.sign    SHA256withECDSA        1024          256              thrpt    3  6443.934 ±  6.491  ops/s
SignatureBench.ECDSA.sign    SHA256withECDSA       16384          256              thrpt    3  6152.979 ±  4.954  ops/s
SignatureBench.ECDSA.verify  SHA256withECDSA        1024          256              thrpt    3  1895.410 ± 36.979  ops/s
SignatureBench.ECDSA.verify  SHA256withECDSA       16384          256              thrpt    3  1878.955 ± 45.487  ops/s
Benchmark                                            (algorithm)  (keyLength)  (kpgAlgorithm)  (provider)   Mode  Cnt     Score    Error  Units
o.o.b.j.c.full.KeyAgreementBench.EC.generateSecret          ECDH          256              EC              thrpt    3  1357.810 ± 26.584  ops/s
o.o.b.j.c.small.KeyAgreementBench.EC.generateSecret         ECDH          256              EC              thrpt    3  1352.119 ± 23.547  ops/s
Benchmark                          (isMontBench)   Mode  Cnt     Score    Error  Units
PolynomialP256Bench.benchMultiply          false  thrpt    3  1746.126 ± 10.970  ops/s

Performance, no intrinsic:

Benchmark                        (algorithm)  (dataSize)  (keyLength)  (provider)   Mode  Cnt     Score     Error  Units
SignatureBench.ECDSA.sign    SHA256withECDSA        1024          256              thrpt    3  6529.839 ±  42.420  ops/s
SignatureBench.ECDSA.sign    SHA256withECDSA       16384          256              thrpt    3  6199.747 ± 133.566  ops/s
SignatureBench.ECDSA.verify  SHA256withECDSA        1024          256              thrpt    3  1973.676 ±  54.071  ops/s
SignatureBench.ECDSA.verify  SHA256withECDSA       16384          256              thrpt    3  1932.127 ±  35.920  ops/s
Benchmark                                            (algorithm)  (keyLength)  (kpgAlgorithm)  (provider)   Mode  Cnt     Score    Error  Units
o.o.b.j.c.full.KeyAgreementBench.EC.generateSecret          ECDH          256              EC              thrpt    3  1355.788 ± 29.858  ops/s
o.o.b.j.c.small.KeyAgreementBench.EC.generateSecret         ECDH          256              EC              thrpt    3  1346.523 ± 28.722  ops/s
Benchmark                          (isMontBench)   Mode  Cnt     Score    Error  Units
PolynomialP256Bench.benchMultiply           true  thrpt    3  1919.574 ± 10.591  ops/s

Performance, with intrinsics

Benchmark                        (algorithm)  (dataSize)  (keyLength)  (provider)   Mode  Cnt      Score     Error  Units
SignatureBench.ECDSA.sign    SHA256withECDSA        1024          256              thrpt    3  10384.591 ±  65.274  ops/s
SignatureBench.ECDSA.sign    SHA256withECDSA       16384          256              thrpt    3   9592.912 ± 236.411  ops/s
SignatureBench.ECDSA.verify  SHA256withECDSA        1024          256              thrpt    3   3479.494 ±  44.578  ops/s
SignatureBench.ECDSA.verify  SHA256withECDSA       16384          256              thrpt    3   3402.147 ±  26.772  ops/s
Benchmark                                            (algorithm)  (keyLength)  (kpgAlgorithm)  (provider)   Mode  Cnt     Score    Error  Units
o.o.b.j.c.full.KeyAgreementBench.EC.generateSecret          ECDH          256              EC              thrpt    3  2527.678 ± 64.791  ops/s
o.o.b.j.c.small.KeyAgreementBench.EC.generateSecret         ECDH          256              EC              thrpt    3  2541.258 ± 66.634  ops/s
Benchmark                          (isMontBench)   Mode  Cnt     Score    Error  Units
PolynomialP256Bench.benchMultiply           true  thrpt    3  3021.139 ± 98.289  ops/s

Summary on design (see code for 'ASCII art', references and details on math):

  • Added a new IntegerPolynomial field (MontgomeryIntegerPolynomialP256) with 52-bit limbs
    • getElement(*)/fromMontgomery() to convert numbers into/out of the field
  • ECOperations is the primary use of the new field
    • flattened some extra deep nested class hierarchy (also in prep for further other field optimizations)
    • forParameters()/multiply()/setSum() generates numbers in the new field
  • ProjectivePoint/Montgomery{Imm|M}utable.asAffine() to convert out of the new field
  • Added Fuzz Testing and KAT verified with OpenSSL

Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed (3 reviews required, with at least 1 Reviewer, 2 Authors)

Issue

  • JDK-8329538: Accelerate P256 on x86_64 using Montgomery intrinsic (Enhancement - P4)

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/18583/head:pull/18583
$ git checkout pull/18583

Update a local copy of the PR:
$ git checkout pull/18583
$ git pull https://git.openjdk.org/jdk.git pull/18583/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 18583

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

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/18583.diff

Webrev

Link to Webrev Comment

- MontgomeryIntegerPolynomialP256
	- Cleaned up montgomery in conversion; now automatically via Field.getElement()
	- removed toMontgomery() (and its interface)
	- Rearange and comment code, remove debug traces
	- (TODO: fix getElement(byte[]))
- ECOperations
	- No more hashmap lookup on every multiply (ifs instead), removed trampoline
	- Regression; put back lazy loading of static constant table for better VM startup
	- Cleaned up tomontgomery  conversion to use Field.getElement()
	- Flattened multilayer PointMultiplication (was ECOperations.PointMultiplier.LargeTable.P256 made even worse by new montgomery multipliers)
	- removed (pre-existing incorrect) use of member classes
	- Added comments and more comments
	- Made ECOperations.montgomeryOps private
	- Patched tests to use reflection to access ECOperations.montgomeryOps
- stubGenerator_x86)64_poly_mont.cpp
	- Comments were very wrong, fixed/rewrote comments
	- Added ascii art for vector operations
- Removed montgomery percolation in crypto ParameterSpec APIs
- Enabled montgomery intrinsics by default
- Fixed test cases (ECOperationsFussTest.java, ECOperationsKAT.java, MontgomeryPolynomialFuzzTest.java)
	- Typos from context switch
	- Fixes needed after refactoring
		- Use reflection to disable montgomery
		- getElement() refactored, unfix uses
- Fixed PolynomialP256Bench microbenchmark
	- Need to remeasure
- Removed changes in SignatureBench and KeyAggreementBench
	- Will use original with baseline SDK
@bridgekeeper
Copy link

bridgekeeper bot commented Apr 2, 2024

👋 Welcome back vpaprotsk! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk
Copy link

openjdk bot commented Apr 2, 2024

@vpaprotsk This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8329538: Accelerate P256 on x86_64 using Montgomery intrinsic

Reviewed-by: ihse, ascarpino, sviswanathan

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 8 new commits pushed to the master branch:

  • 9ca90cc: 8332610: Remove unused nWakeups in ObjectMonitor
  • 92d3350: 8331920: ubsan: g1CardSetContainers.inline.hpp:266:5: runtime error: index 2 out of bounds for type 'G1CardSetHowl::ContainerPtr [2]' reported
  • 4f1a10f: 8332360: JVM hangs at exit when running on a uniprocessor
  • c3bc23f: 8326306: RISC-V: Re-structure MASM calls and jumps
  • 8a9d77d: 8320622: [TEST] Improve coverage of compiler/loopopts/superword/TestMulAddS2I.java on different platforms
  • 3d511ff: 8329748: Change default value of AssertWXAtThreadSync to true
  • 67f03f2: 8332533: RISC-V: Enable vector variable shift instructions for machines with RVV
  • 5f804b2: 8329825: Clarify the value type for java.net.SocketOptions.SO_LINGER

Please see this link for an up-to-date comparison between the source branch of this pull request and the master branch.
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@magicus, @jatin-bhateja, @ascarpino, @sviswa7) but any other Committer may sponsor as well.

➡️ To flag this PR as ready for integration with the above commit message, type /integrate in a new comment. (Afterwards, your sponsor types /sponsor in a new comment to perform the integration).

@openjdk
Copy link

openjdk bot commented Apr 2, 2024

@vpaprotsk The following labels will be automatically applied to this pull request:

  • build
  • core-libs
  • graal
  • hotspot
  • security

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added graal graal-dev@openjdk.org security security-dev@openjdk.org build build-dev@openjdk.org hotspot hotspot-dev@openjdk.org core-libs core-libs-dev@openjdk.org rfr Pull request is ready for review labels Apr 2, 2024
@mlbridge
Copy link

mlbridge bot commented Apr 2, 2024

jdk.jfr,
jdk.unsupported;
jdk.unsupported,
jdk.crypto.ec;
Copy link
Contributor

Choose a reason for hiding this comment

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

jdk.crypto.ec has been hollowed out since JDK 22, the sun.security.ec are in java.base. So I don't think you need this qualified export.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks, fixed. (Started this when jdk.crypto.ec was still in use.. missed a few spots during rebase I guess)

Copy link
Member

@magicus magicus left a comment

Choose a reason for hiding this comment

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

Build changes are trivially fine.
/reviewers 3

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Apr 3, 2024
@openjdk
Copy link

openjdk bot commented Apr 3, 2024

@magicus
The total number of required reviews for this PR (including the jcheck configuration and the last /reviewers command) is now set to 3 (with at least 1 Reviewer, 2 Authors).

@openjdk openjdk bot removed the ready Pull request is ready to be integrated label Apr 3, 2024
Copy link
Member

@jatin-bhateja jatin-bhateja left a comment

Choose a reason for hiding this comment

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

Few early comments.

Please update the copyright year of all the modified files.

You can even consider splitting this into two patches, Java side changes in one and x86 optimized intrinsic in next one.

__ cmpl(length, 19);
__ jcc(Assembler::equal, L_Length19);

// Default copy loop
Copy link
Member

Choose a reason for hiding this comment

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

Please add appropriate loop entry alignment.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is actually a 'switch statement default'. The default should never happen (See "Known Length comment on line 335"), but added because java code has that behavior. (i.e. in the unlikely case NIST adds a new elliptic curve to the existing standard?)

Comment on lines 32 to 39
ATTRIBUTE_ALIGNED(64) uint64_t MODULUS_P256[] = {
0x000fffffffffffff, 0x00000fffffffffff,
0x0000000000000000, 0x0000001000000000,
0x0000ffffffff0000, 0x0000000000000000,
0x0000000000000000, 0x0000000000000000
};
static address modulus_p256() {
return (address)MODULUS_P256;
Copy link
Member

Choose a reason for hiding this comment

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

Long constants should have UL suffix.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Properly ULL, but good point, fixed

Comment on lines 387 to 394
__ bind(L_DefaultLoop);
__ cmpl(length, 0);
__ jcc(Assembler::less, L_Done);
assign_scalar(Address(aLimbs, 0), Address(bLimbs, 0), set, tmp, _masm);
__ subl(length, 16);
__ lea(aLimbs, Address(aLimbs,8));
__ lea(bLimbs, Address(bLimbs,8));
__ jmp(L_DefaultLoop);
Copy link
Member

Choose a reason for hiding this comment

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

Both sub and cmp are flag affecting instructions and are macro-fusible.
By doing a loop rotation i.e. moving the length <= 0 check outside the loop and pushing the loop exit check at bottom you can save additional compare checks.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Per-above, this is a switch statement (UNLIKELY) fallback. I can still add alignment and loop rotation, but being a fallback figured its more important to keep it small&readable...

Copy link
Member

@jatin-bhateja jatin-bhateja Apr 16, 2024

Choose a reason for hiding this comment

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

It's all part of intrinsic, no harm in polishing it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done (normalized loop/backedge). There was actually a problem in the loop counter.. (i-=1 instead of i-=16). Can't include a test since classes are sealed, but verified manually.

@vpaprotsk
Copy link
Contributor Author

@ascarpino Hi Tony, this is the ECC P256 PR we talked about last year, would appreciate your feedback.

@ascarpino
Copy link
Contributor

In ECOperations.java, if I understand this correctly, it is to replace the existing PointMultiplier with montgomery-based PointMuliplier. But when I look at the code, I see both are still options. If I read this correctly, it checks for the old IntegerFieldModuloP, then looks for the new IntegerMontgomeryFieldModuloP. It appears to use the new one always.
Why doesn't it just replace the old implementation entry in the fields Map? Is there a reason to keep it around?

@vpaprotsk
Copy link
Contributor Author

In ECOperations.java, if I understand this correctly, it is to replace the existing PointMultiplier with montgomery-based PointMuliplier. But when I look at the code, I see both are still options. If I read this correctly, it checks for the old IntegerFieldModuloP, then looks for the new IntegerMontgomeryFieldModuloP. It appears to use the new one always. Why doesn't it just replace the old implementation entry in the fields Map? Is there a reason to keep it around?

Hmm, thats a good point I haven't fully considered; i.e. (if I read correctly) "for CurveDB.P_256 remove the fallback path to non-montgomery entirely".. that might also help in cleaning a few things up in the construction. Maybe even get rid of this nested ECOperations inside ECOperations.. Perhaps nesting isnt a big deal, but all attempts to make the ECC stack clearer is positive!

One functional reason that might justify keeping it as-is, is fuzz-testing; with the fallback available, I am able to write the included Fuzz tests and have them check the values against the existing implementation. While I also included a few KAT tests using openssl-generated values, the fuzz tests check millions of values and it does add a lot more certainty about correctness of this code.

Can it be removed? For the operations that do not involve multiplication (i.e. setSum(*)), montgomery is expensive. I think I did go through the uses of this code some time back (i.e. ECDHE, ECDSA and KeyGeneration) and existing IntegerPolynomialP256 is no longer used (I should verify that again) and only P256OrderField remains non-montgomery. So removing references to IntegerPolynomialP256 in ECOperations should be possible and cleaner. Removing IntegerPolynomialP256 from MontgomeryIntegerPolynomialP256 is harder (fromMontgomery() uses IntegerPolynomialP256) but perhaps also worth some thought..

I tend to like ECOperationsFuzzTest.java and would prefer to keep it, but it could also be chucked up as part of 'scaffolding' and removed in name of code quality?

Thanks @ascarpino

PS: Perhaps there is some middle ground, remove the ECOperations montgomeryOps nesting, and construct (somehow?? singleton makes most things inaccessible..) the reference ECOperations in the fuzz test instead.. not sure how yet, but perhaps worth a further thought..

@vpaprotsk
Copy link
Contributor Author

Few early comments.

Please update the copyright year of all the modified files.

You can even consider splitting this into two patches, Java side changes in one and x86 optimized intrinsic in next one.

Thanks Jatin, will fix!

@ascarpino
Copy link
Contributor

In ECOperations.java, if I understand this correctly, it is to replace the existing PointMultiplier with montgomery-based PointMuliplier. But when I look at the code, I see both are still options. If I read this correctly, it checks for the old IntegerFieldModuloP, then looks for the new IntegerMontgomeryFieldModuloP. It appears to use the new one always. Why doesn't it just replace the old implementation entry in the fields Map? Is there a reason to keep it around?

Hmm, thats a good point I haven't fully considered; i.e. (if I read correctly) "for CurveDB.P_256 remove the fallback path to non-montgomery entirely".. that might also help in cleaning a few things up in the construction. Maybe even get rid of this nested ECOperations inside ECOperations.. Perhaps nesting isnt a big deal, but all attempts to make the ECC stack clearer is positive!

One functional reason that might justify keeping it as-is, is fuzz-testing; with the fallback available, I am able to write the included Fuzz tests and have them check the values against the existing implementation. While I also included a few KAT tests using openssl-generated values, the fuzz tests check millions of values and it does add a lot more certainty about correctness of this code.

I hadn't looked at your fuzz test until you mentioned it. I see you are using reflection to change the values. Is that what you mean by "fallback"? I'm assuming there is no to access the older implementation without reflection.

Can it be removed? For the operations that do not involve multiplication (i.e. setSum(*)), montgomery is expensive. I think I did go through the uses of this code some time back (i.e. ECDHE, ECDSA and KeyGeneration) and existing IntegerPolynomialP256 is no longer used (I should verify that again) and only P256OrderField remains non-montgomery. So removing references to IntegerPolynomialP256 in ECOperations should be possible and cleaner. Removing IntegerPolynomialP256 from MontgomeryIntegerPolynomialP256 is harder (fromMontgomery() uses IntegerPolynomialP256) but perhaps also worth some thought..

I tend to like ECOperationsFuzzTest.java and would prefer to keep it, but it could also be chucked up as part of 'scaffolding' and removed in name of code quality?

I wouldn't rip out the old implementation. I have been wondering if we should make the older implementation available, maybe by security property. I was looking at the static Maps at the top of ECOperations, forParameters, and the constructors where it checks if the montgomeryOps was null or set. It would be nice if we could have one set of fields Maps by putting the montgomery entry into the fields to replace it. I think that should work because IntegerMontgomeryFieldModuloP extends IntegerFieldModuloP. instanceof or other montgomeryOps checks would still need to exist because not all the fields support mongomery, and the older implementation would still be accessible for your fuzz tester. At least that is my theory.

Thanks @ascarpino

PS: Perhaps there is some middle ground, remove the ECOperations montgomeryOps nesting, and construct (somehow?? singleton makes most things inaccessible..) the reference ECOperations in the fuzz test instead.. not sure how yet, but perhaps worth a further thought..

It would be nice to remove the nesting and it would be nice to be a singleton. Maybe some combination of what I mentioned above chance can help that. I haven't fully thought this out either.

@vpaprotsk
Copy link
Contributor Author

Few early comments.

Please update the copyright year of all the modified files.

You can even consider splitting this into two patches, Java side changes in one and x86 optimized intrinsic in next one.

Fixed all copyright years

git diff da8a095a19c90e7ee2b45fab9b533a1092887023 | lsdiff -p1 | while read line; do echo $line =========================; grep Copyright $line | grep -v 2024; done | less

Re splitting.. probably too late for that now.. (did consider it initially.. got hard to manage two changes while developing. And easier to justify the change when the entire patch is presented? but yes, far more code to review.. )

@openjdk openjdk bot added the rfr Pull request is ready for review label May 10, 2024
Copy link
Contributor

@ascarpino ascarpino left a comment

Choose a reason for hiding this comment

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

The changes look good and have passed testing

}

#ifdef _LP64
if (supports_avx512ifma() && supports_avx512vlbw() && MaxVectorSize >= 64) {
Copy link

Choose a reason for hiding this comment

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

No need to tie the intrinsic to MaxVectorSize setting.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done

stubName = "intpoly_assign";

if (!stubAddr) return false;
if (stopped()) return true;
Copy link

Choose a reason for hiding this comment

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

Line 7564 seems redundant here as there is no range check or anything like that before this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh. That is what that is for... I thought it was some soft of 'VM quitting' short-circuit. Removed.

// M = load(*modulus_p256)
__ evmovdquq(modulus, allLimbs, ExternalAddress(modulus_p256()), false, Assembler::AVX_512bit, rscratch);

// A = load(*aLimbs)
Copy link

Choose a reason for hiding this comment

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

A little bit more description in comments on what the load step involves would be helpful. e.g. Load upper 4 limbs, shift left by 1 limb using perm, or in the lowest limb.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done

XMMRegister mask52 = xmm23;
XMMRegister broadcast5 = xmm24;
KRegister limb0 = k1;
KRegister limb5 = k2;
Copy link

Choose a reason for hiding this comment

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

limb5 and select are not being used anymore.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks, fixed (and also broadcast5)

Comment on lines 260 to 270
// Save all 'SOE' registers
__ push(rbx);
#ifdef _WIN64
__ push(rsi);
__ push(rdi);
#endif
__ push(r12);
__ push(r13);
__ push(r14);
__ push(r15);

Copy link

Choose a reason for hiding this comment

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

No need to save/restore rbx, r12, r14, r15. Only r13 is used as temp in montgomeryMultiply(aLimbs, bLimbs, rLimbs). That too could be easily changed to r8.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Seems I forgot to completely cleanup, thanks! (Originally copied from poly1305 stub)

Comment on lines 284 to 286
__ mov(aLimbs, c_rarg0);
__ mov(bLimbs, c_rarg1);
__ mov(rLimbs, c_rarg2);
Copy link

Choose a reason for hiding this comment

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

We could directly call montgomeryMultiply(c_rarg0, c_rarg1, c_rarg2) then these moves are not necessary.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Gave them symbolic names and passed the gpr temp and parameter. vector register map still in the montgomeryMultiply function, but gprs explicitly passed in. 'close enough'?

@sviswa7
Copy link

sviswa7 commented May 17, 2024

The intrinsics and the C2 changes look good to me.

@openjdk openjdk bot added the ready Pull request is ready to be integrated label May 17, 2024
@vpaprotsk
Copy link
Contributor Author

Thanks Sandhya!

Now that I have @ascarpino approval as well, I plan to integrate next Tuesday.

@TobiHartmann
Copy link
Member

I'll send this through our testing and will report back once it passed.

@TobiHartmann
Copy link
Member

I'm getting some conflicts when trying to apply this to master. Could you please merge the PR?

@vpaprotsk
Copy link
Contributor Author

Hi @TobiHartmann , merged with no issues for me. Could you please run the tests again? (I think Tony did run them, but can't hurt verifying again). Thanks!

@TobiHartmann
Copy link
Member

Thanks! I submitted testing and will report back once it passed.

@TobiHartmann
Copy link
Member

All tests passed.

@vpaprotsk
Copy link
Contributor Author

Thanks Tobi!

/integrate

@openjdk openjdk bot added the sponsor Pull request is ready to be sponsored label May 22, 2024
@openjdk
Copy link

openjdk bot commented May 22, 2024

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

@sviswa7
Copy link

sviswa7 commented May 22, 2024

/sponsor

@openjdk
Copy link

openjdk bot commented May 22, 2024

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

  • 9ca90cc: 8332610: Remove unused nWakeups in ObjectMonitor
  • 92d3350: 8331920: ubsan: g1CardSetContainers.inline.hpp:266:5: runtime error: index 2 out of bounds for type 'G1CardSetHowl::ContainerPtr [2]' reported
  • 4f1a10f: 8332360: JVM hangs at exit when running on a uniprocessor
  • c3bc23f: 8326306: RISC-V: Re-structure MASM calls and jumps
  • 8a9d77d: 8320622: [TEST] Improve coverage of compiler/loopopts/superword/TestMulAddS2I.java on different platforms
  • 3d511ff: 8329748: Change default value of AssertWXAtThreadSync to true
  • 67f03f2: 8332533: RISC-V: Enable vector variable shift instructions for machines with RVV
  • 5f804b2: 8329825: Clarify the value type for java.net.SocketOptions.SO_LINGER

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label May 22, 2024
@openjdk openjdk bot closed this May 22, 2024
@openjdk openjdk bot 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 May 22, 2024
@openjdk
Copy link

openjdk bot commented May 22, 2024

@sviswa7 @vpaprotsk Pushed as commit afed7d0.

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

@TobiHartmann
Copy link
Member

Unfortunately, this caused a performance regression, see JDK-8333583. @vpaprotsk, please have a look.

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 graal graal-dev@openjdk.org hotspot hotspot-dev@openjdk.org integrated Pull request has been integrated security security-dev@openjdk.org

Development

Successfully merging this pull request may close these issues.

7 participants