云計算技術背后的那些天才程序員:KVM之父Avi Kivity
作者:劉國輝
提到以色列,自然會使人聯想到猶太人和猶太教及其在二十世紀前半葉所遭受的種種苦難,作為這個世界上最古老的民族之一,除了其沉重的歷史之外, 更使人驚嘆的是,這個面積僅有 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 開發人員的敬意。
<span id="shareA4" class="fl">
</span>