annotate test/runtime/os/AvailableProcessors.java @ 24234:ea6f94ab283b default tip

Added tag jvmci-0.36 for changeset 8128b98d4736
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Mon, 18 Sep 2017 18:49:45 +0200
parents e21dd2c95cf0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24176
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
1 /*
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
2 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
4 *
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
7 * published by the Free Software Foundation.
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
8 *
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
13 * accompanied this code).
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
14 *
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
18 *
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
21 * questions.
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
22 */
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
23 import java.io.File;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
24 import com.oracle.java.testlibrary.ProcessTools;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
25 import com.oracle.java.testlibrary.OutputAnalyzer;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
26 import java.util.ArrayList;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
27
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
28 /*
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
29 * @test
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
30 * @bug 6515172
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
31 * @summary Check that availableProcessors reports the correct value when running in a cpuset on linux
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
32 * @requires os.family == "linux"
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
33 * @library /testlibrary
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
34 * @build com.oracle.java.testlibrary.*
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
35 * @run driver AvailableProcessors
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
36 */
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
37 public class AvailableProcessors {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
38
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
39 static final String SUCCESS_STRING = "Found expected processors: ";
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
40
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
41 public static void main(String[] args) throws Throwable {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
42 if (args.length > 0)
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
43 checkProcessors(Integer.parseInt(args[0]));
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
44 else {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
45 // run ourselves under different cpu configurations
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
46 // using the taskset command
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
47 String taskset;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
48 final String taskset1 = "/bin/taskset";
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
49 final String taskset2 = "/usr/bin/taskset";
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
50 if (new File(taskset1).exists())
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
51 taskset = taskset1;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
52 else if (new File(taskset2).exists())
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
53 taskset = taskset2;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
54 else {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
55 System.out.println("Skipping test: could not find taskset command");
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
56 return;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
57 }
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
58
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
59 int available = Runtime.getRuntime().availableProcessors();
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
60
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
61 if (available == 1) {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
62 System.out.println("Skipping test: only one processor available");
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
63 return;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
64 }
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
65
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
66 // Get the java command we want to execute
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
67 // Enable logging for easier failure diagnosis
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
68 ProcessBuilder master =
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
69 ProcessTools.createJavaProcessBuilder(false,
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
70 "-XX:+UnlockDiagnosticVMOptions",
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
71 "-XX:+PrintActiveCpus",
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
72 "AvailableProcessors");
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
73
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
74 int[] expected = new int[] { 1, available/2, available-1, available };
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
75
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
76 for (int i : expected) {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
77 System.out.println("Testing for " + i + " processors ...");
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
78 int max = i - 1;
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
79 ArrayList<String> cmdline = new ArrayList<>(master.command());
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
80 // prepend taskset command
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
81 cmdline.add(0, "0-" + max);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
82 cmdline.add(0, "-c");
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
83 cmdline.add(0, taskset);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
84 // append expected processor count
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
85 cmdline.add(String.valueOf(i));
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
86 ProcessBuilder pb = new ProcessBuilder(cmdline);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
87 System.out.println("Final command line: " +
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
88 ProcessTools.getCommandLine(pb));
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
89 OutputAnalyzer output = ProcessTools.executeProcess(pb);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
90 output.shouldContain(SUCCESS_STRING);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
91 }
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
92 }
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
93 }
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
94
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
95 static void checkProcessors(int expected) {
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
96 int available = Runtime.getRuntime().availableProcessors();
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
97 if (available != expected)
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
98 throw new Error("Expected " + expected + " processors, but found "
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
99 + available);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
100 else
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
101 System.out.println(SUCCESS_STRING + available);
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
102 }
e21dd2c95cf0 6515172: Runtime.availableProcessors() ignores Linux taskset command
shshahma
parents:
diff changeset
103 }