亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 5794 | 回復(fù): 4
打印 上一主題 下一主題

基于容器的虛擬機(jī):Xen類虛擬機(jī)的替代者 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-01-19 16:16 |只看該作者 |倒序?yàn)g覽
基于容器的操作系統(tǒng)虛擬化.pdf (289.16 KB, 下載次數(shù): 154)

基于容器的操作系統(tǒng)虛擬化:
一種高性能,可擴(kuò)展的虛擬機(jī)監(jiān)視器(Hypervisors)替代者

翻譯:黎潤(rùn)
Mail: yijunzhu@live.com
Blog: blog.sina.com.cn/yijunzhu

摘要:
虛擬機(jī)監(jiān)視器(即Hypervisors,下文不再翻譯)伴隨著Xen和VMware的流行而快速商業(yè)化。的確,Hypervisors解決方案(即全虛擬或者半虛擬)滿足絕大部分的應(yīng)用場(chǎng)景,但是在一些對(duì)于對(duì)于隔離和性能都敏感的業(yè)務(wù)領(lǐng)域,它卻顯得有點(diǎn)力不從心。例如高性能計(jì)算集群,網(wǎng)格計(jì)算,主機(jī)中心等等。本文提出一種更適合這種場(chǎng)景的解決方案,該方案集成了以前通用分時(shí)操作系統(tǒng)的資源容器和安全容器的理論精華。Sloaris10和linux項(xiàng)目里的VServer,Virtuozzo就是集大成者。本文詳細(xì)描述了VServer的設(shè)計(jì)和實(shí)現(xiàn)理念,另外還和Xen類的虛擬機(jī)做了一些架構(gòu)上的比對(duì),最后論述了VServer為什么能夠在隔離和效率之間找到合適的平衡點(diǎn)。

1 簡(jiǎn)介
操作系統(tǒng)在設(shè)計(jì)的時(shí)候就面臨著隔離和共享的根本性矛盾,即要讓每一個(gè)應(yīng)用程序都感知到自己是完全占有硬件資源的,同時(shí)又要方便的在應(yīng)用程序之間共享對(duì)象(例如管道,文件)。我們當(dāng)前所使用的個(gè)人電腦操作系統(tǒng)是由老的分時(shí)系統(tǒng)改造而來(lái),它在資源共享方面有先天優(yōu)勢(shì)。另外一方面,基于hypervisors的虛擬機(jī)解決方案首先解決的是數(shù)據(jù)隔離問(wèn)題,帶來(lái)的后果就是兩臺(tái)虛擬機(jī)之間只能通過(guò)網(wǎng)絡(luò)共享數(shù)據(jù)。這就要求我們能夠在兩者之間找到一個(gè)權(quán)衡。
來(lái)看一個(gè)常識(shí),個(gè)人電腦常常是一個(gè)用戶運(yùn)行多個(gè)應(yīng)用程序,和隔離比起來(lái),追求共享是它的天性。對(duì)比來(lái)看,hypervisor主要用來(lái)在一臺(tái)機(jī)器上運(yùn)行多個(gè)不相干的應(yīng)用程序,這些不同的應(yīng)用程序可能屬于各個(gè)不同的獨(dú)立組織。這樣的話,這些應(yīng)用程序之間就無(wú)序共享數(shù)據(jù),我們也就較為容易得出結(jié)論,比起共享,hypervisors更擅長(zhǎng)隔離。但是假如每一個(gè)虛擬機(jī)都運(yùn)行同樣的內(nèi)核和操作系統(tǒng),那么hypervisors所帶來(lái)的隔離是凌駕于所有應(yīng)用都跑在一個(gè)單一內(nèi)核的效率降低基礎(chǔ)之上的。
許多新型的應(yīng)用(例如高性能計(jì)算機(jī)群,網(wǎng)格等等)得益于虛擬技術(shù),虛擬化就是把用戶和應(yīng)用彼此隔離的一種技術(shù)。這些新型的應(yīng)用很看重資源共享的高性性,這種高效性體現(xiàn)在虛擬機(jī)計(jì)算的裸性能或者大量運(yùn)行虛擬機(jī)之間的擴(kuò)展性。
本文描述的虛擬化技術(shù)能夠在增強(qiáng)隔離性的基礎(chǔ)上,仍然保證系統(tǒng)資源共享的高效性。這種技術(shù)集成了以前通用分時(shí)操作系統(tǒng)的資源容器和安全容器的理論精華。Sloaris10和linux項(xiàng)目里的VServer,Virtuozzo就是集大成者。
本文有兩個(gè)主要貢獻(xiàn):
第一:本文是第一次透徹的面對(duì)科研工作者描述VServer的技術(shù)。我們選擇VServer作為基于容器的虛擬機(jī)代表出于如下的幾點(diǎn)原因。1)它是開(kāi)源的,2)它在生產(chǎn)環(huán)境中使用,3)我們有實(shí)際操作運(yùn)營(yíng)VServer的經(jīng)驗(yàn)和數(shù)據(jù)。
第二:我們對(duì)比了VServer和最新進(jìn)行了重大修正的Xen。就性能而言,兩者對(duì)于CPU的調(diào)度使用基本是類似的,但是一些IO密集的業(yè)務(wù),VServer在系統(tǒng)資源使用上更為高效,故總體而言,VServer的性能更佳。那么擴(kuò)展性呢,在一些可能存在業(yè)務(wù)透支(Overbook)的應(yīng)用場(chǎng)景下,VServer的表現(xiàn)遠(yuǎn)遠(yuǎn)超過(guò)Xen。
下一章主要描述基于容器的虛擬機(jī)研發(fā)動(dòng)機(jī)和作用。第三章從細(xì)節(jié)上描寫基于容器的虛擬技術(shù),同時(shí)提及了VServer的設(shè)計(jì)和實(shí)現(xiàn)機(jī)制。第四章則重點(diǎn)關(guān)注Xen和VServer對(duì)比數(shù)據(jù)的基線。第五章是實(shí)驗(yàn)方法論,第六章是結(jié)論。
2 動(dòng)機(jī)
虛擬機(jī)技術(shù)不同的人有不同的見(jiàn)解。為了簡(jiǎn)單起見(jiàn),我們決定統(tǒng)一起見(jiàn),定義為運(yùn)行于提供虛擬功能的系統(tǒng)之上的隔離執(zhí)行環(huán)境。虛擬架構(gòu)從全硬件到全軟件都有,全硬件的例如Intel的VT技術(shù);全軟件但是提供硬件抽象功能的虛擬機(jī),例如Xen,VMWare的ESX;系統(tǒng)調(diào)用層的虛擬機(jī),例如Solaris和VServer;模擬器,例如QEMU;高級(jí)語(yǔ)言的虛擬機(jī),例如JAVA;或者應(yīng)用層程序的虛擬機(jī),例如Apache的虛擬主機(jī)。那么多類型里面,我們集中比較hypervisor和基于容器的虛擬機(jī)。
        本章的剩余部分首先介紹我們重點(diǎn)提及虛擬機(jī)的使用場(chǎng)景,對(duì)應(yīng)的比對(duì)虛擬化的不同方法。接著我們創(chuàng)建一個(gè)基于容器的虛擬技術(shù)的應(yīng)用場(chǎng)景。

2.1 使用場(chǎng)景
對(duì)于虛擬機(jī)的使用,我們有很多創(chuàng)新的主意。例如加固桌面電腦的工作安全環(huán)境;實(shí)時(shí)檢測(cè)病毒攻擊;找出電腦被入侵的原因并且調(diào)試系統(tǒng)錯(cuò)誤,F(xiàn)在虛擬機(jī)更是大量的被程序員用于開(kāi)發(fā)和測(cè)試,被IT數(shù)據(jù)中心用于整合業(yè)務(wù),被傳統(tǒng)的主機(jī)供應(yīng)商用來(lái)賣虛擬主機(jī)。另外一些新型業(yè)務(wù)也在積極的考慮,評(píng)估使用虛擬主機(jī)來(lái)進(jìn)行高性能計(jì)算,網(wǎng)格計(jì)算等。本文主要關(guān)注這些新型應(yīng)用,性能是他們考慮的第一要素。
機(jī)器群,理想化的實(shí)現(xiàn)是基于網(wǎng)格的,但是在實(shí)際生產(chǎn)環(huán)境里面,往往都是通過(guò)高性能集群來(lái)實(shí)現(xiàn)。機(jī)器群通過(guò)批量調(diào)度的方案來(lái)支持多用戶作業(yè)。其實(shí)機(jī)器群不需要運(yùn)行太多的虛擬機(jī)(經(jīng)常是一臺(tái)物理機(jī)器運(yùn)行一個(gè)虛擬機(jī)),但是他們對(duì)于系統(tǒng)總體的性能是相當(dāng)?shù)拿舾。同時(shí)根據(jù)經(jīng)驗(yàn),機(jī)器群的配置錯(cuò)誤也大部分是由于使用和內(nèi)核不兼容的虛擬操作系統(tǒng)跑應(yīng)用軟件引入的。因此,讓用戶能夠在虛擬機(jī)里面使用他們自己的版本庫(kù)或者分發(fā)版本可以解決這個(gè)問(wèn)題。
而主機(jī)托管則不一樣,他們一般是在不同的虛擬機(jī)里面跑同樣的內(nèi)核,同樣的軟件。在主要關(guān)注盈利的應(yīng)用場(chǎng)景下,主機(jī)托管商努力的從規(guī)模經(jīng)濟(jì)以及降低虛擬機(jī)的遷移成本里面獲利。所以主機(jī)托管商總是想在不降低服務(wù)質(zhì)量的前提下,最大化現(xiàn)有硬件的運(yùn)行能力。不過(guò)不幸的是主機(jī)托管商自己也不清楚他們?cè)谝粋(gè)硬件平臺(tái)上可以跑多少個(gè)虛擬機(jī)。
幸運(yùn)的是,CoMon發(fā)布了基于PlanetNet的虛擬機(jī)性能監(jiān)控程序。(接下來(lái)就是介紹PlaneNet的東東,不翻譯了。)
CoMon把虛擬機(jī)分成活躍的和運(yùn)行的。活躍的主要指虛擬機(jī)里面有進(jìn)程。而運(yùn)行的主要指在最近的5分鐘內(nèi),至少1%的CPU時(shí)間被程序消耗?磧蓚(gè)例子。

        上圖我們可以看到5條線,25%的階段落在第一條和第二條之間,等等。我們也注意到,經(jīng)常在5分鐘的間隔內(nèi),有10-15個(gè)運(yùn)行主機(jī)和60個(gè)活躍主機(jī)。我們要注意到,在這個(gè)網(wǎng)絡(luò)里,都是普通的計(jì)算機(jī),如果你也遇到我們一樣的負(fù)載,請(qǐng)考慮虛擬機(jī)吧。

2.2 基于容器的虛擬機(jī)應(yīng)用場(chǎng)景
適合基于容器的虛擬機(jī)一個(gè)重要的條件就是我們要在隔離和性能之間做平衡,第四節(jié)和第五節(jié)主要定量的分析基于容器的虛擬機(jī)比Xen在性能上更勝一籌。所以我們時(shí)刻需要問(wèn)自己的是,隔離和性能哪一個(gè)更重要。
虛擬機(jī)的性能可以通過(guò)吞吐量,延遲等等衡量,而擴(kuò)張性則可以借助并發(fā)的虛擬機(jī)數(shù)量來(lái)做一個(gè)評(píng)判,但是隔離性卻難以界定一個(gè)數(shù)量標(biāo)準(zhǔn)。系統(tǒng)在具備了錯(cuò)誤隔離,資源隔離以及安全隔離的特點(diǎn)后,我們就能夠大致說(shuō)這個(gè)系統(tǒng)是完全隔離的。下面也還會(huì)提及,基于容器的虛擬機(jī)和基于hypervisor的虛擬機(jī)兩者是存在重疊的。
錯(cuò)誤隔離主要指一個(gè)虛擬機(jī)出問(wèn)題了之后,他能夠控制對(duì)其他虛擬機(jī)的數(shù)據(jù),狀態(tài)以及其他操作的影響。為了達(dá)到這個(gè)目的,兩臺(tái)虛擬機(jī)之間必須完全直接的數(shù)據(jù)和代碼共享。在基于容器和基于hypervisor的虛擬技術(shù)里面,虛擬機(jī)之間通過(guò)地址空間就能夠達(dá)到錯(cuò)誤隔離,不過(guò)他們?cè)诘讓拥奶摂M層存在代碼和數(shù)據(jù)的共享,如果在這個(gè)模塊里面出bug,所有的系統(tǒng)都會(huì)收到影響。
歷史經(jīng)驗(yàn)證明,只有不足8w行代碼的hypervisor層能夠提供足夠的可靠性。但是我們還需要關(guān)注一下虛擬機(jī)的主機(jī)操作系統(tǒng)(Host OS),它往往是一個(gè)完整的系統(tǒng),虛擬機(jī)(Guest OS)對(duì)于設(shè)備的訪問(wèn)和認(rèn)證,都需要借助主機(jī)操作系統(tǒng)完成,而主機(jī)操作系統(tǒng)宕機(jī),所有虛擬機(jī)都掛了,所以有人建議把設(shè)備的驅(qū)動(dòng)分割成獨(dú)立的驅(qū)動(dòng)域(IDD)。
Linux的體積巨大,很大程度上是設(shè)備驅(qū)動(dòng),文件系統(tǒng)以及網(wǎng)絡(luò)協(xié)議棧造成的,它的內(nèi)核核心部分只有不足14w的代碼行。為了提高錯(cuò)誤處理的彈性和靈活性,對(duì)于設(shè)備驅(qū)動(dòng)可以采用IDD以及,或者在Linux內(nèi)核里面采用Nook技術(shù)。不過(guò)不巧的是,目前還沒(méi)有直接的數(shù)據(jù)來(lái)比較Xen+IDD和Linux+Nooks的性能。
那我們就假象一下設(shè)備驅(qū)動(dòng),文件系統(tǒng)以及網(wǎng)絡(luò)協(xié)議棧都是極其安全的,那么錯(cuò)誤恢復(fù)的難易就取決于暴漏給虛擬機(jī)的接口數(shù)目了。虛擬機(jī)之間看到的接口越多,他們被感染的可能性就越大;趆ypervisors的系統(tǒng)只提供了少數(shù)的時(shí)間和驅(qū)動(dòng)接口,而基于容器的操作系統(tǒng)則提供了一些列的ABI接口。那么我們就能夠推導(dǎo)出一個(gè)結(jié)論,基于hypervisors的虛擬機(jī)稍微安全一些。
資源隔離主要是指對(duì)一臺(tái)虛擬機(jī)能夠進(jìn)行資源使用的審計(jì)以及執(zhí)行資源的使用。從而確保其他虛擬機(jī)對(duì)于資源的公平使用。虛擬機(jī)之間未預(yù)料的交互我們常常稱呼為干擾。提供資源隔離,從總體來(lái)說(shuō),我們主要就是能夠?qū)ξ锢碣Y源進(jìn)行精度的分配和調(diào)度,例如CPU周期,內(nèi)河大小,帶寬,硬盤空間等等。實(shí)際上我們雖然實(shí)行了資源隔離,但是總有一些資源是共享了,他們之間也會(huì)互相干擾,例如文件描述符,端口,PID,共享緩存。資源共享的一個(gè)極端是任何資源都定量化,例如一個(gè)虛擬機(jī)可以獨(dú)立的使用100Mcps,1.5Mbps的帶寬;另外一個(gè)極端則是創(chuàng)建一個(gè)全局的共享資源池,所有人共享。當(dāng)然在使用中我們可以選擇兩者的混合體作為一個(gè)較為完美的解決方案。
安全隔離主要指限制虛擬機(jī)對(duì)邏輯對(duì)象的訪問(wèn),例如文件,虛擬內(nèi)存地址,端口數(shù)目,用戶的標(biāo)志,進(jìn)程ID等等。通過(guò)這些控制,安全隔離可以做到(1)配置獨(dú)立,因此一個(gè)虛擬機(jī)的全局命名文件不會(huì)和其他機(jī)器的文件沖突。(2)安全,通過(guò)安全隔離,一臺(tái)虛擬機(jī)都不能修改另外一臺(tái)虛擬機(jī)的數(shù)據(jù)和代碼,這樣就減少了虛擬機(jī)之間互相影響的可能性。一個(gè)擁有完全安全的虛擬系統(tǒng),虛擬機(jī)之間是互相卡不到文件或者進(jìn)程的信息,這樣他們只能修改自己的文件對(duì)象。但是一個(gè)只具備部分安全隔離的虛擬系統(tǒng),他們就可能共享一個(gè)命名空間,例如全局的文件系統(tǒng),通過(guò)這種方式,一臺(tái)虛擬機(jī)就能夠修改另外一臺(tái)虛擬機(jī)的對(duì)象。后面我們就會(huì)看到,基于容器的虛擬機(jī)一般是后者,即訪問(wèn)控制應(yīng)用在全局對(duì)象上,而不是維護(hù)每一個(gè)虛擬機(jī)的自知域和命名空間,選擇這種方式,主要也是處于性能上的考慮。在這種半隔離的環(huán)境下,信息泄漏是可能存在的。例如一個(gè)非法的用戶可能會(huì)潛在的獲取已經(jīng)在使用的端口,名稱,進(jìn)程等等信息。但是總而言之,兩者技術(shù)(基于容器和基于hypervisors)都能夠在虛擬機(jī)之間隱藏邏輯對(duì)象,做到配置獨(dú)立和系統(tǒng)安全。
討論: 人們往往因?yàn)閺?qiáng)健的隔離技術(shù)以及其他增值屬性而采用虛擬化技術(shù)。下表提供了流行的增值業(yè)務(wù),例如多內(nèi)核,每個(gè)虛擬機(jī)都有管理權(quán)限,定時(shí)監(jiān)控,掛起以及在物理機(jī)器之間遷移虛擬機(jī)等等。

        因?yàn)榛谌萜鞯奶摂M機(jī)是跑在一個(gè)單一的內(nèi)核鏡像上,故他們不具備hypervisors多內(nèi)核支持特性。也因?yàn)橥瑯拥脑,基于容器的虛擬機(jī)不具備很多人們渴求的特性,例如內(nèi)核模塊的加載等等底層操作。但是其余的操作基本都能夠得到有力的支撐,我們?cè)谏厦娴谋砀窭锩嬉呀?jīng)看到。我們不能只看到不足,基于容器的虛擬機(jī)帶來(lái)了一個(gè)全新的技術(shù),那就是虛擬機(jī)遷移,通過(guò)這個(gè)技術(shù),管理員能夠做到在線升級(jí)。例如更換內(nèi)核,性能增強(qiáng)或者新特性釋放都不需要重啟虛擬機(jī)。
        表二(下表)給出了虛擬技術(shù)的不同緯度衡量標(biāo)準(zhǔn),x軸用來(lái)描繪虛擬技術(shù)的隔離強(qiáng)度,y軸是交互的能力。

        通過(guò)上圖我們也能夠看出,目前為止,沒(méi)有一個(gè)完美的技術(shù)能夠解決隔離性和效率的結(jié)合。我們可以簡(jiǎn)單的說(shuō)一下,在效率要求比較嚴(yán)格的領(lǐng)域里,VServer更為適合一些。相應(yīng)的,更看重隔離的場(chǎng)景,他們應(yīng)該選擇基于hypervisor的技術(shù)。最后要指出的是,兩種技術(shù)并不是互斥的,用戶完全可以在基于hypervisor虛擬機(jī)里面跑基于容器的虛擬機(jī)。

3 基于容器的操作系統(tǒng)
本節(jié)我們主要總體上看一下基于容器的操作系統(tǒng)是如何實(shí)現(xiàn)隔離的,以及VServer是通過(guò)什么機(jī)制來(lái)實(shí)現(xiàn)虛擬機(jī)的。
3.1 總覽
        基于容器的虛擬機(jī)提供了一個(gè)共享的,虛擬化的OS鏡像,包括獨(dú)一的根文件系統(tǒng),一系列可執(zhí)行文件和庫(kù)以及其他創(chuàng)建虛擬機(jī)時(shí)候添加的東西。每一個(gè)虛擬機(jī)都可以像正常的操作系統(tǒng)一樣關(guān)閉,掛起,并且啟動(dòng)只要數(shù)秒鐘。對(duì)于應(yīng)用和用戶來(lái)講,每一個(gè)虛擬機(jī)看起來(lái)就像一個(gè)獨(dú)立的主機(jī)。正如下圖所示,這兒有三組虛擬機(jī),每一個(gè)主機(jī)平臺(tái)都有共享的OS鏡像和一個(gè)私有的主機(jī)虛擬機(jī)構(gòu)成。

        主機(jī)虛擬機(jī)(Host VM)主要用來(lái)管理其他虛擬機(jī)。而虛擬平臺(tái)我們看到只有g(shù)uest VM。跑在客戶虛擬機(jī)里面的應(yīng)用程序以為自己就是在一個(gè)正常的操作系統(tǒng)里面運(yùn)行。從這邊上看來(lái),基于基于容器的和基于hypervisor的虛擬機(jī)存在一些差異,但是他們實(shí)質(zhì)上的差異在于實(shí)現(xiàn)隔離的技術(shù)。
        下圖(圖四)分別就他們的安全和資源隔離做了分類對(duì)比,基于容器的虛擬機(jī)主要通過(guò)隔離操作系統(tǒng)內(nèi)核的對(duì)象完成安全性的隔離,例如(PID,UID,系統(tǒng)共享內(nèi)存,IPC,ptys等等)。那么具體來(lái)講應(yīng)用了下列的一些技術(shù)(1)隔離命名空間(2)訪問(wèn)權(quán)限控制,以前的全局對(duì)象(句柄,用戶ID等等)是在完全不同的空間里,不同虛擬機(jī)之間是完全看不到的,因此他們就不能訪問(wèn)到命名空間之外的對(duì)象。但是在上下文虛擬的應(yīng)用場(chǎng)景下,全局的對(duì)象標(biāo)記變成了每個(gè)虛擬機(jī)本地化的了,換句話講就是全局的對(duì)象標(biāo)記僅僅是在每個(gè)虛擬機(jī)內(nèi)部全局。另外要提及的就是過(guò)濾器,它要在內(nèi)核對(duì)象運(yùn)行的時(shí)候,實(shí)時(shí)檢查虛擬機(jī)是否有權(quán)限訪問(wèn)內(nèi)核對(duì)象;趆ypervisor的虛擬機(jī)也是通過(guò)上下文虛擬化以及過(guò)濾器來(lái)實(shí)現(xiàn)隔離,不過(guò)它們往往是通過(guò)指令來(lái)完成的。這些指令主要應(yīng)用在硬件抽象層,例如虛擬地址空間,PCI總線空間,設(shè)備以及特權(quán)指令;谌萜骱突趆ypervisor的虛擬機(jī)對(duì)于資源隔離所使用的方法是相近的。兩者都需要復(fù)用物理資源,例如CPU周期,IO帶寬,內(nèi)存和存儲(chǔ)空間。最新的Xen花了很大力氣優(yōu)化CPU的復(fù)用(其實(shí)就是guest VM可以直接操作CPU)。不過(guò)其他的物理資源,還是需要通過(guò)host VM來(lái)訪問(wèn)。讓我們感興趣的是,Xen的host VM是基于Linux,這樣guest VM的資源控制器和Linux VServer就是一致的了。兩者的區(qū)別就在于他們?nèi)绾卧谔摂M機(jī)和資源之間做的映射關(guān)系。

        作為一個(gè)參考,基于hypervisor的虛擬機(jī),他們?cè)趇32架構(gòu)下,hypervisor大概有8w行代碼,另外Linux不同分支的半虛擬化需要額外的1.5w行代碼。還是看看VServer,它只需要不到9千行代碼打到內(nèi)核里面,也因?yàn)檫@個(gè)架構(gòu)無(wú)關(guān)的特性,它僅僅需要微小的修正就很容易就能夠運(yùn)行在8種不同的架構(gòu)上。VServer新建了50多個(gè)新文件另外修改了300多個(gè)老文件,真是不容易啊。
3.2 VServer 資源隔離
本節(jié)主要來(lái)說(shuō)說(shuō)VServer是如何做到資源隔離的?傮w來(lái)看,它就是綜合利用了Linux已經(jīng)存在的資源管理和記賬功能。不管物理的還是邏輯的資源,VServer都是簡(jiǎn)單的對(duì)VM能夠消費(fèi)的量做一個(gè)限制。
3.2.1 CPU調(diào)度:公平共享和資源預(yù)留
VServer實(shí)現(xiàn)的CPU資源隔離,在Linux標(biāo)準(zhǔn)的O(1)調(diào)度基礎(chǔ)上增加了TBF(令牌桶過(guò)濾器)。每一個(gè)虛擬機(jī)都以一個(gè)固定的速度累加令牌,同時(shí)每一個(gè)tick,有運(yùn)行進(jìn)程的虛擬機(jī)都會(huì)消費(fèi)令牌。當(dāng)一個(gè)虛擬機(jī)把他的令牌消費(fèi)完畢后,就會(huì)被移出運(yùn)行隊(duì)列,直到它又有了空閑的令牌。最初VServer的令牌桶用來(lái)設(shè)定CPU調(diào)度的上邊界,但是我們也可以用這種方式來(lái)擴(kuò)張資源隔離。后來(lái)我們通過(guò)修改令牌桶來(lái)提供CPU調(diào)度的公平共享和資源預(yù)留。令牌桶的發(fā)放速度取決于虛擬機(jī)是預(yù)留還是共享的方式運(yùn)行,例如預(yù)留10%CPU的虛擬機(jī)每秒鐘分發(fā)100個(gè)令牌(因?yàn)橐粋(gè)令牌能夠讓一個(gè)進(jìn)程運(yùn)行1毫秒)。而共享CPU的虛擬機(jī)(有運(yùn)行進(jìn)程)在任何時(shí)候都會(huì)被調(diào)度,除非預(yù)留CPU的虛擬機(jī)被調(diào)度了。最后,CPU的運(yùn)行總時(shí)間受到虛擬機(jī)類型的影響,預(yù)留CPU的虛擬機(jī)肯定能夠得到預(yù)留值,而共享CPU則分享剩下的所有CPU時(shí)間。這樣計(jì)算一下,一個(gè)虛擬機(jī)能夠獲得的CPU時(shí)間就是自己預(yù)留的(例如10%)加上共享的剩下CPU時(shí)間(例如1/10的剩余CPU時(shí)間)。
3.2.2 I/O QoS: 公平調(diào)度和資源預(yù)留
層次化的令牌桶(HTB)緩存了Linux的TC請(qǐng)求,通過(guò)這種方式來(lái)完成在虛擬機(jī)之間的帶寬的預(yù)留和共享。每一個(gè)虛擬機(jī)都需要指定預(yù)留的帶寬和共享的帶寬。預(yù)留帶寬指定本機(jī)發(fā)送出去的總帶寬,而共享數(shù)值則用于超出預(yù)留值之后,如何分配共享資源。VServer發(fā)送出去的報(bào)文會(huì)被打上Tag,這個(gè)Tag會(huì)和每一個(gè)VServer的令牌桶關(guān)聯(lián)上,層次化的令牌桶能夠保證每一個(gè)VServer按照預(yù)留的資源發(fā)送報(bào)文,超出部分則是公平調(diào)度資源。所以我們創(chuàng)建一個(gè)虛擬機(jī)的時(shí)候可以僅僅制定預(yù)留或者共享的數(shù)值,也可以賦予兩者的混合體。
硬盤的IO是通過(guò)Linux的標(biāo)準(zhǔn)CFQ(完全公平隊(duì)列)進(jìn)行調(diào)度,CGQ能夠最大限度的保證每一個(gè)虛擬機(jī)共享塊設(shè)備的IO帶寬。
3.2.3 Storage Limits
VServer對(duì)于每一個(gè)虛擬機(jī)都提供了內(nèi)存和存儲(chǔ)空間的限制接口。硬盤空間的限制可以通過(guò)最大打開(kāi)的磁盤block和inode節(jié)點(diǎn)數(shù)目來(lái)完成。而內(nèi)存空間的限制則可以通過(guò)如下的一些途徑a)控制RSS(resident set size)大小b)匿名內(nèi)存頁(yè)面的多少c)特定內(nèi)存頁(yè)面的數(shù)目,例如在虛擬機(jī)里面通過(guò)mlock和mlockall映射的頁(yè)面。當(dāng)然用戶也可以聲明虛擬機(jī)的共享內(nèi)存的多少。請(qǐng)注意固定RSS的數(shù)目上限一般是不合適的,管理員希望能夠在虛擬機(jī)里面透支頁(yè)面數(shù)目。這樣的話,其中一個(gè)可選方案就是讓虛擬機(jī)完全占用內(nèi)存,但是開(kāi)啟一個(gè)監(jiān)控進(jìn)程用于透支情況的恢復(fù),例如可以死掉利用物理內(nèi)存最多的進(jìn)程。在我們的測(cè)試環(huán)境里面,一臺(tái)機(jī)器上面跑了90個(gè)活躍的虛擬機(jī),假定每一個(gè)虛擬機(jī)占用10M的內(nèi)存,那么總體也要花銷1GB的內(nèi)存。所以我們就沒(méi)有給每一個(gè)虛擬機(jī)分配獨(dú)立的內(nèi)存,而是全部共享,但是開(kāi)啟了一個(gè)監(jiān)控進(jìn)程,在交換空間快滿的時(shí)候,死掉占用物理內(nèi)存最多的應(yīng)用作為懲罰。

3.3 VServer安全隔離
VServer在內(nèi)核里做了大量的修改來(lái)加固安全隔離。

3.3.1 進(jìn)程過(guò)濾
VServer在所有的虛擬機(jī)里面重用了全局PID命名空間,相對(duì)比而言,OpenVZ則是使用了每個(gè)虛擬機(jī)獨(dú)立的全局命名空間。顯而易見(jiàn),后者更容易實(shí)現(xiàn)安全檢查,恢復(fù),遷移。以后VServer也會(huì)慢慢的往這個(gè)方向改,但是處于精確和完整性,我們會(huì)著重談?wù)劕F(xiàn)在的老模式。
VServer通過(guò)過(guò)濾器來(lái)把進(jìn)程隱藏在每個(gè)虛擬機(jī)的范圍內(nèi),同時(shí)禁止不同虛擬機(jī)之間的異常交互。這樣就要求我們要更改一些內(nèi)核結(jié)構(gòu)來(lái)達(dá)到如下目的:a)每個(gè)進(jìn)程知道自己所屬的虛擬機(jī)b)不同虛擬機(jī)使用的進(jìn)程號(hào)存在差異。
為了規(guī)避一些用戶空間程序(例如pstree)的假定(init進(jìn)程都是存在而且PID為1),VServer提供了一個(gè)映射,會(huì)把一個(gè)進(jìn)程映射為PID為1的INIT進(jìn)程。
當(dāng)運(yùn)行有VServer的系統(tǒng)啟動(dòng)的時(shí)候,所有的進(jìn)程都屬于一個(gè)默認(rèn)的host VM。為了簡(jiǎn)化管理,這個(gè)host VM和其他的guest VM沒(méi)有任何的不同,但是在host VM里面能夠看到全局的進(jìn)程狀況和操作所有的進(jìn)程。相當(dāng)于VServer定義了一個(gè)觀察者,他能夠立刻看到所有的進(jìn)程而已。
這種方法的副作用就是我們?cè)谕恢鳈C(jī)的虛擬機(jī)上面遷移進(jìn)程的時(shí)候,僅僅需要更改了一些映射關(guān)系和統(tǒng)計(jì)值就可以了。
       
3.3.2 網(wǎng)絡(luò)隔離
目前為止,VServer還沒(méi)有和其他基于容器的虛擬機(jī)一樣做到網(wǎng)絡(luò)層的完全虛擬化,它在所有虛擬機(jī)之間共享網(wǎng)絡(luò)層的資源,例如路由表,IP過(guò)濾表等等。但是虛擬機(jī)里面的應(yīng)用程序只能綁定本機(jī)的IP地址和host VM的動(dòng)態(tài)地址。這樣的缺點(diǎn)就是每一個(gè)虛擬機(jī)不能修改路由表或者IP過(guò)濾表。但是這也是精心思考的結(jié)果,通過(guò)這種方式我們能夠達(dá)到最佳的Linux網(wǎng)絡(luò)性能。
VServer網(wǎng)絡(luò)隔離有很多的細(xì)節(jié)值得斟酌,例如一個(gè)虛擬機(jī)綁定IPADDR_ANY或者本地主機(jī)地址(Loopback),這種情況要仔細(xì)處理,防止別的虛擬機(jī)的報(bào)文也會(huì)被本機(jī)收到。解決的方式是對(duì)于每個(gè)收到的報(bào)文都打上標(biāo)簽,在協(xié)議棧分發(fā)的時(shí)候,通過(guò)過(guò)濾器保證只有正確的虛擬機(jī)才能收到特定標(biāo)簽的報(bào)文。我們后面會(huì)看到,這種處理方式帶來(lái)的額外開(kāi)銷和Linux的原生處理比起來(lái)可以忽略不計(jì),總體的吞吐量相當(dāng)喜人。
       
3.3.3 Chroot隔離
Chroot調(diào)用的一個(gè)主要問(wèn)題是他的信息是不穩(wěn)定,每次都可能存在震蕩。一個(gè)簡(jiǎn)單的從chroot環(huán)境里退出的方法如下:
打開(kāi)或者創(chuàng)建一個(gè)文件,保留文件句柄,接著用相同或者低級(jí)別的等級(jí)chroot到子目錄,這樣root就從文件系統(tǒng)中被“刪除了“。
接著再用fchdir切換到上次打開(kāi)的文件句柄,這樣就從脫離了新的root,當(dāng)然也沒(méi)有了老的root(上次操作已經(jīng)刪除了)。
VServer用了一個(gè)特別的文件屬性,稱之為Chroot隔離,這樣在每一個(gè)虛擬機(jī)里面,每一級(jí)的父目錄都會(huì)阻止未認(rèn)證的修改和擅自脫離chroot限制。

3.3.4 Linux能力的上限
        因?yàn)槟壳暗腖inux能力沒(méi)有實(shí)現(xiàn)部分POSIX相關(guān)的文件系統(tǒng)部分,這樣setuid和setgid對(duì)于處于一個(gè)context里面的進(jìn)程來(lái)說(shuō)都有了安全上限。為了繼續(xù)沿用這種安全能力,每個(gè)虛擬機(jī)的進(jìn)程也有了和現(xiàn)存的能力集一樣的控制。
3.4 文件系統(tǒng)的一致性
        VServer的一個(gè)中心目的就是盡可能的減少系統(tǒng)總體開(kāi)銷,VServer用一種簡(jiǎn)單的辦法來(lái)實(shí)現(xiàn)磁盤空間的節(jié)約,方法也很簡(jiǎn)單,對(duì)于一些幾乎不變化的文件(例如庫(kù)文件,二進(jìn)制文件等等。),建立一個(gè)鏈接文件到虛擬機(jī),這樣虛擬機(jī)就能夠使用這些文件了,從而節(jié)約了磁盤空間,內(nèi)存使用等等。
        但是這樣做的壞處是,一個(gè)虛擬機(jī)有意或者無(wú)意的刪除了這些共享的文件,其他的虛擬機(jī)也就會(huì)受到影響。VServer采用的這種技術(shù)也叫做寫時(shí)拷貝。當(dāng)一個(gè)虛擬機(jī)嘗試修改這個(gè)文件的時(shí)候,虛擬機(jī)會(huì)拷貝一份私有的文件給他。
        基于容器的虛擬機(jī)這種共享方法,我們稱之為一致性,但是需要特別說(shuō)明的是我們提出這種策略不是為了管理上的方便,而是為了減少資源的消耗。例如一個(gè)典型的Linux Server會(huì)消耗500M內(nèi)存空間,但是10個(gè)這樣的Server也只需要700M空間,并且需要更少的內(nèi)存用戶cache,這絕對(duì)是個(gè)不錯(cuò)的選擇。

(第四章和第五章主要就是通過(guò)比較結(jié)果說(shuō)明VServer性能和隔離性做的如何如何好,不翻譯。)
4 System Efficiency
4.1 Micro-Benchmarks
4.2 System Benchmarks
4.3 Performance at Scale
4.3.1 OSDB
5 Resource Isolation
5.1 Single-dimensional Isolation
5.2 Multi-dimensional Isolation and Resource Guarantees

6 結(jié)論
        虛擬化技術(shù)在大量的場(chǎng)合都給我們帶來(lái)了好處。他提供了多種不同的技術(shù)來(lái)增加系統(tǒng)的安全性,例如隔離,配置獨(dú)立,軟件兼容,更好的系統(tǒng)利用率,可審計(jì)和預(yù)測(cè)的性能等等。關(guān)于隔離和性能,我們希望通過(guò)在建的項(xiàng)目能夠共同提高基于容器和基于hypervisor虛擬機(jī)的規(guī)格。
        同時(shí),針對(duì)特定的應(yīng)用,需要在隔離和性能之間做出權(quán)衡。實(shí)驗(yàn)表明基于容器的虛擬機(jī)理想情況下能夠提供2倍的基于hypervisor的虛擬機(jī)性能,現(xiàn)在市面上有大量的基于容器和基于hypervisor的虛擬機(jī)存在,選擇哪一個(gè)虛擬機(jī)完全是在特定的應(yīng)用情境下更看重哪個(gè)特性。不管怎么樣,我們都希望基于容器類的虛擬機(jī)能夠成為基于hypervisor虛擬機(jī)(例如Xen)的強(qiáng)有力競(jìng)爭(zhēng)者。

論壇徽章:
1
NBA常規(guī)賽紀(jì)念章
日期:2015-05-04 22:32:03
2 [報(bào)告]
發(fā)表于 2011-01-20 10:59 |只看該作者
英文原版呢?一起貼出來(lái)唄

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-01-21 12:22 |只看該作者
很老的文章了吧.

畢竟需求完全不同. 容器化和虛擬化是完全不同的感念.

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-01-22 00:42 |只看該作者
RE LS, VSERVER OPENVZ 等很早就有了。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-02-28 19:20 |只看該作者
翻譯過(guò)的。。。一般都比較老了。。。。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP