“只要有足夠多的眼睛,就可以讓所有問題浮出水面。”
在開源社區,以開源理念的發起者之一、Linux創始人林納斯·托瓦茲名字來命名的林納斯定律為不少開發者所共鳴。也正是這種共創共享的精神內核,讓開源自1988年發展至今,并逐步成為全球IT軟件的重要組成。
根據全球最大開源代碼托管平臺 GitHub 年度報告數據顯示,截至 2019 年 GitHub 托管倉庫已有 1.4 億,2019 年新增倉庫 400 萬個,創建第一個項目的用戶比 2018 年增加44%,130 萬開發者對開源做出首次貢獻。SourceClear 調查報告指出開源項目已呈現指數級增長趨勢,2026 年預計超過 3 億。
在騰訊云,也有這樣一支專門面向開源的小分隊:他們深耕云計算的最根本技術之一——虛擬化,并始終以擁抱開源、回饋開源作為使命。
10月29日,在全球虛擬化頂級技術峰會KVM Forum上,2020年全球企業KVM開源貢獻榜正式公布,騰訊云再度榮登該榜,其中兩項技術方案被評為KVM2020年度核心突破。騰訊云因此也成為國內唯一連續四次登榜的云服務商。
騰訊云兩項技術方案獲評KVM2020年度核心突破
不止于此,騰訊云目前在KVM開源社區已貢獻超過170個patch,超過20個技術特性,其中8個被評為KVM年度核心突破,貢獻國內排名第一。也正因為在開源領域的突出貢獻,騰訊云已經累計7次受邀在KVM Forum發表演講。
團隊成員說:“之前中國人一直被開源社區詬病,認為中國人總索取,不貢獻。我們希望用行動說話,為開源社區貢獻真正硬核的好東西,慢慢改變開源社區對中國的偏見。”
探索無人區
KVM是當前云計算中計算虛擬化的主流技術。云服務商通過KVM對物理服務器進行虛擬化后生產出云服務器,用戶就能從虛擬資源池中按需購買不同規格的云服務器產品,進而獲取對應的計算能力。
然而,當時間回流至2013年,KVM卻并不是云計算的“真命天子”。
彼時,騰訊云剛剛從服務騰訊開放平臺上的合作伙伴升級為面向社會全面開放。騰訊云虛擬化技術團隊正在思考,采用什么樣的技術棧,能夠保障好更大規模云上用戶業務安全性、連續性和穩定性。
業界當時最主流的虛擬化技術是Xen,由劍橋大學開發。不管其他云服務商,還是騰訊內部,Xen都是計算虛擬化的不二之選。可是,Xen的痛點在于,代碼過于復雜,當規模達到一定程度后,出問題的幾率倍增,且難以把控,最終極有可能給云上用戶帶來損失。
KVM更像是后起之秀。代碼簡單清晰,從原理上分析相對Xen具有更好的技術前瞻性。但問題是,它僅有一個初級的社區開源版本,而尚未作為一個主流的技術棧為業界所驗證。
是跟隨主流還是探索無人區,需要技術團隊迅速做出抉擇。
經過充分的探討,騰訊云虛擬化技術團隊的選擇是KVM。“面對產業數字化的契機,云計算作為產業互聯網的底層基石,未來一定有巨大的成長空間。Xen大概率不能滿足未來大規模應用場景下的技術需要,探索KVM雖然相對來說更加艱難,但這是一條必由之路。”騰訊云資深虛擬化技術專家馬文霜回憶起當時的決策過程。
但為了穩妥,團隊最開始還只是拿出5%的機器作為KVM的技術試驗場,小步快跑。
試驗總會充滿波折。很快,團隊就經歷了一次面積較大的KVM 虛擬機宕機事故。好在經過周密的檢查,發現這個事故源自于KVM 開源版本里一個小錯誤,改掉就可以恢復正常。
隨后的過程雖然也是問題不斷,但經過團隊的努力,一個個難關逐步被攻克。團隊的技術也在不斷進化,包括重構了整套技術邏輯,以及研究出基于KVM的熱升級技術,能夠在用戶無感知的前提下,快速處理一些底層故障。
技術團隊合影
這至少證明了,KVM這條技術路線能走通。2014年起,騰訊云云服務器CVM已全部基于KVM技術生產。
值得一提的是,2015年,其他云服務商因為感受到 Xen 的局限性,也開始將虛擬化技術從 Xen 切換到 KVM。此時,騰訊云在KVM技術棧上已經積累兩年。
從開源中來,到開源中去
獨行快,眾行遠。
KVM運轉起來不代表一勞永逸。初級開源版本沒有經過集群驗證和海量業務測試,也不能把所有代碼路徑跑到。在真正的業務應用過程中,需要踩的坑超出想象。
如何在踩坑中讓KVM快速成熟起來?騰訊云虛擬化技術團隊的答案是開源——借助騰訊的場景把KVM用起來,發現和解決問題,然后把方案開源,從而帶動更多開發者關注,更多人發現問題,更多人解決問題,最終實現KVM技術演進的利益共享……
2014年底,一個棘手的問題浮現出來。一些大型游戲客戶在使用KVM生產出來的云服務器時,經常出現CPU占用率高,抖動很大的情況,用戶能感到明顯的掉幀。
看代碼,復現問題,技術團隊發現了中間的規律——游戲類業務需要關聯KVM底層的定時器,游戲人數達到一定量的時候,因為一些原因會導致定時器異常。同時,技術團隊發現,出現這個問題是因為KVM架構中時間戳計數器的邏輯有bug。技術團隊采取現網修復的方式解決了這個問題。
問題得到解決后,技術團隊迅速將bug解決的過程寫成一個patch提交給社區,經過一系列嚴格評估,官方認可了由騰訊云團隊貢獻的第一個patch。
KVM社區確認騰訊云首個patch貢獻的郵件
后來,類似的貢獻還有,KVM架構中irq路由表的bug修復,解決大存儲高負載的場景中虛擬機出現惡性宕機……
2015年,更大的挑戰爆發。因為內存存在批次性質量缺陷,基于KVM生產的云服務器故障率飆升。廠商的解決方案是更換內存,但換內存意味著物理服務器需要關機重啟。這對于客戶尤其是大量的游戲客戶來說,顯然無法接受。
能不能把虛擬機環境在運行態中直接搬遷至健康的服務器上?KVM架構中的熱遷移技術設想給了技術團隊啟發。可是問題在于,這個技術存在較大的環境依賴,需要結合業務負載、硬件代次等一系列復雜的因素做技術優化,而且沒有實踐先例。
“沒有退路可言,只有死磕。”如今的騰訊云虛擬化技術負責人陳立東,這樣形容當時的壓力。
沒日沒夜的幾天里,技術團隊不斷研究熱遷移的技術原理,從提升遷移成功率和服務可用性兩個維度推理技術方案。終于,在解決了幾個關鍵技術卡點后,團隊終于找到了一種能夠實現的方案。騰訊云也因此成為第一個大規模運用熱遷移技術,解決硬件批次性故障的云廠商。
衍生問題隨之而來。這個可能會為騰訊云帶來至少一定時間內競爭優勢的技術方案,是否還要第一時間開源?團隊出現了一些分歧的聲音。
“開源應該是一種一以貫之的思想。如果我們這次的熱遷移技術方案不開源,也許能夠獲得一時的競爭優勢,但這就會讓我們一直倡導的開源價值被摧毀,這并不利于KVM技術的長遠發展。”在騰訊云副總裁劉穎的開導下,技術團隊很快達成一致,將熱遷移技術方案貢獻到社區。
這個突破性的貢獻也為騰訊云在社區贏得了廣泛贊譽。隨后的2017年,憑借在這一領域的持續貢獻,騰訊云受邀在KVM Forum上發表主題演講,這也是國內云廠商代表中的首次。
成立專門團隊
2016年底,李萬鵬加入騰訊云,身份是高級工程師。這個職責需要承擔大量的業務開發工作。
因為對開源有著狂熱愛好,他每天早上五點起床,利用上班前的時間和周末以及節假日的時間研究KVM開源相關的項目。
“本職工作的壓力還是很大,為了避免耽誤工作,只能抽業余時間做一些bugfix的工作,雖然價值相對低一點,但也算是對愛好的一種保持吧,這就是騰訊的‘工程師文化’。”與李萬鵬保持相同愛好的還有幾位同事。
無心插柳柳成蔭。李萬鵬和幾個同事在業余愛好上的堅持,卻讓騰訊云在2017年第一次登上了KVM全球企業開源貢獻榜,這也是榜單上首次出現中國云服務商身影。
2017年,騰訊云首次登上KVM全球企業開源貢獻榜
登榜的消息很快傳到了騰訊公司高級執行副總裁湯道生那里,他對團隊提出了表揚和鼓勵。
做出影響力,并得到了領導的肯定,也讓技術團隊更加堅定,在開源領域的持續投入很值得。“從自身角度而言能提升騰訊云的技術影響力,往大的價值上說也是推動技術進步的一個很好的方式。尤其是對KVM這樣一個云計算的關鍵技術,騰訊云應該有這樣的擔當。”
這樣的想法得到了支持。領導決定,成立一個專注開源的虛擬團隊,虛擬團隊成員日常工作量減半,留下精力更好地投入到KVM開源方面的工作當中。
“虛擬化和內核的研究還是有很高的門檻,要想在開源這個領域做出成績,需要更多的人力投入。之前業余時間做,更多就是研究怎么修復bug,成立一個專門的團隊,大家有機會攻克一些關鍵特性。”李萬鵬說。
2018年開始,騰訊云陸續向社區貢獻技術特性。
那一年,騰訊云提出的PV TLB shootdown、PV IPI方案,對TLB刷新以及IPI進行優化,這些方案能夠提升大規格配置虛擬機的性能,降低虛擬化層損耗,使得部分應用場景性能提升達到130%~150%,被列入了當年核心突破。
2018年,騰訊云提交的貢獻被列為核心突破
2019年,騰訊云Yield IPI、C-state MSRs、Exitless Timers方案再次對IPI和Timer進行進一步優化,3個方案再次被評為2019年度核心突破。值得一提的是,2019年騰訊云還推出35ms內啟動一臺虛擬機的輕量級虛擬化技術,創造了業界目前能最快啟動一臺虛擬機的記錄。
2019年,李萬鵬受邀參加KVM大會演講
團隊也吸引了越來越多的人加入,同樣熱愛開源的李海偉就是其中之一。
“業界做開源通常都是零散的組織,像騰訊云一樣專門有虛擬團隊的并不多,這正是吸引我的原因。 ”李海偉表示,專門的組織最大的好處是能夠建立好的氛圍,成員傳幫帶,大家的視野也可以更廣,而且能有比較充裕的時間和精力去做一些高價值的技術突破。
2019年8月,這個組織更進一步。騰訊云產品團隊的架構調整時一封專門的郵件,將李萬鵬、李海偉等劃在了一個部門,部門職責是:1.將經過業務實踐驗證的技術方案持續貢獻到社區;2.將社區里好的技術特性落地到業務中實踐驗證;3.探索KVM技術新方向和難點問題的攻堅……
自此,KVM開源團隊,成為了一個全職部門。
瞄準行業最痛的問題
2020年,針對IPI(處理器中斷)和Timer(定時器)這兩個業務場景中出現頻次最多、性能影響最大以及最難克服的難題,騰訊云提出了快速處理的框架, 繞過虛擬化開銷,使得IPI和Timer處理的性能提升分別有30%和16.5%,再次被評為年度KVM核心突破。
除此之外,針對大規格虛擬機(多CPU和大內存)場景中性能下降明顯的問題,騰訊云經過深入研究和探索,自主設計了完全支持CPU并行化的vMMU方案,克服了KVM原有設計中CPU執行被迫串行化帶來的性能損失,實現了虛擬機內存管理機制的架構升級。目前,該方案已經在騰訊云穩定運行,并已經貢獻給開源社區。
另外,針對操作系統中元數據對內存資源占用過高的問題,騰訊云設計了全新的文件系統Dmemfs(Direct Memory File System), 可以直接管理部分系統預留的虛擬機內存服務,提高系統的資源利用率降低平臺成本。這個方案不僅提高了系統的資源利用率, 能夠降低平臺成本并最終讓利于用戶,同時也給系統開銷降低提供了一種新的思路。目前,這一方案也被貢獻到了開源社區。
“騰訊云現階段在KVM開源方面聚焦的就是行業最痛點的問題,一方面通過持續創新解決騰訊云線上遇到的各種挑戰并將產出反饋給社區,另一方面探索云計算領域的新技術,做好前沿技術的預演和積累,堅定不移地持續為虛擬化開源社區做出貢獻。”陳立東表示。
另一個更大范圍的數據是,截至2020年3月,騰訊共對外開源110個項目,包含騰訊云、微信、大數據、游戲、AI、安全等領域,并覆蓋所有BG(事業群)。
騰訊累計在GitHub獲得了約32萬Star(代表項目受歡迎程度),在GitHub全球開源企業Star數排名中位居全球前十。目前,騰訊已加入Linux、Apache等9大開源基金會,深度合作成為最高級別會員,并向開源基金會捐贈多個優質開源項目。
“生于開源,長于企業,反哺開源,騰訊云希望實現這個良性循環。”劉穎說。