Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

-XX:+StressLCM, -XX:+StressGCM Options for JVM

While playing with some jcstress code, I noticed two parameters that are very new to me: StressLCM and StressGCM.

The very first thing to do for me was searching for these in the source code itself and while I have found some things, it is still unclear what they actually do. I was really hoping to see some comments in the source code that would shed some light, but no luck.

I also found the bug description where these have been added, but the explanation made no sense for me:

Randomize instruction scheduling in LCM/GCM.

Can someone explain what they do, if possible in plain english?

like image 319
Eugene Avatar asked May 23 '19 10:05

Eugene


1 Answers

LCM / GCM stands for Local Code Motion / Global Code Motion. To optimize CPU utilization, compiler may reorder independent instructions without changing the semantics of the code. Compiler tries to find the most optimal (from performance perspective) order of instructions. This is called instruction scheduling, and that's what LCM / GCM do.

With -XX:+StressLCM / -XX:+StressGCM options the instruction scheduling works in a bit different way. It no longer tries to find the best schedule, but instead chooses a random instruction order within the allowed constraints, still keeping the original semantics unchanged. Such nondeterministic behavior helps to test more combinations of instruction interleaving, which is essential in finding subtle concurrency issues.

like image 60
apangin Avatar answered Nov 20 '22 05:11

apangin