JCStress 0.15

Aleksey Shipilev shade at redhat.com
Thu Dec 2 10:39:31 UTC 2021


JCStress 0.15 is released and available on Maven Central. This is useful for those who use JCStress 
as Maven dependency. This release further improves harness reliability, testing performance, and UX.

  *) UX: Reworked HTML reports so they include test configurations more comprehensively
   7903039: jcstress: HTML reports should capture compilation/scheduling modes

  *) Reliability: When topology code cannot figure out the CPU thread IDs, it used to blindly trust 
that thread IDs are consecutive. This was demonstrably false in many cases in CKI Project, where 
tests are running on the slices of the physical host. The tests would then fail when harness tried 
to taskset the JVMs with wrong thread IDs. Now the harness does not do that if topology is unknown.
   7903064: jcstress: Fallback topology should force NONE affinity mode

  NOTE: This has an unfortunate effect on OSX: taskset is there, but there is no code that parses 
OSX CPU topology, so GLOBAL/LOCAL affinity policies do not work there anymore, making the tests a 
bit less accurate. Contributions to implement OSX CPU topology parsing are welcome! (Also Windows, 
but lacking the taskset, you would need to also implement actual affinity support with JNA).

  *) UX: Related to above, stop pretending that fake CPU topology is real in the test output
   7903066: jcstress: Do not print fake CPU mappings from FallbackTopology
   7903065: jcstress: Do not print CPU allocations for NONE affinity mode

  *) Reliability: If you get a long exception (for example, StackOverflowError) in the test, the 
harness used to break hard. Now it does not.
   7903019: jcstress: Very long exceptions break the VM data streams

  *) Reliability: Since JDK 16, there is the -XX:StressSeed option to provide a repeatable seed for 
C2 randomizers. Harness now uses it by providing its own seed values, and reporting them in reports 
for better reproducibility.
   7903041: jcstress: Provide explicit StressSeed when available

  *) Reliability: C2 randomized configurations can be run with more forks to get more exposure to 
randomized tests. New multiplier option makes X times more forks for those configs. Current 
defaults: "1" for -m {sanity,quick}, "5" for {default, tough}, "10" for {stress}. "-fsm #" command 
line option overrides it.
   7903040: jcstress: Introduce stress configuration multipliers

Other notes, not exactly related to this release:

  *) We have been doing lots of Samples work. If you are looking for the most up to date 
correctness/semantics guide on low-level Java concurrency then JCStress examples are it. Shout out 
to Michael Mirwaldt for contributing a bunch of them in this cycle:



More information about the jcstress-dev mailing list