1 GRUB简介
1.1 MBR和PBR
MBR分为GRUB.MBR和DOS.MBR。

由于硬盘上扇区从偏移0到偏移62属于同一个磁道0,虽然DOS.MBR仅占用一个扇区,但是需要将DOS.MBR后面的偏移1到偏移62保留,所以磁盘上第一个分区的第一个扇区是从偏移63开始的。fbinst软件会保留1-16064扇区,等于硬盘1个柱面的大小255 x 63 x 512 = 8MB,所以第一个分区是从扇区16065开始的。

USB-ZIP和USB-FDD会将U盘的第一个扇区格式化成DOS.PBR而不是DOS.MBR。
USB-FDD和USB-ZIP的来历:软盘的容量小,没有分区结构,所以软盘是没有MBR的,整个软盘只有一个分区,第一个扇区就是PBR;FDD和ZIP模式在DOS下启动后U盘的盘符是A。

1.2 GRUB
- GRUB又叫OS Loader;在Android系统上,kernelflinger是OS Loader的一个EFI应用
- GRUB镜像组成:GRUB.MBR(boot.img), 硬盘扇区offset 1 到offset 62放置GRUB的core.img,/boot分区的boot/grub/grub.cfg

1.3 创建USB-FDD或者USB-ZIP格式U盘步骤
1)Android上:dd if=/dev/zero of=/dev/block/sda bs=512 count=4
2)Windows上:快速格式化该U盘,这个U盘就只有PBR扇区而没有MBR扇区

2 IOMMU
2.1 ARM SMMU
iommus = <&apps_smmu 0x300 0>:中间的数字0x300就是设备的Stream ID,执行DMA请求时,SMMU根据Stream ID找到设备在DDR中的STE(Stream Table Entry)。PCI的Stream ID等于BDF号。
SSID:Substream ID。ste.S1CDMax为0表示STE只支持一个CD(Context Descriptor),不需要使用SSID,如果S1CDMax不为0,那么支持的CD数目是2 ^ S1CDMax。当往STE中写入S1DSS = SSID0时就禁止了SSID功能。
TBU: Translation Buffer Unit for TLB
TCU: Translation Control Unit for Page Table Walks

2.2 x86 IOMMU
When a PCI device is assigned, KVM/QEMU call intel_iommu_page_mapping() to build VT­-d DTE (Device Table Entry) to map the entire guest memory.

Kernel parameter intel_iommu=pt to set up pass through mode in context mapping entry. This disables DMAR in Linux kernel; but KVM still runs on VT-d and interrupt remapping still works.

In this mode, kernel uses swiotlb for DMA API functions but other VT-d functionalities are enabled for KVM. KVM always uses multi level translation page table in VT-d. By default, pass though mode is disabled in kernel.

1)在虚拟化场景下,直通设备的中断是无法直接投递到Guest中的,而是由IOMMU截获中断,先将其中断映射到host的某个中断上,然后再重定向(由VMM写VMCS寄存器中的32 bits VM-entry interruption-information字段)到Guest内部。
2)IOMMU IRTE(Interrupt Remapping Table Entry,128bit)中的Destination ID字段指明中断要投递的CPU的APIC ID信息,vector字段指明中断号,VMM会为每个中断源分配一个IRTE,并且把guest分配的vector号填入到IRTE的vector域。
3)在进入guest执行前,kvm是关中断的,在VM-Exit完全恢复了host上下文后,才开中断。关中断是在vcpu_enter_guest函数中调用了local_irq_disable,开中断是在这个函数从kvm_x86_ops->run返回后(即VM-Exit后)调用local_irq_enable。
4)guest vcpu执行时,物理中断发生,导致VM-Exit,但是此时是关中断的,所以硬件不会响应中断,中断处于pending,在开中断后,硬件发现pending中断并开始响应,此时已经在host上下文中,IDT(Interrupt Descriptor Table)已经指向host的IDT,物理中断由host handler来处理。

2.3 ARM SMMU showcase
Master IP - vGEN - SMMU (S1, DVA - IPA) - S2MPU (S2, IPA = PA) - DRAM
vGEN runs in EL2 Hypervisor.
SMMU runs in EL1 Linux.
S2MPU runs in EL2 Hypervisor.

3 QNX
3.1 hypervisor 配置文件
android.qvmconf

3.2 qvm process
1)qvm透传PCI/PCIe MMIO方法是使用mmap()将其BAR所指向的物理内存映射到自己的进程地址空间中,并注册到MMU EPT中,给其上的虚拟机使用(譬如Android)。
2)qvm进程中注册PCI/PCIe ISR,物理中断产生时,qvm将中断inject到vCPU(参考Linux QEMU vfio_msihandler)。
3)PCI/PCIe配置空间没有透传(参考QEMU VFIO quirk机制),所以Android虚拟机访问PCI/PCIe配置空间时,会进入qvm进程中,qvm使用QNX的API读写数据后,再VMEntry进入Android。
4)KVM arch/arm64/kvm/hyp/switch.c
kvm_vcpu_run_vhe()
vhe: Virtualization Host Extension

3.3 arm64 gpio interrupt pass through
qcom sa6155 gpio能够pass through的中断号只有8个,从241到248,这些中断号不是使用gpio_to_irq()转换而来的。

4 ACRN for x86
4.1 基本介绍
ACRN是Type I型hypervisor。hypervisor的软件功能和micro kernel OS的功能很是相似,所以需要将hypervisor中的设备模拟代码从hypervisor中独立出来放到Service OS中。

内存地址虚拟化采用MMU查找EPT表实现;DMA请求地址虚拟化则有IOMMU查找IOMMU page table实现(GPA->HPA)。

ACRN启动流程:UEFI -> GRUB (Multiboot,又叫OS Loader;占用GRUB.MBR、扇区偏移1到偏移62;扇区偏移63是硬盘第一个分区的DBR) -> ACRN (acrn.efi,GRUB的剩余部分占用的分区boot) -> Service OS -> User OS

4.2 工作流程
1)hypervisor VM-Exit
- Guest指令调用触发hypervisor trap
- acrn-hypervisor/hypervisor/common/hv_main.c,void vcpu_thread(struct sched_object *obj)
- acrn-hypervisor/hypervisor/arch/x86/guest/vmexit.c
- 如果是pass through(初始化虚拟机时,devicemodel需要将Guest OS使用的PCIe BDF号映射到hypervisor中的PCIe BDF号),那么直接路由到真实硬件;否则通过中断触发SOS中的vhm驱动
2)vhm
- vhm(Virtio and Hypervisor Monitor)驱动运行在Service OS(Clear Linux)中
- 分析是要vhm驱动处理还是devicemodel处理(适用于物理设备共享),如果需要devicemodel处理,就唤醒devicemodel APP
3)devicemodel - 类似于QEMU
- acrn-hypervisor/devicemodel
- 是一个二进制daemon,运行在Service OS(Clear Linux)中,模拟Guest OS中驱动访问的物理寄存器和中断等关联到的硬件。
- 驱动节点:/dev/acrn_vhm
- 处理完毕通过vhm调用hypercall API返回hypervisor
4)hypervisor VM-Entry
- acrn-hypervisor/hypervisor/common/hypercall.c
- 返回Guest OS对应指令

4.3 驱动模型
1)DE - Device Emulation
2)PV - Paravirtualization
3)PT - Pass Through for PCI/PCIe
PCI/PCIe configuration(0xCF8/CFC)使用devicemodel emulation;其它PCI/PCIe地址直接使用passthrough。
PCIe设备被passthrough后在虚拟机中的BDF号,不一定等于其物理BDF号。

4.4 ACRNTrace和ACRNLog
hcall_setup_sbuf()
@ hypervisor/debug/hypercall.c

Tracing and Logging high-level design
https://projectacrn.github.io/latest/developer-guides/hld/hld-trace-log.html

4.5 vm reboot命令的处理
acrn-hypervisor/devicemodel/arch/x86/pm.c
acrn-hypervisor/doc/developer-guides/hld/hld-security.rst
vm_set_suspend_mode(VM_SUSPEND_SYSTEM_RESET);

5 GPU虚拟化
5.1 x86_64
1) AMD SR-IOV
2) Intel GVT-g
Intel采用了Mediated Pass-Through(mdev),其实现比SR-IOV GPU简单,因为需要trap VM中的vGPU的MMIO访问,所以会有性能损失。

5.2 iMX8
iMX8有2个GPU GC7000。

5.3 Samsung 8nm EA9
Mali MP12: 12 clusters, is an integrated high-end graphics card, it was introduced in October 2017
Mali MP3: 3 clusters, is an integrated mid-range graphics card, it was introduced early 2018
Samsung EA9 includes 3 GPU, GPU00 (MP3, Gondul) and GPU01 (MP3) located in Linux, GPU1 (MP12, Norr) located in Android VM.

6 Abbreviations
AFE:USB PHY Analog Front-end
BDF:PCIe Bus:Dev:Func;格式为DDDD:bb:dd.f,其中DDDD表示PCIe domain,通常值为0000
CSE:Converged Security Engine,Intel融合安全引擎
DRHD:DMA Remapping Hardware Unit Definition
EPT:Extended Page Table
ESXi:Vmware Elastic Sky X integrated
GPA:Guest Physical Addresses
HECI:Host Embedded Controller Interface,Host OS和x86 ME的通信接口,只有4pin,分别是REQ#、GNT#、TX和RX,目的是为了代替SMBus
HVA:Host Virtual Addresses
HPA:Host Physical Addresses
GSI:Global System Interrupt。它为系统中每个中断源指定一个唯一的中断号;有3个IOAPIC:IOAPIC0~2。IOAPIC0有24个管脚,其GSI base为0,每个管脚的GSI=GSI base + pin,故IOAPIC0的GSI范围为[0~23]。IOAPIC1有16个管脚,GSI base为24,GSI范围为[24,39],依次类推。ACPI要求ISA的16个IRQ应该被identify map到GSI的[0,15]。IRQ和GSI在APIC系统中常常被混用,实际上对15以上的IRQ,它和GSI相等
KVM:Kernel-based Virtual Machine
MCP: Linux Master Compositor
P2SB:Primary to Sideband bridge
PXE:Preboot Execution Environment
Qemu:Quick EMUlator,读作kee moo
VMCS:x86 Virtual-Machine Control Structure

虚拟化平台主流hypervisor工作原理分析相关推荐

  1. 【高通SDM660平台 Android 10.0】(19) --- Camera_focus、Camera_snapshot、volume_up 按键工作原理分析

    [高通SDM660平台 Android 10.0]19 --- Camera_focus.Camera_snapshot.volume_up 按键工作原理分析 一. DTS代码配置 二. Kernel ...

  2. RxJs map operator 工作原理分析

    使用一个例子来研究 map 操作符的工作原理. 推荐阅读本文之前,先浏览这篇文章RxJs fromEvent 工作原理分析以了解相关知识. 源代码: import { Component, OnIni ...

  3. Hadoop生态圈-Zookeeper的工作原理分析

    Hadoop生态圈-Zookeeper的工作原理分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   无论是是Kafka集群,还是producer和consumer都依赖于Zoo ...

  4. 原理剖析(第 009 篇)ReentrantReadWriteLock工作原理分析

    2019独角兽企业重金招聘Python工程师标准>>> 原理剖析(第 009 篇)ReentrantReadWriteLock工作原理分析 一.大致介绍 1.在前面章节了解了AQS和 ...

  5. 匿名突破网络限制 (Tor工作原理分析)

    转载自:http://blog.163.com/mike_gz/blog/static/247532200672932800/ 网管顾名思义,就是天天管着网络.想尽各种手段限制我们上网的人.在网络中订 ...

  6. 滑环的基本结构及工作原理分析

    滑环是工业机械部件,基本原理是利用导电机械部件的折动或滚动在接触旋转部件和静止部件之间传递电能或电信号的产业部部件,作为360度旋转方式的一个相当好的解决方法,那么,下面一起了解下滑环的基本结构及工作 ...

  7. 二极管温度补偿电路工作原理分析

    众所周知,PN结导通后有一个约为0.6V(指硅材料PN结)的压降,同时PN结还有一个与温度相关的特性:PN结导通后的压降基本不变,但不是不变,PN结两端的压降随温度升高而略有下降,温度愈高其下降的量愈 ...

  8. 船型开关工作原理分析

    船型开关工作原理分析 由于疫情,这几个月一直无聊的待在家里,就把家里翻出来的旧电热锅简单的修理了一下,关于电热锅的修理博客之后有时间再写吧,这次就总结下在修过程中让我一直很头疼的船型开关的工作原理. ...

  9. 全自动升降柱工作原理分析

    全自动升降柱工作原理分析 全自动升降柱使用范围比较广泛,在城市交通安全中提供非常便捷的交通舒缓措施,可控制车辆行驶确保安全,全自动升降柱外观设计精美, 具有高的防撞击效果,当电动升降柱升起可在地面形成 ...

最新文章

  1. php数据库缓存类,常见php数据文件缓存类汇总
  2. response细节点
  3. 【HDU - 4784】Dinner Coming Soon(记忆化搜索bfs,dp)
  4. 终于有人将进程间通信讲明白了
  5. 步进电机五根线怎么接_步进驱动和伺服驱动的区别
  6. GdiPlus[47]: IGPMatrix 矩阵(二)
  7. 【面试篇】Java多线程并发-Java中的CAS机制算法
  8. logstash增量读取mysql中的数据到es中
  9. 【独立小程序商城】THINKPHP带后台管理+MYSQL数据库微信小程序商城系统源码
  10. 基于JAVA教务排课系统计算机毕业设计源码+数据库+lw文档+系统+部署
  11. Scratch实现打字游戏
  12. 用jQuery制作对联广告
  13. Excel如何批量添加邮箱后缀
  14. android手机如何截屏,安卓手机怎么截图? (全文)
  15. PDF限制编辑怎么解决
  16. mysql全称_mysql全称
  17. 计算机系统基础知识——循环冗余校验码(CRC)
  18. Josh 的学习笔记之数字通信(Part 4——带通调制和解调)
  19. 3阶差分方程在有重根下的一般计算公式的推导
  20. c语言qsort函数的用法与模拟实现

热门文章

  1. PHP生成PDF——mpdf用法小结
  2. ubuntu更换阿里镜像源
  3. 魔板 (BFS-HASH)题解
  4. 简述Windows XP与Windows 7系统常见漏洞
  5. 微软 MSE Build 1.0.1959.0 最新版发布
  6. 云销云仓商城系统开发 功能优势介绍
  7. win10电脑耳机有声音,外放没声音
  8. power pivot计算列和计算字段(度量值)
  9. 大中华区总裁孙振耀退休感言
  10. 数据库(DataBase)-数据库备份