< prev index next >

test/hotspot/jtreg/runtime/whitebox/WBStackSize.java

Print this page

        

*** 19,29 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! /* * @test WBStackSize * @summary verify that whitebox functions getThreadFullStackSize() and getThreadRemainingStackSize are working * @modules java.base/jdk.internal.misc * @library /test/lib * @build sun.hotspot.WhiteBox --- 19,29 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ ! /** * @test WBStackSize * @summary verify that whitebox functions getThreadFullStackSize() and getThreadRemainingStackSize are working * @modules java.base/jdk.internal.misc * @library /test/lib * @build sun.hotspot.WhiteBox
*** 41,50 **** --- 41,51 ---- * * Please file a test bug, if this is a problem. */ import sun.hotspot.WhiteBox; + import jdk.test.lib.Platform; public class WBStackSize { static final long K = 1024;
*** 81,103 **** } } } public static void main(String[] args) { long configStackSize = wb.getIntxVMFlag("ThreadStackSize") * K; System.out.println("ThreadStackSize VM option: " + configStackSize); ! long stackProtectionSize = wb.getIntxVMFlag("StackShadowPages") * wb.getVMPageSize(); System.out.println("Size of protected shadow pages: " + stackProtectionSize); long actualStackSize = wb.getThreadStackSize(); System.out.println("Full stack size: " + actualStackSize); if (Math.abs(actualStackSize - configStackSize) > configStackSize * 0.1) { ! throw new RuntimeException("getThreadFullStackSize value [" + actualStackSize + "] should be within 90%..110% of ThreadStackSize value"); } long remainingStackSize = wb.getThreadRemainingStackSize(); System.out.println("Remaining stack size in main(): " + remainingStackSize); // Up to 150k can be already allocated by VM and some space is used for stack protection. --- 82,126 ---- } } } public static void main(String[] args) { + long pageSize = wb.getVMPageSize(); + long configStackSize = wb.getIntxVMFlag("ThreadStackSize") * K; System.out.println("ThreadStackSize VM option: " + configStackSize); ! long stackProtectionSize = wb.getIntxVMFlag("StackShadowPages") * pageSize; System.out.println("Size of protected shadow pages: " + stackProtectionSize); long actualStackSize = wb.getThreadStackSize(); System.out.println("Full stack size: " + actualStackSize); + if (!Platform.isAix()) { if (Math.abs(actualStackSize - configStackSize) > configStackSize * 0.1) { ! throw new RuntimeException("getThreadStackSize value [" + actualStackSize + "] should be within 90%..110% of ThreadStackSize value"); } + } else { + // AIX pthread implementation returns stacks with sizes varying a lot. + // We add +64K to assure stacks are not too small, thus we get + // even more variation to bigger sizes. So only check the lower bound. + // Allow for at least one page deviation. + long slack = (long)(configStackSize * 0.1); + if (slack < pageSize) { + if (configStackSize - actualStackSize > pageSize) { + throw new RuntimeException("getThreadStackSize value [" + actualStackSize + + "] should not be more than one page smaller than " + + "ThreadStackSize value"); + } + } else { + if (configStackSize - actualStackSize > slack) { + throw new RuntimeException("getThreadStackSize value [" + actualStackSize + + "] should not be less than 90% of ThreadStackSize value"); + } + } + } long remainingStackSize = wb.getThreadRemainingStackSize(); System.out.println("Remaining stack size in main(): " + remainingStackSize); // Up to 150k can be already allocated by VM and some space is used for stack protection.
< prev index next >