Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
avocado
提交
66982e73
A
avocado
项目概览
openeuler
/
avocado
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
avocado
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
66982e73
编写于
8月 21, 2018
作者:
C
Cleber Rosa
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'cacarrara/add-tests-for-memory-get-buddy-info-v3'
Signed-off-by:
N
Cleber Rosa
<
crosa@redhat.com
>
上级
68b26772
68bb3959
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
119 addition
and
38 deletion
+119
-38
avocado/utils/memory.py
avocado/utils/memory.py
+44
-38
selftests/unit/test_utils_memory.py
selftests/unit/test_utils_memory.py
+75
-0
未找到文件。
avocado/utils/memory.py
浏览文件 @
66982e73
...
...
@@ -350,6 +350,13 @@ def read_from_numa_maps(pid, key):
return
numa_maps_dict
def
_get_buddy_info_content
():
buddy_info_content
=
''
with
open
(
"/proc/buddyinfo"
)
as
buddy_info
:
buddy_info_content
=
buddy_info
.
read
()
return
buddy_info_content
def
get_buddy_info
(
chunk_sizes
,
nodes
=
"all"
,
zones
=
"all"
):
"""
Get the fragement status of the host.
...
...
@@ -378,45 +385,44 @@ def get_buddy_info(chunk_sizes, nodes="all", zones="all"):
:return: A dict using the chunk_size as the keys
:rtype: dict
"""
with
open
(
"/proc/buddyinfo"
)
as
buddy_info
:
buddy_info_content
=
buddy_info
.
read
()
buddy_info_content
=
_get_buddy_info_content
()
re_buddyinfo
=
r
"Node\s+"
if
nodes
==
"all"
:
re_buddyinfo
+=
r
"(\d+)"
else
:
re_buddyinfo
+=
"(%s)"
%
"|"
.
join
(
nodes
.
split
())
if
not
re
.
findall
(
re_buddyinfo
,
buddy_info_content
):
logging
.
warn
(
"Can not find Nodes %s"
%
nodes
)
return
None
re_buddyinfo
+=
r
".*?zone\s+"
if
zones
==
"all"
:
re_buddyinfo
+=
r
"(\w+)"
else
:
re_buddyinfo
+=
"(%s)"
%
"|"
.
join
(
zones
.
split
())
if
not
re
.
findall
(
re_buddyinfo
,
buddy_info_content
):
logging
.
warn
(
"Can not find zones %s"
%
zones
)
return
None
re_buddyinfo
+=
r
"\s+([\s\d]+)"
buddy_list
=
re
.
findall
(
re_buddyinfo
,
buddy_info_content
)
if
re
.
findall
(
"[<>=]"
,
chunk_sizes
)
and
buddy_list
:
size_list
=
range
(
len
(
buddy_list
[
-
1
][
-
1
].
strip
().
split
()))
chunk_sizes
=
[
str
(
_
)
for
_
in
size_list
if
eval
(
"%s %s"
%
(
_
,
chunk_sizes
))]
chunk_sizes
=
' '
.
join
(
chunk_sizes
)
buddyinfo_dict
=
{}
for
chunk_size
in
chunk_sizes
.
split
():
buddyinfo_dict
[
chunk_size
]
=
0
for
_
,
_
,
chunk_info
in
buddy_list
:
chunk_info
=
chunk_info
.
strip
().
split
()[
int
(
chunk_size
)]
buddyinfo_dict
[
chunk_size
]
+=
int
(
chunk_info
)
re_buddyinfo
=
r
"Node\s+"
if
nodes
==
"all"
:
re_buddyinfo
+=
r
"(\d+)"
else
:
re_buddyinfo
+=
"(%s)"
%
"|"
.
join
(
nodes
.
split
())
if
not
re
.
findall
(
re_buddyinfo
,
buddy_info_content
):
logging
.
warn
(
"Can not find Nodes %s"
%
nodes
)
return
None
re_buddyinfo
+=
r
".*?zone\s+"
if
zones
==
"all"
:
re_buddyinfo
+=
r
"(\w+)"
else
:
re_buddyinfo
+=
"(%s)"
%
"|"
.
join
(
zones
.
split
())
if
not
re
.
findall
(
re_buddyinfo
,
buddy_info_content
):
logging
.
warn
(
"Can not find zones %s"
%
zones
)
return
None
re_buddyinfo
+=
r
"\s+([\s\d]+)"
buddy_list
=
re
.
findall
(
re_buddyinfo
,
buddy_info_content
)
if
re
.
findall
(
"[<>=]"
,
chunk_sizes
)
and
buddy_list
:
size_list
=
range
(
len
(
buddy_list
[
-
1
][
-
1
].
strip
().
split
()))
chunk_sizes
=
[
str
(
_
)
for
_
in
size_list
if
eval
(
"%s %s"
%
(
_
,
chunk_sizes
))]
chunk_sizes
=
' '
.
join
(
chunk_sizes
)
buddyinfo_dict
=
{}
for
chunk_size
in
chunk_sizes
.
split
():
buddyinfo_dict
[
chunk_size
]
=
0
for
_
,
_
,
chunk_info
in
buddy_list
:
chunk_info
=
chunk_info
.
strip
().
split
()[
int
(
chunk_size
)]
buddyinfo_dict
[
chunk_size
]
+=
int
(
chunk_info
)
return
buddyinfo_dict
return
buddyinfo_dict
def
set_thp_value
(
feature
,
value
):
...
...
selftests/unit/test_utils_memory.py
浏览文件 @
66982e73
...
...
@@ -20,5 +20,80 @@ class UtilsMemoryTest(unittest.TestCase):
self
.
assertEqual
(
memory
.
numa_nodes_with_memory
(),
exp
)
BUDDY_INFO_RESPONSE
=
'
\n
'
.
join
([
'Node 0, zone DMA 1 1 0 0 1 1'
,
'Node 0, zone DMA32 987 679 1004 3068 2795 1432'
,
'Node 1, zone Normal 5430 9759 9044 9751 16482 8924'
,
])
@
mock
.
patch
(
'avocado.utils.memory._get_buddy_info_content'
,
return_value
=
BUDDY_INFO_RESPONSE
)
class
UtilsMemoryTestGetBuddyInfo
(
unittest
.
TestCase
):
def
test_get_buddy_info_simple_chunk_size
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'0'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
chunk_size
],
6418
)
def
test_get_buddy_info_less_than_chunk_size
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'<2'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'0'
],
6418
)
self
.
assertEqual
(
result
[
'1'
],
10439
)
def
test_get_buddy_info_less_than_equal_chunk_size
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'<=2'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'0'
],
6418
)
self
.
assertEqual
(
result
[
'1'
],
10439
)
self
.
assertEqual
(
result
[
'2'
],
10048
)
def
test_get_buddy_info_greater_than_chunk_size
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'>3'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'4'
],
19278
)
self
.
assertEqual
(
result
[
'5'
],
10357
)
def
test_get_buddy_info_greater_than_equal_chunk_size
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'>=3'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'3'
],
12819
)
self
.
assertEqual
(
result
[
'4'
],
19278
)
self
.
assertEqual
(
result
[
'5'
],
10357
)
def
test_get_buddy_info_multiple_chunk_size
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'2 4'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'2'
],
10048
)
self
.
assertEqual
(
result
[
'4'
],
19278
)
def
test_get_buddy_info_multiple_chunk_size_filtering_simple
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'>2 <4'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'3'
],
12819
)
def
test_get_buddy_info_multiple_chunk_size_filtering
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'>=2 <=4'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
[
'2'
],
10048
)
self
.
assertEqual
(
result
[
'3'
],
12819
)
self
.
assertEqual
(
result
[
'4'
],
19278
)
def
test_get_buddy_info_multiple_chunk_size_filtering_invalid
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'>2 <2'
result
=
memory
.
get_buddy_info
(
chunk_size
)
self
.
assertEqual
(
result
,
{})
def
test_get_buddy_info_filtering_node
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'0'
result
=
memory
.
get_buddy_info
(
chunk_size
,
nodes
=
'1'
)
self
.
assertEqual
(
result
[
chunk_size
],
5430
)
def
test_get_buddy_info_filtering_zone
(
self
,
buddy_info_content_mocked
):
chunk_size
=
'0'
result
=
memory
.
get_buddy_info
(
chunk_size
,
zones
=
'DMA32'
)
self
.
assertEqual
(
result
[
chunk_size
],
987
)
if
__name__
==
'__main__'
:
unittest
.
main
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录