[foreign-memaccess+abi] RFR: Add test for resource scope acquire with bulk operation
Maurizio Cimadamore
mcimadamore at openjdk.java.net
Wed Apr 14 13:47:07 UTC 2021
This patch adds a test for a bulk segment mismatch inside an acquire block. This benchmark measures the relative overhead of the acquier operation, relative to the cost of the bulk mismatch. Results for large segments are as follows:
Benchmark (scopeKind) Mode Cnt Score Error Units
BulkMismatchAcquire.mismatch_large_segment CONFINED avgt 30 37662.474 ? 579.201 ns/op
BulkMismatchAcquire.mismatch_large_segment SHARED avgt 30 37583.186 ? 427.663 ns/op
BulkMismatchAcquire.mismatch_large_segment IMPLICIT avgt 30 37577.151 ? 474.734 ns/op
BulkMismatchAcquire.mismatch_large_segment_acquire CONFINED avgt 30 37801.227 ? 515.459 ns/op
BulkMismatchAcquire.mismatch_large_segment_acquire SHARED avgt 30 37159.676 ? 369.788 ns/op
BulkMismatchAcquire.mismatch_large_segment_acquire IMPLICIT avgt 30 37854.949 ? 464.150 ns/op
Here, we can see that the cost of the acquire is, in all cases, negligible, compared with the cost of the underlying bulk operation. We expect this to be the use case where resource scope handles are used the most.
For completeness, here's the same benchmark, but with a smaller segment size:
Benchmark (scopeKind) Mode Cnt Score Error Units
BulkMismatchAcquire.mismatch_small_segment CONFINED avgt 30 5.826 ? 0.091 ns/op
BulkMismatchAcquire.mismatch_small_segment SHARED avgt 30 5.160 ? 0.072 ns/op
BulkMismatchAcquire.mismatch_small_segment IMPLICIT avgt 30 5.274 ? 0.090 ns/op
BulkMismatchAcquire.mismatch_small_segment_acquire CONFINED avgt 30 7.386 ? 0.035 ns/op
BulkMismatchAcquire.mismatch_small_segment_acquire SHARED avgt 30 15.130 ? 0.649 ns/op
BulkMismatchAcquire.mismatch_small_segment_acquire IMPLICIT avgt 30 6.877 ? 0.083 ns/op
In this case, we see that for implicit and confined scope the cost is low; for shared segments we have a spike (which is related to the CAS logic in the shared handle). We believe this to be an acceptable compromise, and an unavoidable consequence of having true, deterministic shared segments.
In addition to adding the benchmark - the patch also does two other things:
* Fixes a bug in the NonCloseableScope::acquire logic (the polarity of the null check is wrong, and this was causing NPEs on the benchmark - whoops)
* Fixes the unrelated test issue with SpliteratorTest - this was also fixed by PR/494, but seeing that it's not converging, I'd like to get the tests fixed sooner rather than later
-------------
Commit messages:
- Initial push
Changes: https://git.openjdk.java.net/panama-foreign/pull/503/files
Webrev: https://webrevs.openjdk.java.net/?repo=panama-foreign&pr=503&range=00
Stats: 175 lines in 3 files changed: 173 ins; 0 del; 2 mod
Patch: https://git.openjdk.java.net/panama-foreign/pull/503.diff
Fetch: git fetch https://git.openjdk.java.net/panama-foreign pull/503/head:pull/503
PR: https://git.openjdk.java.net/panama-foreign/pull/503
More information about the panama-dev
mailing list