'共享內存在不同系統的應用與優劣詳解'

"

共享內存是一種使計算機程序能夠同時共享內存資源以實現更高性能和更少冗餘數據副本的技術。共享系統內存可以在單處理器系統、並行多處理器或集群微處理器上運行。對於分佈式系統會有一些差異,但共享內存也可以其上運行。

  共享內存的可擴展性不高,數據一致性也是一個問題。但是在適當的環境中並且運行緩存一致性協議,相對於這些問題,共享內存帶來了更多的優勢。

  共享內存是一類進程間通信(IPC)技術,它改善了計算機組件之間的通信。

"

共享內存是一種使計算機程序能夠同時共享內存資源以實現更高性能和更少冗餘數據副本的技術。共享系統內存可以在單處理器系統、並行多處理器或集群微處理器上運行。對於分佈式系統會有一些差異,但共享內存也可以其上運行。

  共享內存的可擴展性不高,數據一致性也是一個問題。但是在適當的環境中並且運行緩存一致性協議,相對於這些問題,共享內存帶來了更多的優勢。

  共享內存是一類進程間通信(IPC)技術,它改善了計算機組件之間的通信。

共享內存在不同系統的應用與優劣詳解

Pexels 上的 Valentine Tanasovich 拍攝的照片

  什麼是共享內存進程?

  在最簡單的形式中,共享內存是單個服務器上的低級編程過程,使客戶端和服務器能夠使用主內存交換數據和指令。其性能比使用操作系統數據緩衝區等系統服務要快得多。

  例如,客戶端需要與服務器交換數據以進行修改和返回。沒有共享內存,客戶端和服務器都使用操作系統緩衝區來完成修改和交換。

  客戶端寫入緩衝區中的輸出文件,服務器將文件寫入其工作區。完成修改後,該過程會反轉。每發生一次,系統在客戶端和服務器之間生成2次讀取和2次寫入。

  使用共享內存,客戶端將其進程直接寫入RAM併發出信號量值以標記服務器注意。服務器直接在主內存中完成修改,並通過更改信號量值來警告客戶端。每次通信只有1次讀取和1次寫入,讀取/寫入比使用系統服務快得多。

  共享內存和單個微處理器通用流程

  ·服務器使用系統調用來請求共享內存密鑰,並記住返回的ID。

  ·服務器啟動。

  ·服務器發出另一個系統調用,將共享內存附加到服務器的地址空間。

  ·服務器初始化共享內存。

  ·客戶端啟動。

  ·客戶端請求共享內存。

  ·服務器向客戶端發出唯一的內存ID。

  ·客戶端將共享內存ID附加到地址空間並使用內存。

  ·完成後,客戶端將分離所有共享內存段並退出。

  ·使用兩個以上的系統調用,服務器分離並刪除共享內存。

  多處理器共享內存

  這種簡化方案適用於單個微處理器,而多個微處理器之間的內存共享更加複雜,尤其是當每個微處理器都有自己的內存緩存時。目前比較流行的方法有統一內存訪問(UMA)和非統一內存訪問(NUMA)。分佈式內存共享也是可能的,儘管使用的是不同的共享技術。

  UMA:並行計算環境中的共享內存

  在並行計算中,多處理器使用相同的物理內存並且並行地進行訪問,儘管處理器也可以具有私有內存緩存。共享內存可加速處理那些時間至關重要的大型應用程序的並行執行。

  NUMA:對稱多處理器系統(SMU)中的共享內存

  NUMA將SMU配置為使用共享內存。SMU是一種集群架構,它將多個處理器緊密地耦合在一個單獨的服務器環境中,只需一個操作系統。由於每個處理器使用相同的總線,因此密集型操作會降低性能並增加延遲。

  NUMA通過將CPU和內存資源分組為稱為NUMA節點的配置來替換單個系統總線。多個高性能節點在集群內高效運行,允許CPU將其分配的節點視為本地共享內存資源。這減輕了總線上的負載,並將其分配給靈活的、高性能內存節點。

  分佈式系統中的共享內存

  分佈式共享內存使用不同的技術,但結果相同:獨立的計算機共享內存以獲得更好的性能和可伸縮性。分佈式共享內存使單獨的計算機系統能夠通過將其從服務器級別抽象為邏輯共享的地址空間來訪問彼此的內存。

  該體系結構可以分離存儲器並在節點和主存儲器之間分配部件,或者可以在節點之間分配所有存儲器。分佈式內存共享使用硬件(網絡接口和高速緩存一致性電路)或軟件。與單處理器或多處理器共享內存不同,分佈式內存共享可以高效擴展,並支持密集處理任務,如大型複雜數據庫。

  共享內存的挑戰

  共享內存編程在單CPU或集群CPU中非常簡單。所有處理器共享相同的數據視圖,並且它們之間的通信非常快,共享內存編程是一個相對簡單的事情。

  但是,除了主存儲器之外,大多數多處理器系統還為其處理器分配單獨的高速緩衝存儲器。高速緩存存儲器處理比使用RAM快得多,但如果同一系統也使用共享存儲器,則可能導致衝突和數據降級。在高速緩存存儲器體系結構中共享存儲器有三個主要問題:訪問時間縮短,數據不連貫和錯誤共享。

  訪問時間縮短

  多個處理器通過同時訪問相同的內存位置而導致爭用和性能下降。因此,非分佈式共享內存系統不能在十個處理器上非常有效地擴展。

  數據不連貫

  具有內存共享的多個處理器通常具有單獨的內存緩存以加速性能。在該系統中,兩個或更多個處理器可以具有相同存儲器位置的高速緩存副本。兩個處理器都在不知道另一個緩存修改的情況下修改數據,這意味著應該相同的數據——即互相耦合——現在是不連貫的,並且當數據被寫回主存儲器時可能導致損壞。

  緩存一致性

  高速緩存一致性協議通過同步多個高速緩存中的數據值來管理這些衝突。每當緩存傳播修改回共享內存位置時,數據保持一致。高速緩存一致性可保護高性能高速緩存,同時支持內存共享。

  錯誤共享

  此內存使用模式會降低性能,並在具有共享內存和單個處理器高速緩存的多處理器系統中發生。緩存通過從指定的內存位置和附近位置讀取數據來工作。(高速緩存行的最小大小為64字節。)當處理器訪問包含可修改數據或變量的共享塊時,會出現問題。一個處理器是否實際修改了該數據並不重要; 讀取更改後,其他緩存將重新加載整個塊。緩存一致性協議不會啟動重新加載,也不會向其授予任何資源,因此傳入的進程必須承擔開銷。這會強制主總線重新連接每次寫入共享內存位置,從而降低性能且浪費帶寬。

  編程是解決方案

  “緩存填充”可以在精確的內存位置與其鄰居之間插入無意義的字節,因此單個64字節緩存行僅寫入確切的數據。高速緩存一致性執行同步,因此不會強制其他高速緩存重新加載其塊。

  共享內存優勢

  多個應用程序共享內存以提高處理效率

  ·在程序之間有效地傳遞數據,以提高通信和效率。

  ·適用於單微處理器系統,多處理器並行或對稱系統以及分佈式服務器。

  ·通過管理緩存中主內存中的共享數據來避免冗餘數據副本。

  ·通過使程序能夠訪問已在內存中的單個數據副本,最大限度地減少輸入/輸出(I / O)進程。

  ·對於程序員來說,共享內存的主要優點是不需要為處理器交互和通信編寫顯式代碼。

  高速緩存一致性協議可以保護共享內存免受數據不連貫和性能下降的影響。

  原文作者:Christine Taylor

"

相關推薦

推薦中...