命名空間(Namespace)是Linux內(nèi)核的一個(gè)特性,它對(duì)內(nèi)核資源進(jìn)行分區(qū),使得一組進(jìn)程看到一組資源,而另一組進(jìn)程看到一組不同的資源。該功能的工作原理是為一組資源和進(jìn)程使用相同的命名空間,但這些命名空間引用不同的資源。資源可能存在于多個(gè)空間中。此類資源的示例包括進(jìn)程ID、主機(jī)名、用戶ID、文件名以及一些與網(wǎng)絡(luò)訪問和進(jìn)程間通信相關(guān)的名稱。
IBM工程師Pratik Sampat近日發(fā)表了Linux內(nèi)核的CPU Namespace接口的早期原型。設(shè)計(jì)這個(gè)命名空間是為了解決當(dāng)前查看可用CPU資源的方法的一致性問題,以及解決因了解系統(tǒng)上的資源訪問/位置而可能產(chǎn)生的安全問題。
如今,在容器上運(yùn)行的應(yīng)用程序在cgroups的幫助下執(zhí)行它們的CPU、內(nèi)存限制與要求。然而,許多應(yīng)用程序通過sysfs/procfs繼承或以其他方式獲得系統(tǒng)的視圖,并根據(jù)這些信息分配資源,如線程/進(jìn)程的數(shù)量,內(nèi)存分配。這可能會(huì)導(dǎo)致意外的運(yùn)行行為,并對(duì)性能產(chǎn)生很大影響。
除了一致性問題,目前的處理方式也給多租戶系統(tǒng)帶來了安全和公平使用的影響,例如:
攻擊者可以在知道CPU節(jié)點(diǎn)拓?fù)涞那闆r下調(diào)度工作負(fù)載并選擇CPU,從而使總線被淹沒而造成拒絕服務(wù)攻擊;以及識(shí)別CPU系統(tǒng)拓?fù)浣Y(jié)構(gòu)可以幫助識(shí)別靠近總線和外圍設(shè)備(如GPU)的內(nèi)核,以便從其他工作負(fù)載中獲得不適當(dāng)?shù)难舆t優(yōu)勢(shì)。
因此,由IBM領(lǐng)導(dǎo)的CPU Namespace提案追求以下設(shè)計(jì):
·這個(gè)原型補(bǔ)丁集引入了一個(gè)新的內(nèi)核命名空間機(jī)制——CPU Namespace。
·CPU Namespace通過虛擬化邏輯CPU ID和創(chuàng)建相同的虛擬CPU映射來隔離CPU信息。它鎖定在task_struct上,并且CPU轉(zhuǎn)化被設(shè)計(jì)成扁平的層次結(jié)構(gòu),這意味著每個(gè)虛擬命名空間CPU在創(chuàng)建命名空間時(shí)都映射到一個(gè)物理CPU,轉(zhuǎn)化速度更快;并且子代不需要向上遍歷樹來檢索轉(zhuǎn)化。
·該命名空間允許控制和顯示接口都能夠感知CPU命名空間上下文,這樣命名空間內(nèi)的任務(wù)只能通過虛擬CPU映射獲取視圖并因此控制它,以及查看可用的CPU資源。
在用Nginx Web服務(wù)器進(jìn)行的測(cè)試中,內(nèi)存利用率下降了92-95%,延遲減少了64%,每秒的請(qǐng)求和傳輸?shù)韧掏铝繘]有顯著變化。雖然目前的設(shè)計(jì)仍有存在一些缺陷,但隨著IBM的持續(xù)改進(jìn),Linux的性能有望大幅提升。