Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
oec-hardware
提交
2f149e6b
O
oec-hardware
项目概览
openeuler
/
oec-hardware
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oec-hardware
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2f149e6b
编写于
6月 15, 2020
作者:
O
openeuler-ci-bot
提交者:
Gitee
6月 15, 2020
浏览文件
操作
浏览文件
下载
差异文件
!9 add requirement, remove useless code & update README
Merge pull request !9 from Air9/master
上级
18a534d2
1c3ab3e2
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
53 addition
and
113 deletion
+53
-113
README.md
README.md
+14
-20
oec-hardware.spec
oec-hardware.spec
+2
-2
tests/network/ethernet.py
tests/network/ethernet.py
+3
-16
tests/network/infiniband.py
tests/network/infiniband.py
+0
-15
tests/network/network.py
tests/network/network.py
+18
-30
tests/network/rdma.py
tests/network/rdma.py
+16
-30
未找到文件。
README.md
浏览文件 @
2f149e6b
...
...
@@ -96,11 +96,11 @@ OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂
## 前提条件
安装了
EulerOS 2.0 (SP8) 及更高版本,或 openEuler 20.03 (LTS) 及
更高版本。
安装了
openEuler 20.03 (LTS) 或
更高版本。
## 获取安装包
*
安装包从 openEuler 官方网站下载。
*
安装包从 openEuler 官方网站下载
(暂未开放)
。
*
校验安装包的完整性。
...
...
@@ -110,7 +110,7 @@ OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂
cat oec-hardware-*.rpm.sha256sum
```
2.
计算文件的
sha256
校验值:
2.
计算文件的
sha256
校验值:
```
sha256sum oec-hardware-*.rpm
...
...
@@ -126,28 +126,22 @@ OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂
### 客户端
1.
部分基础用例依赖 fio 和 memtester 工具,需要提前安装依赖(可以用 tools/ 里的源码包编译)
。
1.
配置
[
openEuler 官方 repo
](
https://repo.openeuler.org/
)
中对应版本的 everything 源,使用
`dnf`
安装客户端 oec-hardware
。
```
rpm -ivh fio-3.7-2.aarch64.rpm memtester-4.3.0-13.aarch64.rpm
```
2.
安装 oec-hardware-1.0.0-h1.aarch64.rpm。
```
dnf install oec-hardware-1.0.0-h1.aarch64.rpm
dnf install oec-hardware-XXX.rpm
```
### 服务端
1.
安装服务端子包
。
1.
配置
[
openEuler 官方 repo
](
https://repo.openeuler.org/
)
中对应版本的 everything 源,使用
`dnf`
安装服务端 oec-hardware-server
。
```
dnf install oec-hardware-server-
1.0.0-h1.aarch64
.rpm
dnf install oec-hardware-server-
XXX
.rpm
```
2.
服务端 web 展示页面部分组件系统本身不提供,需要使用
pip
安装(请自行配置可用 pip 源)。
2.
服务端 web 展示页面部分组件系统本身不提供,需要使用
`pip3`
安装(请自行配置可用 pip 源)。
```
pip3 install Flask Flask-bootstrap uwsgi
...
...
@@ -176,13 +170,13 @@ OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂
## 前提条件
*
`/usr/share/oech/kernelrelease.json`
文件中列出了当前支持的所有系统版本,使用
`uname -a`
命令确认当前系统内核版本是否属于框架支持的版本。
*
`/usr/share/oech/kernelrelease.json`
文件中列出了当前支持的所有系统版本,使用
`uname -a`
命令确认当前系统内核版本是否属于框架支持的版本。
*
框架默认会扫描所有网卡,对网卡进行测试前,请自行筛选被测网卡,并给它配上能
`ping`
通服务端的 ip ;如果是测试客户端
`InfiniBand`
网卡,服务端也必须有一个
`InfiniBand`
网卡并提前配好 ip 。
*
框架默认会扫描所有网卡,对网卡进行测试前,请自行筛选被测网卡,并给它配上能
`ping`
通服务端的 ip;如果客户端是对 InfiniBand 网卡进行测试,服务端也必须有一个 InfiniBand
网卡并提前配好 ip 。
## 使用步骤
1.
在客户端启动测试框架。在客户端启动
`oech`
,其中
`ID`
和
`URL`
可以按需填写,
`ID`
建议填写
gitee上的
issue ID,
`Server`
必须填写为客户端可以直接访问的服务器域名或 ip,用于展示测试报告和作网络测试的服务端。
1.
在客户端启动测试框架。在客户端启动
`oech`
,其中
`ID`
和
`URL`
可以按需填写,
`ID`
建议填写
gitee 上的
issue ID,
`Server`
必须填写为客户端可以直接访问的服务器域名或 ip,用于展示测试报告和作网络测试的服务端。
```
# oech
...
...
@@ -283,10 +277,10 @@ OS 厂商为了扩大自己产品的兼容性范围,常常寻求与硬件厂
1.
**system**
-
检查本工具是否被修改。
-
检查 OS 版本和 kernel 版本是否匹配。
-
检查安装的认证工具是否有被修改。
-
检查内核是否被感染。
-
检查 selinux 是否正常。
-
检查内核是否被修改/感染。
-
检查 selinux 是否正常启用。
-
使用 dmidecode 工具读取硬件信息。
2.
**cpufreq**
...
...
oec-hardware.spec
浏览文件 @
2f149e6b
...
...
@@ -15,7 +15,7 @@ Source0: %{name}-%{version}-%{release}.tar.bz2
Buildroot: %{_tmppath}/%{name}-%{version}-root
BuildRequires: gcc
Requires: kernel-devel, kernel-headers, dmidecode
Requires: kernel-devel, kernel-headers, dmidecode
, tar
Requires: qperf, fio, memtester
Requires: kernel >= 4
Requires: python3
...
...
@@ -24,7 +24,7 @@ Requires: python3
%package server
Summary: openEuler Hardware Compatibility Test Server
Group: Development/Tools
Requires: python3, python3-devel, nginx, qperf, psmisc
Requires: python3, python3-devel, nginx,
tar,
qperf, psmisc
%description
openEuler Hardware Compatibility Test Suite
...
...
tests/network/ethernet.py
浏览文件 @
2f149e6b
...
...
@@ -16,7 +16,6 @@ import os
import
argparse
from
hwcompatible.test
import
Test
from
hwcompatible.command
import
Command
from
hwcompatible.env
import
CertEnv
from
hwcompatible.document
import
CertDocument
from
rdma
import
RDMATest
...
...
@@ -25,6 +24,9 @@ from rdma import RDMATest
class
EthernetTest
(
RDMATest
):
def
__init__
(
self
):
RDMATest
.
__init__
(
self
)
self
.
args
=
None
self
.
cert
=
None
self
.
device
=
None
self
.
subtests
=
[
self
.
test_ip_info
,
self
.
test_eth_link
,
self
.
test_icmp
,
self
.
test_udp_tcp
,
self
.
test_http
]
self
.
target_bandwidth_percent
=
0.75
...
...
@@ -63,18 +65,3 @@ class EthernetTest(RDMATest):
if
not
subtest
():
return
False
return
True
if
__name__
==
'__main__'
:
t
=
EthernetTest
()
t
.
server_ip
=
'199.1.1.2'
from
hwcompatible.device
import
Device
properties
=
{
'DEVPATH'
:
'/devices/pci0000:80/0000:80:01.0/0000:81:00.0/net/enp129s0f0'
,
'INTERFACE'
:
'enp129s0f0'
}
t
.
device
=
Device
(
properties
)
t
.
interface
=
t
.
device
.
get_property
(
"INTERFACE"
)
# t.setup()
t
.
test
()
tests/network/infiniband.py
浏览文件 @
2f149e6b
...
...
@@ -47,18 +47,3 @@ class InfiniBandTest(RDMATest):
print
(
"[.] The subnet manager lid is %s"
%
self
.
sm_lid
)
return
True
if
__name__
==
'__main__'
:
t
=
InfiniBandTest
()
t
.
server_ip
=
'199.1.37.20'
t
.
speed
=
10000
# Mb/s
from
hwcompatible.device
import
Device
properties
=
{
'DEVPATH'
:
'/devices/pci0000:d7/0000:d7:02.0/0000:d8:00.0/net/ib0'
,
'INTERFACE'
:
'ib0'
}
t
.
device
=
Device
(
properties
)
t
.
interface
=
t
.
device
.
get_property
(
"INTERFACE"
)
# t.setup()
t
.
test
()
tests/network/network.py
浏览文件 @
2f149e6b
...
...
@@ -26,7 +26,7 @@ except ImportError:
from
urllib2
import
urlopen
,
Request
,
HTTPError
from
hwcompatible.test
import
Test
from
hwcompatible.command
import
Command
from
hwcompatible.command
import
Command
,
CertCommandError
from
hwcompatible.document
import
CertDocument
from
hwcompatible.env
import
CertEnv
...
...
@@ -34,6 +34,9 @@ from hwcompatible.env import CertEnv
class
NetworkTest
(
Test
):
def
__init__
(
self
):
Test
.
__init__
(
self
)
self
.
args
=
None
self
.
cert
=
None
self
.
device
=
None
self
.
requirements
=
[
'ethtool'
,
'iproute'
,
'psmisc'
,
'qperf'
]
self
.
subtests
=
[
self
.
test_ip_info
,
self
.
test_eth_link
,
self
.
test_icmp
,
self
.
test_udp_tcp
,
self
.
test_http
]
...
...
@@ -79,7 +82,7 @@ class NetworkTest(Test):
try
:
c
.
run
()
return
c
.
output
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
e
)
return
[]
...
...
@@ -98,28 +101,28 @@ class NetworkTest(Test):
def
get_speed
(
self
):
c
=
Command
(
"ethtool %s"
%
self
.
interface
)
pattern
=
".*Speed:\s+(?P<speed>\d+)Mb/s"
pattern
=
r
".*Speed:\s+(?P<speed>\d+)Mb/s"
try
:
speed
=
c
.
get_str
(
pattern
,
'speed'
,
False
)
return
int
(
speed
)
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
"[X] No speed found on the interface."
)
return
None
def
get_interface_ip
(
self
):
c
=
Command
(
"ip addr show %s"
%
self
.
interface
)
pattern
=
".*inet.? (?P<ip>.+)/.*"
pattern
=
r
".*inet.? (?P<ip>.+)/.*"
try
:
ip
=
c
.
get_str
(
pattern
,
'ip'
,
False
)
return
ip
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
"[X] No available ip on the interface."
)
return
None
def
test_icmp
(
self
):
count
=
500
c
=
Command
(
"ping -q -c %d -i 0 %s"
%
(
count
,
self
.
server_ip
))
pattern
=
".*, (?P<loss>\d+\.{0,1}\d*)% packet loss.*"
pattern
=
r
".*, (?P<loss>\d+\.{0,1}\d*)% packet loss.*"
for
_
in
range
(
self
.
retries
):
try
:
...
...
@@ -128,7 +131,7 @@ class NetworkTest(Test):
c
.
print_output
()
if
float
(
loss
)
==
0
:
return
True
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
e
)
return
False
...
...
@@ -145,7 +148,7 @@ class NetworkTest(Test):
try
:
request
=
Request
(
url
,
data
=
data
,
headers
=
headers
)
response
=
urlopen
(
request
)
except
Exception
as
e
:
except
HTTPError
as
e
:
print
(
e
)
return
False
print
(
"Status: %u %s"
%
(
response
.
code
,
response
.
msg
))
...
...
@@ -171,7 +174,7 @@ class NetworkTest(Test):
cmd
=
"qperf %s tcp_bw"
%
self
.
server_ip
print
(
cmd
)
c
=
Command
(
cmd
)
pattern
=
"\s+bw\s+=\s+(?P<bandwidth>[\.0-9]+ [MG]B/sec)"
pattern
=
r
"\s+bw\s+=\s+(?P<bandwidth>[\.0-9]+ [MG]B/sec)"
for
_
in
range
(
self
.
retries
):
try
:
bandwidth
=
c
.
get_str
(
pattern
,
'bandwidth'
,
False
)
...
...
@@ -186,7 +189,7 @@ class NetworkTest(Test):
(
bandwidth
,
target_bandwidth
))
if
bandwidth
>
target_bandwidth
:
return
True
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
e
)
return
False
...
...
@@ -204,7 +207,7 @@ class NetworkTest(Test):
try
:
with
open
(
self
.
testfile
,
'rb'
)
as
f
:
filetext
=
base64
.
b64encode
(
f
.
read
())
except
Exception
as
e
:
except
IOError
as
e
:
print
(
e
)
return
False
...
...
@@ -221,7 +224,7 @@ class NetworkTest(Test):
try
:
request
=
Request
(
url
,
data
=
data
,
headers
=
headers
)
response
=
urlopen
(
request
)
except
Exception
as
e
:
except
HTTPError
as
e
:
print
(
e
)
return
False
time_stop
=
time
.
time
()
...
...
@@ -240,7 +243,7 @@ class NetworkTest(Test):
time_start
=
time
.
time
()
try
:
response
=
urlopen
(
url
)
except
Exception
as
e
:
except
HTTPError
as
e
:
print
(
e
)
return
False
time_stop
=
time
.
time
()
...
...
@@ -252,7 +255,7 @@ class NetworkTest(Test):
try
:
with
open
(
self
.
testfile
,
'wb'
)
as
f
:
f
.
write
(
filetext
)
except
Exception
as
e
:
except
IOError
as
e
:
print
(
e
)
return
False
...
...
@@ -371,18 +374,3 @@ class NetworkTest(Test):
self
.
set_other_interfaces_up
()
print
(
"[.] Test finished."
)
if
__name__
==
'__main__'
:
t
=
NetworkTest
()
t
.
server_ip
=
'9.82.37.2'
from
hwcompatible.device
import
Device
properties
=
{
'DEVPATH'
:
'/devices/pci0000:17/0000:17:00.0/0000:18:00.0/0000:19:03.0/0000:1a:00.2/net/eth_main'
,
'INTERFACE'
:
'eth_main'
}
t
.
device
=
Device
(
properties
)
t
.
interface
=
t
.
device
.
get_property
(
"INTERFACE"
)
# t.setup()
t
.
test
()
tests/network/rdma.py
浏览文件 @
2f149e6b
...
...
@@ -17,7 +17,7 @@ import re
import
argparse
from
hwcompatible.test
import
Test
from
hwcompatible.command
import
Command
from
hwcompatible.command
import
Command
,
CertCommandError
from
hwcompatible.document
import
CertDocument
from
hwcompatible.env
import
CertEnv
from
network
import
NetworkTest
...
...
@@ -26,11 +26,13 @@ from network import NetworkTest
class
RDMATest
(
NetworkTest
):
def
__init__
(
self
):
NetworkTest
.
__init__
(
self
)
self
.
args
=
None
self
.
cert
=
None
self
.
device
=
None
self
.
requirements
=
[
'ethtool'
,
'iproute'
,
'psmisc'
,
'qperf'
,
'perftest'
,
'opensm'
,
'infiniband-diags'
,
'librdmacm-utils'
,
'libibverbs-utils'
]
self
.
subtests
=
[
self
.
test_ibstatus
,
self
.
test_icmp
,
self
.
test_rdma
]
self
.
device
=
None
self
.
interface
=
None
self
.
ib_device
=
None
self
.
ib_port
=
None
...
...
@@ -53,7 +55,7 @@ class RDMATest(NetworkTest):
c
=
Command
(
cmd
)
try
:
self
.
ib_device
=
c
.
read
()
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
e
)
return
False
...
...
@@ -62,7 +64,7 @@ class RDMATest(NetworkTest):
c
=
Command
(
cmd
)
try
:
self
.
ib_port
=
int
(
c
.
read
(),
16
)
+
1
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
e
)
return
False
...
...
@@ -78,14 +80,14 @@ class RDMATest(NetworkTest):
if
ib_str
not
in
info
:
continue
print
(
info
)
self
.
gid
=
re
.
search
(
"default gid:\s+(.*)"
,
info
).
group
(
1
)
self
.
base_lid
=
re
.
search
(
"base lid:\s+(.*)"
,
info
).
group
(
1
)
self
.
sm_lid
=
re
.
search
(
"sm lid:\s+(.*)"
,
info
).
group
(
1
)
self
.
state
=
re
.
search
(
"state:\s+(.*)"
,
info
).
group
(
1
)
self
.
phys_state
=
re
.
search
(
"phys state:\s+(.*)"
,
info
).
group
(
1
)
self
.
link_layer
=
re
.
search
(
"link_layer:\s+(.*)"
,
info
).
group
(
1
)
self
.
speed
=
int
(
re
.
search
(
"rate:\s+(\d*)"
,
info
).
group
(
1
))
*
1024
except
Exception
as
e
:
self
.
gid
=
re
.
search
(
r
"default gid:\s+(.*)"
,
info
).
group
(
1
)
self
.
base_lid
=
re
.
search
(
r
"base lid:\s+(.*)"
,
info
).
group
(
1
)
self
.
sm_lid
=
re
.
search
(
r
"sm lid:\s+(.*)"
,
info
).
group
(
1
)
self
.
state
=
re
.
search
(
r
"state:\s+(.*)"
,
info
).
group
(
1
)
self
.
phys_state
=
re
.
search
(
r
"phys state:\s+(.*)"
,
info
).
group
(
1
)
self
.
link_layer
=
re
.
search
(
r
"link_layer:\s+(.*)"
,
info
).
group
(
1
)
self
.
speed
=
int
(
re
.
search
(
r
"rate:\s+(\d*)"
,
info
).
group
(
1
))
*
1024
except
CertCommandError
as
e
:
print
(
e
)
return
False
...
...
@@ -126,7 +128,7 @@ class RDMATest(NetworkTest):
cmd
=
"%s %s -d %s -i %s"
%
(
cmd
,
self
.
server_ip
,
self
.
ib_device
,
self
.
ib_port
)
print
(
cmd
)
c
=
Command
(
cmd
)
pattern
=
"\s+(\d+)\s+(\d+)\s+([\.\d]+)\s+(?P<avg_bw>[\.\d]+)\s+([\.\d]+)"
pattern
=
r
"\s+(\d+)\s+(\d+)\s+([\.\d]+)\s+(?P<avg_bw>[\.\d]+)\s+([\.\d]+)"
try
:
avg_bw
=
c
.
get_str
(
pattern
,
'avg_bw'
,
False
)
## MB/sec
avg_bw
=
float
(
avg_bw
)
*
8
...
...
@@ -135,7 +137,7 @@ class RDMATest(NetworkTest):
print
(
"Current bandwidth is %.2fMb/s, target is %.2fMb/s"
%
(
avg_bw
,
tgt_bw
))
return
avg_bw
>
tgt_bw
except
Exception
as
e
:
except
CertCommandError
as
e
:
print
(
e
)
self
.
call_remote_server
(
cmd
,
'stop'
)
return
False
...
...
@@ -210,19 +212,3 @@ class RDMATest(NetworkTest):
if
not
subtest
():
return
False
return
True
if
__name__
==
'__main__'
:
t
=
RDMATest
()
t
.
server_ip
=
'199.1.37.20'
t
.
speed
=
10000
# Mb/s
from
hwcompatible.device
import
Device
properties
=
{
'DEVPATH'
:
'/devices/pci0000:d7/0000:d7:02.0/0000:d8:00.0/net/ib0'
,
'INTERFACE'
:
'ib0'
}
t
.
device
=
Device
(
properties
)
t
.
interface
=
t
.
device
.
get_property
(
"INTERFACE"
)
# t.setup()
t
.
test
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录