CSDN

訂閱

發行量:967 

騰訊開源開年紅!TencentOS 內核正式開源

作者| 馬超責編 | 胡巍巍1月9日,騰訊正式開源其雲原生作業系統內核TencentOS Kernel,筆者看到,在GitHub上發布幾小時後,該項目已經獲得了近百個Star。

2020-01-10 05:18 / 0人閱讀過此篇文章  

作者 | 馬超

責編 | 胡巍巍

1月9日,騰訊正式開源其雲原生作業系統內核TencentOS Kernel(GitHub地址:https://GitHub.com/Tencent/TencentOS-kernel),筆者看到,在GitHub上發布幾小時後,該項目已經獲得了近百個Star。

在十年前,業界普遍流傳著一句話叫做「代碼正在吞沒世界」,後來又說「網際網路世界的一切源自開源」。而直到最近,人們才真正醒悟,原來雲原生才是背後的那個大BOSS,凡是不使用雲的都將落後,都無法做到敏捷,跟不上時代。

TencentOS Kernel恰恰是開源+雲原生的典範,其定製於Linux社區長期支持的4.14.105版本,在資源調度彈性、容器支持、系統性能及安全等層面,都做了深度優化。

該系統的開源,可以幫助行業大幅提升雲上資源的利用效率、降低運營成本,同時獲得更加安全可靠的業務運行環境。

騰訊開源驚喜不斷

在2019年騰訊Techo開發者大會上,騰訊正式宣布將朝著「自下而上」與「自上而下」相結合的目標,推進開源工作。

騰訊還將建立對外開源管理辦公室,對開源項目進行指導和幫助,為開發者提供社區合作交流機會,建設以開源為核心的技術生態圈。

筆者剛剛在GitHub上做了一下統計,截止1月9日下午,騰訊在GitHub上發布的總項目數達到95個,Star數近27萬;而且其開源項目很多都堪稱重磅,比如騰訊把以性能RPC開發框架TARS及輕量化服務方案TSeer,捐贈給Linux基金會,而微信Web服務框架WeUI,一經發布就廣受好評。

騰訊在作業系統方面,也是動作不斷,比如TencentOS Kernel的兄弟——Tencent OS Tiny,這個才剛剛問世的IoT作業系統,憑藉其低功耗、低資源占用、模塊化、安全可靠等特點,目前在GitHub上獲得3700顆Star。

雲原生TencentOS Kernel初體驗

在目前超大規模計算的時代,提升效率、降低成本是最基本的訴求。而雲原生最大的特點,就是可持續交付和微服務化,將容器打造成微服務的運行載體。

但是,現在的通用Linux系統內核,並不是為容器+微服務的雲原生架構所設計,在很多方面,甚至不太合適雲原生,但是TencentOS Kernel做了很多直面痛點的優化工作:

ARM64架構的內核熱補丁方案: 內核熱補丁技術是一種無需重啟伺服器,即可實現修改內核運行時代碼的技術。基於該技術,可以在不影響業務正常運行的情況下,修復內核Bug或者安全漏洞,以提高運營效率、底層平台的穩定性和可用性,並使得業務運營體驗有效提升。

目前,面向網際網路的雲服務,每天都會面對數量眾多的攻擊事件,及時針對內核漏洞進行熱補丁升級,是雲服務安全運營的最低要求。

可是,當下其它Linux內核,針對在雲計算中被廣泛應用的ARM架構設備,還缺乏熱補丁支持,不過TencentOS Kernel填補了這個空白。

TencentOS Kernel基於Kpatch框架,開發了ARM64熱補丁特性。Kpatch在內核中,是基於ftrace實現內核函數的替換,類似於ftrace的動態探測點,不過不是統計某些運行數據,而是修改函數的運行序列:在函數運行某些額外的代碼之後,略過舊函數代碼,並跳轉至新函數。

而在用戶態中,則通過Kernel源碼編譯內核,打上補丁後再次編譯內核,通過分析兩次目標文件的變動情況,生成diff.o,並通過解析diff.o生成最終的patch.ko,有關這個方面的實現,令人拍案叫絕,筆者後續計劃專文詳述此部分原理。

升級資源隔離特性

由於容器是特殊的進程,不同容器之間,並不能像同一作業系統下的進程間,那樣進行共享,安全隔離始終是容器平台的核心問題。

而其它版本的Linux內核提供的隔離特性,遠遠不能滿足容器隔離的實際需求內核中,/proc文件系統中,大部分信息沒有實現namespace功能,隔離性根本無從談起。

TencentOS Kernel從容器角度出發對於cpuinfo、stat、loadavg、meminfo、vmstat、diskstats、uptime等進行了隔離增強,保證容器中的應用,能獲得正確的系統狀態信息。

TencentOS Kernel還提供進程GDB禁止功能,阻止跨進程獲取內存,加載動態庫等,保障業務進程的數據安全。

並且針對容器內外進程PID對應關係的痛點,做出了優化,在內核參數kernel.watch_host_pid = 1時,容器內可以通過讀取/proc/self/hostinfo文件,來獲取容器內進程在容器外的真實pid。

更重要的是,TencentOS Kernel待Push的版本中,還特別提到,將提供包括NVMe IO隔離等特性,這將徹底解決IO控制組在多隊列設備場景資源利用率低,不支持按比例隔離等問題,保證了不同場景下的IO隔離效果。

CPU彈性調度算法

TencentOS Kernel針對容器的特性,實現了專門的調試算法,在離在線業務混布場景下收益十分顯著。

筆者看到,其離線調度算法也即將Push,在不影響在線業務質量的前提下,整機的CPU利用率最高提升了3倍,部分業務場景下可將整機CPU利用率提升至90%。

性能方面,TencentOS Kernel針對計算、存儲和網絡子系統均經過獨有的優化,例如PAGE CACHE LIMIT功能,限制Page Cache的使用率,儘量使系統剩餘的內存能夠滿足業務的需求;TencentOS Kernel還新增多個sysctl/proc控制接口,內核啟動參數等來優化用戶體驗。

後記

IT業與傳統行業最大的不同,就是其背後還隱藏著俠義江湖的影子,筆者相信騰訊此次懷著巨大誠意開源的TencentOS Kernel,也必將能從開源社區中,得到中肯的意見與支持。

開源是武林高手下場比武,這種不斷交流切磋的過程,必將提高各門派的武功水準。在此筆者也由衷希望,騰訊今後能開源更多優質的項目,推動行業良性發展。





文章標籤: