CpuMemSets在Linux作業系統中的實現(轉)

BSDLite發表於2007-08-17
CpuMemSets在Linux作業系統中的實現(轉)[@more@]  一、 前言

  非一致性記憶體訪問(Non-Uniform Memory Access)結構是分散式共享記憶體(Distributed Shared Memory)體系結構的主要分支,它透過結合分散式記憶體技術和單一系統映像(SSI)技術,實現了SMP 系統的易程式設計性和 MPP系統的易擴充套件性的折中,已成為當今高效能伺服器的主流體系結構之一。目前國外著名的伺服器廠商都先後推出了基於 NUMA 架構的高效能伺服器,如HP的Superdome、SGI 的 Altix 3000、Origin 3000、IBM 的 x440、NEC 的 TX7、AMD 的Opteron 等。

  隨著NUMA架構的高效能伺服器被逐漸推廣,系統軟體針對這種分散式共享記憶體架構的特點,在排程器、儲存管理和使用者級介面等方面進行了大量的最佳化工作。例如,SGI的Origin 3000 ccNUMA系統在許多領域得到了廣泛應用,是個非常成功的系統,為了最佳化Origin 3000的效能,SGI的IRIX作業系統在其上實現了CpuMemSets,透過將應用與處理器和記憶體的繫結,充分發揮NUMA系統本地訪存的優勢。Linux社群在自己的NUMA專案中也實現了CpuMemSets,並且在SGI的Altix 3000的伺服器中得到實際應用。

  本文將以 SGI 的 ProPack v2.2 為研究物件,分析 CpuMemSets 在Linux-2.4.20 中的具體實現。CpuMemSets 是 SGI 進行的一個開放原始碼專案,由針對 Linux2.4 核心的補丁、使用者庫、python 模組和 runon 等命令共四部分組成,以實現處理器和記憶體塊的分割槽為目標,控制系統資源(處理器、記憶體塊)面向核心、任務以及虛擬儲存區的分配,為 dplace、RunOn 等 NUMA 工具提供支援,最終最佳化 Linux 系統的 NUMA 效能。

  二、 相關工作

  分割槽技術(Partition)最初出現在大型機(MainFrame)上,如今被廣泛應用到伺服器領域,支援在單個伺服器上執行一個作業系統的多個例項或者多個作業系統的多個例項,主要特點是機器獨立、屏障可靠、單點管理。在分割槽技術支援下,當前多臺伺服器執行的多個作業系統就可以在同一地點的一臺伺服器上同時執行,優於在一個組織中四處分散用多個伺服器來支援不同的作業系統,從而有效地實現了伺服器整合。支援分割槽技術的伺服器可以當作應用伺服器,執行Windows平臺供市場部門使用;同時還可以執行Linux系統供工程部門使用。還可以在大多數使用者執行Windows 2000 Advanced Server系統的同時,在另一個分割槽中為發展組測試其它作業系統;或者所有節點都應用在一個作業系統環境下。各種分割槽實現技術的主要差別體現在分割槽故障隔離手段(硬體或軟體)、分割槽資源粒度、分割槽資源靈活性以、虛擬分割槽資源以及對動態分割槽重構的支援等方面。典型的有IBM的LPAR和DLAPAR(AIX 5L 5.1)、HP的nPartitions和vPartitions(HP-UX 11i)、SUN的Dynamic Domains(Solaris 8)、以及Compaq的Alpha Servers(Tru64 Unix 5.1)。但是,針對NUMA系統採用的分割槽技術與NUMA系統本身具有的單系統映像優勢是矛盾的。

  從使用者的角度來看,NUMA系統提供了對本地主存和遠端主存訪問的透明性;但是,從效能的角度來看,由於儲存模組物理上分佈在不同的節點引起的儲存訪問延遲不一致現象,對系統的效能也帶來了較大的影響。在這類系統中,一個節點對遠端節點儲存訪問的延遲通常比本地訪問延遲高1到2個數量級。頁遷移與頁複製是對資料進行動態區域性性最佳化的主要方法之一。其實質是一種預測技術,根據收集到的資訊預測將來對頁面的訪問情況,然後作出遷移或複製頁面的決策。採用適當的頁複製與頁遷移策略可以減小cache容量和衝突失效,平衡遠端和本地訪問延遲的不一致,達到最佳化NUMA系統效能的目的。但是現有的頁遷移與頁複製策略大都過分依賴於體系結構和特殊的硬體支援,開銷比較大,通用性也不好。

  在NUMA結構的多處理器系統中,一個任務可以在任何一個處理器上執行,然而任務在各種情況的執行會被中斷;被中斷的任務在恢復執行的時候,如果選擇恢復在另外一個處理器上執行,就會導致它失去原有的處理器cache資料。我們知道,訪問cache資料只需要幾個納秒,而訪問主存需要大約50納秒。這時處理器執行的速度處在訪問主存的級別上,直到任務執行了足夠的時間,任務執行所需要的資料重新充滿該處理器的cache為止。為解決這個問題,系統可以採用處理器親近排程策略排程每個節點上的任務:系統記錄下最後執行這個任務的處理器並維持這種關係,在恢復執行被中斷的任務時,儘量恢復在最後執行這個任務的處理器上執行。但是,由於應用程式的特點各有不同,而且工作集具有動態屬性,處理器親近排程的作用是有限的。

  使用者是系統的使用者,也是效能的評判者,他們最清楚應用對系統的需求和評價指標。在一個大的NUMA系統中,使用者往往希望控制一部分處理器和記憶體給某些特殊的應用。CpuMemSets允許使用者更加靈活的控制(它可以重疊、劃分系統的處理器和記憶體),允許多個程式將系統看成一個單系統映像,並且不需要重啟系統,保障某些處理器和記憶體資源在不同的時間分配給指定的應用;也是對分割槽技術、頁遷移和親近排程策略的有益補充。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-963283/,如需轉載,請註明出處,否則將追究法律責任。

相關文章