Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
5eeacbd2
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5eeacbd2
编写于
9月 22, 2016
作者:
K
kevinw
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
339ef484
116cbbd5
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
153 addition
and
9 deletion
+153
-9
src/os/linux/vm/globals_linux.hpp
src/os/linux/vm/globals_linux.hpp
+5
-2
src/os/linux/vm/os_linux.cpp
src/os/linux/vm/os_linux.cpp
+45
-7
test/runtime/os/AvailableProcessors.java
test/runtime/os/AvailableProcessors.java
+103
-0
未找到文件。
src/os/linux/vm/globals_linux.hpp
浏览文件 @
5eeacbd2
/*
* Copyright (c) 2005, 201
3
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 201
6
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -47,7 +47,10 @@
"Load DLLs with executable-stack attribute in the VM Thread") \
\
product(bool, UseSHM, false, \
"Use SYSV shared memory for large pages")
"Use SYSV shared memory for large pages") \
\
diagnostic(bool, PrintActiveCpus, false, \
"Print the number of CPUs detected in os::active_processor_count")
//
// Defines Linux-specific default values. The flags are available on all
...
...
src/os/linux/vm/os_linux.cpp
浏览文件 @
5eeacbd2
/*
* Copyright (c) 1999, 201
5
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
6
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -104,6 +104,14 @@
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#include <sched.h>
#undef _GNU_SOURCE
#else
#include <sched.h>
#endif
// if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
// getrusage() is prepared to handle the associated failure.
#ifndef RUSAGE_THREAD
...
...
@@ -2846,7 +2854,7 @@ void os::Linux::rebuild_cpu_to_node_map() {
// in the library.
const
size_t
BitsPerCLong
=
sizeof
(
long
)
*
CHAR_BIT
;
size_t
cpu_num
=
os
::
active_
processor_count
();
size_t
cpu_num
=
processor_count
();
size_t
cpu_map_size
=
NCPUS
/
BitsPerCLong
;
size_t
cpu_map_valid_size
=
MIN2
((
cpu_num
+
BitsPerCLong
-
1
)
/
BitsPerCLong
,
cpu_map_size
);
...
...
@@ -5016,12 +5024,42 @@ void os::make_polling_page_readable(void) {
}
};
static
int
os_cpu_count
(
const
cpu_set_t
*
cpus
)
{
int
count
=
0
;
// only look up to the number of configured processors
for
(
int
i
=
0
;
i
<
os
::
processor_count
();
i
++
)
{
if
(
CPU_ISSET
(
i
,
cpus
))
{
count
++
;
}
}
return
count
;
}
// Get the current number of available processors for this process.
// This value can change at any time during a process's lifetime.
// sched_getaffinity gives an accurate answer as it accounts for cpusets.
// If anything goes wrong we fallback to returning the number of online
// processors - which can be greater than the number available to the process.
int
os
::
active_processor_count
()
{
// Linux doesn't yet have a (official) notion of processor sets,
// so just return the number of online processors.
int
online_cpus
=
::
sysconf
(
_SC_NPROCESSORS_ONLN
);
assert
(
online_cpus
>
0
&&
online_cpus
<=
processor_count
(),
"sanity check"
);
return
online_cpus
;
cpu_set_t
cpus
;
// can represent at most 1024 (CPU_SETSIZE) processors
int
cpus_size
=
sizeof
(
cpu_set_t
);
int
cpu_count
=
0
;
// pid 0 means the current thread - which we have to assume represents the process
if
(
sched_getaffinity
(
0
,
cpus_size
,
&
cpus
)
==
0
)
{
cpu_count
=
os_cpu_count
(
&
cpus
);
if
(
PrintActiveCpus
)
{
tty
->
print_cr
(
"active_processor_count: sched_getaffinity processor count: %d"
,
cpu_count
);
}
}
else
{
cpu_count
=
::
sysconf
(
_SC_NPROCESSORS_ONLN
);
warning
(
"sched_getaffinity failed (%s)- using online processor count (%d) "
"which may exceed available processors"
,
strerror
(
errno
),
cpu_count
);
}
assert
(
cpu_count
>
0
&&
cpu_count
<=
processor_count
(),
"sanity check"
);
return
cpu_count
;
}
void
os
::
set_native_thread_name
(
const
char
*
name
)
{
...
...
test/runtime/os/AvailableProcessors.java
0 → 100644
浏览文件 @
5eeacbd2
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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.
*/
import
java.io.File
;
import
com.oracle.java.testlibrary.ProcessTools
;
import
com.oracle.java.testlibrary.OutputAnalyzer
;
import
java.util.ArrayList
;
/*
* @test
* @bug 6515172
* @summary Check that availableProcessors reports the correct value when running in a cpuset on linux
* @requires os.family == "linux"
* @library /testlibrary
* @build com.oracle.java.testlibrary.*
* @run driver AvailableProcessors
*/
public
class
AvailableProcessors
{
static
final
String
SUCCESS_STRING
=
"Found expected processors: "
;
public
static
void
main
(
String
[]
args
)
throws
Throwable
{
if
(
args
.
length
>
0
)
checkProcessors
(
Integer
.
parseInt
(
args
[
0
]));
else
{
// run ourselves under different cpu configurations
// using the taskset command
String
taskset
;
final
String
taskset1
=
"/bin/taskset"
;
final
String
taskset2
=
"/usr/bin/taskset"
;
if
(
new
File
(
taskset1
).
exists
())
taskset
=
taskset1
;
else
if
(
new
File
(
taskset2
).
exists
())
taskset
=
taskset2
;
else
{
System
.
out
.
println
(
"Skipping test: could not find taskset command"
);
return
;
}
int
available
=
Runtime
.
getRuntime
().
availableProcessors
();
if
(
available
==
1
)
{
System
.
out
.
println
(
"Skipping test: only one processor available"
);
return
;
}
// Get the java command we want to execute
// Enable logging for easier failure diagnosis
ProcessBuilder
master
=
ProcessTools
.
createJavaProcessBuilder
(
false
,
"-XX:+UnlockDiagnosticVMOptions"
,
"-XX:+PrintActiveCpus"
,
"AvailableProcessors"
);
int
[]
expected
=
new
int
[]
{
1
,
available
/
2
,
available
-
1
,
available
};
for
(
int
i
:
expected
)
{
System
.
out
.
println
(
"Testing for "
+
i
+
" processors ..."
);
int
max
=
i
-
1
;
ArrayList
<
String
>
cmdline
=
new
ArrayList
<>(
master
.
command
());
// prepend taskset command
cmdline
.
add
(
0
,
"0-"
+
max
);
cmdline
.
add
(
0
,
"-c"
);
cmdline
.
add
(
0
,
taskset
);
// append expected processor count
cmdline
.
add
(
String
.
valueOf
(
i
));
ProcessBuilder
pb
=
new
ProcessBuilder
(
cmdline
);
System
.
out
.
println
(
"Final command line: "
+
ProcessTools
.
getCommandLine
(
pb
));
OutputAnalyzer
output
=
ProcessTools
.
executeProcess
(
pb
);
output
.
shouldContain
(
SUCCESS_STRING
);
}
}
}
static
void
checkProcessors
(
int
expected
)
{
int
available
=
Runtime
.
getRuntime
().
availableProcessors
();
if
(
available
!=
expected
)
throw
new
Error
(
"Expected "
+
expected
+
" processors, but found "
+
available
);
else
System
.
out
.
println
(
SUCCESS_STRING
+
available
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录