< prev index next >

test/gc/g1/plab/TestPLABResize.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -29,11 +29,11 @@
  * @library /testlibrary /../../test/lib /
  * @modules java.management
  * @build ClassFileInstaller
  *        sun.hotspot.WhiteBox
  *        gc.g1.plab.lib.LogParser
- *        gc.g1.plab.lib.Storage
+ *        gc.g1.plab.lib.MemoryConsumer
  *        gc.g1.plab.lib.PLABUtils
  *        gc.g1.plab.lib.AppPLABResize
  * @run main ClassFileInstaller sun.hotspot.WhiteBox
  *                              sun.hotspot.WhiteBox$WhiteBoxPermission
  * @run main gc.g1.plab.TestPLABResize

@@ -50,11 +50,10 @@
 import gc.g1.plab.lib.LogParser;
 import gc.g1.plab.lib.PLABUtils;
 import gc.g1.plab.lib.AppPLABResize;
 
 import jdk.test.lib.OutputAnalyzer;
-import jdk.test.lib.Pair;
 import jdk.test.lib.ProcessTools;
 
 /**
  * Test for PLAB resizing.
  */

@@ -84,19 +83,14 @@
         new TestCase(WASTE_PCT_HIGH, OBJECT_SIZE_SMALL, GC_NUM_HIGH, ITERATIONS_MEDIUM),
         new TestCase(WASTE_PCT_HIGH, OBJECT_SIZE_MEDIUM, GC_NUM_SMALL, ITERATIONS_SMALL),
         new TestCase(WASTE_PCT_HIGH, OBJECT_SIZE_HIGH, GC_NUM_MEDIUM, ITERATIONS_HIGH)
     };
 
-    private static final String[] PLAB_OPTIONS = {
-        "-XX:+ResizePLAB"
-    };
-
     public static void main(String[] args) throws Throwable {
         for (TestCase testCase : TEST_CASES) {
             testCase.print(System.out);
-            List<String> options = PLABUtils.prepareOptions(PLAB_OPTIONS);
-            options.addAll(testCase.toOptions());
+            List<String> options = PLABUtils.prepareOptions(testCase.toOptions());
             options.add(AppPLABResize.class.getName());
             OutputAnalyzer out = ProcessTools.executeTestJvm(options.toArray(new String[options.size()]));
             if (out.getExitValue() != 0) {
                 System.out.println(out.getOutput());
                 throw new RuntimeException("Exit code is not 0");

@@ -112,41 +106,47 @@
      * @param output - VM output
      * @param testCase
      */
     private static void checkResults(String output, TestCase testCase) {
         final LogParser log = new LogParser(output);
-        final List<Pair<LogParser.ReportType, ? extends Map<String, Long>>> entries = log.getEntries();
-        final ArrayList<Long> plabSizes = entries.stream()
-                .filter(p -> p.first == LogParser.ReportType.SURVIVOR_STATS)
-                .map(p -> p.second)
-                // We do not need first iterations - it is 'warm' phase of allocation.
-                .filter(mapEntries -> mapEntries.get(LogParser.GC_ID) > testCase.iterations)
-                .map(items -> items.get("desired_plab_sz"))
-                .collect(Collectors.toCollection(ArrayList::new));
+        final Map<Long, Map<LogParser.ReportType, Map<String, Long>>> entries = log.getEntries();
 
-        if (plabSizes.isEmpty()) {
-            System.out.println(output);
-            throw new RuntimeException("Cannot find desired_plab_sz information for gc_id>" + testCase.iterations);
-        }
+        final ArrayList<Long> plabSizes = entries.entrySet()
+                .stream()
+                .map(item -> {
+                    return item.getValue()
+                            .get(LogParser.ReportType.SURVIVOR_STATS)
+                            .get("desired_plab_sz");
+                })
+                .collect(Collectors.toCollection(ArrayList::new));
 
-        Long prev = plabSizes.get(0);
-        // Check that desired plab size is changed during iterations.
+        // Check that desired plab size was changed during iterations.
         // It should decrease during first half of iterations
         // and increase after.
-        for (int index = 1; index < plabSizes.size(); ++index) {
-            Long current = plabSizes.get(index);
-            if (index < testCase.getIterations()) {
+        List<Long> decreasedPlabs = plabSizes.subList(testCase.getIterations(), testCase.getIterations() * 2);
+        List<Long> increasedPlabs = plabSizes.subList(testCase.getIterations() * 2, testCase.getIterations() * 3);
+
+        Long prev = decreasedPlabs.get(0);
+        for (int index = 1; index < decreasedPlabs.size(); ++index) {
+            Long current = decreasedPlabs.get(index);
                 if (prev < current) {
                     System.out.println(output);
-                    throw new RuntimeException("Test failed! Expect that previout PLAB size should be less than current. Prev.size: " + prev + " Current size:" + current);
+                throw new RuntimeException("Test failed! Expect that previous PLAB size should be greater than current. Prev.size: " + prev + " Current size:" + current);
+            }
+            prev = current;
                 }
-            } else if (prev > current) {
+
+        prev = increasedPlabs.get(0);
+        for (int index = 1; index < increasedPlabs.size(); ++index) {
+            Long current = increasedPlabs.get(index);
+            if (prev > current) {
                 System.out.println(output);
-                throw new RuntimeException("Test failed! Expect that previout PLAB size should be greater than current. Prev.size: " + prev + " Current size:" + current);
+                throw new RuntimeException("Test failed! Expect that previous PLAB size should be less than current. Prev.size: " + prev + " Current size:" + current);
             }
             prev = current;
         }
+
         System.out.println("Test passed!");
     }
 
     /**
      * Description of one test case.

@@ -190,10 +190,11 @@
          * List of options
          */
         public List<String> toOptions() {
             return Arrays.asList("-XX:ParallelGCThreads=" + parGCThreads,
                     "-XX:ParallelGCBufferWastePct=" + wastePct,
+                    "-XX:+ResizePLAB",
                     "-Dthreads=" + parGCThreads,
                     "-Dchunk.size=" + chunkSize,
                     "-Diterations=" + iterations,
                     "-XX:NewSize=16m",
                     "-XX:MaxNewSize=16m"

@@ -206,12 +207,11 @@
         public void print(PrintStream out) {
             out.println("Test case details:");
             out.println("  Parallel GC buffer waste pct : " + wastePct);
             out.println("  Chunk size : " + chunkSize);
             out.println("  Parallel GC threads : " + parGCThreads);
-            out.println("  Iterations per one allocation part : " + iterations);
-            out.println("  All iteration of allocations : " + iterations * 3);
+            out.println("  Iterations: " + iterations);
         }
 
         /**
          * @return iterations
          */
< prev index next >