隨著人工智能大模型,高性能計(jì)算(HPC),大數(shù)據(jù)和搜推等業(yè)務(wù)的興起,原本以Web服務(wù)為主要應(yīng)用的數(shù)據(jù)中心也開(kāi)始關(guān)注這些新業(yè)務(wù)所帶來(lái)的需求變化,例如通過(guò)緊耦合計(jì)算網(wǎng),提供更高的帶寬和更低的延遲。而在緊耦合計(jì)算網(wǎng)中,是否支持豐富的內(nèi)存語(yǔ)義成為了關(guān)鍵。
但究竟什么是內(nèi)存語(yǔ)義,業(yè)界一直沒(méi)有一個(gè)清晰的定義,有的人說(shuō)Infiniband(IB)的RDMA語(yǔ)義就是內(nèi)存語(yǔ)義,也有人說(shuō)消息語(yǔ)義也是內(nèi)存語(yǔ)義,也有人說(shuō)訪問(wèn)內(nèi)存的語(yǔ)義是內(nèi)存語(yǔ)義,也有人說(shuō)Load/Store語(yǔ)義是內(nèi)存語(yǔ)義,眾說(shuō)紛紜,我們下面來(lái)看看Wikipedia是怎么定義內(nèi)存語(yǔ)義的:
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.
可以看出,維基百科認(rèn)為內(nèi)存語(yǔ)義是針對(duì)多線程針對(duì)共享內(nèi)存區(qū)進(jìn)行的操作,又或者是針對(duì)內(nèi)存的訪問(wèn)操作等。
為了更好的解釋什么是內(nèi)存語(yǔ)義,我們先來(lái)看看什么是語(yǔ)義以及IB中是如何劃分語(yǔ)義的:
什么是語(yǔ)義?
通常來(lái)說(shuō),語(yǔ)義就是互聯(lián)中用于交互的一個(gè)或者多個(gè)操作的組合,通常在事務(wù)層(TransactionLayer)中定義。(IB沒(méi)有事務(wù)層,所以IB在傳輸層中定義了語(yǔ)義)
IB語(yǔ)義劃分
IB介紹了兩種語(yǔ)義,分別是ChannelSemantics(通道語(yǔ)義)和Memory(RDMA)Semantics(內(nèi)存語(yǔ)義/RDMA語(yǔ)義)
其中,Channel Semantic包括Send/Receive操作;RDMA語(yǔ)義包括RDMA WRITE,RDMA READ和ATOMIC操作;
IB語(yǔ)義劃分依據(jù)猜測(cè)
從IB提供的具體操作來(lái)看,Send/Receive,RDMA_Read,RDMA_Write和ATOMIC操作實(shí)際上都是針對(duì)內(nèi)存的操作,所不同的是,Send/Receive操作的請(qǐng)求端不知道響應(yīng)端會(huì)將數(shù)據(jù)寫到哪里,即請(qǐng)求端在發(fā)送Send請(qǐng)求時(shí),不需要填寫目標(biāo)地址。但實(shí)際上,最終這筆數(shù)據(jù)還是寫到響應(yīng)端的內(nèi)存中去了。所以嚴(yán)格意義上說(shuō),Send/Receive操作仍然屬于內(nèi)存相關(guān)操作,只不過(guò)IB希望與另外三種操作做出區(qū)分。于是Send/Receive操作被賦予了新的名稱,被稱為Channel Semantics,意思就是在通道的一端你只管send數(shù)據(jù)就好,具體數(shù)據(jù)去哪了,通道的另一端會(huì)負(fù)責(zé)處理。
RDMA_Read,RDMA_Write和ATOMIC操作有一個(gè)共同點(diǎn)就是三種操作都需要指定響應(yīng)端的虛擬地址,通過(guò)響應(yīng)端的地址翻譯,獲得最終響應(yīng)端的內(nèi)存地址。這三種操作在IB標(biāo)準(zhǔn)中被劃分在了RDMA語(yǔ)義下,也被稱為內(nèi)存語(yǔ)義,但從上述分析來(lái)看,這里將RDMA語(yǔ)義稱為內(nèi)存語(yǔ)義,有一點(diǎn)概念放大的嫌疑。
下面我們對(duì)比的看看CXL是如何劃分語(yǔ)義的:
CXL語(yǔ)義劃分
CXL介紹了三大類語(yǔ)義,包括I/O語(yǔ)義,緩存協(xié)議語(yǔ)義和內(nèi)存訪問(wèn)語(yǔ)義,即CXL.io, CXL,cache和CXL.mem。其中,CXL.io語(yǔ)義與PCIe語(yǔ)義類似。
CXL語(yǔ)義劃分依據(jù)猜測(cè)
CXL提供了非常豐富的事務(wù)層操作,我們可以把CXL鏈路以及兩端抽象成下面的模型:

下面我們看看CXL鏈路要支撐CXL Point A和B進(jìn)行哪些交互,簡(jiǎn)單起見(jiàn),我們只關(guān)注請(qǐng)求類型:
CXL.Cache
| Point A | CXL.T1/T2 | CPU L3 |
| Point B | CPU L3 | CXL.T1/T2 |
| x86指令 | N/A | Load/Store |
| 設(shè)備指令 | Load/Store | N/A |
| 請(qǐng)求類型 |
Read Read0 Write Read0-Write |
Snp* |
| 空間類型 |
主存 HDM-D HDM-H HDM-DB |
主存 HDM-D HDM-H |
| 內(nèi)存屬性 |
Cacheable Uncacheable |
Cacheable |
CXL.mem
| Point A | CXL.T2/T3 | CPU HA |
| Point B | CPU L3 | CXL.T2/T3 |
| x86指令 | N/A | MOV |
| 設(shè)備指令 | N/A | Load/Store |
| 請(qǐng)求類型 | BISnp* |
MemRd* MemWr* MemInv* etc |
| 空間類型 | HDM-DB |
HDM-D HDM-H HDM-DB |
| 內(nèi)存屬性 | 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 |
| 請(qǐng)求類型 | MRd/MWr | IORd/IOWr | CfgRd/CfgWr |
| 空間類型 | 內(nèi)存空間->PDM | 64KB I/O空間 | 內(nèi)存空間->配置空間 |
| 內(nèi)存屬性 | 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 |
| 設(shè)備指令 | Load/Store |
Load/Store DMARd/DMAWr |
N/A |
| 請(qǐng)求類型 | MRd/MWr | MRd/MWr |
UIOMRd UIOMWr |
| 空間類型 | 內(nèi)存空間-主存 |
內(nèi)存空間->PDM 內(nèi)存空間->GFAM |
內(nèi)存空間->GFAM |
| 內(nèi)存屬性 |
Cacheable Uncacheable |
Uncacheable |
Cacheable Uncacheable |
什么是Load/Store指令?
通常來(lái)說(shuō),Load/Store(L/S)指令是處理器核對(duì)內(nèi)存空間的訪問(wèn)操作,包括Load操作,將數(shù)據(jù)從內(nèi)存空間讀到處理器核內(nèi)的寄存器中;以及Store操作,將處理器核內(nèi)寄存器的數(shù)據(jù)寫到內(nèi)存空間中。
x86架構(gòu)中,對(duì)內(nèi)存空間訪問(wèn)的指令典型的是MOV指令;ARM架構(gòu)中,對(duì)內(nèi)存空間訪問(wèn)的指令典型的是LDR/STR;因?yàn)橛胁簧俚目臻g被映射(mapping)到了內(nèi)存空間,即采用內(nèi)存空間的訪問(wèn)指令,所以Load/Store指令不但能夠訪問(wèn)實(shí)際的內(nèi)存,也可以訪問(wèn)其他的一些設(shè)備,以及設(shè)備空間,例如BIOS ROM,南橋的寄存器,PCIe設(shè)備上的內(nèi)存等等。
什么是DMA操作?
如果我們?cè)趦蓚€(gè)物理地址間搬移數(shù)據(jù),而不需要CPU介入的話,我們就稱這種操作是DMA操作。這其中最重要的是DMA引擎,它具備一些寄存器接口,高級(jí)別的DMA引擎可能配備了硬件隊(duì)列,用于描述搬移數(shù)據(jù)和地址的相關(guān)信息。從最終效果上來(lái)看,一次DMA操作等同于兩次Load/Store操作,即先通過(guò)Load操作將數(shù)據(jù)從物理地址A讀到DMA引擎,然后再通過(guò)Store操作將數(shù)據(jù)從DMA引擎寫到物理地址B。
容易混淆的概念:
Load/Store是處理器的一種指令,例如x86的MOV指令,該指令會(huì)產(chǎn)生對(duì)內(nèi)存空間的訪問(wèn)。現(xiàn)代計(jì)算機(jī)系統(tǒng)中,內(nèi)存空間并不都指向具體的內(nèi)存(DRAM)。也包括BIOS ROM,PCH寄存器空間,PCIe配置空間等,所以Load/Store最好說(shuō)成是內(nèi)存空間訪問(wèn)指令或語(yǔ)義。
內(nèi)存空間訪問(wèn)和內(nèi)存訪問(wèn)有什么不同?
內(nèi)存空間是指處理器通過(guò)遍歷其地址線的排列組合,能夠通過(guò)Load/Store指令訪問(wèn)的最大的物理地址空間。例如某款處理器的地址線能夠支持1MByte的內(nèi)存空間,但實(shí)際上內(nèi)存只有640KByte,如下圖所示:

我們以x86處理器為例,CPU可訪問(wèn)的主要空間包括:
| 處理器訪問(wèn)空間 | 處理器訪問(wèn)指令舉例 |
| 內(nèi)存空間(48-bit或者52-bit) | MOV |
| I/O空間 (16-bit) | In/Out |
| 配置空間 (28-bit) | MOV or In/Out |
| 其他空間(MSR,CPUID等) | RDMSR/WRMSR, CPUID ... |
其中,配置空間因沒(méi)有獨(dú)立的指令,訪問(wèn)該空間可通過(guò)I/O空間實(shí)現(xiàn)(Legacy方式,16M空間),也可以通過(guò)內(nèi)存空間進(jìn)行訪問(wèn)(256M空間),不同的空間將使用不同的指令進(jìn)行訪問(wèn)。
結(jié)語(yǔ)
通過(guò)上面的分析可以看出,內(nèi)存語(yǔ)義的定義在不同的上下文中的確不是特別固定。比較主流的觀點(diǎn)有:
內(nèi)存語(yǔ)義是指某種事務(wù)層的操作,其操作對(duì)象是具體內(nèi)存實(shí)體的。該定義的代表是IB的RDMA語(yǔ)義。
內(nèi)存語(yǔ)義是指專門針對(duì)內(nèi)存實(shí)體操作的語(yǔ)義,與IO語(yǔ)義不同,這種上下文中的內(nèi)存語(yǔ)義是不提供類似IO語(yǔ)義那樣的保序操作。例如對(duì)于非同地址的內(nèi)存讀寫操作,是沒(méi)有序的要求。該定義的代表是CXL.mem。
術(shù)語(yǔ):
PDM: Private Device Memory:傳統(tǒng)PCIe設(shè)備上的內(nèi)存資源,以及通過(guò)CXL.io訪問(wèn)的內(nèi)存資源(CXL設(shè)備),該設(shè)備資源不支持Host Writeback操作
HDM:Host-managedDevice Memory:設(shè)備上的內(nèi)存資源,該資源被映射在Host緩存一致性地址空間,該資源支持Host Writeback操作,包括HDM-D,HDM-H以及HDM-DB三種類型
HDM-D:HDM-DeviceCoherent:該內(nèi)存可被CXL.cache或類似語(yǔ)義進(jìn)行管理
HDM-H:HDM-Host OnlyCoherent:該內(nèi)存只被Host使用并管理
HDM-DB:HDM-DeviceCoherent with Back-Invalidate:該內(nèi)存被共享給了多個(gè)Host,并通過(guò)CXL.mem的Back-Invalidate通道進(jìn)行緩存一致性維護(hù)
L/S:Load/Store:處理器對(duì)內(nèi)存空間的訪問(wèn)操作,可操作實(shí)際內(nèi)存,設(shè)備配置空間(MMCFG),設(shè)備資源空間(MMIO)等。
References:
PCIExpress Base Specification Revision 6.2
CXL_3.1Specification Release_FINAL.pdf
InfiniBand_Architecture_Specification_Volume_1_R1.7
審核編輯:黃飛
-
內(nèi)存
+關(guān)注
關(guān)注
9文章
3238瀏覽量
76529 -
人工智能
+關(guān)注
關(guān)注
1821文章
50366瀏覽量
267060 -
傳輸層
+關(guān)注
關(guān)注
0文章
31瀏覽量
11256 -
RDMA
+關(guān)注
關(guān)注
0文章
102瀏覽量
9669 -
大模型
+關(guān)注
關(guān)注
2文章
3797瀏覽量
5279
原文標(biāo)題:[基礎(chǔ)]什么是內(nèi)存語(yǔ)義?你叫對(duì)了嗎?
文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
什么是內(nèi)存語(yǔ)義?CXL是如何劃分語(yǔ)義的
評(píng)論