0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对ARM虚拟化下设备直通的支持进行介绍

安芯教育科技 来源:极术专栏Arm服务器 2023-04-28 15:31 次阅读

随着云计算领域里,ARM架构处理器的广泛使用,应用开发人员熟悉ARM架构相关技术的需求越来越迫切。众所周知,提供虚拟机服务是云计算的典型应用场景,而虚拟机里设备性能的优劣对服务质量至关重要。

提到虚拟机里的设备,就不得不提及设备的虚拟化,最初虚拟机里的设备完全是依靠软件模拟来实现,也叫全虚拟化设备,这样的好处是运行在物理机里的OS可以完全不需要修改就能在虚拟机里运行,但设备性能很差,满足不了人们的需求。

后来,有人提出了半虚拟化的思想,寄希望于软件的优化,比如修改设备模型,减少不必要的内存拷贝,来满足大家对设备的性能需求。典型代表virtio设备。此法使性能虽有较大提升,但与真实的设备仍有较大差距。为了获取等同于真实设备的性能,设备直通的方式被提了出来,也渐渐成为主流方式。

虚拟机里使用直通的设备,的确可以带来最大的性能提升。但是却暴漏出一系列的系统安全问题。比如提供DMA的设备通常可以写内存的任意页,因此虚拟机里的Guest OS拥有创建DMA的能力就等同于用户空间拥有了root权限,恶意的设备可能利用此发动DMA攻击,给其他虚拟机乃至整个物理机带来安全问题。

因此,需要提供DMA重映射功能,通过页表方式将直通设备对内存的访问限制到特定的域中,在提高IO性能的同时完成了直通设备的隔离,保证了直通设备DMA的安全性。此外,直通设备的中断默认是发给物理CPU的,要想通知到虚拟机里的vCPU,就需要中断的重定向。

DMA重映射跟中断重定向的实现,最初是完全交由虚拟机监控器(Hypervisor)或模拟器(比如qemu)来负责。这是一种纯软件的思路,必然大大降低设备的性能,因此急需硬件的参与配合。为此,ARM的SMMU和GIC规范顺势添加了对DMA重映射跟中断重定向的支持。本文的重点便是围绕这两大特性介绍如何支持虚拟化环境下的设备直通。

一、DMA重映射

SMMU是System MMU的缩写,是ARM架构下一种对非CPU设备提供地址翻译服务的组件,功能类似于CPU的MMU组件。这里非CPU设备主要指发起DMA操作的外围子系统。如下图所示:

10fd7ffa-e593-11ed-ab56-dac502259ad0.png

注:PE为Processing Element 的缩写,可理解为CPU。

在虚拟化应用场景下,地址翻译往往分为两个阶段。阶段一是虚拟地址(VA)到GuestOS认为的物理地址(IPA)间的转换;阶段二为IPA到真实物理地址(PA)间的转换。而SMMU既可以同时支持两个阶段的转换,也可以单独支持每个阶段的转换。这为直通设备DMA重映射提供了可能。直通设备的DMA只需要获取IPA,之后的工作便交由SMMU来做阶段二的处理,以达到安全高效的访问PA的目的。如下图所示:

11179bc4-e593-11ed-ab56-dac502259ad0.png

针对以上应用场景,我们介绍SMMU的内部结构来阐述具体实现原理。SMMU含有两个核心单元,分别为翻译控制单元TCU和翻译缓冲单元TBU。其中TCU主要含有Stream Mapping Table(SMT)和Context Bank Table(CBT)。SMT通过StreamID来索引内部的Entry,StreamID跟具体直通设备一一对应, 从而获取到指向CBT具体Entry的指针。

CBT的Entry内容则含有阶段二翻译表的指针,当获取到此指针后,翻译过程即可像普通MMU一样按部就班的进行下去。而TBU的作用等同于TLB,借助Cache原理,加快SMMU工作效率,不再赘述。以上描述过程总结为如下框图所示:

112a1236-e593-11ed-ab56-dac502259ad0.png

二、中断重定向

GIC是Generic Interrupt Controller的缩写。GIC的主要作用是路由各种不同的中断信息给CPU。虚拟化环境下的中断处理情形要复杂的多,有些因指令trap产生的中断需要Hypervisor本身来处理;有些是分配给某个虚拟机的直通设备产生的中断则需要虚拟机内的软件来处理;也有中断被接收时,对标的虚拟机没有处于运行状态的情况。这需要GIC提供机制,重定向中断以满足上述复杂的需求。

由于本文的重点是对直通设备虚拟化支持的讲解,因此此部分将介绍GIC是如何支持直通设备中断重映射的,并不会剖析GIC内部组成及实现原理。我们以GICv3为例,图示如下:

1141741c-e593-11ed-ab56-dac502259ad0.png

配以如下步骤说明:

1 直通设备发起的中断IRQ到达GIC;

2 GIC发物理的IRQ到CPU;

3 Hypervisor会从Physical CPU Interface读取中断信息;

4 Hypervisor发现此中断是某虚拟机内的直通设备触发,于是通过写GIC List Register重新注入一个虚拟IRQ到GIC中;

5 GIC产生vIRQ中断并发给vCPU;

6 最终vCPU接收vIRQ中断并由运行其上的GuestOS接管并通过跟Virtual CPU interface交互处理后续中断任务。

至此,一个完整的中断重映射过程结束。

在GIC参与直通设备的中断重映射后,虚拟机在处理中断效率上有了明显提升,但是跟Host主机上普通物理中断相比,总是多了一步由软件Hypervisor参与的动作。因此,我们称以上方式为间接注入中断的方式。为了进一步提高处理中断的效率,GICv4引入了直接注入中断方式。

具体原理则是直通设备在获取中断时,GIC会将分配给设备的物理中断与虚拟中断做一个映射。这样当设备触发中断时,GIC会直接发信号给vCPU。有这样一种情况,设备触发中断时vCPU没有运行,即虚拟机处于休眠态,如果直接发vIRQ给vCPU是得不到响应的,这时候会产生一个物理的door-bell中断来代替,此中断交由Hypervisor处理,它会重新调度vCPU,从而使中断得到及时响应。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM处理器
    +关注

    关注

    6

    文章

    360

    浏览量

    41572
  • dma
    dma
    +关注

    关注

    3

    文章

    552

    浏览量

    100083
  • 模拟器
    +关注

    关注

    2

    文章

    857

    浏览量

    43039
  • 虚拟机
    +关注

    关注

    1

    文章

    894

    浏览量

    27893

原文标题:Arm对虚拟化下设备直通的支持

文章出处:【微信号:Ithingedu,微信公众号:安芯教育科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    探讨一下ARM处理器平台的虚拟

    arm新增加的virtualization extension之前,我们知道对硬件虚拟支持主要有intel的VT-x和AMD的AMD-V,它们两个十分类似,所以这里我们只
    发表于 04-14 10:00

    ARM虚拟技术是什么?如何去实现呢

    主流的操作系统都有一个假设,就是这个系统有一个特权模式之下的OS,之上在跑多个非特权模式的APP;而ARM虚拟技术就是在同一个系统上共存多个操作系统,实现这种虚拟技术需要硬件的扩展
    发表于 05-09 09:55

    对硬件虚拟及其相关逻辑进行罗列与理解

    2的地址转换。与上述类似,两级地址转换也会基于具体场景需求进行Bypass处理。PCIe SR-IOVPCIe Endpoint通过SR-IOV支持设备虚拟
    发表于 07-04 15:48

    【学习打卡】OpenHarmony的设备虚拟技术介绍

    在特定设备上运行。如果你想添加额外的设备,那这个想法实现的成本很高。那么通过设备虚拟,允许最终用户自由使用他们想要的任何
    发表于 07-19 17:47

    介绍arm GICv3和timer虚拟支持

    比较少的用户空间设备模拟的支持。2.相关工作在arm上,第一个利用arm虚拟扩展的hyperv
    发表于 10-11 14:58

    设备仿真模拟软件 QEMU 8.0 发布:改进对 ARM / RISC-V 架构支持

    转自https://m.ithome.com/html/690345.htm 开源 QEMU 8.0 设备仿真器和虚拟软件已于 4 月 19 日发布,为 ARM、RISC-V、x86
    发表于 05-05 09:48

    Arm通用中断控制器GICv3和GICv4对虚拟支持

    本指南描述了GICv3和GICv4体系结构中对虚拟支持。它涵盖了管理程序可用于生成和管理虚拟中断的控件。指南是对于任何需要了解中断控制器功能的人来说编写软件来管理
    发表于 08-02 10:43

    Arm虚拟硬件用户指南

    介绍了用于调试在虚拟设备上运行的程序的AVH功能。 •通过API使用AVH说明如何通过API编程使用Arm虚拟硬件。 •提示和故障排除一章包含有用的提示,有助于解决常见问题。
    发表于 08-08 07:45

    基于ARM虚拟安全防护技术

    近几年来,随着移动平台用户量的增加,移动平台安全成为安全领域关注的焦点.而ARM虚拟扩展,使得如何基于虚拟技术
    发表于 12-26 18:15 0次下载
    基于<b class='flag-5'>ARM</b><b class='flag-5'>虚拟</b><b class='flag-5'>化</b>安全防护技术

    如何使用Proteus进行ARM虚拟开发

    随着现代计算机技术的迅速发展,使用EDA软件进行的电路设计与仿真已经成为现代电子技术系统设计的必然趋势,文章介绍了Proleus 软件的功能和特点,并结合具体的例子说明如何用Proeus 实现ARM
    发表于 06-26 14:32 0次下载
    如何使用Proteus<b class='flag-5'>进行</b><b class='flag-5'>ARM</b>的<b class='flag-5'>虚拟</b>开发

    ARM虚拟下设备直通支持

    随着云计算领域里,ARM架构处理器的广泛使用,应用开发人员熟悉ARM架构相关技术的需求越来越迫切。众所周知,提供虚拟机服务是云计算的典型应用场景,而虚拟机里
    的头像 发表于 09-26 10:19 3705次阅读
    <b class='flag-5'>ARM</b>对<b class='flag-5'>虚拟</b><b class='flag-5'>化</b><b class='flag-5'>下设备</b><b class='flag-5'>直通</b>的<b class='flag-5'>支持</b>

    Arm虚拟下设备直通支持

    虚拟机里使用直通设备,的确可以带来最大的性能提升。但是却暴漏出一系列的系统安全问题。比如提供DMA的设备通常可以写内存的任意页,因此虚拟
    的头像 发表于 04-28 15:30 1144次阅读
    <b class='flag-5'>Arm</b>对<b class='flag-5'>虚拟</b><b class='flag-5'>化</b><b class='flag-5'>下设备</b><b class='flag-5'>直通</b>的<b class='flag-5'>支持</b>

    VFIO设备直通原理

    设备直通虚拟机能够极大提升虚拟机对物理设备访问的性能
    的头像 发表于 06-07 17:40 2342次阅读

    arm架构的虚拟是什么

    为了支持虚拟,Armv8-A支持两步地址转换,也就是文档常提到的Stage2translation。Stage2转换允许hypervisor控制
    发表于 08-07 14:14 1830次阅读
    <b class='flag-5'>arm</b>架构的<b class='flag-5'>虚拟</b><b class='flag-5'>化</b>是什么

    下设备智能远程控制方案

    下设备的智能远程控制是指通过网络技术和传感器设备,实现对井下设备进行数据监测、故障诊断和远程控制操作的方法。目前,随着物联网技术的发展,井下设备
    的头像 发表于 10-30 17:29 748次阅读