购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 KVM的历史

云计算是虚拟化技术最典型的应用场景,而云服务器上最为成功的开源虚拟化项目则是KVM(Kernel-based Virtual Machine)。KVM最初由初创公司Qumranet开发,后来该公司被红帽收购。KVM从2006年10月诞生起便受到了Linux社区的关注与欢迎,仅在两个月后就被Linux内核主线接受 ,并于2007年2月作为Linux内核2.6.20的一部分发布。经历了逾16年的发展,其支持的硬件平台从早期Intel和AMD的x86平台扩展到Arm、PowerPC、S390、MIPS等几乎所有硬件平台,目前支持RISC-V平台的代码也正在社区讨论中。随着这些硬件平台虚拟化功能的完善与发展,越来越多的硬件虚拟化特性也被添加到KVM中,例如Intel的EPT、APIC-V、Posted Interrupt等。与此同时,新的应用场景的需求也给KVM带来了更多软件特性,例如热迁移、嵌套虚拟化等。此外,在提升虚拟化性能的需求推动下,Linux内核得以丰富和完善,与此同时KVM也获益匪浅。例如,通过半虚拟化手段来提升虚拟设备性能的virtio、用于设备直通的VFIO等,这些虽然都是独立于KVM的驱动模块,但是应用场景和虚拟化密切相关,从一开始设计就考虑到了KVM的需求。KVM的成功使得主流的开源虚拟化管理平台(例如oVirt、OpenStack等)将其作为默认的Hypervisor。2017年,最大的云计算厂商AWS从Xen切换到KVM作为其云计算的IaaS引擎技术,KVM逐渐成为主流云服务厂商IaaS产品的默认选择,同时也是函数即服务(Function as a Service,FaaS)安全容器的首选。每年一度的KVM论坛也已然成为虚拟化领域最受关注的盛会。

KVM在服务器市场取得成功的同时,工业界也有人开始思考将KVM用于实时虚拟化的可能性。与通用操作系统不同的是,实时系统更强调任务的确定性,即要求任务总能在确定的时间限(通常是微秒级)之前做出响应。为了将传统Linux改造为实时系统,内核中做了大量的修改,比如支持实时调度器、内核抢占、优先级继承的互斥等,目前绝大多数修改已并入内核主线。此外,保证确定性往往意味着需要以牺牲资源共享为代价。要运行实时虚拟化,不仅需要宿主机操作系统Linux和客户机操作系统提供实时性支持,还意味着需要通过使用场景的定制化来尽可能地减少VM Exit的次数。众所周知,VM Exit带来的上下文切换及在宿主机上进行模拟的开销是导致虚拟机响应延时的最主要因素,比如虚拟CPU(vCPU)和物理CPU(pCPU)的绑定、虚拟机内存预先分配、限制虚拟机仅使用直通设备等。尽管重构之后的Linux可以满足实时性要求,但KVM仍尚未在实时性要求很高的嵌入式平台上得到广泛应用,这其中还有一个不容忽视的原因是Linux内核庞大的代码量。目前,Linux内核已有千万行代码,如此庞大的代码量不仅意味着更大的攻击面,同时其安全认证开销也是嵌入式平台难以负担的。

在接下来的章节中,我们将以Intel虚拟化平台为例来阐述KVM的架构与实现。 O79v9vZ3z5CZKKRz1kLit50YeDUGx3tU1qFZuTETcef0CHz9p/69wORIg60PXWSU

点击中间区域
呼出菜单
上一章
目录
下一章
×