Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
e0e438af
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e0e438af
编写于
6月 28, 2013
作者:
J
Jiri Denemark
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qemu: Move memory limit computation to a reusable function
上级
86dba8f3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
37 addition
and
19 deletion
+37
-19
src/qemu/qemu_cgroup.c
src/qemu/qemu_cgroup.c
+2
-19
src/qemu/qemu_domain.c
src/qemu/qemu_domain.c
+33
-0
src/qemu/qemu_domain.h
src/qemu/qemu_domain.h
+2
-0
未找到文件。
src/qemu/qemu_cgroup.c
浏览文件 @
e0e438af
...
@@ -461,9 +461,7 @@ static int
...
@@ -461,9 +461,7 @@ static int
qemuSetupMemoryCgroup
(
virDomainObjPtr
vm
)
qemuSetupMemoryCgroup
(
virDomainObjPtr
vm
)
{
{
qemuDomainObjPrivatePtr
priv
=
vm
->
privateData
;
qemuDomainObjPrivatePtr
priv
=
vm
->
privateData
;
unsigned
long
long
hard_limit
;
int
rc
;
int
rc
;
int
i
;
if
(
!
virCgroupHasController
(
priv
->
cgroup
,
VIR_CGROUP_CONTROLLER_MEMORY
))
{
if
(
!
virCgroupHasController
(
priv
->
cgroup
,
VIR_CGROUP_CONTROLLER_MEMORY
))
{
if
(
vm
->
def
->
mem
.
hard_limit
!=
0
||
if
(
vm
->
def
->
mem
.
hard_limit
!=
0
||
...
@@ -477,23 +475,8 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm)
...
@@ -477,23 +475,8 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm)
}
}
}
}
hard_limit
=
vm
->
def
->
mem
.
hard_limit
;
rc
=
virCgroupSetMemoryHardLimit
(
priv
->
cgroup
,
if
(
!
hard_limit
)
{
qemuDomainMemoryLimit
(
vm
->
def
));
/* If there is no hard_limit set, set a reasonable one to avoid
* system thrashing caused by exploited qemu. A 'reasonable
* limit' has been chosen:
* (1 + k) * (domain memory + total video memory) + (32MB for
* cache per each disk) + F
* where k = 0.5 and F = 200MB. The cache for disks is important as
* kernel cache on the host side counts into the RSS limit. */
hard_limit
=
vm
->
def
->
mem
.
max_balloon
;
for
(
i
=
0
;
i
<
vm
->
def
->
nvideos
;
i
++
)
hard_limit
+=
vm
->
def
->
videos
[
i
]
->
vram
;
hard_limit
=
hard_limit
*
1
.
5
+
204800
;
hard_limit
+=
vm
->
def
->
ndisks
*
32768
;
}
rc
=
virCgroupSetMemoryHardLimit
(
priv
->
cgroup
,
hard_limit
);
if
(
rc
!=
0
)
{
if
(
rc
!=
0
)
{
virReportSystemError
(
-
rc
,
virReportSystemError
(
-
rc
,
_
(
"Unable to set memory hard limit for domain %s"
),
_
(
"Unable to set memory hard limit for domain %s"
),
...
...
src/qemu/qemu_domain.c
浏览文件 @
e0e438af
...
@@ -2181,3 +2181,36 @@ cleanup:
...
@@ -2181,3 +2181,36 @@ cleanup:
virObjectUnref
(
cfg
);
virObjectUnref
(
cfg
);
return
ret
;
return
ret
;
}
}
unsigned
long
long
qemuDomainMemoryLimit
(
virDomainDefPtr
def
)
{
unsigned
long
long
mem
;
int
i
;
if
(
def
->
mem
.
hard_limit
)
{
mem
=
def
->
mem
.
hard_limit
;
}
else
{
/* If there is no hard_limit set, compute a reasonable one to avoid
* system thrashing caused by exploited qemu. A 'reasonable
* limit' has been chosen:
* (1 + k) * (domain memory + total video memory) + (32MB for
* cache per each disk) + F
* where k = 0.5 and F = 200MB. The cache for disks is important as
* kernel cache on the host side counts into the RSS limit.
*
* Technically, the disk cache does not have to be included in
* RLIMIT_MEMLOCK but it doesn't hurt as it's just an upper limit and
* it makes this function and its usage simpler.
*/
mem
=
def
->
mem
.
max_balloon
;
for
(
i
=
0
;
i
<
def
->
nvideos
;
i
++
)
mem
+=
def
->
videos
[
i
]
->
vram
;
mem
*=
1
.
5
;
mem
+=
def
->
ndisks
*
32768
;
mem
+=
204800
;
}
return
mem
;
}
src/qemu/qemu_domain.h
浏览文件 @
e0e438af
...
@@ -358,4 +358,6 @@ extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
...
@@ -358,4 +358,6 @@ extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
extern
virDomainXMLNamespace
virQEMUDriverDomainXMLNamespace
;
extern
virDomainXMLNamespace
virQEMUDriverDomainXMLNamespace
;
extern
virDomainDefParserConfig
virQEMUDriverDomainDefParserConfig
;
extern
virDomainDefParserConfig
virQEMUDriverDomainDefParserConfig
;
unsigned
long
long
qemuDomainMemoryLimit
(
virDomainDefPtr
def
);
#endif
/* __QEMU_DOMAIN_H__ */
#endif
/* __QEMU_DOMAIN_H__ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录