diff --git a/src/content/posts/2024-01/linsj_stratovirt_grafana.md b/src/content/posts/2024-01/linsj_stratovirt_grafana.md new file mode 100644 index 0000000000000000000000000000000000000000..d2f76e1dd056932ed1e7486e79ab4190478ac625 --- /dev/null +++ b/src/content/posts/2024-01/linsj_stratovirt_grafana.md @@ -0,0 +1,193 @@ +--- +title: 在ARM平台对stratovirt和grafana进行测试 +author: 林圣杰 +pubDate: 2024-06-29 +categories: ['2024 年第一期'] +description: '主要进行优先级1的测试;RISC-V平台暂未开放' +--- + + +*** + +## 1. stratovirt +源码仓库位于[stratovirt](https://github.com/openeuler-mirror/stratovirt/tree/master)。 + +在仓库中,测试文件位于`tests/`目录下,分为`hydropper`和`mod_test`两部分,各自的测试文件位于各自目录的`tests/`目录下。 + +`Cargo`会在tests目录下查找集成测试文件,进行集成测试时需要进入`hydropper`或`mod_test`目录,执行相应`cargo test`命令。 + +### 1.0 自动化脚本 +自动测试脚本为`autest_stratovirt.sh`,已经提交到 gitee 上,地址为[autest_stratovirt.sh](https://gitee.com/stever178/eulix-cloud-test/blob/master/autest_stratovirt.sh),通过脚本完成日志目录创建、源码下载、构建、进行测试、保存测试结果。 + +- 执行结果 + - 将控制台输出保存到文件中 + - 修改`performance_counter_920.sh`脚本,将`perf`执行的相关结果以`markdown`的表格格式保存下来 + +- 小问题 + - 构建`stratovirt`时,需要以超级用户权限执行`make build` + - 要手动执行`Makefile`中目标`build`的命令`cargo build --workspace --bins --release` + - 要手动设置环境变量`STRATOVIRT_BINARY`为构建得到的`stratovirt`可执行文件路径 + +### 1.1 mod_test +目前进行集成测试,收集的是单个rs文件的测试信息,文件位于`stratovirt/tests/mod_test/tests`中,每个rs文件包含若干测试函数。 + +- perf执行结果以`markdown`表格的格式保存在文件[table_stratovirt_mod.md](https://gitee.com/stever178/eulix-cloud-test/blob/master/table_stratovirt_mod.md)中。 + +- 测试项信息如下 + +| Test Name | Status | Run Details | +| - | - | - | +| balloon_test | 2 passed; 13 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| block_test | 0 passed; 21 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| fwcfg_test | 0 passed; 15 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| memory_test | 0 passed; 14 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| net_test | 0 passed; 14 failed | `eA` | +| pci_test | 0 passed; 40 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| pvpanic_test | 0 passed; 3 failed | `eline366`; Failed to open /dev/kvm: Error(13) | +| rng_test | 0 passed; 5 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| scream_test | 0 passed; 4 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| scsi_test | 0 passed; 14 failed | `eline 116` | +| serial_test | 0 passed; 7 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| usb_camera_test | 0 passed; 8 failed | `eline366`; Found argument '-cameradev' which wasn't expected, or isn't valid in the context. ; Failed to open log file /var/log/mst.log | +| usb_storage_test | 0 passed; 15 failed | `eline366` ; Permission denied (os error 13) Failed to open log file /var/log/mst.log | +| usb_test | 0 passed; 43 failed | `eline366` ; Permission denied (os error 13) Failed to open log file /var/log/mst.log | +| virtio_gpu_test | 0 passed; 12 failed | `eline366` | +| virtio_test | 0 passed; 28 failed | `eline366` ; Failed to open /dev/kvm: Error(13) | +| virtiofs_test | 0 passed; 25 failed | `eB` | +| vnc_test | 0 passed; 9 failed | `eline366` ; Found argument '-vnc' which wasn't expected, or isn't valid in the context. | + + +报错原因及初步分析: + - 基本上所有测试都fail了 + - `eline366`: panicked at tests/mod_test/src/libtest.rs:366:82:called `Option::unwrap()` on a `None` value + - 大多因为`Failed to open /dev/kvm`;同时ARM平台上有`/dev/kvm`,或许因为没有权限。 + - 在usb的相关测试上遇到的是 os error + - `eA`: panicked at tests/mod_test/tests/net_test.rs:349:9:assertion failed: output.status.success() + - `eline 116`: panicked at tests/mod_test/src/utils.rs:116:5:assertion failed: output.status.success() + - `eB`: panicked at tests/mod_test/tests/virtiofs_test.rs:236:56:called `Result::unwrap()` on an `Err` value: NotPresent + + +### 1.2 hydropper +遵循README, 只在ARM平台上安装了相关软件包。 + +*** + +## 2. grafana + +源码仓库位于[grafana](https://github.com/grafana/grafana/tree/main)。 + +### 2.0 自动化脚本 +自动测试脚本为`autest_grafana.sh`,已经提交到 gitee 上,地址为[autest_grafana.sh](https://gitee.com/stever178/eulix-cloud-test/blob/master/autest_grafana.sh),通过脚本完成日志目录创建、源码下载、构建、进行测试、保存测试结果。 + +### 2.1 Run frontend tests +测试命令为`yarn test --watchAll` + +- perf执行结果保存在文件[yarntest--watchAll.md](https://gitee.com/stever178/eulix-cloud-test/blob/master/yarntest--watchAll.txt)中 +- 运行结果总结 +``` +Test Suites: 1 failed, 1 skipped, 1377 passed, 1378 of 1379 total +Tests: 1 failed, 31 skipped, 12970 passed, 13002 total +Snapshots: 366 passed, 366 total +Time: 127.971 s, estimated 133 s +Ran all test suites. +``` + +### 2.2 Run backend tests +在包列表模式下进行测试,对`pkg/`目录下的包进行测试,该目录包含grafana的后端代码。 + +- 每个包的perf执行结果以`markdown`表格的格式保存在文件[table_grafana_backend.md](https://gitee.com/stever178/eulix-cloud-test/blob/master/table_grafana_backend.md)中 + +- 测试项信息如下 + +| Test Name | Status | Run Details | +| - | - | - | +| api | ok | 2.693s coverage: 46.7% of statements | +| bus | ok | 0.028s coverage: 81.5% of statements | +| codegen | ok | 0.013s coverage: 13.0% of statements | +| expr | ok | 0.205s coverage: 60.3% of statements | +| middleware | ok | 0.104s coverage: 61.7% of statements | +| plugins | ok | 0.030s coverage: 33.8% of statements | +| promlib | ok | 0.021s coverage: 60.3% of statements | +| server | FAIL | 0.237s coverage: 5.7% of statements | +| setting | ok | 4.102s coverage: 80.6% of statements | +| util | ok | 0.463s coverage: 63.1% of statements | +| web | ok | 0.007s coverage: 14.1% of statements | + + +收集到每个包的所有测试项的测试信息,之后应当对这些测试项信息进行提取。 + +### 2.3 Run SQLite, PostgreSQL and MySQL integration tests +在包列表模式下进行测试。 + +- 每个包的perf执行结果以`markdown`表格的格式保存在文件[table_grafana_sql.md](https://gitee.com/stever178/eulix-cloud-test/blob/master/table_grafana_sql.md)中 + +- 测试项信息如下 + +| Test Name | Status | Run Details | +| - | - | - | +| api | ok | 2.655s coverage: 46.7% of statements | +| bus | ok | 0.030s coverage: 81.5% of statements | +| codegen | ok | 0.015s coverage: 13.0% of statements | +| expr | ok | 0.196s coverage: 60.3% of statements | +| middleware | ok | 0.109s coverage: 61.7% of statements | +| plugins | ok | 0.027s coverage: 33.8% of statements | +| promlib | ok | 0.018s coverage: 60.3% of statements | +| server | FAIL | 0.231s coverage: 5.7% of statements | +| setting | ok | 3.233s coverage: 80.6% of statements | +| util | ok | 0.756s coverage: 63.1% of statements | +| web | ok | 0.007s coverage: 14.1% of statements | + + +收集到每个包的所有测试项的测试信息,之后应当对这些测试项信息进行提取。 + +### 2.4 Run end-to-end tests +测试命令为`yarn e2e` + +- 问题 + - 缺少Xvfb依赖, 于是`sudo dnf install xorg-x11-server-Xvfb -y` + - 未解决: + + 执行`yarn e2e`, 报错 + ``` + Can't run because you've entered an invalid browser name. + Browser: chrome was not found on your system or is not supported by Cypress. + Cypress supports the following browsers: + - electron + - chrome + - chromium + - chrome:canary + - edge + - firefox + You can also use a custom browser: https://on.cypress.io/customize-browsers + Available browsers found on your system are: + - electron + ``` + + 执行`yarn e2e electron`, 报错 + ``` + An invalid configuration value was set. + Expected video to be a boolean. + Instead the value was: + ``` + +*** + +## 下一步 + +- 在ARM平台上继续完成测试,对更细粒度的测试项进行提取,进一步分析失败测试项 +- 待RISC-V平台开放,完成相关测试 +- 学习perf命令、cargo和go的相关测试命令