01为什么写这本书

大约在2014年底,我参与了一个项目,使用Android模拟器在x86架构的机器上运行各种Android游戏。当时项目遇到的核心问题是游戏运行卡顿严重,印象中普通的小游戏每秒大约只能渲染十几帧,大型游戏则完全无法成功加载。运行模拟器的机器都有顶配的显卡,因此硬件性能并不存在问题。那么问题就出在软件架构上了。当时采用的软件架构是:使用虚拟机运行Android程序,Android中有一个模块会将数据通过网络传送给另外一个本地应用进行渲染。对于游戏这种数据量很大的应用,采用网络包传输显然不是一个最优的方案。除了网络包在协议栈中的各种复杂处理外,大量的网络包传输会导致虚拟机和主机之间的频繁切换,这将耗费大量的计算资源。基于此,我们设计的新方案是在VMM层实现一个虚拟设备,在Guest内部通过这个虚拟设备向渲染程序发送数据。虚拟设备通过IPC方式与负责渲染的程序进行通信。方案实现后,原来无法加载的大型游戏每秒都可以达到Android的渲染上限60帧。

2015年我参与了另外一个项目,将虚拟机的块设备数据存储到块存储集群。原有的方案是在宿主机上采用SCSI创建一个块设备,然后将这个块设备传给Qemu,SCSI设备再通过iSCSI协议将块数据传递给远端块存储集群。这个方案有很多弊端,块数据经历了两次I/O栈,一次是Guest内核中的,另外一次是Host内核中的,因此效率很低。另外,这个方案还有个致命的问题:那时偶尔会遇到内核中iSCSI协议的Bug,此时除了重启宿主机外别无他法,而且那时热迁移还不是很成熟,可以想象一下重启宿主机的后果。为了解决这些问题,我们设计了另外一种方案,在Qemu中实现一个虚拟块设备,绕过内核的I/O栈,在该虚拟块设备中直接将块数据通过TCP/IP发给块存储集群,从而不再依赖iSCSI协议。方案实现后,IOPS获得了极大的提升,系统的稳定性也增强了。

经历了很多类似上述的情况,因此我打算写一本Linux系统虚拟化方面的书,希望能让读者更深刻地认识和理解系统虚拟化,于是我和本书的第二作者谢广军博士相约,一起撰写本书。从2015年开始,历时近6年,中间历经多次易稿,从最开始过多地聚焦于烦琐的技术细节,到尝试从系统结构、操作系统和硬件等多角度去解释原委。书中全部采用可以说明问题的早期代码版本,而不是采用因各种特性迭代而变得纷繁复杂的最新代码。

在这5年多的时间里,每每不想坚持时,就会想起自己年轻气盛时经常质疑前辈们为我们留下了什么,而如今我扪心自问,从事了这么多年计算机工作,我又为这个行业做了什么?最后,希望本书能让大家有所收获。

02内容简介

本书探讨了软件如何虚拟计算机系统,包括CPU、内存、中断和外设等。此外,在云计算中,网络虚拟化也至关重要,因此,本书最后一章探讨了网络虚拟化。

第1章讨论CPU虚拟化。

这一章介绍了x86架构下的VMX扩展,讨论了在VMX下虚拟CPU的完整生命周期。以Guest通过内存映射(MMIO)方式访问外设为例,展示了KVM如何完整地模拟一个CPU指令。然后,我们探讨了KVM是如何模拟多处理器系统的。最后,通过一个具体的KVM用户空间部分的实例,带领读者直观地体会CPU虚拟化的概念。

第2章讨论内存虚拟化。

这一章首先简略地介绍了内存寻址的基本原理,然后分别探讨了实模式Guest以及保护模式Guest的内存寻址,包括大家比较熟悉的影子页表等。最后,我们讨论了在硬件虚拟化支持下,即EPT模式下从Guest的虚拟地址到Host的物理地址的翻译过程。

第3章讨论中断虚拟化。

这一章我们从最初IBM PC为单核系统设计的PIC(8259A)开始,讨论到为多核系统设计的APIC,再到绕开I/O APIC、从设备直接向LAPIC发送基于消息的MSI。最后,我们讨论了Intel为了提高效率是如何从硬件层面对虚拟化中断进行支持的,以及KVM是如何使用它们的。

第4章和第5章讨论外设虚拟化。

我们从完全虚拟化开始,讨论到半虚拟化,最后讨论到Intel的VT-d支持下的硬件辅助虚拟化。其间,我们通过实现一个模拟串口,带领读者直观地体会设备虚拟化的基本原理,然后带领读者深入了解Virito标准。最后,我们还探讨了支持SR-IOV的DMA重映射和中断重映射。

第6章讨论网络虚拟化。

以一个典型的Overlay网络为例,从虚拟机访问外部主机、外部主机访问虚拟机两个方面,分别探讨了计算节点、网络节点上的网络虚拟化技术。

03本书读者收获

  • 云计算从业人员

    虚拟化是云计算的基础,运行各种服务的云主机都是通过虚拟化方式虚拟出来的,需要深入地掌握虚拟化技术。

  • 云计算平台的研发人员

    只有更好地掌握虚拟化技术,才能更好地管理云主机等计算资源。

  • 云计算解决方案架构师

    只有更好地了解虚拟化技术,才能为客户设计更合理的解决方案。

  • 虚拟化相关底层技术的研发人员

    只要参透虚拟化技术,才能为用户提供更高性能的云主机。

  • IT技术从业者

    虚拟化技术是一门跨领域的技术,涉及操作系统、系统结构、硬件等多个领域。虚拟化提供了一个全方位窥探计算机技术的途径,通过虚拟化技术,我们可以更好地研究在物理环境下无法观察到的各种行为,虚拟化为研究计算机核心基础技术提供了一个无与伦比的环境。

04

作者介绍

王柏生

资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。

著有畅销书《深度探索Linux操作系统》(2013年出版)。

谢广军

计算机专业博士,毕业于南开大学计算机系。

资深技术专家,有多年的IT行业工作经验。现担任百度智能云副总经理,负责云计算相关产品的研发。多年来一直从事操作系统、虚拟化技术、分布式系统、大数据、云计算等相关领域的研发工作,实践经验丰富。

更多精彩回顾书讯 |11月书讯(下)| 这些好书必须“买买买”!书讯 |11月书讯(上)| 这些好书必须“买买买”!资讯 |DB-Engines 10月数据库排名:“三大王”无人能敌,PostgreSQL紧随其后上新 | 百度官方出品 | 全面解读PaddlePaddle,零基础快速入门深度学习
书单 | 开学季——计算机专业学生必读的10本畅销经典干货 | 数据分析必读干货:简单而实用的3大分析方法收藏 | (万字长文)Spring的核心知识尽揽其中视频 | 大佬出镜推荐不可不读系列——程序员陈彼得

点击阅读全文购买

linux串口中断_5年匠心之作,深度探索Linux虚拟化相关推荐

  1. 5年匠心之作,深度探索Linux虚拟化

    01 为什么写这本书 大约在2014年底,我参与了一个项目,使用Android模拟器在x86架构的机器上运行各种Android游戏.当时项目遇到的核心问题是游戏运行卡顿严重,印象中普通的小游戏每秒大约 ...

  2. linux 串口 中断方式,设置在linux下串口中断(setting serial port interruption in

    我想设置中断了在Ubuntu串行端口(在C语言编写的程序),但它不工作. 我已经检查串行通讯正常工作没有中断,所以我可能会设置一些错误. 代码如下: #include #include #includ ...

  3. 嵌入式Linux串口终端的定制,基于PC/104平台嵌入式Linux系统定制方法

    基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统的研制,详细 ...

  4. linux uart中断程序,linux 串口中断实现

    我在linux系统下写的串口程序,需要实时的读取串口来的数据,但串口来的数据又是不定时的,想用中断的方式响应,看了一些资料,总觉的还所有些不妥. 首先,select函数,他需要一直在while中检测读 ...

  5. linux 串口中断_1600字干货 | 大佬讲Linux启动流程(内含福利)

    文章字数:1600 干货指数:⭐⭐⭐⭐⭐ 导读:这里讲的内容主要是原理,文章最后小创会送大家一个[福利](<Linux 内核设计的艺术>)配合书籍,学习效果更好. 01按下电源键,打开电源 ...

  6. 深度探索linux系统虚拟化 原理与实现,深度探索Linux系统虚拟化:原理与实现

    前 言 第1章 CPU虚拟化 1 1.1 x86架构CPU虚拟化 1 1.1.1 陷入和模拟模型 2 1.1.2 x86架构虚拟化的障碍 2 1.1.3 VMX 3 1.1.4 VCPU生命周期 5 ...

  7. 3.4.3 深度探索linux,3.2.4 vmlinux.bin的构建过程(3)

    3.2.4 vmlinux.bin的构建过程(3) mkpiggy向屏幕打印了一堆文本.习惯上,我们会认为标准输出就是屏幕,但是回头再仔细观察一下cmd_mkpiggy的定义,其将标准输出重定向到了文 ...

  8. Serial Programming HOWTO——Linux 串口编程HOWTO

    转自:http://bbs.loveunix.net/viewthread.php?tid=35896 1. Introduction 简介 This is the Linux Serial Prog ...

  9. linux内核看门狗关闭方法,linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

最新文章

  1. openssl——初了解
  2. PyQt5 技术篇-设置输入框的placeholder方法,Qt Designer设置Line Edit、Text Edit编辑框的placeholder
  3. Mysql 存储引擎中InnoDB与Myisam的主要区别
  4. C++ 数据结构-图相关操作的算法思路
  5. Codeforces Round #729 (Div. 2)
  6. mongoose Topology was destroyed 处理
  7. Hibernate和MyBatis的缓存机制和比较
  8. php 图片剪切为透明,解决PHP剪切缩略图生成png,gif透明图时,黑色背景问题
  9. 培养逻辑思维的app_久趣数学思维V1.4.1-久趣数学思维APP下载
  10. 数据分析基本思路及手法
  11. Ubuntu 环境变量文件介绍
  12. 关于php开发中用户请求数据的安全问题的一点想法
  13. VLFeat中SIFT特征点检测
  14. 使用ThinkMusic网站源码配合cpolar,发布本地音乐网站
  15. 计算机鼠标老跳动,用win10系统,鼠标总是乱飞乱跳怎么回事,找到原因及解决方案了...
  16. 撸猫游戏千千万,他们凭什么被推荐?
  17. eNSP 配置简单静态路由 实现全网可达
  18. 不做无用功 Google Colab掉线自动重连“助手”
  19. BIOS 启动类型:Legacy+UEFI、UEFI BOOT、Legacy BOOT
  20. 软件架构设计 大型网站技术架构与业务架构融合之道

热门文章

  1. how is object structure really created - when the child equipment is downloaded
  2. Text Storage table
  3. Jerry的SAP Kyma和Kubernetes讲座的幻灯片分享
  4. SAP MES(manufacturing execution system)介绍
  5. SAP CRM呼叫中心activity board的填充逻辑调试
  6. SAP CRM产品主数据明细页面无法打开的调试步骤
  7. 如何用代码填充S/4HANA销售订单行项目的数量字段
  8. Jmeter5.3(windows下)安装过程问题总结
  9. 解析java源代码_一步步解析java执行内幕
  10. 电脑ip地址设置_路由器怎么设置静态IP 路由器设置静态IP方法【详解】