描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302589419丛书名: 华为智能计算技术丛书
虚拟化领域系统性教材,涵盖虚拟化历史、通用虚拟化、ARM虚拟化、鲲鹏虚拟化、新一代虚拟化原理和应用实战介绍。加速虚拟化技术落地,助力国产云计算产业发展。
本书是一本论述系统虚拟化原理与实践的专业图书。全书分为6章,第1章概述系统虚拟化的基本 概念、发展历史、趋势展望、主要功能和分类,以及目前典型的虚拟化系统,并介绍openEuler操作系统的虚 拟化技术。第2~4章分别介绍系统虚拟化的三大组成部分: CPU 虚拟化、内存虚拟化和I/O 虚拟化的相 关原理,并配备相应实验便于读者理解。第5章介绍基于ARMv8的鲲鹏虚拟化架构,并概述其CPU、中 断、内存、I/O 和时钟虚拟化的基本原理。第6章结合代码讲解轻量级虚拟化平台StratoVirt的基本原理 和技术特点,读者可以跟随本书从零开始打造一个具备基本功能的轻量级虚拟化平台。 为便于读者高效学习、深入掌握系统虚拟化的基本原理,本书的源代码及安装运行说明均保存于 GiantVM 和 StratoVirt开源社区。后续将通过开源社区进行代码更新和线上交流。 本书可作为相关领域工程技术人员的参考书,也可作为高年级本科生和研究生的学习用书,还可作为 对虚拟化技术感兴趣的爱好者的自学用书。
第1章系统虚拟化概述00
1.1系统虚拟化基本概念00
1.2系统虚拟化的发展历史和趋势展望00
1.2.1发展历史00
1.2.2趋势展望0
1.3系统虚拟化的主要功能和分类0
1.3.1虚拟化基本功能0
1.3.2虚拟化分类0
1.3.3系统虚拟化实现方式0
1.4典型虚拟化系统0
1.4.1典型虚拟化系统简介0
1.4.2openEuler的虚拟化技术0
本章小结0
第2章CPU虚拟化0
2.1CPU虚拟化概述0
2.1.1敏感非特权指令的处理0
2.1.2虚拟机上下文切换0
2.1.3中断虚拟化0
2.2Intel VTx硬件辅助虚拟化概述0
2.2.1VMX操作模式0
2.2.2VMCS0
2.2.3PIC & APIC0
2.2.4Intel VTx中断虚拟化0
2.3QEMU/KVM CPU虚拟化实现0
2.3.1KVM模块初始化0
2.3.2虚拟机创建0
2.3.3vCPU创建0
2.3.4vCPU运行0
2.3.5实验:CPU虚拟化实例0
2.4QEMU/KVM中断虚拟化实现0
2.4.1PIC & IOAPIC模拟0
2.4.2PCI设备中断0
2.4.3QEMU/KVM中断路由0
2.4.4虚拟中断注入0
2.4.5实验:e1000网卡中断虚拟化0
2.5GiantVM CPU虚拟化0
2.5.1分布式vCPU0
2.5.2跨节点中断转发0
本章小结0
第3章内存虚拟化
3.1内存虚拟化概述
3.2内存虚拟化的实现
3.2.1虚拟内存的实现:页表
3.2.2内存虚拟化的软件实现:影子页表
3.2.3内存虚拟化的硬件支持:扩展页表
3.2.4扩展页表与影子页表的结合:敏捷页表
3.2.5内存的半虚拟化:直接页表映射与内存气球
3.3QEMU/KVM内存虚拟化源码
3.3.1QEMU内存数据结构
3.3.2实验:打印MemoryRegion树
3.3.3KVM内存数据结构
3.3.4实验:将GVA翻译为HPA
3.4GiantVM内存虚拟化
3.4.1分布式共享内存
3.4.2GiantVM中的DSM架构
3.4.3GiantVM中DSM的实现
本章小结
第4章I/O虚拟化
4.1I/O虚拟化概述
4.1.1I/O过程
4.1.2I/O虚拟化的基本任务
4.1.3软件实现的I/O虚拟化
4.1.4硬件辅助的I/O虚拟化
4.2I/O虚拟化的实现方式
4.2.1PCI设备简介
4.2.2设备模拟
4.2.3I/O半虚拟化
4.2.4设备直通访问
4.2.5VFIO
4.2.6SRIOV
4.3QEMU/KVM虚拟设备的实现
4.3.1QEMU对象模型
4.3.2主板芯片组与总线模拟
4.3.3QEMU/KVM设备访问的模拟
4.3.4实验:为edu设备添加设备驱动
4.4GiantVM中的I/O处理
4.4.1PIO 转发
4.4.2MMIO 转发
4.4.3DMA 的处理
本章小结
第5章鲲鹏虚拟化
5.1鲲鹏虚拟化框架
5.1.1鲲鹏虚拟化简介
5.1.2EL2虚拟化框架
5.2鲲鹏CPU虚拟化
5.2.1CPU虚拟化
5.2.2EL2异常级
5.2.3VHE
5.3鲲鹏中断虚拟化
5.3.1GICv1
5.3.2GICv2
5.3.3GICv3/GICv4
5.3.4GICv3/GICv4中断虚拟化
5.4鲲鹏内存虚拟化
5.4.1VMSAv864架构概述
5.4.2地址空间与页表
5.4.3内存属性、访问权限与缺页异常
5.4.4MPAM
5.5鲲鹏I/O虚拟化
5.5.1MMIO的模拟
5.5.2DMA重映射——SMMUv3
5.5.3SMMUv3中的缓存机制
5.6鲲鹏时钟虚拟化
本章小结
第6章轻量级虚拟化平台StratoVirt
6.1StratoVirt概述
6.2发展背景
6.3StratoVirt架构设计
6.3.1CPU子系统
6.3.2内存子系统
6.3.3I/O子系统
6.4从零开始构建StratoVirt
6.4.1总体介绍
6.4.2KVM模型
6.4.3内存模型
6.4.4CPU模型
6.4.5BootLoader实现
6.4.6串口实现
6.4.7Epoll实现
6.4.8鲲鹏平台支持
本章小结
参考文献
附录A缩略语
虚拟化技术是一门“古老”的新技术。早在1959年,牛津大学Christopher Strachey就提出了具有虚拟化概念的高效分时复用方案,意在解决当时大型机器使用效率低下的问题。到20世纪60至70年代,虚拟化研究进入了个高速发展时期,出现了以IBM CP67/CMS为代表的大型机虚拟化技术,并提出了硬件架构可虚拟化的理论和准则(如敏感指令应属于特权指令)。但到了20世纪80年代,随着操作系统的成熟,资源管理不再以虚拟化为中心,MIPS和x86等CPU厂商出于成本和商业考虑,设计的硬件架构不再满足可虚拟化准则,形成了所谓的“虚拟化漏洞”(例如,x86有5类共17条敏感指令,但不属于特权指令)。随着个人计算机的普及,研究者提出了一系列弥补x86架构“虚拟化漏洞”的方法,代表性的技术有斯坦福大学Mendel Rosenblum等在SOSP 1997国际学术会议发表的DISCO系统,虚拟化技术重新兴起。随后,Intel和AMD等硬件厂商提出了硬件辅助虚拟化,使得x86硬件平台满足可虚拟化准则。从2006年亚马逊以虚拟机形式向企业提供IaaS(Infrastructure as a Service,基础设施即服务)平台开始,虚拟化技术成为当前支撑云计算、大数据、移动互联网和工业互联网等新型计算和应用模型的关键“根技术”。
回顾虚拟化的发展历史,可得出一些重要启示。一是基础研究对于计算机系统非常重要,不少关键技术的突破首先来自学术界和工业界的前沿研究; 二是的技术未必用于产品,成本和市场也是重要考量(ARM和RISCV初期也不是可虚拟化硬件架构,如ARMv6有4大类24条敏感非特权指令)。因此,深入理解虚拟化技术,把握其内在的发展规律,对于虚拟化的创新发展有重要作用。
系统虚拟化作为物理硬件层的虚拟化,在计算机硬件和操作系统之间引入一个系统软件抽象层,向下管理硬件资源,向上对操作系统提供虚拟机接口,其目标可概括为“功能不缺失、性能不损失”。因此,系统虚拟化涉及操作系统和硬件接口,技术体系比较复杂,对初学者来说是一个很大的挑战。读者如果不了解虚拟化技术的基本原理而去直接翻阅源代码,例如开源的QEMU/KVM,很容易抓不住主线,迷失在庞大的代码中(QEMU源代码已超过150万行)。然而要把源代码涉及的方方面面都讲清楚需要极大的篇幅。因此,本书借鉴学习操作系统(Linux内核源代码已超过2700万行)的方法,借助实验把重要概念涉及的主干技术路径叙述清楚,读者可以通过调试和打印直观理解虚拟化场景的“现场”,使静态的代码变得鲜活生动。其次,类似于代码量约1万行的Linux 0.11,“麻雀虽小、五脏俱全”,本书第6章从零开始构建一个用户态轻量级虚拟化平台,逐步展现虚拟机的构建过程,掌握系统虚拟化技术的关键“基因图谱”。
基于在虚拟化领域的长期研究和实践积累,以及和华为虚拟化团队在openEuler开源操作系统上的合作研究,本书试图从庞大的虚拟化技术中厘清关键路径,并配以相关实验,帮助读者了解系统虚拟化技术的来龙去脉,理解基本原理,掌握核心方法,为进一步的研究打下基础。
本书定位为计算机系统虚拟化领域的专业图书,面向工程科技类普通读者。读者除了需要具备基本的硬件体系结构和操作系统知识外,无须其他先修课程。此外,本书受众还包括有志于计算机系统软件领域深耕的研发人员以及对虚拟化感兴趣的技术爱好者。
全书分6章,内容涵盖系统虚拟化的基本概念和实现方法,将系统虚拟化技术分为目前主流的“一虚多”(把单物理机器抽象成若干虚拟机器)和新型的“多虚一”(把多物理机抽象成单一虚拟机)。对于传统“一虚多”技术,本书基于开源QEMU/KVM和x86平台深入介绍了CPU、内存和I/O虚拟化的基本原理,并配备了相关实验。针对新型“多虚一”技术,本书介绍了开源项目GiantVM的CPU、内存和I/O“多虚一”的基本实现方法。此外,针对ARM虚拟化,本书专门介绍基于ARMv8的鲲鹏虚拟化架构。后,本书基于内存安全的Rust语言从零开始打造一个具备基本功能的轻量级虚拟化平台StratoVirt,逐步提供CPU、内存和I/O的虚拟化能力。从开始运行一段汇编代码到终能够运行Linux客户机操作系统,读者可以完整经历虚拟化从设计到实现的全部流程。同时,读者可以参考华为产品级StratoVirt的源代码,领略基于Rust语言实现的前沿轻量级虚拟化技术。感谢实验室同学和华为公司对本书撰写工作做出的重要贡献,其中第1章主要由戚正伟撰写,第2章主要由余博识撰写,第3章主要由贾兴国撰写,第4章主要由张正君撰写,第5章主要由余博识、贾兴国、张正君和杨铭合作撰写,第6章由徐飞、张亮、杨晓鹤、高炜、杨铭、吴斌、王志钢撰写,全书由戚正伟、管海兵修改和审阅。写作过程中参考了实验室GiantVM项目的代码和文档(主要来自陈育彬、丁卓成、张晋)。项羽心、张晋、邓天迈等同学仔细阅读了本书,并提供了宝贵的修改意见。特别感谢贾兴国等对本书插图的精心绘制,使得比较复杂的概念更为直观清晰。虚拟化团队技术专家胡欣蔚、范良、章晓峰、吴斌、王志钢在本书写作过程中提供了大量的资源和支持。本书后一章的动手实践思路主要来自王志钢。感谢清华大学出版社盛东亮老师和钟志芳老师等的大力支持,经过多轮修改,使本书质量大为提高。
由于虚拟化技术发展很快,已经深入计算机系统的方方面面,加之作者水平有限,书中难免有疏漏和不足之处,恳请读者批评指正!
作者
2021年5月
评论
还没有评论。