Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
d92946b2
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看板
提交
d92946b2
编写于
8月 17, 2011
作者:
J
jcoomes
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6791672: enable 1G and larger pages on solaris
Reviewed-by: ysr, iveresov, johnc
上级
d5bd8611
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
32 addition
and
12 deletion
+32
-12
src/os/solaris/vm/os_solaris.cpp
src/os/solaris/vm/os_solaris.cpp
+18
-11
src/share/vm/runtime/os.cpp
src/share/vm/runtime/os.cpp
+11
-0
src/share/vm/runtime/os.hpp
src/share/vm/runtime/os.hpp
+3
-1
未找到文件。
src/os/solaris/vm/os_solaris.cpp
浏览文件 @
d92946b2
...
...
@@ -3252,7 +3252,6 @@ bool os::unguard_memory(char* addr, size_t bytes) {
// supported Solaris versions, this combination
// is equivalent to +UseISM -UseMPSS.
typedef
int
(
*
getpagesizes_func_type
)
(
size_t
[],
int
);
static
size_t
_large_page_size
=
0
;
bool
os
::
Solaris
::
ism_sanity_check
(
bool
warn
,
size_t
*
page_size
)
{
...
...
@@ -3284,23 +3283,29 @@ static void insertion_sort_descending(size_t* array, int len) {
}
bool
os
::
Solaris
::
mpss_sanity_check
(
bool
warn
,
size_t
*
page_size
)
{
getpagesizes_func_type
getpagesizes_func
=
CAST_TO_FN_PTR
(
getpagesizes_func_type
,
dlsym
(
RTLD_DEFAULT
,
"getpagesizes"
));
if
(
getpagesizes_func
==
NULL
)
{
if
(
warn
)
{
warning
(
"MPSS is not supported by the operating system."
);
}
return
false
;
}
const
unsigned
int
usable_count
=
VM_Version
::
page_size_count
();
if
(
usable_count
==
1
)
{
return
false
;
}
// Find the right getpagesizes interface. When solaris 11 is the minimum
// build platform, getpagesizes() (without the '2') can be called directly.
typedef
int
(
*
gps_t
)(
size_t
[],
int
);
gps_t
gps_func
=
CAST_TO_FN_PTR
(
gps_t
,
dlsym
(
RTLD_DEFAULT
,
"getpagesizes2"
));
if
(
gps_func
==
NULL
)
{
gps_func
=
CAST_TO_FN_PTR
(
gps_t
,
dlsym
(
RTLD_DEFAULT
,
"getpagesizes"
));
if
(
gps_func
==
NULL
)
{
if
(
warn
)
{
warning
(
"MPSS is not supported by the operating system."
);
}
return
false
;
}
}
// Fill the array of page sizes.
int
n
=
getpagesizes_func
(
_page_sizes
,
page_sizes_max
);
int
n
=
(
*
gps_func
)
(
_page_sizes
,
page_sizes_max
);
assert
(
n
>
0
,
"Solaris bug?"
);
if
(
n
==
page_sizes_max
)
{
// Add a sentinel value (necessary only if the array was completely filled
// since it is static (zeroed at initialization)).
...
...
@@ -3308,6 +3313,7 @@ bool os::Solaris::mpss_sanity_check(bool warn, size_t * page_size) {
DEBUG_ONLY
(
warning
(
"increase the size of the os::_page_sizes array."
);)
}
assert
(
_page_sizes
[
n
]
==
0
,
"missing sentinel"
);
trace_page_sizes
(
"available page sizes"
,
_page_sizes
,
n
);
if
(
n
==
1
)
return
false
;
// Only one page size available.
...
...
@@ -3337,6 +3343,7 @@ bool os::Solaris::mpss_sanity_check(bool warn, size_t * page_size) {
}
*
page_size
=
_page_sizes
[
0
];
trace_page_sizes
(
"usable page sizes"
,
_page_sizes
,
end
+
1
);
return
true
;
}
...
...
src/share/vm/runtime/os.cpp
浏览文件 @
d92946b2
...
...
@@ -1232,6 +1232,17 @@ size_t os::page_size_for_region(size_t region_min_size, size_t region_max_size,
}
#ifndef PRODUCT
void
os
::
trace_page_sizes
(
const
char
*
str
,
const
size_t
*
page_sizes
,
int
count
)
{
if
(
TracePageSizes
)
{
tty
->
print
(
"%s: "
,
str
);
for
(
int
i
=
0
;
i
<
count
;
++
i
)
{
tty
->
print
(
" "
SIZE_FORMAT
,
page_sizes
[
i
]);
}
tty
->
cr
();
}
}
void
os
::
trace_page_sizes
(
const
char
*
str
,
const
size_t
region_min_size
,
const
size_t
region_max_size
,
const
size_t
page_size
,
const
char
*
base
,
const
size_t
size
)
...
...
src/share/vm/runtime/os.hpp
浏览文件 @
d92946b2
...
...
@@ -208,11 +208,13 @@ class os: AllStatic {
size_t
region_max_size
,
uint
min_pages
);
// Method for tracing page sizes returned by the above method; enabled by
// Method
s
for tracing page sizes returned by the above method; enabled by
// TracePageSizes. The region_{min,max}_size parameters should be the values
// passed to page_size_for_region() and page_size should be the result of that
// call. The (optional) base and size parameters should come from the
// ReservedSpace base() and size() methods.
static
void
trace_page_sizes
(
const
char
*
str
,
const
size_t
*
page_sizes
,
int
count
)
PRODUCT_RETURN
;
static
void
trace_page_sizes
(
const
char
*
str
,
const
size_t
region_min_size
,
const
size_t
region_max_size
,
const
size_t
page_size
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录