< prev index next >

test/gc/g1/TestLargePageUseForAuxMemory.java

Print this page

        

*** 34,43 **** --- 34,45 ---- * sun.hotspot.WhiteBox$WhiteBoxPermission * @run main/othervm -Xbootclasspath/a:. -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+IgnoreUnrecognizedVMOptions -XX:+UseLargePages TestLargePageUseForAuxMemory */ import java.lang.Math; + import java.lang.reflect.InvocationTargetException; + import java.lang.reflect.Method; import jdk.test.lib.*; import jdk.test.lib.Asserts; import sun.hotspot.WhiteBox;
*** 45,62 **** static final long HEAP_REGION_SIZE = 1 * 1024 * 1024; static long largePageSize; static long smallPageSize; static long allocGranularity; static void checkSmallTables(OutputAnalyzer output, long expectedPageSize) throws Exception { ! output.shouldContain("G1 'Block offset table': pg_sz=" + expectedPageSize); ! output.shouldContain("G1 'Card counts table': pg_sz=" + expectedPageSize); } static void checkBitmaps(OutputAnalyzer output, long expectedPageSize) throws Exception { ! output.shouldContain("G1 'Prev Bitmap': pg_sz=" + expectedPageSize); ! output.shouldContain("G1 'Next Bitmap': pg_sz=" + expectedPageSize); } static void testVM(String what, long heapsize, boolean cardsShouldUseLargePages, boolean bitmapShouldUseLargePages) throws Exception { System.out.println(what + " heapsize " + heapsize + " card table should use large pages " + cardsShouldUseLargePages + " " + "bitmaps should use large pages " + bitmapShouldUseLargePages); --- 47,79 ---- static final long HEAP_REGION_SIZE = 1 * 1024 * 1024; static long largePageSize; static long smallPageSize; static long allocGranularity; + static void checkSize(OutputAnalyzer output, long expectedSize, String pattern) { + String pageSizeStr = output.firstMatch(pattern, 1); + + if (pageSizeStr == null) { + output.reportDiagnosticSummary(); + throw new RuntimeException("Match from '" + pattern + "' got 'null' expected: " + expectedSize); + } + + long size = parseMemoryString(pageSizeStr); + if (size != expectedSize) { + output.reportDiagnosticSummary(); + throw new RuntimeException("Match from '" + pattern + "' got " + size + " expected: " + expectedSize); + } + } + static void checkSmallTables(OutputAnalyzer output, long expectedPageSize) throws Exception { ! checkSize(output, expectedPageSize, "Block Offset Table: .*page_size=([^ ]+)"); ! checkSize(output, expectedPageSize, "Card Counts Table: .*page_size=([^ ]+)"); } static void checkBitmaps(OutputAnalyzer output, long expectedPageSize) throws Exception { ! checkSize(output, expectedPageSize, "Prev Bitmap: .*page_size=([^ ]+)"); ! checkSize(output, expectedPageSize, "Next Bitmap: .*page_size=([^ ]+)"); } static void testVM(String what, long heapsize, boolean cardsShouldUseLargePages, boolean bitmapShouldUseLargePages) throws Exception { System.out.println(what + " heapsize " + heapsize + " card table should use large pages " + cardsShouldUseLargePages + " " + "bitmaps should use large pages " + bitmapShouldUseLargePages);
*** 64,74 **** // Test with large page enabled. pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:G1HeapRegionSize=" + HEAP_REGION_SIZE, "-Xms" + heapsize, "-Xmx" + heapsize, ! "-XX:+TracePageSizes", "-XX:+UseLargePages", "-XX:+IgnoreUnrecognizedVMOptions", // there is no ObjectAlignmentInBytes in 32 bit builds "-XX:ObjectAlignmentInBytes=8", "-version"); --- 81,91 ---- // Test with large page enabled. pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:G1HeapRegionSize=" + HEAP_REGION_SIZE, "-Xms" + heapsize, "-Xmx" + heapsize, ! "-Xlog:pagesizes", "-XX:+UseLargePages", "-XX:+IgnoreUnrecognizedVMOptions", // there is no ObjectAlignmentInBytes in 32 bit builds "-XX:ObjectAlignmentInBytes=8", "-version");
*** 80,90 **** // Test with large page disabled. pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:G1HeapRegionSize=" + HEAP_REGION_SIZE, "-Xms" + heapsize, "-Xmx" + heapsize, ! "-XX:+TracePageSizes", "-XX:-UseLargePages", "-XX:+IgnoreUnrecognizedVMOptions", // there is no ObjectAlignmentInBytes in 32 bit builds "-XX:ObjectAlignmentInBytes=8", "-version"); --- 97,107 ---- // Test with large page disabled. pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC", "-XX:G1HeapRegionSize=" + HEAP_REGION_SIZE, "-Xms" + heapsize, "-Xmx" + heapsize, ! "-Xlog:pagesizes", "-XX:-UseLargePages", "-XX:+IgnoreUnrecognizedVMOptions", // there is no ObjectAlignmentInBytes in 32 bit builds "-XX:ObjectAlignmentInBytes=8", "-version");
*** 106,120 **** private static long lcm(long x, long y) { return x * (y / gcd(x, y)); } public static void main(String[] args) throws Exception { - if (!Platform.isDebugBuild()) { - System.out.println("Skip tests on non-debug builds because the required option TracePageSizes is a debug-only option."); - return; - } - // Size that a single card covers. final int cardSize = 512; WhiteBox wb = WhiteBox.getWhiteBox(); smallPageSize = wb.getVMPageSize(); largePageSize = wb.getVMLargePageSize(); --- 123,132 ----
*** 157,162 **** --- 169,194 ---- testVM("case4: only bitmap uses large pages (barely)", heapSizeForBitmapUsingLargePages, false, true); testVM("case5: only bitmap uses large pages (extra slack)", heapSizeForBitmapUsingLargePages + heapSizeDiffForBitmap, false, true); testVM("case6: nothing uses large pages (barely not)", heapSizeForBitmapUsingLargePages - heapSizeDiffForBitmap, false, false); } + + public static long parseMemoryString(String value) { + long multiplier = 1; + + if (value.endsWith("B")) { + multiplier = 1; + } else if (value.endsWith("K")) { + multiplier = 1024; + } else if (value.endsWith("M")) { + multiplier = 1024 * 1024; + } else if (value.endsWith("G")) { + multiplier = 1024 * 1024 * 1024; + } else { + throw new IllegalArgumentException("Expected memory string '" + value + "'to end with either of: B, K, M, G"); + } + + long longValue = Long.parseUnsignedLong(value.substring(0, value.length() - 1)); + + return longValue * multiplier; + } }
< prev index next >