英特爾推出Clear Linux項目:融合虛擬機和容器的優勢

mn6e 9年前發布 | 16K 次閱讀 容器

Clear Linux的目標是讓用戶可以充分利用虛擬機的隔離技術,以及容器的部署優勢。本文的作者是英特爾的工程師,他表示Clear Linux不管是在啟動速度還是內存消耗方面都不遜于容器。Clear Linux目前還處于試驗階段,接下來會支持AppC以及Docker。

容器技術非常火,真是人見人愛。開發者可以使用它來輕松快捷的創建自己的應用程序,同時DevOps和信息系統部門的同事也可以方便的管理和部 署。從很大程度上可以說,Docker的出現讓容器技術重現光芒,Docker改變了整個服務器端應用開發的業界現狀,它的影響不亞于iPhone對客戶 端應用生態圈的影響。

當然,『容器』這個詞不僅僅用于應用程序,它也用來描述一種可以在隔離的環境下運行軟件程序的技術。這樣的容器是使用控制組來管理資源,用內核命名空間來限制容器應用所能使用的資源。對于大部分LWN讀者來說,這是大部分人接觸到“容器”時的第一印象。

很多宣揚容器理念的人會從虛擬機很昂貴,啟動慢說起,然后介紹容器可以提供更加高效的方式。反駁者會說內核容器安全性不足。較真的人在這個問題上 可以爭論很久,但現實是容器相當多的潛在用戶認為這可能還是個錦上添花的領域。有很多開源項目和創業公司致力于改善容器和命名空間的安全性。

我們(Intel Clear Container組織)在容器安全性問題上采取了比較特別的方式,追溯回最基本的問題:到底虛擬機技術有多么昂貴?虛擬機領域的性能主要可以用兩個參數 來衡量:啟動時間和內存額外消耗。第一個參數直接影響到你的數據中心能多快得處理請求(比如用戶登錄到郵件系統需要多少時間);第二個參數會影響一個服務 器上能有多少數量的容器。

我們計劃構建一個系統(我們稱之為“Clear容器”),在此之上可以將虛擬機技術的隔離特長和容器所能帶來的部署優勢集成到一起。為此,我們不再使用一般和虛擬機關聯的”機器“這個詞,也不假裝成是可以和所有OS兼容的獨立PC。

從結果來看,啟動一個安全容器,它使用虛擬化技術,需要150毫秒,每個容器內存額外消耗大概是18到20MB(這意味著可以在128GB內存的 服務器上能夠運行超過3500個這樣的安全容器)。雖然安全容器的啟動沒有使用內核命名空間的Docker容器快,但是對于大部分應用程序來說也已經足夠 了。而且我們還在優化中。

那么我們是怎么做到的呢?

Hypervisor

KVM是hypervisor層的一種可選技術方案,我們研究了QEMU層。QEMU很適合運行 Windows和遺留的Linux客戶機,但是靈活性不夠。不僅僅所有的模擬需要消耗內存,而且它還要求客戶機的底層固件必須滿足一些條件。所有這些都增 加了虛擬機的啟動時間(500到700毫秒)。

但是,我們的方案里使用的是kvmtool,精簡版hypervisor(LWN之前曾經介紹過kvmtool)。 使用kvmtool,我們就不再需要BIOS或者UEFI,而是可以直接進入Linux內核。當然kvmtool也不是完全沒有消耗,啟動 kvmtool,創建CPU上下文環境大概需要花費30毫秒。我們改進了kvmtool,可以支持內核里的就地執行,而不需要解壓內核鏡像,只是 mmap() vmlinux文件,然后直接進入,這樣可以節約內存和時間。

內核

Linux內核啟動非常快。在一臺物理機器上,內核的大部分啟動時間是花在初始化硬件上。但是,在虛擬機里,不存在這樣的硬件延 遲,因為虛擬機本身就是虛擬的,實際上只需要使用設備的virtio類,這會更容易初始化得多。我們也改進了一些預啟動的CPU初始化延遲,但是即便如 此,虛擬機上下文中內核的初始化還需要大概32毫秒,這中間還有很多優化的空間。

我們也解決了內核的一些bug。一些bug的解決已經上傳了,還有些會在后續幾周里陸續上傳。

用戶空間

2008年,我們曾經在Plumbers會議上討論過5秒啟動, 從此之后,很多事情發生了變化,最大的變化就是systemd。Systemd使得創建迅速啟動的用戶空間環境變得非常容易。我很愿意分享我們優化用戶空 間的方法,但事實是,將OS用適當的方式放在一起,用戶空間就已經可以非常快地啟動了(不超過75毫秒)。(在用高速取樣錄制啟動情況時,稍微比這個時間 多了一點,不過多出來的時間全是測量方法造成的消耗。)

內存消耗

內存消耗方面很有幫助的特性是DAX,4.0 內核的ext4文件系統支持。如果對于宿主CPU而言,你的存儲可以被當做內存,DAX使得系統可以在文件存儲地就地執行。換句話說,當使用DAX的時 候,可以完全跳過頁緩存和虛擬內存子系統。對于使用mmap()的應用程序,這意味著真正的零拷貝,對于使用read()系統調用(或類似操作)的代碼而 言,你只會有數據的一份拷貝。DAX是為快速類閃存的存儲而設計的,這類存儲對于CPU而言就是內存。但是在虛擬機的環境里,這類存儲是很容易模擬的。只 需要在宿主機上將磁盤鏡像文件映射到客戶機的物理內存上,在客戶機內核里使用一個小的設備驅動將這段內存空間作為DAX可用的塊設備暴露給內核就可以了。

DAX解決方案為在客戶機用戶空間里得到所有操作系統代碼和數據提供了零拷貝,零內存消耗的方案。另外,當hypervisor層使用了 MAP_PRIVATE標記時,存儲會立即變成copy-on-write。客戶機對文件系統的寫入不是持久的,因此當客戶容器終止后這些數據會丟失。 MAP_PRIVATE方案使得可以在容器間共享相同的磁盤鏡像,也意味著如果某個容器污染了操作系統鏡像,這些改變并不會存在于之后的容器里。

降低內存消耗的第二個重要特性是宿主機的內核同頁合并(kernel same-page merging, KSM)。KSM是在進程和KVM客戶機之間內存的重復數據刪除的方式。
最終,我們優化了核心的用戶空間,達到最小的內存消耗。最終的時間包括在resident daemons初始化之后調用glibc malloc_trim()函數,將glibc占用的malloc()緩存交還給內核。Glibc默認實現了一種滯后作用,占用一些已經釋放的內存以免很 快又需要它。

下一步

我們的工作是rkt(實現AppC規范,之前LWN也有文章介紹過)的觀點論證。一旦這些工作更為成熟,我們也會考慮添加到Docker里。關于如何開始,如何得到代碼的更多信息在clearlinux.org里,我們的集成和優化工作有進展的話也會在上面及時更新。

原文鏈接:An introduction to Clear Containers(翻譯:崔婧雯 校對:魏小紅)
===========================
譯者介紹
崔婧雯,現就職于IBM,高級軟件工程師,負責IBM WebSphere業務流程管理軟件的系統測試工作。曾就職于VMware從事桌面虛擬化產品的質量保證工作。對虛擬化,中間件技術,業務流程管理有濃厚的興趣。

來自:http://dockone.io/article/388

 本文由用戶 mn6e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!