CXL(Compute Express Link)は、CPUとメモリやアクセラレータをつなぐオープンな相互接続規格である。物理層にはPCI Expressをそのまま使い、その上に「メモリを一貫性(コヒーレンシ)を保ったまま共有する」ためのプロトコルを載せたものだ。
CXLとは — PCIeの上に載る3つのプロトコル
CXLは3つのプロトコルの束で構成される。CXL.ioは実質PCIeそのもので、デバイスの発見や設定に使う。CXL.cacheはデバイス側がホストのメモリをキャッシュしながら読み書きするため、CXL.memはホスト側がデバイス上のメモリを自分のメモリ空間として読み書きするためのものだ。この3つ目が、いま最も製品化が進んでいる部分にあたる。
デバイスはType 1(メモリを持たないアクセラレータ)、Type 2(メモリを持つGPUやFPGA)、Type 3(メモリ拡張装置)に分類される。市場に出ている製品の大半はType 3である。
何ができるのか — メモリの増設とプーリング
最も分かりやすい効果はメモリ容量の拡張だ。サーバーのDIMMスロットはCPUのメモリチャネル数で物理的に頭打ちになるが、CXLメモリはPCIeスロットやE3.Sベイに挿すため、その外側に容量を足せる。当サイトで取り上げた富士通「FUJITSU-MONAKA」のメモリ転送速度8800MT/sはCPU直結メモリの帯域の話であり、CXLはそれとは別に「容量」を増やす軸だと考えると整理しやすい。
規格バージョンで段階がある。1.1は単純な容量拡張、2.0はスイッチ経由のメモリプーリング(複数サーバーが1つのメモリ筐体を分け合い、必要量だけ割り当てる)とホットプラグ、3.0はPCIe 6.0ベースの64GT/sとファブリック構成、複数ホストによるメモリ共有に対応した。
ただしCXL経由のメモリはCPU直結DRAMより遅延が大きい。ホット領域をそのまま置き換える用途ではなく、アクセス頻度の低いデータを逃がす使い方が基本になる。
使い方 — 対応CPUとOSからの見え方
サーバーCPU側では、Intelが第4世代Xeon(Sapphire Rapids)から、AMDがEPYC 9004(Genoa)からCXLによるメモリ拡張に対応している。Linuxはカーネル本体にCXLドライバを持ち、構成の確認や設定はndctlプロジェクトの`cxl`コマンドで行う。
OSからは、CXLメモリは「CPUを持たないNUMAノード」として見える。そのため、`numactl`で明示的にバインドするか、カーネルのメモリ階層化(tiering)機能に任せて低頻度ページを自動的に追い出す、という2通りの使い方になる。アプリケーションの改修なしで使える点が実務上の利点だ。
料金 — 定価は基本的に公開されていない
CXLは規格であり、規格そのものに利用料がかかるわけではない。コストはメモリモジュール、コントローラ、対応サーバー側に乗る。Micron CZ120のようなE3.S型メモリ拡張モジュールが製品化されているが、これらの価格は個別見積もりで、一般向けの定価は公開されていない。主要クラウドで「CXLメモリ付き」を選べる標準インスタンスも、公開情報としては確認できない。検討するならサーバーベンダー経由のPoCが現実的な入口になる。
誰が作っていて、競合は何か
策定主体はCXL Consortium。2019年にIntel主導で発足し、AMD、Arm、Google、Meta、Microsoft、Samsung、Micronなどが参加している。競合規格だったGen-ZとOpenCAPIは資産をCXL Consortiumへ移管しており、CPU〜メモリ間のオープン規格は事実上CXLに一本化された。
残る対抗軸はGPU間接続で、NVIDIAのNVLinkと、それに対抗するUALinkがある。CXLはCPUとメモリ、NVLink/UALinkはアクセラレータ同士と、担当する層が異なる点は押さえておきたい。部品側ではAstera Labs、Marvell、Montage Technology、Rambusなどがコントローラを、Samsung、SK hynix、Micronがモジュールを供給している。

