hotspot/test/runtime/NMT/MallocSiteHashOverflow.java
author chegar
Sat, 09 Apr 2016 23:03:39 +0100
changeset 36851 03e2f4d0a421
parent 33730 30e064828045
child 38089 9e58203ef0e2
permissions -rw-r--r--
8153737: Unsupported Module Reviewed-by: alanb, mchung, psandoz
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     1
/*
30604
b8d532cb6420 8067013: Rename the com.oracle.java.testlibary package
ykantser
parents: 28190
diff changeset
     2
 * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     4
 *
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     7
 * published by the Free Software Foundation.
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     8
 *
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    13
 * accompanied this code).
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    14
 *
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    18
 *
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    21
 * questions.
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    22
 */
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    23
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    24
/*
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    25
 * @test
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    26
 * @summary Test corner case that overflows malloc site hashtable bucket
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    27
 * @requires sun.arch.data.model == "32"
26302
e3228e31a08d 8055765: Misplaced @key stress prevents MallocSiteHashOverflow.java and MallocStressTest.java tests from running
gtriantafill
parents: 25952
diff changeset
    28
 * @key nmt jcmd stress
33730
30e064828045 8140189: [TESTBUG] Get rid of "@library /../../test/lib" in jtreg tests
cjplummer
parents: 30604
diff changeset
    29
 * @library /testlibrary /test/lib
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    30
 * @build MallocSiteHashOverflow
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    31
 * @run main ClassFileInstaller sun.hotspot.WhiteBox
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    32
 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocSiteHashOverflow
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    33
 */
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    34
30604
b8d532cb6420 8067013: Rename the com.oracle.java.testlibary package
ykantser
parents: 28190
diff changeset
    35
import jdk.test.lib.*;
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    36
import sun.hotspot.WhiteBox;
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    37
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    38
public class MallocSiteHashOverflow {
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    39
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    40
    public static void main(String args[]) throws Exception {
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    41
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    42
        // Size of entries based on malloc tracking header defined in mallocTracker.hpp
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    43
        // For 32-bit systems, create 257 malloc sites with the same hash bucket to overflow a hash bucket
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    44
        long entries = 257;
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    45
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    46
        OutputAnalyzer output;
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    47
        WhiteBox wb = WhiteBox.getWhiteBox();
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    48
        int MAX_HASH_SIZE = wb.NMTGetHashSize();
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    49
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    50
        // Grab my own PID
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    51
        String pid = Integer.toString(ProcessTools.getProcessId());
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    52
        ProcessBuilder pb = new ProcessBuilder();
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    53
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    54
        // Verify that current tracking level is "detail"
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    55
        pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "statistics"});
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    56
        output = new OutputAnalyzer(pb.start());
27470
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    57
        output.shouldContain("Native Memory Tracking Statistics");
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    58
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    59
        // Attempt to cause NMT to downgrade tracking level by allocating small amounts
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    60
        // of memory with random pseudo call stack
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    61
        int pc = 1;
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    62
        for (int i = 0; i < entries; i++) {
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    63
            long addr = wb.NMTMallocWithPseudoStack(1, pc);
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    64
            if (addr == 0) {
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    65
                throw new RuntimeException("NMTMallocWithPseudoStack: out of memory");
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    66
            }
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    67
            // We free memory here since it doesn't affect pseudo malloc alloc site hash table entries
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    68
            wb.NMTFree(addr);
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    69
            pc += MAX_HASH_SIZE;
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    70
            if (i == entries) {
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    71
                // Verify that tracking has been downgraded
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    72
                pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "statistics"});
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    73
                output = new OutputAnalyzer(pb.start());
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    74
                output.shouldContain("Tracking level has been downgraded due to lack of resources");
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    75
            }
8dd8521d6897 8061969: [TESTBUG] MallocSiteHashOverflow.java should be enabled for 32-bit platforms
gtriantafill
parents: 26302
diff changeset
    76
        }
25952
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    77
    }
25c2dca04a31 8054952: [TESTBUG] Add missing NMT2 tests
gtriantafill
parents:
diff changeset
    78
}