嵌入式虚拟化为实现多核处理能力的优势提供了一种可扩展的机制。嵌入式应用中的虚拟化与其企业和桌面应用有许多共同之处。独特的嵌入式使用案例和专业的底层技术为嵌入式开发人员提供了优化性能和响应设计的新机会。

  在台式机、数据中心以及现在的嵌入式设计中采用多核技术可以满足类似的需求——在不提高系统时钟的情况下扩展计算能力,并为下一代设备和应用实现更高的每瓦MIPS。

  台式机和数据中心的主流多核需要部署的操作系统(OS)提供对称多处理(SMP)支持。Linux内核支持SMP已经快十年了,支持SMP的Windows和Mac OS版本如今也在广泛使用。

  相比之下,在嵌入式开发中,嵌入式操作系统正试图赶上支持多核CPU。即使操作系统越来越擅长在多核环境中运行,应用程序和中间件仍然面临线程安全、并发性和负载平衡的挑战。

  虚拟化软件架构

  为了解决这些挑战,出现了不同的虚拟化策略,从类型I和类型II开始,如图1所示。在第一类虚拟化中,虚拟机管理程序“拥有”CPU,并负责引导和运行客户操作系统。I型平台是“精益的”, 我的意思是,“成熟,从大型机和小型机的几代发展中出现,现在是移动设备。相比之下,VMware Fusion、Parallels和Sun VirtualBox等平台提供的第二类虚拟化侧重于最终用户体验,虚拟机管理程序作为应用程序在另一个操作系统上运行,没有性能保证。

  

  嵌入式虚拟化遵循自己的范例。在路由器、交换机和网关等基础设施应用中,用例类似于企业。I类虚拟机管理程序托管Linux或实时操作系统(RTOS)的实例,以在冗余高可用性架构中的单个硬件或虚拟备件上支持虚拟设备(防火墙、深度包检查器和其他设备)。

  在移动设备中,原始设备制造商使用裸机虚拟化来整合多个CPU,以便在单个CPU上运行基带、多媒体和应用堆栈以及各种操作系统(一个或多个虚拟机中运行Android或Linux,另一个虚拟机中运行RTOS ),从而节省材料成本。

  走向多核

  在嵌入式开发中,除了硬件整合之外,虚拟化还提供了一种在单个处理器的多个内核之间分配现有负载的良好机制。嵌入式操作系统架构师倾向于将多核芯片视为离散CPU的集合。大多数传统RTOS多核支持反映了这一观点,要求操作系统和堆栈的唯一副本在独立的内核上以准合作方式运行。

  随着RTOS供应商开始创造他们产品的多核版本,他们经常使用多核芯片中内核负载的静态映射。一些嵌入式虚拟化平台需要静态分配虚拟机管理程序及其托管和运行的负载

  物理芯片到虚拟化负载的静态映射效率低下,无法提供虚拟化带来的优势。在嵌入式开发中,更有效的方法是为每个操作系统配置一个虚拟CPU,该虚拟CPU可以映射到单个CPU(一对一),共享一个CPU(多对一),或者分布在多个内核上(一对多)。

  负载平衡

  今天的联网设备——手机、机顶盒、车载系统、网络设备和几乎任何类型的智能设备——都是应用程序平台,其负载像台式计算机、数据中心刀片和服务器一样复杂多样。多核CPU承诺现代嵌入式软件的高吞吐量和敏捷响应,但预测负载和内核利用率超过了集成不同来源软件的过程,特别是来自应用商店的软件。

  虚拟化为嵌入式开发人员和集成商提供了优化设备性能的额外工具。嵌入式管理程序可以监控客户操作系统和主机策略软件的负载,从而相应地分配CPU周期和其他资源。

  

  多核电源管理

  多核系统可能会给针对单核系统优化的电源管理方案带来巨大挑战。特别是,许多多核片上系统(SOC)对动态电压和频率缩放(DVFS)的范围和能力有限制:

  l SoC子系统和多核CPU通常共享电源电压、时钟、缓存和其他资源,这意味着DVFS适用于所有内核。

  l 一个SoC子系统上的缩放电压(如果可能)会限制通过本地总线与其他子系统的通信,并拒绝访问共享内存,包括子系统自己的DRAM。

  l 单个SoC子系统的时钟缩放限制了互操作性,尤其是对于同步总线。

  l 有些操作完全使用内核或根本不使用内核,但其他操作会施加不同的负载。全有或全无的使用很容易管理,但多核上的动态负载会带来更大的电源管理挑战。

  现在添加多个操作系统。在嵌入式开发中,高级操作系统通常包括DVFS电源管理,如Linux高级电源管理和动态电源管理,以及Windows/BIOS高级配置和电源接口。大多数RTOS避免限制实时响应的操作,当它们提供明确的电源管理API时,如vxLib的vxPowerDown(),它们缺乏电源管理策略。即使一个操作系统能够管理其自身域中的电源,它也不会意识到同一系统中其他操作系统的能力和状态。

  DVFS通过降低电压和时钟频率来提高能效。支持DVFS的CPU在固定的电压和频率下提供安全的工作点。

  DVFS的逻辑扩展是将电压降至0 VDC,并通过仅利用两个操作点(全停和全节流)停止CPU时钟,这两个操作点适用于所有可用内核。这个巧妙的技巧只有在虚拟CPU(参见图3和图4)的情况下才有可能将负载映射到物理芯片,并在CPU内核之间透明地迁移运行负载。关闭整个内核比DVFS更容易管理,并导致线性的、高度可预测的性能-能量权衡。

  

  多核基带

  随着高带宽4G网络(尤其是LTE)的出现,移动设备需要将更多处理能力用于无线数据通信。在嵌入式开发中,为了通过更高的并发性来提高吞吐量,新出现的需求要求将整个内核专用于4G I/O操作。这一要求使得无线芯片组厂商和传统的RTOS供应商争先恐后地为SMP操作重组基带操作系统和软件堆栈。

  更简单的解决方案是使用移动/嵌入式虚拟化来提高4G吞吐量。虚拟机管理程序可以根据需要将可用内核映射到输入或输出操作,并缩减映射以支持其他CPU密集型操作或执行每内核电源管理,而不是将两个、四个或更多内核专用于基带处理。

  只有虚拟化可以扩展

  多核软件设计比看起来更复杂也更简单。系统架构师应该抵制诱惑,不要将传统软件元素大规模分配给下一代嵌入式芯片上的可用内核。

  处理器路线图表明可用处理器内核将进一步倍增:如今嵌入式CPU的内核数将增加2倍,很快将增加4倍、8倍甚至更多。这种芯片过剩将很快超过供应和管理多核软件负载的静态方法。

  在嵌入式开发中,只有嵌入式/移动虚拟化能够提供可扩展且灵活的机制来实现多核处理能力的优势,并简化系统设计、集成和部署,同时使这些系统更加可靠和安全。

嵌入式开发:通过嵌入式虚相关推荐

  1. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远程 ...

  2. c语言嵌入式开发单片机,嵌入式开发|单片机基础

    嵌入式开发它是一个综合的技能学习,既要去学习基本的Linux编程,又要学习物理机的操作使用,要想学习嵌入式的开发,在前面的文章中已经是跟大家说过了,嵌入式开发的学习需要掌握的基础课程还是比较多的,单片 ...

  3. rust做嵌入式开发_Rust 嵌入式开发 STM32 amp; RISC-V

    Rust 嵌入式开发 STM32 & RISC-V 发布于 2020-04-03 11:07:06 本帖最后由 wuhanstudio 于 2020-4-3 11:58 编辑 更新地址: [m ...

  4. 【嵌入式开发】嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11)

    作者 : 万境绝尘 博客地址 : http://blog.csdn.net/shulianghan/article/details/42254237 一. 相关工具下载 嵌入式开发工具包 : -- 下 ...

  5. 嵌入式开发工具——嵌入式Qt连接mysql

    文章目录 前言 一.编译Qt中自带的mysql源码 二.程序测试 前言 上一篇(嵌入式开发工具--交叉编译libmysql)已经完成了mysql的C API交叉编译的工作,今天将用它来编译生成Qt连接 ...

  6. 嵌入式开发:嵌入式基础——’ ’和” ”的区别

    嵌入式软件开发人员通常与低级传感器交互,并且对如何使用有符号和无符号类型有很好的理解,但是当涉及到字符串和字符类型时,许多嵌入式开发人员很容易感到困惑.例如,在定义中使用'v'和"v &qu ...

  7. 嵌入式开发:嵌入式 Linux – Shell 脚本 101

    Android和Linux操作系统在过去几年变得非常流行.由于它们的开源性质,成本是合理的,值得庆幸的是,大量的工程师已经加入到将这些操作系统移植到几乎所有可以想象的平台的努力中来.它们的广泛使用使得 ...

  8. Tomcat 嵌入式开发 (二) 嵌入式启动 Tomcat

    简介 本文使用最新的Tomcat9.0.29版本进行开发,也是借鉴了网上一些Tomcat8/7版本的嵌入式开发代码(资料好少,得自己慢慢踩坑) 下载Tomcat嵌入式开发jar包 打开Tomcat9下 ...

  9. 嵌入式系统需求分析_嵌入式开发流程是什么?

    嵌入式开发流程 当前,嵌入式开发已经逐步规范化,在遵循一般工程开发流程的基础上,嵌入式开发有其自身的一些特点.主要包括系统需求分析(要求有严格规范的技术要求).体系结构设计.软硬件及机械系统设计.系统 ...

  10. 基于c语言的linux嵌入式开发入门

    前言 本文主要包含,c语言基本结构与语法.make及makefile的使用.main函数参数与返回值的说明.标准输入.输出.错误流的介绍以及linux管道的应用. 语言数据类型 联合体也有翻译为共用体 ...

最新文章

  1. shell脚本自动记录登陆后 的IP地址和历史记录
  2. linux下的zz命令,linux中cut命令的用法
  3. python安装了运行不了_python详细安装教程
  4. python注释_Python的注释用法
  5. soap php 分开类,PHP SoapClient类型映射的行为有所不同
  6. alert点击完确定关闭浏览器窗口_关务实操技巧:单一窗口缓存4大清理方法,解决部分退单问题...
  7. 蚂蚁金服 3 个项目进入 CNCF 云原生全景图 | 开源
  8. ACMMM 2021《LSG》性能SOTA!用GNN和GAN的方式来强化Video Captioning的学习!
  9. 最全面的推荐系统评估方法介绍
  10. 基于稀疏大规模矩阵的多目标进化算法简介
  11. 1433抓鸡的原理详解以及防范
  12. uploadify组件文件上传那些事
  13. oracle怎么查询关键字,Oracle 搜索关键字
  14. 使用VGA实现移动方块
  15. 两个比较好的ooc(面向对象c语言编程)库
  16. PDF文件如何加密?分享两种好用方法
  17. centos7.9使用gn+ninja编译程序
  18. 阿里云HaaS100物联网开发板学习笔记(三)轻应用初步--用js让小灯闪烁起来
  19. 计算机一级vlookup函数的使用方法,Vlookup函数的使用方法 Vlookup函数的操作实例...
  20. unable to access ‘https://github.com/XXX.git/‘: LibreSSL SSL_read: error:02FFF03C:system library:fun

热门文章

  1. 清北学堂北京大学冯哲神仙讲课day2
  2. 选择vray Next for SketchUp创建具启发性的、逼真的渲染的8大理由!
  3. UnauthorizedAccessException:Access to the path “/xx/xx.xx“ is denied
  4. UltraEdit 快捷键(UE 快捷键)
  5. c# 面试题及部分答案
  6. 洛谷千题复习计划(一)(Codeforces + AtCoder)
  7. 英语句子成分分析(一)
  8. 基于 Vuepress 搭建个人博客,文章详细,助你快速上手
  9. OFD转PDF ~java实现
  10. CiteSpace学习笔记