[QEMU]計(jì)算快速鏈接 (CXL)

從單個(gè)主機(jī)的角度來(lái)看,CXL 是一種互連標(biāo)準(zhǔn),面向連接到 CXL 主機(jī)的加速器和內(nèi)存設(shè)備。此描述將重點(diǎn)介紹在 QEMU 仿真主機(jī)上運(yùn)行的軟件或功能仿真內(nèi)部可見(jiàn)的那些方面。因此,它將跳過(guò)許多電氣和協(xié)議元素,這些元素對(duì)于真正的硬件來(lái)說(shuō)更感興趣,并將主導(dǎo)對(duì)CCL的更一般的介紹。它還將完全忽略 CXL 的結(jié)構(gòu)管理方面,只需考慮單個(gè)主機(jī)和靜態(tài)配置。
CXL 與 CXL 主機(jī)網(wǎng)橋共享 PCI Express 的許多概念和大部分基礎(chǔ)設(shè)施,CXL 主機(jī)橋具有可直接連接到 CXL 或 PCI 端點(diǎn)的 CXL 根端口。或者,可能存在 CXL 交換機(jī),其下方連接了 CXL 和 PCI 端點(diǎn)。在許多情況下,額外的控制和功能是通過(guò)PCI Express接口公開(kāi)的。接口的這種共享以及仿真代碼反映在QEMU中如何仿真器件。在大多數(shù)情況下,各種 CXL 元素都是基于等效的 PCIe 設(shè)備構(gòu)建的。
CXL 設(shè)備支持以下接口:
最傳統(tǒng)的 PCIe 接口
配置空間訪問(wèn)
用于寄存器和郵箱的 BAR 映射內(nèi)存訪問(wèn)。
微星/微星-X
艾爾
DOE 郵箱
集成開(kāi)發(fā)環(huán)境
許多其他PCI表達(dá)定義的接口。
內(nèi)存操作
等效于訪問(wèn) DRAM/NVDIMM。主機(jī)支持的任何普通內(nèi)存訪問(wèn)/功能也應(yīng)該適用于 CXL 連接的內(nèi)存設(shè)備。
緩存操作。它們大多與QEMU仿真無(wú)關(guān),因?yàn)镼EMU沒(méi)有模擬一致性協(xié)議。與這些相關(guān)的任何仿真都將是特定于設(shè)備的,不在本文檔的討論范圍之內(nèi)。
CXL 2.0 設(shè)備類(lèi)型
CXL 2.0 端點(diǎn)通常分為三種類(lèi)型。
類(lèi)型 1:它們支持主機(jī)內(nèi)存的一致緩存。示例可能是加密加速器。還可以通過(guò)諸如PCI存儲(chǔ)器讀取和寫(xiě)入BAR之類(lèi)的方式訪問(wèn)設(shè)備專(zhuān)用存儲(chǔ)器。
類(lèi)型 2:它們支持主機(jī)內(nèi)存和主機(jī)托管設(shè)備內(nèi)存 (HDM) 的一致性緩存,其中的一致性協(xié)議由主機(jī)管理。這是一個(gè)復(fù)雜的主題,因此有關(guān) CXL 一致性的更多信息,請(qǐng)參閱 CXL 2.0 規(guī)范。
類(lèi)型 3 存儲(chǔ)設(shè)備:這些設(shè)備充當(dāng)將附加內(nèi)存 (HDM) 附加到 CXL 主機(jī)(包括易失性和持久內(nèi)存)的方法。CXL 拓?fù)淇赡苤С质褂弥鳈C(jī)、主機(jī)網(wǎng)橋、交換機(jī)上游端口和端點(diǎn)中的 HDM 解碼器在多個(gè)類(lèi)型 3 存儲(chǔ)設(shè)備之間交錯(cuò)。
QEMU 中 CXL 仿真的范圍
CXL 仿真的重點(diǎn)是 CXL 修訂版 2.0 及更高版本。早期的 CXL 修訂版定義了一組較小的功能,將大部分控制接口保留為已定義實(shí)現(xiàn)或特定于設(shè)備的操作,這使得通用仿真具有挑戰(zhàn)性,因?yàn)橹鳈C(jī)特定的固件負(fù)責(zé)設(shè)置,并且端點(diǎn)作為根復(fù)雜集成端點(diǎn)呈現(xiàn)給操作系統(tǒng)。CXL 修訂版 2.0 看起來(lái)更像 PCI Express,具有 CXL 拓?fù)涞耐耆砂l(fā)現(xiàn)性。
CXL 系統(tǒng)組件
CXL系統(tǒng)由具有許多“標(biāo)準(zhǔn)組件”的主機(jī)組成,其控制和功能可通過(guò)系統(tǒng)軟件使用CXL 2.0規(guī)范中描述的方法發(fā)現(xiàn)。
CXL 固定內(nèi)存窗口 (CFMW)
CFMW 由特定范圍的主機(jī)物理地址空間組成,這些空間路由到特定的 CXL 主機(jī)網(wǎng)橋。在通用軟件初始化時(shí),它將具有特別交錯(cuò)的配置和相關(guān)的Serice Throtling Group(QTG)的質(zhì)量。在決定如何在可用的 CXL 內(nèi)存設(shè)備之間配置交錯(cuò)時(shí),系統(tǒng)軟件可以使用此信息。它在 CXL 早期發(fā)現(xiàn)表(ACPI 表)中作為 CFMW 結(jié)構(gòu) (CFMWS) 提供。
注意:QTG 0 是 QEMU 中目前唯一支持的。
CXL 主機(jī)橋 (CXL HB)
CXL 主機(jī)網(wǎng)橋類(lèi)似于 PCIe 等效器,但具有規(guī)范定義的寄存器接口,稱(chēng)為 CXL 主機(jī)網(wǎng)橋組件寄存器 (CHBCR)。此 CHBCR MMIO 空間的位置通過(guò) CEDT ACPI 表中的 CXL 主機(jī)橋接結(jié)構(gòu) (CHBS) 向系統(tǒng)軟件描述。實(shí)際接口與用于 CXL 層次結(jié)構(gòu)的其他部分的接口相同,例如 PCI BAR 中的 CXL 組件寄存器。
提供的接口包括:
配置 HDM 解碼器以將具有特定主機(jī)物理地址范圍的 CXL 內(nèi)存訪問(wèn)路由到目標(biāo)端口,而為該地址提供服務(wù)的 CXL 設(shè)備位于該目標(biāo)端口下方。這可能是映射到單個(gè)根端口 (RP) 或跨一組目標(biāo) RP 的映射。
CXL 根端口 (CXL RP)
CXL 根端口服務(wù)器與 PCIe 根端口具有相同的用途。PCIe 配置空間中有許多特定于 CXL 的指定供應(yīng)商特定擴(kuò)展功能 (DVSEC),以及通過(guò) PCI 條進(jìn)行的相關(guān)組件寄存器訪問(wèn)。
CXL 交換機(jī)
在這里,我們考慮一個(gè)只有一個(gè)虛擬層次結(jié)構(gòu)的簡(jiǎn)單 CXL 交換機(jī)。雖然存在更復(fù)雜的設(shè)備,但它們對(duì)特定主機(jī)的可見(jiàn)性通常與簡(jiǎn)單的交換機(jī)設(shè)計(jì)相同。主機(jī)通常不知道復(fù)雜的重新路由和設(shè)備池,他們只是看到設(shè)備被熱添加或熱刪除。
CXL 交換機(jī)具有與 PCIe 中類(lèi)似的架構(gòu),具有單個(gè)上行端口、內(nèi)部 PCI 總線(xiàn)和多個(gè)下行端口。
CXL 上行和下行端口在配置空間中都有特定于 CXL 的 DVSEC,在 PCI BAR 中具有組件寄存器。上游端口具有 HDM 解碼器的配置接口,這些接口將傳入的內(nèi)存訪問(wèn)路由到相應(yīng)的下行端口。
CXL 交換機(jī)的創(chuàng)建方式與 PCI 交換機(jī)類(lèi)似,方法是在內(nèi)部交換機(jī)總線(xiàn)(cxl-downstream)上創(chuàng)建一個(gè)上游端口(cxl-upstream)和多個(gè)下行端口。
CXL 存儲(chǔ)設(shè)備 - 類(lèi)型 3
CXL 類(lèi)型 3 設(shè)備使用 PCI 類(lèi)代碼,旨在由通用操作系統(tǒng)驅(qū)動(dòng)程序支持。它們具有HDM解碼器,盡管在這些EP設(shè)備中,解碼器不用于路由,而是用于將傳入主機(jī)物理地址(HPA)轉(zhuǎn)換為設(shè)備物理地址(DPA)。
CXL 內(nèi)存交錯(cuò)
為了理解在 QEMU 中模擬的不同 CXL 硬件組件的交互,讓我們考慮在完全配置的 CXL 拓?fù)渲凶x取內(nèi)存。請(qǐng)注意,系統(tǒng)軟件負(fù)責(zé)配置除 CFMW 之外的所有組件。系統(tǒng)軟件負(fù)責(zé)從 CFMW 中分配適當(dāng)?shù)姆秶?,并通過(guò)正常的內(nèi)存配置公開(kāi)這些范圍,就像對(duì)系統(tǒng) RAM 所做的那樣。
示例系統(tǒng)拓?fù)?。x 標(biāo)記每個(gè)解碼器級(jí)別的匹配項(xiàng):
|<------------------SYSTEM PHYSICAL ADDRESS MAP (1)----------------->|| ? ?__________ ? __________________________________ ? __________ ? ?|| ? | ? ? ? ? ?| | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? ? ? ? ?| ? || ? | CFMW 0 ? | | ?CXL Fixed Memory Window 1 ? ? ? | | CFMW 1 ? | ? || ? | HB0 only | | ?Configured to interleave memory | | HB1 only | ? || ? | ? ? ? ? ?| | ?memory accesses across HB0/HB1 ?| | ? ? ? ? ?| ? || ? |__________| |_____x____________________________| |__________| ? | ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? | ? ? ? Interleave Decoder ? ? ? ? ?| ? ? ? ? ? ? | ? ? ? ? | ? ? ? Matches this HB ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? \_____________| ? ? ? ? ? ? ? ? ? ? |_____________/ ? ? ? ? ? ? __________|__________ ? ? ?_____|_______________ ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? | ? ?| ? ? ? ? ? ? ? ? ? ? | ? ? (2) ? ?| CXL HB 0 ? ? ? ? ? ?| ? ?| CXL HB 1 ? ? ? ? ? ?| ? ? ? ? ? ?| HB IntLv Decoders ? | ? ?| HB IntLv Decoders ? | ? ? ? ? ? ?| PCI/CXL Root Bus 0c | ? ?| PCI/CXL Root Bus 0d | ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? | ? ?| ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ?|___x_________________| ? ?|_____________________| ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ?| ? ? ? | ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ?| ? ? ? | ? ? ? ? ? ? ? | ? ? A HB 0 HDM Decoder ? ? ? ? ?| ? ? ? | ? ? ? ? ? ? ? | ? ? matches this Port ? ? ? ? ? | ? ? ? | ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ?| ? ? ? | ? ? ? ? ? ? ? | ? ? ___________|___ ? __________|__ ? __|_________ ? ___|_________ (3)| ?Root Port 0 ?| | Root Port 1 | | Root Port 2| | Root Port 3 | ? ?| ?Appears in ? | | Appears in ?| | Appears in | | Appear in ? | ? ?| ?PCI topology | | PCI Topology| | PCI Topo ? | | PCI Topo ? ?| ? ?| ?As 0c:00.0 ? | | as 0c:01.0 ?| | as de:00.0 | | as de:01.0 ?| ? ?|_______________| |_____________| |____________| |_____________| ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? | ? ? ? ? ? ? ?| ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? | ? ? ? ? ? ? ?| ? ? _____|_________ ? ______|______ ? ______|_____ ? ______|_______ (4)| ? ? x ? ? ? ? | | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| CXL Type3 0 ? | | CXL Type3 1 | | CXL type3 2| | CLX Type 3 3 | ? ?| ? ? ? ? ? ? ? | | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| PMEM0(Vol LSA)| | PMEM1 (...) | | PMEM2 (...)| | PMEM3 (...) ?| ? ?| Decoder to go | | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| from host PA ?| | PCI 0e:00.0 | | PCI df:00.0| | PCI e0:00.0 ?| ? ?| to device PA ?| | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| PCI as 0d:00.0| | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?|_______________| |_____________| |____________| |______________|
筆記:
3 CXL固定內(nèi)存窗口(CFMW)對(duì)應(yīng)不同范圍的系統(tǒng)物理地址映射。每個(gè) CFMW 在 CXL 主機(jī)橋 (HB) 上都有特定的交錯(cuò)設(shè)置,CFMW0 提供對(duì) HB0 的無(wú)交錯(cuò)訪問(wèn),CFW2 提供對(duì) HB1 的無(wú)交錯(cuò)訪問(wèn)。CFW1 提供跨 HB0 和 HB1 的交錯(cuò)內(nèi)存訪問(wèn)。
兩個(gè) CXL 主機(jī)橋。每個(gè)都有2個(gè)CXL根端口和可編程HDM解碼器,可將內(nèi)存訪問(wèn)路由到單個(gè)端口或跨多個(gè)端錯(cuò)。此處的復(fù)雜配置可能是在 HB0 中使用以下 HDM 解碼器。HDM0 將 CFMW0 請(qǐng)求路由到 RP0,從而路由到 CXL Type3 0 的一部分。HDM1 將 CFMW0 請(qǐng)求從 CFMW0 PA 范圍的不同區(qū)域路由到 RP2,從而路由到 CXL Type 3 1 的一部分。HDM2 將另一個(gè) PA 系列從 CFMW0 中路由到 RP0 和 RP1 之間交錯(cuò),提供 CXL Type3 0 和 CXL Type 3 1 提供的部分內(nèi)存的雙向交錯(cuò)。HDM3 將那些從 CFMW1 以 HB0 為目標(biāo)的交錯(cuò)訪問(wèn)路由到 RP 0 和 CXL Type 3 0 內(nèi)存的另一部分(作為系統(tǒng)級(jí)雙向交錯(cuò)的一部分,例如 CXL Type3 0 和 CXL Type3 2。HDM4 用于通過(guò)交錯(cuò) HB0 從 CFMW1 接收的 RP 0 和 RP 1 請(qǐng)求,從而在當(dāng)前的所有 CXL type3 設(shè)備之間實(shí)現(xiàn)系統(tǒng)范圍的 4 路交錯(cuò),從而交錯(cuò)到所連接的 Type3 設(shè)備的內(nèi)存的更多區(qū)域。請(qǐng)注意,這是此拓?fù)渲兴锌赡艿?HDM 解碼器配置的代表性子集。
四個(gè) CXL 根端口。在這種情況下,CXL Type 3 設(shè)備直接連接到這些端口。
四個(gè) CXL Type3 內(nèi)存擴(kuò)展設(shè)備。它們將具有 HDM 解碼器,但在這種情況下,它們將獲取訪問(wèn)的主機(jī)物理地址并將其映射到自己的本地設(shè)備物理地址空間 (DPA),而不是執(zhí)行交錯(cuò)。
涉及交換機(jī)的示例拓?fù)洌?/p>
|<------------------SYSTEM PHYSICAL ADDRESS MAP (1)----------------->|| ? ?__________ ? __________________________________ ? __________ ? ?|| ? | ? ? ? ? ?| | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| | ? ? ? ? ?| ? || ? | CFMW 0 ? | | ?CXL Fixed Memory Window 1 ? ? ? | | CFMW 1 ? | ? || ? | HB0 only | | ?Configured to interleave memory | | HB1 only | ? || ? | ? ? ? ? ?| | ?memory accesses across HB0/HB1 ?| | ? ? ? ? ?| ? || ? |____x_____| |__________________________________| |__________| ? | ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? ? ? ? ? ? ? |Interleave Decoder ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | Matches this HB ? ? ? | ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ? | ? ? ? ? \_____________| ? ? ? ? ? ? ? ? ? ? |_____________/ ? ? ? ? ? ? __________|__________ ? ? ?_____|_______________ ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? | ? ?| ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ?| CXL HB 0 ? ? ? ? ? ?| ? ?| CXL HB 1 ? ? ? ? ? ?| ? ? ? ? ? ?| HB IntLv Decoders ? | ? ?| HB IntLv Decoders ? | ? ? ? ? ? ?| PCI/CXL Root Bus 0c | ? ?| PCI/CXL Root Bus 0d | ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? | ? ?| ? ? ? ? ? ? ? ? ? ? | ? ? ? ? ? ?|___x_________________| ? ?|_____________________| ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ?| ? ? ? ? ?| ? ? ? ? ? ? ? | ? ? ? ? ? ? ? ?| ? ? A HB 0 HDM Decoder ? ? matches this Port ? ? ___________|___ ? ?| ?Root Port 0 ?| ? ?| ?Appears in ? | ? ?| ?PCI topology | ? ?| ?As 0c:00.0 ? | ? ?|___________x___| ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ?\_____________________ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ?--------------------------------------------------- ? ? ? ? | ? ?Switch 0 ?USP as PCI 0d:00.0 ? ? ? ? ? ? ? ? ? | ? ? ? ? | ? ?USP has HDM decoder which direct traffic to ? ?| ? ? ? ? | ? ?appropiate downstream port ? ? ? ? ? ? ? ? ? ? | ? ? ? ? | ? ?Switch BUS appears as 0e ? ? ? ? ? ? ? ? ? ? ? | ? ? ? ? |x__________________________________________________| ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? | ? ? ? ? ? ? ?| ? ? ? ? ?| ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? | ? ? ? ? ? ? ?| ? ? _____|_________ ? ______|______ ? ______|_____ ? ______|_______ (4)| ? ? x ? ? ? ? | | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| CXL Type3 0 ? | | CXL Type3 1 | | CXL type3 2| | CLX Type 3 3 | ? ?| ? ? ? ? ? ? ? | | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| PMEM0(Vol LSA)| | PMEM1 (...) | | PMEM2 (...)| | PMEM3 (...) ?| ? ?| Decoder to go | | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| from host PA ?| | PCI 10:00.0 | | PCI 11:00.0| | PCI 12:00.0 ?| ? ?| to device PA ?| | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?| PCI as 0f:00.0| | ? ? ? ? ? ? | | ? ? ? ? ? ?| | ? ? ? ? ? ? ?| ? ?|_______________| |_____________| |____________| |______________|
示例命令行
非常簡(jiǎn)單的設(shè)置,只需一個(gè)直接連接的 CXL Type 3 設(shè)備:
qemu-system-aarch64 -M virt,gic-version=3,cxl=on -m 4g,maxmem=8G,slots=8 -cpu max \...-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M \-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M \-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \-device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2 \-device cxl-type3,bus=root_port13,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0 \-M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G
適合 4 路交錯(cuò)的設(shè)置。僅提供一個(gè)固定窗口,可在 2 個(gè) CXL 主機(jī)橋上實(shí)現(xiàn)雙向交錯(cuò)。每個(gè)主機(jī)網(wǎng)橋都有 2 個(gè) CXL 根端口,其中 CXL Type3 設(shè)備直接連接(無(wú)交換機(jī)):
qemu-system-aarch64 -M virt,gic-version=3,cxl=on -m 4g,maxmem=8G,slots=8 -cpu max \...-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M \-object memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M \-object memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M \-object memory-backend-file,id=cxl-mem4,share=on,mem-path=/tmp/cxltest4.raw,size=256M \-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=256M \-object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=256M \-object memory-backend-file,id=cxl-lsa3,share=on,mem-path=/tmp/lsa3.raw,size=256M \-object memory-backend-file,id=cxl-lsa4,share=on,mem-path=/tmp/lsa4.raw,size=256M \-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \-device pxb-cxl,bus_nr=222,bus=pcie.0,id=cxl.2 \-device cxl-rp,port=0,bus=cxl.1,id=root_port13,chassis=0,slot=2 \-device cxl-type3,bus=root_port13,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem0 \-device cxl-rp,port=1,bus=cxl.1,id=root_port14,chassis=0,slot=3 \-device cxl-type3,bus=root_port14,memdev=cxl-mem2,lsa=cxl-lsa2,id=cxl-pmem1 \-device cxl-rp,port=0,bus=cxl.2,id=root_port15,chassis=0,slot=5 \-device cxl-type3,bus=root_port15,memdev=cxl-mem3,lsa=cxl-lsa3,id=cxl-pmem2 \-device cxl-rp,port=1,bus=cxl.2,id=root_port16,chassis=0,slot=6 \-device cxl-type3,bus=root_port16,memdev=cxl-mem4,lsa=cxl-lsa4,id=cxl-pmem3 \-M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.targets.1=cxl.2,cxl-fmw.0.size=4G,cxl-fmw.0.interleave-granularity=8k
開(kāi)關(guān)下方適合 1、2 或 4 路交錯(cuò)的 4 個(gè)設(shè)備示例:
qemu-system-aarch64 -M virt,gic-version=3,cxl=on -m 4g,maxmem=8G,slots=8 -cpu max \...-object memory-backend-file,id=cxl-mem0,share=on,mem-path=/tmp/cxltest.raw,size=256M \-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest1.raw,size=256M \-object memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M \-object memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M \-object memory-backend-file,id=cxl-lsa0,share=on,mem-path=/tmp/lsa0.raw,size=256M \-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa1.raw,size=256M \-object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=256M \-object memory-backend-file,id=cxl-lsa3,share=on,mem-path=/tmp/lsa3.raw,size=256M \-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \-device cxl-rp,port=0,bus=cxl.1,id=root_port0,chassis=0,slot=0 \-device cxl-rp,port=1,bus=cxl.1,id=root_port1,chassis=0,slot=1 \-device cxl-upstream,bus=root_port0,id=us0 \-device cxl-downstream,port=0,bus=us0,id=swport0,chassis=0,slot=4 \-device cxl-type3,bus=swport0,memdev=cxl-mem0,lsa=cxl-lsa0,id=cxl-pmem0,size=256M \-device cxl-downstream,port=1,bus=us0,id=swport1,chassis=0,slot=5 \-device cxl-type3,bus=swport1,memdev=cxl-mem1,lsa=cxl-lsa1,id=cxl-pmem1,size=256M \-device cxl-downstream,port=2,bus=us0,id=swport2,chassis=0,slot=6 \-device cxl-type3,bus=swport2,memdev=cxl-mem2,lsa=cxl-lsa2,id=cxl-pmem2,size=256M \-device cxl-downstream,port=3,bus=us0,id=swport3,chassis=0,slot=7 \-device cxl-type3,bus=swport3,memdev=cxl-mem3,lsa=cxl-lsa3,id=cxl-pmem3,size=256M \-M cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G,cxl-fmw.0.interleave-granularity=4k
內(nèi)核配置選項(xiàng)
在 Linux 5.18 中,以下選項(xiàng)對(duì)于使用 CXL 內(nèi)存設(shè)備的操作系統(tǒng)管理是必需的,如此處所述。
CONFIG_CXL_BUS
CONFIG_CXL_PCI
CONFIG_CXL_ACPI
CONFIG_CXL_PMEM
CONFIG_CXL_MEM
CONFIG_CXL_PORT
CONFIG_CXL_REGION
引用
規(guī)范等的聯(lián)盟網(wǎng)站:http://www.computeexpresslink.org
計(jì)算快速鏈接修訂版 2 規(guī)范,2020 年 10 月
CEDT CFMWS & QTG _DSM ECN May 2021