作者:刘国辉
提到以色列,自然会使人联想到犹太人和犹太教及其在二十世纪前半叶所遭受的种种苦难,作为这个世界上最古老的民族之一,除了其沉重的历史之外,更使人惊叹的是,这个面积仅有 2.2 万平方公里的弹丸之地,在短短几十年中转变成为了高科技研发和创新的“全球性大国”。或许,时刻处于强敌环伺的危险境地能够激发人类最原始的创造力,使得以色列在诸多领域出类拔萃,尤其在信息科技领域尤为突出,世界上最大的科技公司不约而同都选择在以色列设立研发中心,而且成果卓著,例如,Intel x86 家族中比较重要的两代 CPU,Sandy Bridge 和 Ivy Bridge 都是由 Intel 以色列的研发中心研发的,蓝色巨人 IBM 也早在上世纪七十年代就在以色列设立了庞大的研发中心,且成果斐然。
但是,值得称道的是科技巨头在以色列的成功并不能掩盖个体的创新力量所散发出的光芒,尤其在云计算领域,当崇尚人格自由,同时又具有坚强性格这两种特质结合在一起所爆发出的创新的力量,使得草根创业公司和个体也敢于在前沿领域与科技巨头一争长短,其中的代表性人物就是 Avi Kivity 和他所在的以色列初创公司 Qumranet,Avi Kivity 提出并推动 KVM(基于 Linux 内核的全虚拟化方案),以其精简的架构,清晰的定位很快获得 Linux 社区多数开发人员的支持得以快速被合并进入主干,从而成为 x86 全虚拟化技术的一棵新星。
虚拟化技术的由来与所面临的挑战
信息技术领域本不应是一个缺乏远见的领域,但事实正好相反,蓝色巨人 IBM 发明了 PC,但失去了整个桌面,Intel 发明并主导 x86 架构的处理器,提出了摩尔定律,但是失去了整个掌上,而且,即使是处于鼎盛时期的 Intel,即使有摩尔定律指路,也没有人能料到,有朝一日 x86 家族的处理器几乎快要统治整个数据中心,而且 x86 家族处理器计算能力的提升速度快到可以在原本为桌面环境设计的处理器架构上采用“分时”来为多个虚拟环境提供运算能力的地步。
要知道虚拟化技术并不新,早在 1967 年,第一代的硬件虚拟化技术就由 IBM 提出,蓝色巨人在他们的大型机中实现了以 CP/CMS 为代表的虚拟化技术。但直到 2006 年,Intel 和 AMD 才分别在各自的处理器中加入了“有限”的硬件虚拟化特性,实际上是给 CPU 打了一个补丁:),分别称为,Intel VT-x 和 AMD-V。与大型机所采用的专为虚拟化设计的处理器不同,从 PC 机起家的以 Intel 为代表的 x86 家族的处理器生来就并不是为虚拟化设计的。要在 x86 家族处理器上完全向后兼容的同时加入硬件虚拟化特性,无疑成为一个挑战,硬件层面实现较为困难,导致软件层面的实现复杂度也随之水涨船高。据估算,Linux 内核中,虚拟化部分代码,x86 架构部分的代码行是 IA64 架构的 1 倍,S390 架构的 7 倍,PPC 架构的 8 倍。即使和 ARM 架构相比,x86 架构的复杂度依然是其 4 倍,其复杂度之高从中可见一斑。
Talk is cheap, show me the code
硬件层面较为复杂的局面意味着在系统层面需要一个极为精简的设计从而确保 x86 的硬件虚拟化特性能够在 Linux 内核层面有较好的可维护性,良好的性能,同时保持一定程度的可扩展性以便为未来新的特性(补丁)的加入留有余地,另外,在那个时候,Xen 和 Vmware 依靠自己独有的技术分别在不同领域如日中天,尤其值得一提的是,Xen 在开源领域几乎成为了虚拟化的事实标准,而且开源领域一向奉行 Don’t reinvent the wheel 这一金科玉律,这一切无疑都为提出新的虚拟化实现增加了巨大的不确定性,但是当时 Linux 内核中还没有任何虚拟化实现,这一现状又使得提出新的设计成为可能,唯一的问题就是谁能够在足够短的时间内另辟蹊径提出新的方案并且获得多数人的支持,这一点难度之大,恐怕只有深入了解开源社区的人才会感受到,要知道 Linux 社区恐怕是这个星球上最为“独裁”的组织,没有之一,而且语言“暴力”与人身“攻击”司空见惯(Alan Cox 就是无法容忍这一点才选择退出 Linux 社区),要想在其中被认可并取得一席之地,除了超强的技术实力之外,更要有谦逊的品格,非凡的耐心和绝佳的沟通技巧。
Do one thing and do it well
Avi Kivity 提出的方案非常清晰而且巧妙,充分遵循 Linux 源自 Unix 的设计思想,把方案的关注点聚焦于 Linux 内核部分,User space 部分交给了稳定可靠的 Qemu,采用 Qemu 作为其用户空间的入口,而且 KVM 仅仅实现 HVM 功能。遵循惯例,Linux 内核中的 KVM 模块通过设备文件暴露系统呼叫给 User space 的 Qemu。这一切现在看起来似乎平淡无奇,但是,Avi Kivity 方案的背后是要在极短时间内通过代码实现来证实并获得社区认可这一几乎不可能实现的任务,这有赖于 Avi Kivity 对于计算机体系架构的深入理解,不单单是 x86 架构的 Intel VT-x 和 AMD-V,还有后续陆续支持的其它架构,并且深入了解 Linux 内核,精通汇编和C。
以 Avi Kivity 为主的工程师仅仅花了不到一年时间就让 Linux 社区接受 KVM 的设计方案并且通过了代码 Review,最终于 2006 年 10 月合并进入 2.6.20 主干,时至今日,人们依然对于 KVM 合并进入 Linux 主干的速度之快感到不可思议,从中也产生了一些不同的声音,但是多数人还是倾向于最简单的一种答案,那就是 KVM 良好的设计和实现是其最终被社区快速接受的主要原因。几年以后,Avi Kivity 接受采访,最经常被问到的仍然是这个问题,他的回答也总是轻描淡写,说只不过提前花了半年时间在 Linux 社区学习如何更好的与社区开发人员协作,但是我们知道,这背后实际是其投入的大量心血和超强实力。
KVM 的出现震撼了整个了 Linux 社区和业界,人们惊异于其出众的性能,更加折服于其精简的设计和良好实现(在 SPEC virt2013 Benchmark 中基于同样的处理器、内存和存储,KVM 单在 VM Density 指标上以 37% 的优势超越对手),以至于,在极短的时间内,这个世界上最重要的科技公司纷纷宣称他们将把 KVM 作为他们 x86 虚拟化的解决方案,要知道,这极为不同寻常,在这之前以蓝色巨人 IBM 为代表的科技巨头已经在 Xen 上投入了大量的财力物力和人力,如果没有决定性的因素,科技巨头的 Strategic dicision 是不可能轻易改变的,时至今日,IBM 在准备推出 Power KVM,打算把 KVM 移植到 Power Linux 上。就连以 Google Glass、无人驾驶汽车和 Project Loon 著称的跟现代科技格格不入的前沿科技巨头 Google 也在其 Google Compute Engine 中采用 KVM 技术作为 x86 的虚拟化方案来和 Amazon 对抗。这一切只能说明 KVM 凭借其优异的性能和精简架构当仁不让成为了一项无法忽视的虚拟化技术屹立于云计算之巅。
云计算的新征程 OSv
在 KVM 合并进入 Linux 主干之后不久 Avi Kivity 很快成为内核 KVM 子模块的 Maintainer,2012 年 11 月 21 日一封标题为“KVM: Retire as maintainer”的简短邮件出现在 Linux 社区邮件列表中,在以 KVM 模块 Maintainer 身份贡献 Linux 社区 6 年零 6 个月之后,Avi Kivity 选择开启了新的征程,发起并担任云计算创业公司 Cloudius 的 CTO,这是一个不同寻常的选择,要知道在这个世界上,在虚拟化和云计算领域恐怕没有多少人能够比 Avi Kivity 更有发言权,这一次,Avi Kivity 敏锐的意识到除了 x86 家族的处理器架构之外,已经成为云计算基石的 Linux 同样天生不是为云计算设计的,因此具有极大的性能提升空间,大胆提出并设计了专为云计算设计的操作系统 OSv,当然,其依然是建立在 Linux 基础上,但是其无需 Context switch,真正的 Zero Copy 以及 Lock Free 等特性使得其 Less One second boot 相对于众多宣称秒级响应的厂商来说更加具有说服力。尤其重要的是,KVM 之父通过 OSv 项目表达了对以 Linux CGroup 技术为核心的 Containner 技术的看法。
Avi Kivity 是如此低调,以至于你很难在网上找到太多的关于他的信息,只有寥寥几篇报道和访谈,但是 KVM 在整个云计算领域中又是如此的炙手可热,虽然今年已经是 KVM 进入内核的第八个年头,但是 KVM 依然活跃,我们依然难以估量其在云计算领域的真正价值,而这一切都源自于这个地球上最危险的那个角落中的那名天才程序员 Avi Kivity。
注:仅以此文表达对 Avi Kivity、Yaniv Kamay、Dor Laor、Uri Lublin 还有 Anthony Liguori 还有其他 KVM 以及 Qemu 开发人员的敬意。