From bc9739b2f29ef509c725b51a93e5327fc93be54c Mon Sep 17 00:00:00 2001 From: Guoqi Xie Date: Sat, 18 Jan 2025 12:06:10 +0800 Subject: [PATCH] doc: update doc Add ZVM logo and description. Signed-off-by: Guoqi Xie --- README.md | 9 ++++++--- zvm_doc/6_Test_on_RK3568.md | 6 ++++++ zvm_doc/figure/ZVM.jpeg | Bin 0 -> 43906 bytes 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 zvm_doc/figure/ZVM.jpeg diff --git a/README.md b/README.md index 53137ac3f..55c03b7d0 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ [![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE) -ZVM(Zephyr-based Virtual Machine)是新一代Type 1.5 嵌入式RTOS虚拟化解决方案,它结合开源微内核实时操作系统 [Zephyr RTOS](https://github.com/zephyrproject-rtos/zephyr) 开发,能在单一硬件平台上启动多个操作系统,以构建安全隔离的多内核混合部署系统,为多OS和多任务处理提供实时与灵活的虚拟化支持。Type 1.5并不是实时性(Type 1)与灵活性(Type 2)之间的权衡,而是在实时性与灵活性方面都达到最佳状态,且不牺牲任何一方。 +ZVM(Zephyr-based Virtual Machine)是新一代Type 1.5 嵌入式RTOS虚拟化解决方案(hypervisor),它结合开源微内核实时操作系统 [Zephyr RTOS](https://github.com/zephyrproject-rtos/zephyr) 开发,能在单一硬件芯片上启动多个操作系统(Linux、Zephyr等),以构建安全隔离的多内核混合部署系统,为多OS和多任务处理提供实时且灵活的虚拟化支持。Type 1.5并不是实时性(Type 1)与灵活性(Type 2)之间的权衡,而是在实时性与灵活性方面都达到最佳状态,且不牺牲任何一方。 + +

(1)ZVM并非附加于Zephyr RTOS之上,而是直接运行在硬件之上,不仅共享Zephyr RTOS内核的开源生态、驱动支持和调度能力(相比Type 1具有更高的灵活性),而且避免了Type 2因多层依赖导致的时延开销(相比Type 2具有更强的实时性)。 @@ -69,7 +71,8 @@ ZVM目前支持兼容ARMv8架构的处理器芯片,包括: ## ZVM性能测试结果 -ZVM的性能测试在瑞芯微RK3568芯片上进行(开发板采用ROC-RK3568-PC),RK3568芯片是一款代表性的基于ARMv8.2架构(采用Cortex A55)的4核CPU国产SoC芯片。本次性能测试主要对比虚拟机操作系统(VM)在**裸板**(即RK3568裸板)和**ZVM**(即ZVM on RK3568)上的各种性能指标,包括系统线程的调度时延、中断处理时延、内核对象的操作时间、系统吞吐量等。本次测试采用的VM为Zephyr RTOS(3.7 LTS)和Debian(Linux 5.10内核),使用的测试集包括:1)Zephyr Latency Measure测试集;2)Debian Cyclictest测试集;3)Zephyr Sys kernel测试集;4)Debian Unixbench测试集。前两个测试集关注VM的系统延迟,后两个测试集关注VM的整体性能,具体说明见下面测试链接中描述。 +ZVM的性能测试在瑞芯微RK3568芯片上进行(开发板采用ROC-RK3568-PC),本次性能测试主要对比虚拟机操作系统(VM)在**裸板**(即RK3568裸板)和**ZVM**(即ZVM on RK3568)、 +**Xvisor**(Xvisor on RK3568)以及**KVM**(Linux-KVM on RK3568)上虚拟机的各种性能表现,具体说明见下面测试链接中描述。 - [Test ZVM on RK3568:https://gitee.com/openeuler/zvm/blob/master/zvm_doc/6_Test_on_RK3568.rst](https://gitee.com/openeuler/zvm/blob/master/zvm_doc/6_Test_on_RK3568.md) @@ -78,7 +81,7 @@ ZVM的性能测试在瑞芯微RK3568芯片上进行(开发板采用ROC-RK3568- 扫码加入ZVM技术交流群: -

+

   ZVM技术交流微信群 diff --git a/zvm_doc/6_Test_on_RK3568.md b/zvm_doc/6_Test_on_RK3568.md index c5b895d6d..8f387385f 100644 --- a/zvm_doc/6_Test_on_RK3568.md +++ b/zvm_doc/6_Test_on_RK3568.md @@ -1,6 +1,12 @@ 在ROC_RK3568_PC上测试ZVM性能 ====================== +ZVM的性能测试在瑞芯微RK3568芯片上进行(开发板采用ROC-RK3568-PC),RK3568芯片是一款代表性的基于ARMv8.2架构(采用Cortex A55)的4核CPU国产SoC芯片。 +本次性能测试主要对比虚拟机操作系统(VM)在**裸板**(即RK3568裸板)和**ZVM**(即ZVM on RK3568)、 +Xvisor(Xvisor on RK3568)以及KVM(Linux-KVM on RK3568)上虚拟机的各种性能表现, +包括系统线程的调度时延、中断处理时延、内核对象的操作时间、系统吞吐量等。 +本次测试采用的VM为Zephyr RTOS(3.7 LTS)和Debian(Linux 5.10内核),使用的测试集包括:1)Zephyr Latency Measure测试集;2)Debian Cyclictest测试集;3)Zephyr Sys kernel测试集;4)Debian Unixbench测试集。前两个测试集关注VM的系统延迟,后两个测试集关注VM的整体性能,具体说明见下面描述。 + #### 测试1:**Zephyr RTOS的延迟测试** 我们分别在裸板、ZVM、Xvisor和Linux-KVM上运行Zephry RTOS,并在Zephyr RTOS中运行Zephyr Latency measure测试集,该基准测试测量选定内核功能的平均延迟,如线程上下文切换、中断处理、信号量收发的延迟,测试项的细节见:[Zephyr Latency measure](https://github.com/zephyrproject-rtos/zephyr/tree/main/tests/benchmarks/latency\_measure)中列出的基准项。 diff --git a/zvm_doc/figure/ZVM.jpeg b/zvm_doc/figure/ZVM.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8e9dc62a0fccd603f8fa629e4418b33d76171160 GIT binary patch literal 43906 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 G{J#J;GNw}i literal 0 HcmV?d00001 -- Gitee