ZVM特性:自动化测试系统
VisualZVMv2.1测试模块
ZVM-RK3588v2.1具备多项关键核心特性。为验证 these 核心特性的功能完整性与可用性,并确保用户能够高效、便捷地完成相关验证工作,VisualZVMv2.1提供了一套完整且可直接使用的测试模块,支持用户对所选核心特性进行一键化测试。目前,VisualZVM已集成VirtIO、Zshm、系统性能测试及中断测试等功能模块,具体内容如表所示。
| 测试项 | ZVM | Linux | openEuler | Ubuntu | Zephyr | FreeRTOS | Android | OpenHarmony | NuttX |
|---|---|---|---|---|---|---|---|---|---|
| VirtIO | √ | √ | √ | √ | 暂未支持 | 暂未支持 | √ | √ | 暂未支持 |
| Zshm | √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 系统性能 | -- | √ | √ | √ | √ | √ | 暂未支持 | 暂未支持 | 暂未支持 |
| 中断测试 | √ | √ | √ | √ | √ | 暂未支持 | 暂未支持 | 暂未支持 | 暂未支持 |
1. VirtIO测试
在ViriIO测试部分,VisualZVMv2.1支持VirtIO-blk和VirtIO-net测试,具体支持情况如下表所示:
| Linux | openEuler | Ubuntu | Zephyr | FreeRTOS | Android | OpenHarmony | NuttX | |
|---|---|---|---|---|---|---|---|---|
| VirtIO-blk | √ | √ | √ | 暂未支持 | 暂未支持 | √ | √ | 暂未支持 |
| VirtIO-net | √ | √ | √ | 暂未支持 | 暂未支持 | √ | √ | 暂未支持 |
(1) VirtIO-blk测试
以Linux的VirtIO-blk测试为例(openEuler、Ubuntu、Android、OpenHarmony测试流程类似):
① 进入Guest OS交互页面,双击Guest OS列表中的Linux客户OS(linux_os-0(5.15));

② 点击左侧栏下方的VirtIO-blk测试按钮,一键进行VirtIO-blk测试;

测试过程中,首先对VirtIO-blk块设备vda执行多轮“挂载→文件读写→卸载”重复测试,验证VirtIO-blk的功能稳定性,具体现象如下图所示:

当所有测试轮次均成功完成后,如下图所示,日志显示:

完成基础功能测试后,开始文件读写吞吐性能测试。测试脚本在VirtIO-blk文件系统中创建指定大小的测试文件,并持续向该文件写入连续数据,以模拟连续文件写入场景。

测试结果显示,文件I/O吞吐速度约为5.82MB/s,表明VirtIO-blk设备在当前环境下运行稳定,相关功能与性能测试均顺利完成。

(2) VirtIO-net测试
以Linux的VirtIO-net测试为例(openEuler、Ubuntu、Android、OpenHarmony测试流程类似):
① 进入Guest OS交互页面,双击Guest OS列表中的Linux客户OS(linux_os-0(5.15));

② 点击左侧栏下方的VirtIO-net测试按钮,一键进行VirtIO-net测试;

在测试开始前,测试脚本自动完成虚拟网卡的IP与MAC地址配置,并输出当前VirtIO-net设备(eth0)的源IP地址以及测试目标的目的IP地址。如下图所示:

当网络参数配置完成后,客户OS向目标IP地址连续发送100次ICMP请求。

测试结束后,日志中输出ping测试的统计结果,包括最小、最大及平均往返时延(RTT)。

2. Zshm测试
在Zshm测试部分,VisualZVMv2.1支持共享内存通信测试,其在客户OS的支持情况如下表:
| Linux | openEuler | Ubuntu | Zephyr | FreeRTOS | Android | OpenHarmony | NuttX | ||
|---|---|---|---|---|---|---|---|---|---|
| Zshm | √ | √ | √ | √ | √ | √ | √ | √ | √ |
以一台Linux分别与一台Zephyr和一台FreeRTOS之间进行Zshm测试为例,具体测试步骤如下:
① 双击Guest OS交互页面的Linux客户OS,进入Linux客户OS;

② 点击左下角“Zshm通信测试”按钮;

③ 在弹窗的中依次勾选想要测试的客户OS;

④ 点击【开始测试】按钮,进行测试。

在测试配置弹窗中选择客户OS作为测试对象后,发起测试的客户OS以每秒一条的频率向所有测试对象发送测试消息。

在展示一定数量的测试消息后,VisualZVMv2.1会依次自动切换至各测试对象对应的客户OS界面,用于展示测试消息的接收情况。

功能测试完成后,VisualZVMv2.1将自动切换回发起测试的客户OS,并触发性能测试流程,对所选客户OS逐一进行一对一性能测试,最终输出通信时延的最小值、最大值、均值及标准差等统计结果,如图为跨Linux通信的测试结果。

3. vCPU测试
在vCPU测试部分,VisualZVMv2.1支持测试vCPU到pCPU的映射关系,以及vCPU的调度时间片信息;本测试为ZVM测试项,只在ZVM Hypervisor界面进行测试。
① 双击Guest OS交互页面的ZVM Hypervisor,进入ZVM;

② 点击左下角【vCPU映射测试】按钮,一键开启测试;

ZVM的shell页面将依次展示当前系统中vCPU与pCPU的映射关系,并打印vCPU调度时间片的间隔信息,随后测试结束。其中,vCPU与pCPU的映射关系以表格形式展示:第一列为pCPU编号,第二列为对应的vCPU编号及其所属的客户OS。如下图所示:

当启用ZVM的一虚多特性时,系统将在打印映射关系后输出vCPU调度时间片统计信息;ZVM-RK3588v2.1发行版默认不启用一虚多,输出信息如下图所示:

4. 生命周期管理测试
在生命周期管理测试部分,VisualZVMv2.1支持测试客户OS的创建、开启、删除等命令操作,本测试为ZVM测试项,只在ZVM Hypervisor界面进行测试。
① 双击Guest OS交互页面的ZVM Hypervisor,进入ZVM;

② 点击左下角“生命周期管理测试“按钮,开启测试。

ZVM首先会随机生成一系列测试指令,包括对客户 OS的创建、开启、暂停、删除等操作,例如,执行zvm create -t linux -c 1 -m 512指令会创建一个单核、内存为512M linux客户OS,zvm run/pause/delete -n 0表示对客户OS 0进行开启/暂停/删除操作;

随后,ZVM会依次执行测试指令,每通过一条指令,会输出[PASS]信息,测试结束后,会输出[PASS] All test passed,表示生命周期管理测试成功,ZVM and 客户OS稳定运行。

5. 系统性能测试
在系统性能测试部分,VisualZVMv2.1支持对多种客户OS的系统吞吐量和实时性进行测试,各客户OS支持的系统性能测试集如下:
| 客户OS | 支持性能测试集 |
|---|---|
| Linux, openEuler, Ubuntu | Unixbench, Cyclictest, FIO |
| Zephyr | RTOSBench, Latency_measure,Task_switch, Task_preempt, Cyclictest |
| FreeRTOS | RTOSBench |
(1) Linux测试
Linux, openEuler, Ubuntu目前支持Unixbench, Cyclictest, FIO三种测试集。以Linux为例,系统性能测试的具体步骤如下:
① 双击Guest OS交互页面的客户OS,进入对应的客户OS;

② 点击左下角“系统性能测试“按钮,出现对应客户OS的系统性能测试弹窗;

a)Linux Unixbench测试
下拉框选择Unixbench -> 点击“开始测试“按钮 -> 输出各核心性能指标数据。
首先进行环境检查、网络配置、系统信息收集等初始化过程,然后开始UnixBench的7个子测试项;
最后输出UnixBench的7个子测试项的测试结果,用来评估整数运算、浮点运算、进程/系统调用、上下文切换、文件I/O等核心性能。最终输出各项性能指标,UnixBench的各项指标介绍可见:https://github.com/kdlucas/byte-unixbench

输出Log File: /tmp/benchmark_results/benchmark.log,代表测试完成。用户可前往该路径查看结果日志。
b)Linux Cyclictest测试
下拉框选择Cyclictest -> 点击“开始测试“
首先进行初始化过程,然后开始 Cyclictest四个实时性子测试项,包括基础延迟、多线程延迟、高优先级RT延迟、延迟分布测试;

最后输出四个测试项的时间数据。Cyclictest的各项指标介绍可见:https://github.com/LITMUS-RT/cyclictes

输出Log File: /tmp/benchmark_results/benchmark.log,代表测试完成。用户可前往该路径查看结果日志。

c)Linux FIO测试
下拉框选择FIO -> 点击“开始测试“
首先进行初始化过程,然后进行存储性能测试,包括顺序读写、随机读写测试;

最后输出读写速度,用来评估系统的存储I/O处理能力,FIO的各项指标介绍可见:https://github.com/axboe/fio

输出Log File: /tmp/benchmark_results/benchmark.log,代表测试完成。用户可前往该路径查看结果日志。

(2) Zephyr测试
目前支持RTOSBench, Latency_measure, Task_switch, Task_preempt, Cyclictest五种测试集。Zephyr的系统性能测试的具体步骤如下:
① 双击进入Zephyr客户OS -> 点击“系统性能测试“按钮。
a)Zephyr RTOSBench测试
下拉框选择RTOSBench;

点击“开始测试“按钮;

Zephyr RTOSBench测试集,针对线程操作、互斥锁操作、信号量操作、任务主动切换、动态内存分配与释放、消息队列操作六大核心模块展开,下图红框内包括线程和互斥锁两个模块,每个模块下是该模块的各类操作。

每完成一个模块的测试,输出这个模块各类操作的耗时数据,测试完成会输出Done!,数据用来评估Zephyr RTOS内核关键操作的执行效率与实时性。RTOSBench测试集的各项指标介绍可见:https://github.com/gchamp20/RTOSBench

b)Zephyr Latency_measure测试
下拉框选择Latency_measure -> 点击“开始测试“按钮。
Zephyr RTOS延迟测试,针对上下文切换、中断服务程序(ISR)返回、线程生命周期操作、FIFO/LIFO队列操作、信号量/互斥锁基础操作等核心场景开展测试;

输出各操作的耗时,看到Latency test thread completed.,代表测试完成,用来评估Zephyr RTOS各类核心操作的延迟。Latency_measure的各项指标介绍可见:https://github.com/zephyrproject-rtos/zephyr/tree/main/tests/benchmarks/latency_measure

c)Zephyr Task_switch测试
下拉框选择Task_switch;

点击“开始测试“按钮;

Zephyr Task_switch测试,通过执行指定次数的任务切换循环(例如 task_switch -l 1000000),测量每次切换的纳秒级耗时。测试结果为耗时统计结果,包括最小值、最大值和平均值。

d)Zephyr Task_preempt测试
下拉框选择Task_preempt;

点击“开始测试“按钮;

Zephyr Task_preempt测试,通过执行指定次数的任务抢占循环(例如 task_preempt -l 1000000),测量每次抢占触发的上下文切换耗时,包括最小值、最大值和平均值。

e)Zephyr Cyclictest测试
下拉框选择Cyclictest;

点击“开始测试“按钮;

Zephyr Cyclictest测试,通过指定周期(微秒)和循环次数(例如 cyclictest -i 1000 -l 10000),周期性触发定时器任务,测量每次定时器唤醒的实际延迟(单位:纳秒),并统计最小值、最大值和平均值。

(3) FreeRTOS测试
目前支持RTOSBench测试集。FreeRTOS的系统性能测试的具体步骤如下:
① 双击Guest OS交互页面的客户OS,进入对应的客户OS;

② 点击左下角“系统性能测试“按钮,出现对应客户OS的系统性能测试弹窗;

a)FreeRTOS RTOSBench 测试
下拉框选择RTOSBench;

点击“开始测试“按钮;

FreeRTOS基准性能测试,针对线程操作、互斥锁操作、信号量操作、任务主动切换、动态内存分配与释放;

输出耗时数据,看到Done!,代表测试完成,数据用来评估FreeRTOS内核核心操作的执行效率与实时性。RTOSBench的各项指标介绍可见: https://github.com/gchamp20/RTOSBench

6. 中断测试
在系统性能测试部分,VisualZVMv2.1支持对客户OS的核内中断、物理硬件中断、虚拟设备中断进行测试,各客户OS支持情况如下表所示:
| Linux | openEuler | Ubuntu | Zephyr | FreeRTOS | Android | OpenHarmony | NuttX | |
|---|---|---|---|---|---|---|---|---|
| 中断测试 | √ | √ | √ | √ | 暂未支持 | 暂未支持 | 暂未支持 | 暂未支持 |
以执行Zephyr OS的中断测试为例:
① 双击Guest OS交互页面的客户OS,进入相应客户OS;

② 点击左下角“中断测试“按钮,开启测试。

以Zephyr中断测试为例,测试开始后,Zephyr客户OS进入30s的测试窗口期;

在此期间,CPU内部中断测试和真实硬件中断由板卡硬件自身触发,而VisualZVMv2.1会自动输入zephyr常用指令来触发虚拟串口(虚拟外设)中断,用户也可手动输入指令来触发中断:

测试时间截至后,串口页面会打印CPU内部中断(15)、真实硬件中断(27)和虚拟设备中断(365)的统计结果,包括触发次数、最小时延、最大时延和平均时延,表示此轮中断测试成功,并可以观察中断的时延。
