非一致性記憶體架構 NUMA

2021-06-06 00:59:33 字數 1244 閱讀 4379

非一致性記憶體架構(non-uniform memory architecture)是為了解決傳統的對稱多處理(symmetric multi-processor)系統中的可擴充套件性問題而誕生的。在對稱多處理系統中,處理器共享北橋中的記憶體控制器來達到共同訪問外部記憶體和io的目的,也就是說所有的處理器對記憶體和i/o的訪問方式和開銷都是相同的。在這種系統中,隨著更多的處理器被新增到smp系統中,匯流排的競爭將會越來越大,系統的效能也必將隨之大打折扣。smp系統的示意圖如下:

numa系統擁有多條記憶體匯流排,於是將幾個處理器通過記憶體匯流排與一塊記憶體相連構成乙個組,這樣整個龐大的系統就可以被分為若干個組,這個組的概念在numa系統中被稱為節點(node)。處於該節點中的記憶體被稱為本地記憶體(local memory),處於其他節點中的記憶體對於該組而言被稱為外部記憶體(foreign memory)。而節點又可以分為三類,即本地節點(local node),鄰居節點(neighbour node)和遠端節點(remote node).

本地節點:對於某個節點中的所有cpu,此節點稱為本地節點;

鄰居節點:與本地節點相鄰的節點稱為鄰居節點;

遠端節點:非本地節點或鄰居節點的節點,稱為遠端節點。

超立方體可以作為一種有效的拓撲來描述numa系統,它將系統中的節點數限制在2^c內,c是每個節點擁有的鄰居節點數,如下圖所示

以c=3為例,則對於節點1而言,2,3,5則為鄰居節點,4,6,7,8為遠端節點,顯然訪問開銷的關係為 本地節點《鄰居節點《遠端節點。

古老的smp系統只擁有乙個位於北橋中的記憶體控制器,而如今更先進的做法是將記憶體控制器整合到cpu中去,這樣每個cpu都擁有自己的記憶體控制器,不會相互之間產生競爭。最先採用這種做法的一批處理器就是amd在2023年推出的amd opteron系列處理器,其結構如下圖所示:

可以看到,每個cpu中都整合了乙個記憶體控制器,並且cpu之間採用了一種hyper-transport的技術建立連線,這種連線可以使得cpu通過其他cpu來訪問外部記憶體,當然訪問開銷要比訪問本地記憶體更大。

NUMA 非一致性記憶體架構

非一致性記憶體架構 non uniform memory architecture 是為了解決傳統的對稱多處理 symmetric multi processor 系統中的可擴充套件性問題而誕生的。在對稱多處理系統中,處理器共享北橋中的記憶體控制器來達到共同訪問外部記憶體和io的目的,也就是說所有的...

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

dma記憶體一致性

核心的dma一般在平台初始化的時候已經分配好了。但是對於一些有內部dma的硬體ip,比如usb ip video加速ip,他們可能由ip廠商封裝好的,沒辦法繫結到cpu端,這時候在核心使用dma就要注意了,因為dma只認識實體地址哦。當然,辦法還是有的,look 以下來自 這兩天在做 dma 相關開...