命名空間(Namespace)是 Linux 內核的一個特性,它對內核資源進行分區,使得一組進程看到一組資源,而另一組進程看到一組不同的資源。該功能的工作原理是為一組資源和進程使用相同的命名空間,但這些命名空間引用不同的資源。資源可能存在于多個空間中。此類資源的示例包括進程 ID、主機名、用戶 ID、文件名以及一些與網絡訪問和進程間通信相關的名稱。
IBM 工程師 Pratik Sampat?近日發表了 Linux 內核的 CPU Namespace 接口的早期原型。設計這個命名空間是為了解決當前查看可用 CPU 資源的方法的一致性問題,以及解決因了解系統上的資源訪問/位置而可能產生的安全問題。
如今,在容器上運行的應用程序在 cgroups 的幫助下執行它們的 CPU、內存限制與要求。然而,許多應用程序通過 sysfs/procfs 繼承或以其他方式獲得系統的視圖,并根據這些信息分配資源,如線程/進程的數量,內存分配。這可能會導致意外的運行行為,并對性能產生很大影響。
除了一致性問題,目前的處理方式也給多租戶系統帶來了安全和公平使用的影響,例如:
攻擊者可以在知道 CPU 節點拓撲的情況下調度工作負載并選擇 CPU,從而使總線被淹沒而造成拒絕服務攻擊;以及識別 CPU 系統拓撲結構可以幫助識別靠近總線和外圍設備(如 GPU)的內核,以便從其他工作負載中獲得不適當的延遲優勢。
因此,由 IBM 領導的 CPU Namespace 提案追求以下設計:
- 這個原型補丁集引入了一個新的內核命名空間機制 —— CPU Namespace。
- CPU Namespace 通過虛擬化邏輯 CPU ID 和創建相同的虛擬 CPU 映射來隔離 CPU 信息。它鎖定在 task_struct 上,并且 CPU 轉化被設計成扁平的層次結構,這意味著每個虛擬命名空間 CPU 在創建命名空間時都映射到一個物理 CPU,轉化速度更快;并且子代不需要向上遍歷樹來檢索轉化。
- 該命名空間允許控制和顯示接口都能夠感知 CPU 命名空間上下文,這樣命名空間內的任務只能通過虛擬 CPU 映射獲取視圖并因此控制它,以及查看可用的 CPU 資源。
在用 Nginx Web 服務器進行的測試中,內存利用率下降了 92-95%,延遲減少了 64%,每秒的請求和傳輸等吞吐量沒有顯著變化。雖然目前的設計仍有存在一些缺陷,但隨著 IBM 的持續改進,Linux 的性能有望大幅提升。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122223.html