[11u] RFR: 8244214: Add paddings for TaskQueuSuper to reduce false-sharing cache contention

Patrick Zhang OS patrick at os.amperecomputing.com
Wed Jun 24 09:55:09 UTC 2020


Hi

Could I ask for a review of this simple patch which takes a tiny part from the original ticket JDK-8243326 [1]. The reason that I do not want a full backport is, the majority of the patch at jdk/jdk [2] is to clean up the volatile use and may be not very meaningful to 11u, furthermore the context (dependencies on atomic.hpp refactor) is too complicated to generate a clear backport (I tried, ~81 files need to be changed).

The purpose of having this one-line change to 11u is, the two volatile variables in TaskQueuSuper: _bottom, _age and corresponding atomic operations upon, may cause severe cache contention inside GC with larger number of threads, i.e., specified by -XX:ParallelGCThreads=##, adding paddings (up to DEFAULT_CACHE_LINE_SIZE) in-between can reduce the possibility of false-sharing cache contention. I do not need the paddings before _bottom and after _age from the original patch [2], because the instances of TaskQueuSuper are usually (always) allocated in a set of queues, in which they are naturally separated. Please review, thanks.

JBS: https://bugs.openjdk.java.net/browse/JDK-8248214
Webrev: http://cr.openjdk.java.net/~qpzhang/8248214/webrev.01/
Testing: tier1-2 pass with the patch, commercial benchmarks and small C++ test cases (to simulate the data struct and work-stealing algorithm atomics) validated the performance, no regression.

By the way, I am going to request for 8u backport as well once 11u would have it.

[1] https://bugs.openjdk.java.net/browse/JDK-8243326 Cleanup use of volatile in taskqueue code
[2] https://hg.openjdk.java.net/jdk/jdk/rev/252a1602b4c6

Regards
Patrick



More information about the jdk-updates-dev mailing list