作者:Steven H. VanderLeest
DornerWorks 公司首席运营官 Steve.VanderLeest@DornerWorks.com
赛灵思最新 Zynq 器件采用 Xen 管理程序,但选择这种开源虚拟化方案的关键在于其支持能力。
Xen 开源管理程序是一种功能齐全的虚拟化技术,通常用于云计算,最近才进入嵌入式系统领域。DornerWorks 在新型 Zynq® UltraScale+ MPSoC 器件上提供 Xen 支持,为赛灵思用户带来多种优势。Xen Zynq 管理程序不仅实现快速的软件集成和更高的系统安全性与保密性,而且还能将企业级的云计算能力运用到嵌入式领域。
管理程序提供的严格设计分区功能有助于在计算器件上快速集成新软件(包括整个操作系统)。同时,这种隔离方式可减少甚至消除独立软件功能之间的意外干扰。
此外,这种隔离方式还能减少功能间的意外交互,缩小受风险威胁的攻击面,从而极大增强系统的安全性与保密性,进而更容易实现安全性或保密性属性。企业级云计算给嵌入式领域同样带来了诸多优势,例如只需少许修改就能将原有软件在新的硬件上部署。
我们在具体介绍 Zynq MPSoC 上的开源 Xen 管理程序 Xen Zynq 之前,首先简单了解一下什么是管理程序。
什么是管理程序?
管理程序是实现虚拟化的基础软件层。正如操作系统 (OS) 管理同时运行的多个应用程序,每个应用程序包含在一个进程中,可以访问由操作系统管理的机器资源;管理程序管理同时运行的多个操作系统,每个操作系统包含在一个虚拟机中,可以访问由管理程序管理的机器资源。
虚拟化概念可追溯到二十世纪六十年代。Popek 和 Goldberg 在 1974 年用三个特征定义了虚拟机监视程序 (VMM) 的概念:
• VMM 程序具有与原(物理)机器相同的运行时间(虚拟)环境。
• VMM 对性能的影响可以忽略不计。
• VMM 管理系统资源。
管理程序是一种几乎只关注基本机器管理任务的 VMM。这意味着文件系统、图形用户界面和网络协议栈等常见任务不在这层实现,而是委托给更高的层,例如运行在由管理程序托管的虚拟机上的客户操作系统内。
如上所述,在硬件上运行的管理程序被称为 1 类管理程序。相比之下,2 类管理程序不是最低的软件层,而是托管在操作系统上。这类管理程序通常用来让一种操作系统运行在另一种操作系统之上,例如,Mac 用户利用 Parallels 在 MacBook 上运行 Windows,或者 Windows 用户使用 VirtualBox 在虚拟机上启动并运行 Linux。
企业管理程序与嵌入式管理程序之间也存在重大区别。云计算和大数据是管理程序的典型企业级用例。管理程序是最近才进入嵌入式领域的。随着具备足够高性能和较低功耗的处理器出现才被该领域所采用。
嵌入式管理程序的用例具有一个共同特点:将多个复杂功能整合到单个计算平台中,同时保持一定间距。在航空航天领域,管理程序经常用于支持集成式模块化航空电子设备,将以前在联合式(独立)航空电子硬件上执行的软件整合到单个计算平台中。功能包括飞行控制、导航、飞行管理系统、防碰等。联邦航空局 (FAA) 要求以前在独立硬件上运行的软件功能在整合后不能相互影响。这种隔离性通过 DO-248C 等标准定义的严格的分区模式来实现。
当整合功能时,FAA 考虑的是航班安全问题,而军用航空电子设备也同样需要隔离以支持保密性。在单个系统上通过严格分区支持多个分类等级的这种方法采用一种名为多重独立安全等级 (MILS) 的架构。
医疗保健行业也考虑使用管理程序为高端医疗设备实现类似的整合,例如核磁共振扫描仪、机器人(或机器人辅助)外科手术设备以及 CT 扫描仪,所有这些设备目前都包含多个独立处理系统。整合的功能有可能包括内科医生图形用户界面、图像处理、实时电机控制、患者信息数据库和系统管理功能。
在汽车领域,要想将汽车内嵌的数十个独立微处理器和微控制器整合在一起,使用管理程序是一种不错的方法。几乎所有汽车 OEM 厂商都在考虑使用管理程序将信息娱乐、驾驶员与乘客控制、高级驾驶员辅助系统 (ADAS)、仪表板、导航系统、互联网连接以及实时控制等功能进行整合。
考虑虚拟化解决方案时,一定要评估 VMM 对性能的影响是否小到可以被忽略。管理程序可控制所有硬件资源(CPU、存储器和 I/O),因此有可能影响所有资源的性能。就 CPU 而言,一项重要指标是使内核从运行一台虚拟机切换为运行另一台虚拟机所需的时间。该指标有时被称为上下文切换时间,但也称为分区或域切换时间,这是为了将它与操作系统在进程间的切换这个类似概念加以区分。还有一个相关的指标是抖动,该指标用来衡量切换时间的变化有多大,以及这种变化对于确定性和可预测性的影响。
实时任务设计人员还会测量可调度的最小时间片,这能约束 CPU 调度的最大频率,或者换句话说,能约束给定时间内可执行的最大虚拟机数量。当测量对存储器的影响时,管理程序内核的存储足迹由不变的基本部分以及针对每个被添加客户机(虚拟机)的增量部分组成。累积的存储足迹约束虚拟机的最大数量。在 I/O 性能方面,应对每个目标器件测量带宽和时延这两个关键数值,不过您也可根据一些通用指标(例如总的中断时延或原始通信带宽)进行估算。
很多管理程序支持两种 I/O 方案:即专用和共享。专用 I/O 一般开销较低。这种方式下,管理程序会提供一个可直接或唯一性地访问特定 I/O 器件的虚拟机,该 I/O 器件通常被称为“直通”器件。共享 I/O 开销较高,因为管理程序必须采取一些机制来实现共享方案。
开源方面
“开源”一词用来描述软件是开放的,但不一定是免费的。开源软件的源代码允许在精心制定的许可协议下修改和共享,以使软件的自由性得到保护。最为广泛认可的开源许可证协议是 GNU 通用公共许可证(有效版本为 GPLv2 和 GPLv3)、GNU 宽通用公共许可证、Apache 许可证和 BSD 许可证(有多个不同版本)。
开源不一定免费。以开源产品为主的公司与传统软件公司有所不同,通常使用不同的收入模式,例如销售产品支持、附件(例如印刷版用户手册)、培训或定制设计服务。Red Hat 是最有名的开源公司之一,他们围绕开源 Linux 操作系统打造出一家数十亿美元的企业。
将 XEN 映射到新的 ZYNQ
赛灵思的最新 Zynq UltraScale+ MPSoC 可提供一个用来运行 Xen 管理程序的强大平台。该器件具有一个四核 ARM® Cortex™-A53 处理器,并具有硬件虚拟化扩展和 64 位的 ARMv8 指令集。强大的硬件需要配以丰富的软件支持,以充分利用其功能和性能。开发新款 Zynq MPSoC 时,赛灵思对各行业的主要客户进行了调研,包括航空航天与军用、医疗、电信和汽车行业。结论是:大部分客户都希望新型器件提供管理程序,其中一半希望是开源管理程序。赛灵思选择 Xen 作为开源管理程序,并选择 DornerWorks 为新的 Xen Zynq 提供支持服务。
Xen 管理程序在虚拟机中托管客户操作系统,为它们提供底层机器的虚拟化视图。然后,客户操作系统及其应用程序使用虚拟化的 CPU、存储器和 I/O,同时由 Xen 管理如何将虚拟化资源映射到物理资源。
在 Xen 中,每个虚拟机都被称为一个域。为了使管理程序内核尽可能小,Xen 会给一个域赋予特权。这个系统域称为 dom0。该域启动其他客户域(每个客户域称为 domU),配置由内核强制执行的调度和存储器映射,以及管理 I/O 访问权限。为了更详细说明,我们考虑一下管理程序环境的的几个视图:启动顺序、ARM 异常级别、运行调度和资源管理。
从加电开始,可通过多种方式配置新型 Zynq MPSoC 上的启动顺序,包括哪个处理器(Cortex-A53 或 Cortex-R5)先启动。在大多数用例中,两个处理器都相当独立,因此,标准 Xen Zynq 管理程序版本只运行在 Cortex-A53 上。图 1 给出了一个典型的启动顺序。如果Cortex-R5 用来托管独立的非虚拟化的安全操作系统,那么它通常从简单的第一阶段引导加载程序(FSBL) 中首先启动。R5 启动后,接下来接着启动 A53,并从其自身的 FSBL 开始。第二阶段引导加载程序(例如 U-Boot),通常用来提供更多的启动功能,可能包括管理程序内核镜像的完整性检查。
图 1 – 典型启动顺序显示直到客户操作系统运行为止的各个阶段。
在这个阶段,Xen 管理程序内核被调用。内核启动包括检查有效的 dom0。接下来,dom0 检查客户域的有效镜像,然后在一个或多个内核上启动和调度它们。大多数情况下,dom0 会继续运行,以便监控系统,提供对共享资源的管理,并处理特性系统故障。管理程序内核在每个域上下文切换期间运行,也通过超级调用来调用。超级调用与系统调用类似,后者允许应用程序调用操作系统服务,而这里则是调用管理程序服务。默认方式下,dom0 可进行任何管理程序调用,而 domU 只能做特定的管理程序调用。不过,开发人员可以使用 Xen 模块 XSM-FLASK 对超级调用访问实现更为精细的控制。处理器硬件强制执行由 ARM 异常级别模型定义的分类特权。Cortex-A53 使用 ARMv8 架构,该架构定义四个异常级别,如图 2 所示,图中最底部的级别具有最高特权,随着级别上升特权降低。完整访问特权在异常级别 EL3 赋予,用于实现 ARM Trust Zone 监控。管理程序在 EL2 级上运行,以实现客户域的虚拟化。在每个被托管的虚拟机中,托管的操作系统运行在 EL1 级上。最后,用户应用程序在EL0 级以最低权限运行。当变为权限较低的异常级别时,虚拟机寄存器必须具有相同宽度或者更窄。这意味着你可以使用 64 位管理程序和 32 位的客户机,但不能颠倒。Xen Zynq 使用 ARMv8 架构的 AArch64 执行模型,从而支持 64 位或 32 位客户机。
图 2 – ARM 异常级别图显示了映射到 EL2 的管理程序。
特权域 dom0 建立调度,以决定各域何时运行以及在哪个或哪些内核上运行。然后,管理程序内核执行配置后的调度计划。为达到某种类型的确定性,应配置一个调度计划,使客户域在它的时隙内对机器具有唯一访问权。图 3 给出的实例中,客户机 1(与 dom0 一起)在单个时隙内运行在多个内核上,而客户机 2 和 3 则没有这个限制,因此可以在其他时隙内以混合匹配的负载平衡计划对它们进行调度。
图 3–多核调度程序将客户机 1 放在专有时隙中,并将客户机 2 和 3 混合。
管理程序管理所有机器资源。CPU 内核主要进行分时管理,如上所述。 管理程序使用硬件定时器执行调度。存储器不是通过分时进行共享,而是分空间共享,把存储器的一部分分配给每个客户域。管理程序使用硬件存储器管理单元 (MMU) 来实施存储器布局。I/O 的管理差异很大,取决于器件的类型。有些 I/O 器件可被直接映射到 Cortex-A53,而其他 I/O 器件必须配置后才能连通 FPGA可编程架构。
客户机对 I/O 器件的访问由 dom0 进行配置和管理,利用对 Xen 内核进行合适的超级调用来建立指向器件的存储器映射。Dom0 可授权客户域访问所需的特定 I/O 器件,也可能自己管理共享 I/O,起到网关的作用以实现共享机制。Xen 中的域间通信(包括 I/O)通常使用 Xen 事件通道进行通知,使用共享存储器来传送数据。Xen 共享 I/O 器件驱动程序采用分离驱动模式,客户域中的上一半驱动程序将 API 提供至客户操作系统,将用来往返传送数据的功能提供至dom0。然后,dom0 中的下一半驱动程序执行器件的实际 I/O 操作。
建立对 XEN ZYNQ 的支持
赛灵思针对备受期待的下一代 Zynq SoC 器件搜集的客户反馈显示,很多客户期望有强大的管理程序支持,其中一半想要开源选择。这种支持不能停留在简单的服务台模式上,而是要具备更多支持选项,以帮助设计可平衡各种需求(例如高带宽、低延迟、低功耗、高可靠性)的嵌入式系统,而且能连接到嵌入式环境中的多种系统设备。赛灵思之所以选择 DornerWorks,是因为我们具备 Xen 管理程序方面的专业技术以及嵌入式工程设计经验,而且我们是赛灵思联盟计划的高级成员,能为客户提供更多支持选择,为他们系统中的 FPGA 设计部分提供支持。
DornerWorks 与赛灵思协作完成了Xen 与新的 Zynq MPSoC 的端口,然后通过认证和验证测试来确认正确性。我们的测试不仅涵盖 Xen 管理程序内核在硬件上正确运行,还包括特权域 dom0(运行 Linux)以及具有多种客户操作系统支持的客户域。我们将这个软件包命名为 Xen Zynq Distribution。
开发实际硬件之前,我们要进行附加测试。我们的硬件替代模型为 QEMU 开源机器仿真软件,可运行在 x86 开发人员系统上进行独立的调试与测试,或者运行在我们团队的构建服务器上进行连续集成测试。 此外,我们还使用仿真板 Remus(不要与同名的 Xen 动态迁移工具混淆)进行开发,该仿真板使用六个赛灵思 Virtex®-7 FPGA 来仿真 Zynq MPSoC。
图 4 给出了我们的连续集成方案,以构建与测试服务器为核心。服务器会定期查询源代码库。如果检测到任何变化,服务器会对构建映像的相关部分执行增量编译。然后,它将每个测试所需的映像加载到目标机群的每个器件上,并调用测试脚本。有些测试情况下,需要对目标机群应用外部刺激。测试服务器收集并核对结果,然后通过总结面板给出测试套件的总体健康度视图或者指出哪里有需要解决的问题。
图 4–连续集成法自动进行 Xen Zynq 的构建与测试。
DornerWorks 还开发了相应的基础架构,以为赛灵思客户提供全面支持,方便他们在新的 Zynq MPSoC 上使用 Xen 管理程序。基本支持由开源社区积极分子推动,用户可交换意见和共享信息。DornerWorks 会主持论坛并从社区收集问题。我们将 Jira 作为跟踪工具,用以追踪赛灵思发现的问题、内部检测的问题以及客户(通过社区或付费订阅)发现的问题。为了维持 Xen 工作,我们还提供付费订阅和定制设计支持服务,即应很多客户要求提供关键业务的合同式支持,以降低客户业务风险和确保对客户需求的及时响应。您可登陆以下网址,了解支持选项的更多详情: http:// http://xen.world 。
亲自测试 XEN
新的 Zynq MPSoC 器件明年初出货,您在等待过程中可首先了解 Xen。Xen 在普通 x86 PC 上运行,既可作为 1 类管理程序本地运行,也可托管在基于 Windows 的 VirtualBox 的内部。要尝试嵌入式 Xen,你需要仿真的或实际的 ARM 硬件。选择一个具有虚拟化扩展的 ARM 处理器,最理想的是 Cortex-A53,但其他处理器,例如 Cortex-A15 也能提供颇具代表性的环境。图 5 描述了构建针对嵌入式目标的完整管理程序系统的工作流程。
图 5–Xen 开发工作流程
您可在网址
http://www.xenproject.org/ 中找到 Xen,并了解如何构建作为 dom0 的 Linux 映像以及构建多种客户操作系统映像。
DornerWorks 已经发布了针对最新器件 Zynq MPSoC 的 Xen Zynq Distribution, 并在我们的网站上提供下载:
http://dornerworks.com/services/XilinxXen 。只需添加客户操作系统映像,就可拥有自己的嵌入式虚拟化系统。
本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念
本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“
课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了
@2003-2020 中国电子顶级开发网