隨著人工智能大模型,高性能計算(HPC),大數據和搜推等業務的興起,原本以Web服務為主要應用的數據中心也開始關注這些新業務所帶來的需求變化,例如通過緊耦合計算網,提供更高的帶寬和更低的延遲。而在緊耦合計算網中,是否支持豐富的內存語義成為了關鍵。
但究竟什么是內存語義,業界一直沒有一個清晰的定義,有的人說Infiniband(IB)的RDMA語義就是內存語義,也有人說消息語義也是內存語義,也有人說訪問內存的語義是內存語義,也有人說Load/Store語義是內存語義,眾說紛紜,我們下面來看看Wikipedia是怎么定義內存語義的:
Memory Semantics(From Wikipedia)
Incomputing and parallel processing, memory semantics refers to the process logicused to control access to shared memorylocations, or at a higher level to shared variables in the presence of multiplethreads or processors.
Memorysemantics may also be defined for transactional memory, where issues related tothe interaction of transactions and locks, and user-level actions need to bedefined and specified.
可以看出,維基百科認為內存語義是針對多線程針對共享內存區進行的操作,又或者是針對內存的訪問操作等。
為了更好的解釋什么是內存語義,我們先來看看什么是語義以及IB中是如何劃分語義的:
什么是語義?
通常來說,語義就是互聯中用于交互的一個或者多個操作的組合,通常在事務層(TransactionLayer)中定義。(IB沒有事務層,所以IB在傳輸層中定義了語義)
IB語義劃分
IB介紹了兩種語義,分別是ChannelSemantics(通道語義)和Memory(RDMA)Semantics(內存語義/RDMA語義)
其中,Channel Semantic包括Send/Receive操作;RDMA語義包括RDMA WRITE,RDMA READ和ATOMIC操作;
IB語義劃分依據猜測
從IB提供的具體操作來看,Send/Receive,RDMA_Read,RDMA_Write和ATOMIC操作實際上都是針對內存的操作,所不同的是,Send/Receive操作的請求端不知道響應端會將數據寫到哪里,即請求端在發送Send請求時,不需要填寫目標地址。但實際上,最終這筆數據還是寫到響應端的內存中去了。所以嚴格意義上說,Send/Receive操作仍然屬于內存相關操作,只不過IB希望與另外三種操作做出區分。于是Send/Receive操作被賦予了新的名稱,被稱為Channel Semantics,意思就是在通道的一端你只管send數據就好,具體數據去哪了,通道的另一端會負責處理。
RDMA_Read,RDMA_Write和ATOMIC操作有一個共同點就是三種操作都需要指定響應端的虛擬地址,通過響應端的地址翻譯,獲得最終響應端的內存地址。這三種操作在IB標準中被劃分在了RDMA語義下,也被稱為內存語義,但從上述分析來看,這里將RDMA語義稱為內存語義,有一點概念放大的嫌疑。
下面我們對比的看看CXL是如何劃分語義的:
CXL語義劃分
CXL介紹了三大類語義,包括I/O語義,緩存協議語義和內存訪問語義,即CXL.io, CXL,cache和CXL.mem。其中,CXL.io語義與PCIe語義類似。
CXL語義劃分依據猜測
CXL提供了非常豐富的事務層操作,我們可以把CXL鏈路以及兩端抽象成下面的模型:
下面我們看看CXL鏈路要支撐CXL Point A和B進行哪些交互,簡單起見,我們只關注請求類型:
CXL.Cache
Point A | CXL.T1/T2 | CPU L3 |
Point B | CPU L3 | CXL.T1/T2 |
x86指令 | N/A | Load/Store |
設備指令 | Load/Store | N/A |
請求類型 |
Read Read0 Write Read0-Write |
Snp* |
空間類型 |
主存 HDM-D HDM-H HDM-DB |
主存 HDM-D HDM-H |
內存屬性 |
Cacheable Uncacheable |
Cacheable |
CXL.mem
Point A | CXL.T2/T3 | CPU HA |
Point B | CPU L3 | CXL.T2/T3 |
x86指令 | N/A | MOV |
設備指令 | N/A | Load/Store |
請求類型 | BISnp* |
MemRd* MemWr* MemInv* etc |
空間類型 | HDM-DB |
HDM-D HDM-H HDM-DB |
內存屬性 | Cacheable |
Cacheable Uncacheable |
CXL.io
Point A | CPU Core | CPU Core | CPU Core |
Point B | CXL.T1/T2/T3 | CXL.T1/T2/T3 | CXL.T1/T2/T3 |
x86指令 | MOV | IN/OUT | MOV |
請求類型 | MRd/MWr | IORd/IOWr | CfgRd/CfgWr |
空間類型 | 內存空間->PDM | 64KB I/O空間 | 內存空間->配置空間 |
內存屬性 | Uncacheable | N/A | Uncacheable |
Point A | CXL.T1/T2/T3 | CXL.T1/T2/T3 | Host |
Point B | Host | CXL.T1/T2/T3 | Host |
x86指令 | N/A | N/A | MOV |
設備指令 | Load/Store |
Load/Store DMARd/DMAWr |
N/A |
請求類型 | MRd/MWr | MRd/MWr |
UIOMRd UIOMWr |
空間類型 | 內存空間-主存 |
內存空間->PDM 內存空間->GFAM |
內存空間->GFAM |
內存屬性 |
Cacheable Uncacheable |
Uncacheable |
Cacheable Uncacheable |
什么是Load/Store指令?
通常來說,Load/Store(L/S)指令是處理器核對內存空間的訪問操作,包括Load操作,將數據從內存空間讀到處理器核內的寄存器中;以及Store操作,將處理器核內寄存器的數據寫到內存空間中。
x86架構中,對內存空間訪問的指令典型的是MOV指令;ARM架構中,對內存空間訪問的指令典型的是LDR/STR;因為有不少的空間被映射(mapping)到了內存空間,即采用內存空間的訪問指令,所以Load/Store指令不但能夠訪問實際的內存,也可以訪問其他的一些設備,以及設備空間,例如BIOS ROM,南橋的寄存器,PCIe設備上的內存等等。
什么是DMA操作?
如果我們在兩個物理地址間搬移數據,而不需要CPU介入的話,我們就稱這種操作是DMA操作。這其中最重要的是DMA引擎,它具備一些寄存器接口,高級別的DMA引擎可能配備了硬件隊列,用于描述搬移數據和地址的相關信息。從最終效果上來看,一次DMA操作等同于兩次Load/Store操作,即先通過Load操作將數據從物理地址A讀到DMA引擎,然后再通過Store操作將數據從DMA引擎寫到物理地址B。
容易混淆的概念:
Load/Store是處理器的一種指令,例如x86的MOV指令,該指令會產生對內存空間的訪問?,F代計算機系統中,內存空間并不都指向具體的內存(DRAM)。也包括BIOS ROM,PCH寄存器空間,PCIe配置空間等,所以Load/Store最好說成是內存空間訪問指令或語義。
內存空間訪問和內存訪問有什么不同?
內存空間是指處理器通過遍歷其地址線的排列組合,能夠通過Load/Store指令訪問的最大的物理地址空間。例如某款處理器的地址線能夠支持1MByte的內存空間,但實際上內存只有640KByte,如下圖所示:
我們以x86處理器為例,CPU可訪問的主要空間包括:
處理器訪問空間 | 處理器訪問指令舉例 |
內存空間(48-bit或者52-bit) | MOV |
I/O空間 (16-bit) | In/Out |
配置空間 (28-bit) | MOV or In/Out |
其他空間(MSR,CPUID等) | RDMSR/WRMSR, CPUID ... |
其中,配置空間因沒有獨立的指令,訪問該空間可通過I/O空間實現(Legacy方式,16M空間),也可以通過內存空間進行訪問(256M空間),不同的空間將使用不同的指令進行訪問。
結語
通過上面的分析可以看出,內存語義的定義在不同的上下文中的確不是特別固定。比較主流的觀點有:
內存語義是指某種事務層的操作,其操作對象是具體內存實體的。該定義的代表是IB的RDMA語義。
內存語義是指專門針對內存實體操作的語義,與IO語義不同,這種上下文中的內存語義是不提供類似IO語義那樣的保序操作。例如對于非同地址的內存讀寫操作,是沒有序的要求。該定義的代表是CXL.mem。
術語:
PDM: Private Device Memory:傳統PCIe設備上的內存資源,以及通過CXL.io訪問的內存資源(CXL設備),該設備資源不支持Host Writeback操作
HDM:Host-managedDevice Memory:設備上的內存資源,該資源被映射在Host緩存一致性地址空間,該資源支持Host Writeback操作,包括HDM-D,HDM-H以及HDM-DB三種類型
HDM-D:HDM-DeviceCoherent:該內存可被CXL.cache或類似語義進行管理
HDM-H:HDM-Host OnlyCoherent:該內存只被Host使用并管理
HDM-DB:HDM-DeviceCoherent with Back-Invalidate:該內存被共享給了多個Host,并通過CXL.mem的Back-Invalidate通道進行緩存一致性維護
L/S:Load/Store:處理器對內存空間的訪問操作,可操作實際內存,設備配置空間(MMCFG),設備資源空間(MMIO)等。
References:
PCIExpress Base Specification Revision 6.2
CXL_3.1Specification Release_FINAL.pdf
InfiniBand_Architecture_Specification_Volume_1_R1.7
審核編輯:黃飛
-
內存
+關注
關注
8文章
3025瀏覽量
74047 -
人工智能
+關注
關注
1791文章
47279瀏覽量
238497 -
傳輸層
+關注
關注
0文章
29瀏覽量
10896 -
RDMA
+關注
關注
0文章
77瀏覽量
8949 -
大模型
+關注
關注
2文章
2450瀏覽量
2707
原文標題:[基礎]什么是內存語義?你叫對了嗎?
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論