- 博客(40)
- 资源 (1)
- 收藏
- 关注
原创 IOMMU是如何划分PCI device group的?
IOMMU的一个主要作用就是将IO设备发出的请求地址IOVA(I/O Virtual Address)转化为物理内存地址,如果没有IOMMU,那么所有的IO设备都将使用相同的物理地址空间访问物理内存。引入IOMMU后,就会引入IOVA这个地址空间,IO设备可以通过IOVA虚拟地址访问物理内存。在虚拟化引入之前,IOMMU主要有两个功能:创建IOVA到HPA的映射,让设备能够访问任意物理内存。比如,有些I/O设备的寻址空间只有4G,但是平台的物理内存大于4G,为了让这样的I/O设备能够访问4G空间
2021-01-05 08:19:13
5835
3
原创 如何获取x86 CPU L1、L2和L3 cache的大小
CPU cache是介于CPU内核和物理内存(动态内存 dynamic RAM)之间的若干块静态内存(staic RAM),static RAM的访问速度比dynamic RAM的访问速度要快很多,而且不需要像dynamic RAM那样由于会漏电需要保持一定的刷新频率。static RAM作为访问dynamic RAM的缓存,对于系统的内存访问性能起到了很大的提升作用,但是由于static RAM的成本比较高,所以一般static RAM或者说Cache的大小都比较有限,一般都在几十KB到几十MB的范围内。
2020-11-05 08:25:00
4496
原创 AWS Nitro架构简介
AWS(Amazon Web Services)Nitro架构为Amazon的云服务提供了底层的支持。Nitro架构的总体设计思想是:轻量化的hypervisor配合定制化的硬件,让用户无法区分出运行在虚拟机内和运行在裸金属上操作系统的性能差异。为了实现定制化的硬件(ASIC),Amazon和以色列的一家芯片公司——Annapurna实验室合作,并在后面将其收购,其芯片的logo就是Annapurna山(世界第十高峰)。原本基于Xen架构的虚拟化系统中,服务器既要运行提供给客户的虚拟机,也要运行
2020-10-31 08:56:28
7722
原创 qemu虚拟机的关机方式
qemu虚拟机的关闭方式主要包括如下几种方式:通过qemu monitor的system_powerdown命令进行关闭, 在libvirt对qemu进行管理的情况下,通过virsh shutdown命令进行关闭。 在虚拟机内使用Guest OS自带的关机按钮进行关闭。 通过qemu monitor的quit命令进行关闭。 在libvirt对qemu进行管理的情况下,通过virsh d...
2020-01-31 11:19:08
7250
4
原创 教你如何将电脑瞬间关掉
关闭一台电脑的最简单方法就是按电源键,或者点击操作系统(如Windows)的关机按钮,当触发该操作时,操作系统将会将自己关闭,然后断掉主板的电源。更暴力一点的就是长按电源键,甚至拔电源。本文将介绍一种通过软件的方式,将电脑瞬间关闭。以Windows操作系统为例,为了实现该操作,需要下载一个免费的软件rweverything,也称为RW,可以通过该链接直接在官网上下载http://rweve...
2020-01-20 10:29:56
1414
1
原创 qcow2文件的snapshot管理
qcow2是qemu虚拟机中特别常用的镜像文件格式,QCOW即Qemu Copy-On-Write写时拷贝,后面的2即为版本,因为在qcow2出现之前还有qcow格式的镜像文件。从字面上理解,qcow/qcow2的文件组织形式应该是建立在Copy-On-Write这个基本的机制上,即当某个数据块被引用多次(两次或两次以上)时,若某个实例尝试写该数据块,为了不让其他实例看到该数据块的变化,就会将该数...
2020-01-18 17:43:23
1782
原创 QEMU中VNC Server架构分析
QEMU的入口main函数所在的源文件vl.c中针对QEMU_OPTION_vnc对vnc参数进行解析,vnc选项支持的具体参数在ui/vnc.c中进行定义,如下所示:static QemuOptsList qemu_vnc_opts = { .name = "vnc", .head = QTAILQ_HEAD_INITIALIZER(qemu_vnc_opts.head),...
2019-06-18 06:56:11
3332
1
原创 Intel x86 CPU中断和异常的定义和分类
中断通常被定义为一个打断CPU芯片指令执行的事件,该事件对应到对应到CPU芯片内部或者外部的电路产生的电子信号。中断信号可以被划分为同步中断和异步中断:同步中断,该类型中断由CPU的控制单元在执行指令的时候产生,并且是在当前指令执行完毕下一个指令执行之前产生。 异步中断,该类型中断由其他硬件设备在任意的时间产生,并且遵循CPU的时钟信号传递给CPU。对于Intel的CPU而言,它将同步...
2018-12-18 21:23:54
2562
2
原创 什么是CPU Die?
在看CPU相关的手册的时候,经常会看到Die的字样,刚开始不太理解是什么意思,感觉有点像是一颗CPU芯片,但是这样理解还是不够准确。后来各种查找,终于找到了Die的准确意思,原来Die是处理器在生产过程中引入的概念。总的来说,Die或者CPU Die指的是处理器在生产过程中,从晶圆(Silicon Wafer)上切割下来的一个个小方块(这也是为啥消费者看到的CPU芯片为什么都是方的的原因),...
2018-12-02 09:20:09
43490
3
原创 Intel VT-d(5)- DMAR表组织结构
在系统上电的时候,BIOS/UEFI负责检测并初始化重定向硬件(即VT-d硬件),为其分配相应的物理地址,并且以ACPI表中的DMAR(DMA Remapping Reporting)表的形式告知VT-d硬件的存在。DMAR的格式如下所示,先是标准的APCI表的表头,然后是Host Address Width表示该系统中支持的物理地址宽度;标志字节Flag表示VT-d硬件支持的一些功能,最后是...
2018-11-24 15:27:11
4105
原创 Intel VT-d(4)- Interrupt Posting
Interrupt-posting是VT-d中中断重映射功能的一个扩展功能,该功能也是针对可重映射的中断请求。Interrupt-posting功能让一个可重映射的中断请求能够被暂时以一定的数据形式post(记录)到物理内存中,并且可选择性地主动告知CPU物理内存中暂时记录着pending的中断请求。在x86处理器的虚拟化中,Interrupt-posting再加上APIC Virtualiz...
2018-11-17 07:53:45
2098
原创 Intel VT-d(3)- 中断重映射
VT-d硬件中除了包含DMA重映射硬件外,也会包含中断重映射硬件,该中断重映射单元让系统软件能够对I/O设备产生的中断(包括从I/O APIC发送过来的中断,I/O设备产生的以MSI、MSI-X形式传递的中断,不包含中断重映射硬件本身产生的中断)的传输进行控制,而不仅仅取决于硬件的连接。对于VT-d硬件而言,中断请求就是从外面发送进来对物理地址范围0xFEEX_XXXXh的写请求。VT-d中,...
2018-11-11 08:41:37
4336
2
原创 Intel VT-d(2)- DMA重定向
DMA重定向硬件一般位于Root Complex中,Root-Complex是PCIe系统中引入的概念,它将CPU、内存子系统和PCIe子系连接起来。如下图所示:而Root Complex则经常被集成到CPU芯片上、MCH(Memory Controller Hub)上或者是IOH(I/O hub)上。DMA重定向硬件将来自于I/O子系统的内存访问请求分为两类:不带地址空间ID的请...
2018-11-04 13:22:11
4376
原创 QEMU虚拟机中如何安装Virtio驱动
在计算机虚拟化中,Virtio是一种半虚拟化解决方案,即需要对Guest OS进行一定的修改(安装相应的驱动程序),能够对虚拟机的I/O性能进行大幅的提升。在QEMU+KVM的环境中,Virtio的后端驱动由QEMU程序提供,不需要额外的安装,而前端驱动则位于Guest OS中,需要将相应OS类型的驱动程序安装到Guest OS中。本文以QEMU+KVM为VMM,以Win 7为Guest OS...
2018-11-01 20:56:51
13588
原创 Intel VT-d(1)- 简介
Intel VT-d的全称是Intel Virtualization Technology for Direct I/O,它是Intel虚拟化技术的一部分,主要针对的是I/O子系统,它的实现主要是通过在硬件上引入重定向单元,该硬件重定向单元用于对I/O子系统的DMA操作和中断传递进行重定向,从而辅助VMM(Virtual Machine Monitor)实现I/O子系统的虚拟化。一般情况下VM...
2018-10-28 19:20:53
17097
原创 NBD(Network Block Device)简介及基本使用
NBD指的是Network Block Device,正如其名字的意思,NBD让用户可以通过网络访问到某个块设备,或者设备镜像。你可能会想NFS(Network File System)不是已经可以实现通过网络挂载各种文件系统并进行访问了吗,为什么还要整个NBD呢?如果用户的目的只是为了简单地访问对文件系统内的文件进行读写,那么NFS已经完全足够用了,但是有时候用户可能需要对存储块设备执行...
2018-10-21 22:03:03
30414
原创 CPU在空闲的时候做什么
对于大部分负载并不重的计算机而言,可以说CPU大部分的时间都是停留在"idle task"中,在Windows中从任管理器中可以看到大部分的CPU时间都停留在System Idle Process,如下图所示:在Linux中,idle task并不是一个独立的线程,但是可以通过top指令查看CPU的idle比例:总的来说,在Intel x86架构CPU中,“idle task”的...
2018-10-14 21:59:51
8129
4
原创 x86 CPU虚拟化环境中的地址转换加速机制
前面讲过,在Intel x86 CPU中,为了加快线性地址到物理地址的转换,引入了各种地址转换的cache(TLB、PDE cache、PDPTE cache、PML4 cache)和PCID(Processor Context Identifier)机制。不清楚的可以出门左转查看上一篇文章。而在虚拟化环境中,即VMX(Virtual Machine Extension)中,Intel x86...
2018-09-26 08:00:21
1445
原创 Intel x86 CPU的地址转换加速机制
在x86 CPU中分页机制引入了线性地址和物理地址的概念,从而在一个独立的物理地址空间上,能够同时存在多个相同且独立的线性地址空间。在分页使能的情况下,CPU访问内存的时候,线性地址首先通过页表查询的机制转化为物理地址,然后再通过物理地址完成物理内存的访问。对于64位的x86 CPU,若采用4级的分页机制,其基本结构如下图所示:首先CR3寄存器存放着分级地址转换页表的入口地址,该地址指...
2018-09-21 07:37:28
1096
原创 x86 CPU的MSR寄存器
MSR(Model Specific Register)是x86架构中的概念,指的是在x86架构处理器中,一系列用于控制CPU运行、功能开关、调试、跟踪程序执行、监测CPU性能等方面的寄存器。MSR寄存器的雏形开始于Intel 80386和80486处理器,到Intel Pentium处理器的时候,Intel就正式引入RDMSR和WRMSR两个指令用于读和写MSR寄存器,这个时候MSR就算被正...
2018-09-16 08:29:37
11156
翻译 Linux启动过程 - 从MBR到第一个应用
原文链接:https://www.ibm.com/developerworks/library/l-linuxboot/在最早期的时候,引导一台计算机意味着需要给计算机提供一个带有启动程序的纸带或者需要手动调整前端仪表盘中的地址/数据/控制开关来加载启动程序。而如今的计算机则自带有启动设备用于简化启动过程,但是这并不意味着启动过程就变得简单。我们先从总体上看Linux启动过程的各个阶段,然...
2018-09-08 08:23:26
1855
原创 VMX(3) -- VMXON Region
对于Intel x86处理器,在打开VMX(Virtual Machine Extension),即执行VMXON指令的时候需要提供一个4KB对齐的内存区间,称作VMXON region,该区域的物理地址作为VMXON指令的操作数。该内存区间用于支持逻辑CPU的VMX功能,该区域在VMXON和VMXOFF之间一直都会被VMX硬件所使用。VMXON Region内存区域的要求跟VMCS类...
2018-08-23 06:57:06
1716
原创 VMX(2) -- VMCS理解
在虚拟化中,为了实现vCPU,既要模拟CPU的运行,又要记录vCPU的状态(包括对vCPU运行的控制信息),在Intel x86处理器的VMX(Virtual Machine Extension)功能中,通过引入根运行模式(VMX root operation)和非根模式(VMX non-root operation),直接让vCPU运行在逻辑CPU上,在软件上省去了对vCPU运行的模拟,同时也大...
2018-08-19 08:57:56
3129
原创 Linux启动时如何定位BIOS提供的ACPI表
ACPI(Advanced Configuration and Power Interface)是在系统启动阶段由BIOS/UEFI收集系统各方面信息并创建的,它大致以树形的组织形式(如下图所示)存在系统物理内存中。整个ACPI表以RSDP(Root System Descriptor Pointer Table)为入口点,每个非叶子节点都会包含指向其他子表的指针,各个表都会有一个表头,在...
2018-08-18 22:38:17
7032
原创 VMX(1) -- 简介
VMX(Virtual Machine Extension)是Intel 64和IA-32架构处理器级别的功能,用于支持虚拟化。VMX支持两种类型的软件:Virtual-machine monitor(VMM),VMM对处理器和平台硬件具有完全的控制权限。VMM为客户软件提供虚拟处理器的抽象,从而让客户软件能够直接在逻辑CPU上跑。 客户软件(Guest software)。每个虚拟机(VM...
2018-08-14 07:24:09
16556
原创 x86处理器运行环境
任何程序跑在IA-32处理器上都需要一个特定的环境来支持,比如程序代码的读取,数据的存储和状态的保存等。这些资源组成IA-32处理器基本的运行环境,这些资源主要包括:地址空间(Address Space)。任何程序跑在IA-32处理器上的时候都可以看到一个线性地址空间,该地址空间大小为2的32次方。该线性地址空间需要通过分页机制映射到物理地址,该线性地址空间让程序以为自己可以访问到系统中的任何...
2018-08-05 07:17:56
1057
原创 x86基本运行模式和内存模型
个人理解所谓的Intel x86架构其实就是Intel 64和IA-32架构的总称。IA-32架构支持三种基本的运行模式,每种模式下可执行的指令和可用的功能可能不一样: 保护模式(Protected Mode)。这是最常见的模式,这是一个受保护的并且支持多任务的环境。之所以受保护是因为在这个模式下,能够对内存及一些外围设备提供硬件级别的保护设置,如分段机制,分页机制。大部分OS都运行在这...
2018-08-01 07:21:02
2384
原创 QEMU和KVM的关系
首先KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。在支持VMX(Virtual Machine Extension)功能的x86处理器中,Linux在原有的用户模式和内核模式中新增加了客户模式,并且客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中。KVM模块的职责就是打开并...
2018-07-30 07:19:49
3932
1
原创 SeaBIOS(4) - 如何理解shadow BIOS
SeaBIOS运行的一个模拟硬件平台是奔腾时代的PC架构,以Intel 440FX PMC(PCI and Memory Controller)为北桥芯片,PIIX4(PCI ISA IDE Xcelerator)为南桥芯片为基本组成架构。其中PMC可用于连接内存,如下图所示:PMC控制器在系统中是以PCI设备的形式存在的,在该PCI设备中存在着一组PAM(Programmable Attribu...
2018-07-27 07:39:12
1997
7
原创 系统启动过程屏幕的显示是如何实现的?
QEMU+KVM的虚拟化环境中,系统启动执行SeaBIOS对系统设备进行初始化,包括VGA设备。为了能够让VGA能够显示处图像(显卡在系统中一般是以PCI设备的形式出现在系统中,然后显示器通过VGA线连接到显卡上)。SeaBIOS会在较早的时候,即枚举完系统的PCI设备后,就去将显卡的PCI Option ROM读取出来,然后执行,显卡的PCI Option ROM会对显卡进行初始化,并且会注册中...
2018-07-25 07:35:20
694
原创 翻完Vim编辑器500+页英文手册后的一点感想
其实接触Vim编辑器已经有很长时间了,但是却一直只是使用它的最基本功能,对很多东西似懂非懂,一直处于一种“不识庐山真面目”的状态。最近,因为查看、阅读代码的需要,经常需要用到Vim编辑器,由于有些概念不了解,所以用起来有点不方便,一怒之下,花了挺长一段时间,将Vim编辑器500+页的手册翻了一遍(只能说是翻了一遍,不能说啃,因为还有好多地方没看懂,或者基本用不上,所以也没花心思去推敲)。这里说一下...
2018-07-24 07:47:07
289
原创 SeaBIOS(3) - 启动流程
SeaBIOS程序的各种入口点都在src/romlayout.S这个文件中定义了,启动包括了vCPU上电后开始执行的起点src/romlayout.S:reset_vector,该位置会被QEMU加载...
2018-07-13 06:57:00
2374
原创 SeaBIOS(2) - 硬件架构
每个BIOS一般都会有自己适配的一套硬件架构,因为不同的硬件资源对于BIOS的要求及操作都会有不同,硬件资源千变万化,BIOS程序不可能考虑到所有的情况。SeaBIOS也不例外。SeaBIOS所针对的硬件平台是奔腾时代的PC架构,以Intel 440FX PMC(PCI and Memory Controller)为北桥芯片,PIIX(PCI ISA Xcelerator)为南桥芯片构成相应的...
2018-07-09 07:31:42
1889
原创 SeaBIOS(1) - 简介
SeaBIOS是一个开源的16bit x86 BIOS程序,它可以运行在模拟器上,或者是在x86硬件平台上和coreboot一起使用。这里主要介绍其运行在QEMU+KVM这样的虚拟化模拟器上的情况,对coreboot的情况暂时不说明。BIOS程序是计算机上电后,CPU第一个开始运行的程序,完全运行在裸金属上,用于完成对系统硬件的初始化,并且为启动OS做好准备。BIOS程序跟具体的硬件具有很高的耦合...
2018-07-07 08:42:34
9398
原创 BCV和BEV是个什么鬼?
前段时间在阅读SeaBIOS(即QEMU+KVM解决方案中用到的BIOS程序)的代码遇到了BCV和BEV这两个缩写词,找了半天才搞明白是什么意思。在这里跟大家分享一下。BCV: Boot Connection Vector,这是一个指针,该指针指向PCI设备的Option ROM内部,该指针是一个程序的入口,BIOS通过该指针入口,可进行PCI设备的初始化、检测PCI设备是否外挂了其他外设(如PC...
2018-07-04 06:59:53
4041
原创 如何判断一个硬件平台是否支持虚拟化?
对于一个给定的硬件平台,如何判断该硬件平台是否支持虚拟化呢?为了回答这个问题,需要先了解硬件设备特别是CPU是如何实现虚拟化的。为了理解CPU是如何实现虚拟化的,需要理解两个概念:特权指令和敏感指令。特权指令:现代CPU一般都会有N个执行权限等级,对于普通的指令,CPU都可以正常执行,但是对于一些操作系统硬件资源的指令,如I/O端口的访问,MMIO寄存器的访问等,CPU需要将当前的运行等级提高才能...
2018-07-03 06:40:27
1496
原创 虚拟化中如何实现设备模拟?
在计算机虚拟化领域中,对设备进行模拟是虚拟化实现的基础。设备的模拟主要包括一下三个方面:设备状态的记录;设备的运行逻辑的模拟,包括不同状态之间的转换关系,状态转换时对其他设备的影响(没有的话当然最好);设备跟外界的交互接口,主要是各种总线接口或者I/O地址接口。说白了其实就是复杂一点的状态机。实现设备模拟可有两种方式,即纯软件模拟和硬件辅助的方式。纯软件模拟的方式即借助第三方软件的运行,对设备的状...
2018-07-03 06:38:53
2101
原创 一个菜鸟对虚拟化的理解
作为一个刚接触桌面虚拟化不就的菜鸟来说说我对虚拟化的理解,这里所说的虚拟化是指计算机系统级别的虚拟化,即为实现虚拟计算机(Virtual Machine)的虚拟化。正常情况下,计算机系统主要由三个部分...
2018-07-03 06:34:35
5807
4
原创 如何理解UEFI中handle和protocol的概念
UEFI中到处都会出现Handle和Protocol这两个概念,这个对于理解UEFI的设计思路还是很重要的,但是翻遍了UEFI spec,并没有给出很清晰的概念。后来干脆去翻源码的定义,立马有种拨云见日的感觉。 基本上,protocol代表的是一种用定义好了的数据结构,每个protocol都有唯一的ID(128bit的GUID,也可以理解为protocl的名字),可以通过这个GUI
2017-12-13 20:42:37
11075
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人