On Thu, 4 Dec 2025 16:22:08 GMT, Stuart Monteith <[email protected]> wrote:
>> MemorySegments allocated from shared Arena from >> java.lang.foreign.Arena.ofShared() have their lifecycle controlled by >> jdk.internal.foreign.SharedSession. This class ensures that the >> MemorySegments can't be freed until after a thread has called Arena.close(). >> This is implemented using a counter that is atomically incremented when >> used, and decremented when not used, on every invocation of a downcall. >> While shared Arenas allow any thread to use it and to close it, this >> tracking has a cost when multiple threads are contended on it. This patch >> changes the implementation to use multiple counters to reduce contention. >> sun.nio.ch.IOUtil, java.nio.Buffer and >> sun.nio.ch.SimpleAsynchronousFileChannelImpl are modified as they have >> threads releasing the scope different from the ones that allocated them, so >> a ticket that tracks the counter has to be passed over. >> >> The microbenchmark org.openjdk.bench.java.lang.foreign. >> CallOverheadConstant.panama_identity_memory_address_shared_3 was used to >> generate the following results. The scalability was checked on a number of >> platforms with the JMH parameter "-t" specifying the number of threads. >> Measurements are in ns/op . >> >> The hardware are the Neoverse-N1, N2, V1 and V2, Intel Xeon 8375c and the >> AMD Epyc 9654. >> >> | Threads | N1 | N2 | V1 | V2 | Xeon | >> Epyc | >> |---------|-------|-------|-------|-------|-------|-------| >> | 1 | 30.88 | 32.15 | 33.54 | 32.82 | 27.46 | >> 8.45 | >> | 2 | 142.56 | 134.48 | 132.01 | 131.50 | 116.68 | >> 46.53 | >> | 4 | 310.18 | 282.75 | 287.59 | 271.82 | 251.88 | >> 86.11 | >> | 8 | 702.02 | 710.29 | 736.72 | 670.63 | 533.46 | >> 194.60 | >> | 16 | 1,436.17 | 1,684.80 | 1,833.69 | 1,782.78 | 1,100.15 | >> 827.28 | >> | 24 | 2,185.55 | 2,508.86 | 2,732.22 | 2,815.26 | 1,646.09 | >> 1,530.28 | >> | 32 | 2,942.48 | 3,432.84 | 3,643.64 | 3,782.23 | 2,236.81 | >> 2,278.52 | >> | 48 | 4,466.56 | 5,174.72 | 5,401.95 | 5,621.41 | 4,926.30 | >> 3,026.58 | >> >> After: >> >> | Threads | N1 | N2 | V1 | V2 | Xeon | >> Epyc | >> |---------|-------|-------|-------|-------|-------|-------| >> | 1 | 32.41 | 32.11 | 34.43 | 31.32 | 27.94 | 9.82 >> | >> | 2 | 32.64 | 33.72 | 35.11 | 31.30 | 28.02 | 9.81 >> | >> | 4 | 32.71 | 36.84 | 34.67 | 31.35 | 28.12 | 10.49 | >> | 8 | 58... > > I'll start a discussion soon on panama-dev. At the very least, this PR > provides a point of discussion. > @stooart-mon This pull request has been inactive for more than 4 weeks and > will be automatically closed if another 4 weeks passes without any activity. > To avoid this, simply issue a `/touch` or `/keepalive` command to the pull > request. Feel free to ask for assistance if you need help with progressing > this pull request towards integration! It's OK bot, I'm sure people are looking at this. ------------- PR Comment: https://git.openjdk.org/jdk/pull/28575#issuecomment-3771899705
