1 /* |
1 /* |
2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
24 /* |
24 /* |
25 * @test |
25 * @test |
26 * @summary Test Reserve/Commit/Uncommit/Release of virtual memory and that we track it correctly |
26 * @summary Test Reserve/Commit/Uncommit/Release of virtual memory and that we track it correctly |
27 * @key nmt jcmd |
27 * @key nmt jcmd |
28 * @library /testlibrary /testlibrary/whitebox |
28 * @library /testlibrary /testlibrary/whitebox |
|
29 * @ignore |
29 * @build VirtualAllocTestType |
30 * @build VirtualAllocTestType |
30 * @run main ClassFileInstaller sun.hotspot.WhiteBox |
31 * @run main ClassFileInstaller sun.hotspot.WhiteBox |
31 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail VirtualAllocTestType |
32 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail VirtualAllocTestType |
32 */ |
33 */ |
33 |
34 |
52 } else { |
53 } else { |
53 System.out.println("NMT detail support not detected."); |
54 System.out.println("NMT detail support not detected."); |
54 } |
55 } |
55 |
56 |
56 addr = wb.NMTReserveMemory(reserveSize); |
57 addr = wb.NMTReserveMemory(reserveSize); |
57 mergeData(); |
|
58 pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "detail"}); |
58 pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "detail"}); |
59 |
59 |
60 output = new OutputAnalyzer(pb.start()); |
60 output = new OutputAnalyzer(pb.start()); |
61 output.shouldContain("Test (reserved=256KB, committed=0KB)"); |
61 output.shouldContain("Test (reserved=256KB, committed=0KB)"); |
62 if (has_nmt_detail) { |
62 if (has_nmt_detail) { |
63 output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 256KB for Test"); |
63 output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 256KB for Test"); |
64 } |
64 } |
65 |
65 |
66 wb.NMTCommitMemory(addr, commitSize); |
66 wb.NMTCommitMemory(addr, commitSize); |
67 |
67 |
68 mergeData(); |
|
69 |
68 |
70 output = new OutputAnalyzer(pb.start()); |
69 output = new OutputAnalyzer(pb.start()); |
71 output.shouldContain("Test (reserved=256KB, committed=128KB)"); |
70 output.shouldContain("Test (reserved=256KB, committed=128KB)"); |
72 if (has_nmt_detail) { |
71 if (has_nmt_detail) { |
73 output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed 128KB"); |
72 output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed 128KB"); |
74 } |
73 } |
75 |
74 |
76 wb.NMTUncommitMemory(addr, commitSize); |
75 wb.NMTUncommitMemory(addr, commitSize); |
77 |
76 |
78 mergeData(); |
|
79 |
77 |
80 output = new OutputAnalyzer(pb.start()); |
78 output = new OutputAnalyzer(pb.start()); |
81 output.shouldContain("Test (reserved=256KB, committed=0KB)"); |
79 output.shouldContain("Test (reserved=256KB, committed=0KB)"); |
82 output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed"); |
80 output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed"); |
83 |
81 |
84 wb.NMTReleaseMemory(addr, reserveSize); |
82 wb.NMTReleaseMemory(addr, reserveSize); |
85 mergeData(); |
|
86 |
83 |
87 output = new OutputAnalyzer(pb.start()); |
84 output = new OutputAnalyzer(pb.start()); |
88 output.shouldNotContain("Test (reserved="); |
85 output.shouldNotContain("Test (reserved="); |
89 output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved"); |
86 output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved"); |
90 } |
87 } |
91 |
|
92 public static void mergeData() throws Exception { |
|
93 // Use WB API to ensure that all data has been merged before we continue |
|
94 if (!wb.NMTWaitForDataMerge()) { |
|
95 throw new Exception("Call to WB API NMTWaitForDataMerge() failed"); |
|
96 } |
88 } |
97 } |
|
98 } |
|