RFR: 8177968: Add GC stress test TestGCLocker

Per Liden per.liden at oracle.com
Wed Apr 12 05:53:12 UTC 2017


Hi Erik,

On 2017-04-07 17:48, Erik Helin wrote:
> Hi all,
>
> this patch adds the stress test "TestGCLocker". The test repeatedly
> calls GCLocker::lock_critical/unlock_critical (via the JNI functions
> GetPrimitiveArrayCritical/ReleasePrimitiveArrayCritical) while
> concurrently filling up the old gen. Thea idea is to stress the GCLocker
> implementation by quickly entering/leaving critical JNI sections while
> simultaneously allocating objects to fill up the heap in order to
> provoke a GC.
>
> Enhancement:
> https://bugs.openjdk.java.net/browse/JDK-8177968
>
> Patch:
> http://cr.openjdk.java.net/~ehelin/8177968/00/

I did some test runs and it seems that this test provokes the wanted 
situation in only ~20% of the GC. Being a stress test, I'd like to 
propose that we remove the sleep() calls to have it provoke the 
situation ~100% of the GCs.

--- a/test/gc/stress/gclocker/TestGCLocker.java
+++ b/test/gc/stress/gclocker/TestGCLocker.java
@@ -162,7 +153,6 @@

          while (!shouldExit()) {
              load();
-            ThreadUtils.sleep(100);
          }
      }
  }
@@ -175,7 +165,6 @@
          byte[] array = new byte[1024 * 1024];
          while (!shouldExit()) {
              fillWithRandomValues(array);
-            ThreadUtils.sleep(10);
          }
      }
  }


Also, I think the filler function doesn't do what it says as it only 
writes to the first byte. Simple fix:

--- a/test/gc/stress/gclocker/libTestGCLocker.c
+++ b/test/gc/stress/gclocker/libTestGCLocker.c
@@ -29,7 +29,7 @@
    jbyte* p = (*env)->GetPrimitiveArrayCritical(env, arr, NULL);
    jsize i;
    for (i = 0; i < size; i++) {
-      *p = i % 128;
+    p[i] = i % 128;
    }
    (*env)->ReleasePrimitiveArrayCritical(env, arr, p, 0);
  }


cheers,
Per

>
> Testing:
> - JPRT (to ensure libTestGCLocker.c compiles on all platforms)
> - make run-test TEST=hotspot/test/gc/stress/gclocker
>
> Thanks,
> Erik


More information about the hotspot-gc-dev mailing list