Compass CI——分布式开放测试平台
如果无法正常显示,请先停止浏览器的去广告插件。
1. Compass CI --
分布式开放测试平台
吴峰光
2. 讲师简介
请插入
您的照片
吴峰光
openEuler架构师
Compass CI架构师
ee.msup.com.cn
先后就职于Intel OTC,华为计算产品线
15+年Linux内核优化经验
20+年Linux OS经验
0day/LKP内核测试系统
3. 摘要
做一个有温度的CI
• 对开发者开放
• 对开发者友好
• 让bug容易定位、复现、调试
• 让job容易理解、定制、复用
ee.msup.com.cn
4. Compass CI: 全栈软件CI 支持灵活组合
workload+param
X
OS
X
machine
job.yaml
script_name:
param1: ……
param2: ……
os: ……
kernel: ……
testbox: ……
ee.msup.com.cn
job 调度、部署、执行系统
5. 第一节:基础设施如何做到开发者友好
QA基础设施:项目质量看护 开发者贴心服务
从发现质量问题,到
自动定位问题
帮助开发者复现、调试、解决问题,提供全流程服务
ee.msup.com.cn
6. Bug 定位:二分法自动bisect
• debug难,加班压力大 boot.fail: 1
ltp.open13.fail: 1
xfstests.generic.452.fail: 1
dmesg.BUG:scheduling_while_atomic: 1
stderr.mkfs.xfs.pwrite_failed:Invalid_argument: 1
• 跨部门联合debug更扯 各类error-id,自动bisect
大项目:人多,模块多,commit多,
bug哪儿来的?
熬夜调BUG
安睡等bisect结果
ee.msup.com.cn
debug一天?一周?一月??
确定性时延(7次*10分钟=70分钟)
7. Compass CI 回归测试流程
特色:Job数据库 + 回归检测 + 自动bisect
ee.msup.com.cn
8. 一键登录调试 (借机器、部署OS环境)
搭环境枯燥易错,浪费开发者时间和感情
提交job,软硬件环境立等可取
1小时装OS+软件
2分钟登录
$ submit –m –c borrow-1h.yaml testbox=vm-2p16g
特色:开发者直接提交job
ee.msup.com.cn
9. 借机器流程
•
•
•
•
需要预先注册账号与ssh pubkey,目前有免费额度
可以指定testbox, os, kernel等软硬件环境参数,按需部署
文件修改在内存里,重启即丢弃
对外网络连接受限
job.yaml job.sh
submit borrow-1h.yaml
suite: borrow
sshd:
sleep : 1h
run_job()
{
setup/sshd
tests/sleep 1h
}
notify email
ssh login in
ee.msup.com.cn
run job.sh
10. Trial-and-Error 试错法 -- 问题定界基本方法
问题:多半时间耗在了环境部署上
手工部署易出错,不易复现
把优雅留给开发者
把枯燥繁琐交给系统
Modify job, re-submit
job.yaml
suite: unixbench
category: benchmark
runtime: 300s
unixbench:
test: syscall
nr_task: 1
commit: xxxxxx
testbox: vm-1p2g
os: openeuler
os_arch: aarch64
os_version: 20.03
……
ee.msup.com.cn
$ submit job.yaml testbox=vm-2p8g
testbox: vm-2p8g try another machine
os_version: 20.09 try another rootfs
unixbench.nr_task: 2 try another parameter
commit: yyyyyy try another commit
sshd: let me login
11. rootfs挂载方式
系统级CI,系统级部署,支持kernel、qemu及全栈软件测试
job.yaml
kernel:
os: openeuler|debian|ubuntu|centos|fedora|archlinux|…
os_mount: initramfs|nfs|cifs|local
boot stage1
boot stage2
ee.msup.com.cn
initramfs nfs
cifs
kernel kernel
initramfs initrd dracut initrd
overlayfs overlayfs
NFS CIFS
local
local fs
12. 测试机:PXE启动 拉取运行job
Get job from scheduler:
http://$sched/boot.ipxe/mac/$mac
http://$sched/boot.ipxe/host/$hostname
job.yaml 调度器 ipxe script 测试机
sleep: 1h
os: ……
kernel: ……
testbox: ……
#!ipxe
initrd
initrd
initrd
kernel
http://$IP:$PORT/os/debian/aarch64/sid/initrd.lkp
http://$IP:$PORT/initrd/lkp/latest/lkp-aarch64.cgz
http://$IP:$PORT/job_initrd_tmpfs/65110/job.cgz
http://$IP:$PORT/os/debian/aarch64/sid/vmlinuz \
rootovl ip=dhcp ro root=$IP:/os/debian/aarch64/sid
rootfs: NFS + overlayfs
带
外
管
理
串口日志
死机重启
/sbin/init (systemd)
/etc/init.d/lkp-bootstrap
\_ /lkp/lkp/src/bin/lkp-setup-rootfs
\_ /lkp/lkp/src/bin/run-lkp
\_ /lkp/scheduled/job.sh run_job
\_ sleep 3600
\_ tee -a /tmp/lkp/result/sleep
ee.msup.com.cn
状态更新
结果上传
13. 第二节:Job模型如何做到开发者友好
Job模型:一体化pipeline 原子化jobs组合
• 原子job要能重新提交,复现问题
• job生命周期透明化,方便理解与调试
• job.yaml力求简洁灵活,方便定制
• 用户不操心依赖与约束条件,交给系统与测试套件作者(QA)
ee.msup.com.cn
14. job按需定义脚本+参数组合
参数从脚本提取、命名:
- 可在job.yaml定制
- 可在ES数据库搜索
job.yaml 自动转 job.sh
- 测试机执行依赖最小化
- 看了job.sh 心里踏实
Job参数 环境变量 脚本
jobs/netperf.yaml tests/netperf
suite: netperf #!/bin/sh
netperf:
runtime: 600
test: SCTP_STREAM 参数 /usr/bin/netperf -l
$runtime \
-t $test \
-c –C
ee.msup.com.cn
15. job自动include依赖与约束条件
include机制:当job包含”key: val”字段时,
自动尝试合入include/$key/$val文件。
对性能测试,自动运行一组monitors iozone脚本的内核配置依赖
include/category/benchmark include/iozone
# default monitors
kmsg:
boot-time:
uptime:
iostat:
heartbeat:
vmstat: need_kconfig:
- CONFIG_BLK_DEV_DM
% if job['arch'] =~ /x86|i.86/
turbostat:
% end
sched_debug:
perf-stat:
mpstat:
ee.msup.com.cn
tests/ltp脚本的依赖包
distro/depends/ltp
numactl
sudo
acl
at
iproute2
libaio1
…
16. job的展开与转化可检阅
jobs/ltp-syscalls.yaml
suite: ltp
category: functional
disk: 1HDD
fs:
- ext4
- xfs
ltp:
test:
- syscalls-00
- syscalls-01
ee.msup.com.cn
% cd lkp-tests/jobs
% submit ltp-syscalls.yaml testbox=vm-2p8g -o atom
ltp-syscalls.yaml => atom/ltp-syscalls-ext4-1-syscalls-00.yaml
ltp-syscalls.yaml => atom/ltp-syscalls-ext4-1-syscalls-01.yaml
ltp-syscalls.yaml => atom/ltp-syscalls-xfs-1-syscalls-00.yaml
ltp-syscalls.yaml => atom/ltp-syscalls-xfs-1-syscalls-01.yaml
% job2sh atom/ltp-syscalls-ext4-1-syscalls-00.yaml
#!/bin/sh
export_top_env()
{
export suite='ltp'
export category='functional'
export testbox='vm-2p8g‘
...
}
run_job()
{
export_top_env
run_setup nr_hdd=1 $LKP_SRC/setup/disk
run_setup fs='ext4' $LKP_SRC/setup/fs
run_monitor $LKP_SRC/monitors/wrapper kmsg
run_monitor $LKP_SRC/monitors/wrapper heartbeat
run_monitor $LKP_SRC/monitors/wrapper meminfo
run_test test='syscalls-00' $LKP_SRC/tests/wrapper ltp
}
17. job依赖包自动构建
提交测试job
自动构造、提交构建job并等待完成
省心
高效
user scheduler
job A: job B:
ss: # Software Stack
mysql:
commit: XXX pkgbuild:
package: mysql
commit: XXX
queue job A
create/submit job B
B finish
run A
ee.msup.com.cn
18. 集成 20000+ 软件构建脚本
• 复用Archlinux PKGBUILD 打包脚本
• 标准化格式,易读易改
• 可指定版本 (git ref)
- branch
- tag
- git commit
ee.msup.com.cn
19. job生命周期内 动态追加信息流
Job = workload + 环境
环境: submit时指定
版本: dispatch时动态绑定
随着Job演进,更多字段合入Job
- 模块之间传递信息
- 透明化,方便理解与检查
ee.msup.com.cn
20. 原始结果转KV,合入job
统一数据格式
统一后处理工具链
原始输出 (iostat)
avg-cpu: %user %nice %system %iowait %steal %idle
0.85 5.45 2.00
0.36
0.00
91.35
标准化 metrics
iostat.cpu.user: 0.85
iostat.cpu.nice: 5.45
...
合入 job.yaml
存入ES数据库
统一工具链
ee.msup.com.cn
21. JOB 可搜索数据库
应对测试组合的挑战:多架构、多OS、多版本、多参数、多结果
高维参数空间
+
高维测试数据
ElasticSearch DB
Job+Result 文档集合
可以支撑
• 查询、聚合
• 横向比较
• 纵向比较
• 图表呈现
• 复现、调优
ee.msup.com.cn
suite: iperf
category: benchmark
cluster: cs-localhost
pp:
iperf:
runtime: 3600
protocol: tcp
job_state: finished
stats:
iperf.tcp.sender.bps: 29659070475.22922
iperf.tcp.receiver.bps: 29658689032.083942
iperf.time.user_time: 22.51
iperf.time.system_time: 2676.86
iperf.time.percent_of_cpu_this_job_got: 74
iperf.time.elapsed_time: 3600.0
job_id: z9.3999269
submit_id: bf57b756-7073-4f08-a693-d6119ad5b95f
rootfs: openeuler-xxjt-rw2-iso-aarch64
testbox: taishan200-2280-2s64p-256g--a10
kernel_version: 4.19.90-2003.4.0.0036.oe1.aarch64
22. 通用比较分析工具
compare两个commit
compare两个参数
compare两个OS
compare两个HW
ee.msup.com.cn
比较维度:任意参数
74cbd96bc2e00f5d 5c0338c68706be53b3dc472e43
---------------- --------------------------
%stddev
%change
%stddev
\
|
\
3974
-21.2%
3131 ± 4%
1608428 ± 2%
+9.7%
1764811 ± 6%
1.043e+08
-58.0%
43770754 ± 19%
33045282
-23.0%
25456502 ± 4%
1889747
-51.2%
922952
1066
-9.1%
969.60 ± 4%
3058
-9.6%
2764 ± 4%
20367518 ± 2%
-58.2%
8523363 ± 17%
56387 ± 6%
-9.4%
51101 ± 2%
599681 ± 2%
-42.0%
347640 ± 14%
21.79 ± 3%
+6.4
28.17 ± 10%
0.02 ± 22%
+0.2
0.23 ± 15%
3.08 ± 5%
+0.6
3.72 ± 6%
63227 ± 3%
+13.0%
71434 ± 6%
1915913 ± 4%
-25.3%
1431623 ± 4%
1897786 ± 4%
-25.5%
1413549 ± 4%
1269568 ± 4%
+27.1%
1613730 ± 9%
8434 ± 5%
-55.9%
3719 ± 18%
168471 ± 5%
-56.9%
72537 ± 19%
10.68 ± 8%
-37.2%
6.70 ± 11%
732.25 ± 5%
-30.4%
509.76 ± 2%
1748 ± 4%
-18.2%
1429 ± 5%
8.165e+08 ± 2%
-20.7% 6.477e+08 ± 14%
26339770 ± 2%
-59.2%
10742045 ± 18%
1.775e+08 ± 6%
+236.0% 5.962e+08 ± 6%
607354 ± 4%
+51.8%
921820 ± 9%
blogbench.write_score
blogbench.read_score
blogbench.time.file_system_inputs
blogbench.time.file_system_outputs
blogbench.time.involuntary_context_switches
blogbench.time.percent_of_cpu_this_job_got
blogbench.time.system_time
blogbench.time.voluntary_context_switches
interrupts.CAL:Function_call_interrupts
softirqs.SCHED
mpstat.cpu.iowait%
mpstat.cpu.soft%
mpstat.cpu.usr%
meminfo.CmaFree
meminfo.Inactive
meminfo.Inactive(file)
meminfo.MemFree
iostat.sda.r/s
iostat.sda.rkB/s
iostat.sda.rrqm/s
iostat.sda.w/s
iostat.sda.wrqm/s
cpuidle.C1.time
cpuidle.C1.usage
cpuidle.C1E.time
cpuidle.C1E.usage
all changed
metrics
23. 第三节:Compass CI可以做什么
• 本地部署
• 开源测试
• 开放服务
ee.msup.com.cn
24. Compass CI 是开源软件,可本地安装
• micro-services in
60+ containers
• minimal deploy in 1 VM
› client
› db + services
› docker testboxes
本地部署
服务内部项目、开发者
ee.msup.com.cn
Compass CI 分层架构
25. Compass CI 是开源软件测试平台
支撑芯片、OS、基础软件自主创新,发展新生态
用户、开发者手上一般跑x86
其它arch上,软件BUG往往悄然引入
测试全栈开源软件(目前20000+)
建立开源测试联盟
ee.msup.com.cn
26. Compass CI 是分布式开放服务平台
开放账号申请,免费机时额度
开发者可以
• 提交job,远程登录调试
• 添加测试用例,复用资源与能力
• 接入个人测试机,共享机时,忙闲调剂
(平时贡献闲置算力,需要时批量提交并发jobs)
ee.msup.com.cn
27. 资源下载
• Compass-CI 项目开源仓
https://gitee.com/openeuler/compass-ci
• Compass-CI 使用指导文档
https://gitee.com/openeuler/compass-ci/blob/master/doc/README.zh.md
ee.msup.com.cn
28. 关注msup公众号
获取更多工程效能实践案例
29. BACKUP
ee.msup.com.cn
30. 案例背景
• 简单介绍案例背景,遇到哪些问题等
ee.msup.com.cn
31. 成功要点
• 此处梳理案例主体研究内容、成功要素、成功经验总结、及哪些技术或其他方
面做好了才促使项目成功
ee.msup.com.cn
32. 有什么曲折、经验教训是什么
ee.msup.com.cn
33. 关键实践一
ee.msup.com.cn
34. 关键实践二
ee.msup.com.cn
35. 关键实践三
ee.msup.com.cn
36. 案例总结
• 重点梳理ROI,总结该项目的投入产出比,以及从效能方面有哪些数字上的提
升
ee.msup.com.cn
37. 下一步启示
• 下一步要做的尝试或新的困惑,希望与大家交流、或请出品人点评。
ee.msup.com.cn