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

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.125.0. UTC+08:00, 2024-05-10 21:44
浙ICP备14020137号-1 $访客地图$