用語解説 シーエックスエル

CXLとは

CXL(Compute Express Link)は、PCIeの物理層を使ってCPU・メモリ・アクセラレータをつなぎ、メモリを拡張したり共有したりするためのオープン規格。仕組み、使い方、コストの考え方、策定団体、主要ベンダー、競合規格を整理する。

CXL(Compute Express Link)は、CPUとメモリ、GPUやFPGAなどのアクセラレータを少ない遅延でつなぎ、メモリを拡張したり共有したりするためのオープンな接続規格です。物理層にはPCI Expressを使います。そのため、PCIeと同じ配線の仕組みを使いながら、つないだ先のデバイスのメモリをCPUが自分のメモリのように扱えます。

CXLには3つのプロトコルがあります。CXL.ioはデバイスの検出や設定を担い、中身はほぼPCIeと同じです。CXL.cacheは、デバイスがCPU側のメモリを参照するときに使います。CXL.memは、CPUがデバイス側のメモリを読み書きするときに使います。どのプロトコルを使うかで、デバイスは3種類に分かれます。Type 1はSmartNICなどメモリを持たないアクセラレータ、Type 2はGPUやFPGAなどメモリを持つアクセラレータ、Type 3はメモリを増やすためのデバイスです。

いま最も実用化が進んでいるのは、Type 3によるメモリの増設です。サーバーのDIMMスロットの数に関係なくDRAMを追加できます。Linuxでは、追加したメモリはCPUを持たないNUMAノードとして見えます。エンジニアが導入するには、CXL対応のCPU、マザーボード、OSが必要です。LinuxカーネルにはCXLのドライバーが標準で入っており、管理にはndctlプロジェクトのcxlコマンドを使います。そのうえで、どのアプリにどのメモリを使わせるかを、NUMAの設定やメモリの階層化で決めます。CPUに直接挿したDDRメモリより遅延が大きいことは、前提として知っておく必要があります。

規格は世代ごとに進化しています。CXL 1.0と1.1(2019年)はPCIe 5.0がベースです。CXL 2.0(2020年)ではスイッチを使い、複数のサーバーで1つのメモリプールを分け合えるようになりました。CXL 3.0(2022年)はPCIe 6.0がベースで、多数の機器を網の目状につなぐ構成に対応しました。その後、3.1と3.2も公開されています。市販のCPUが対応しているのは主に1.1〜2.0世代で、3.x世代の機能は規格だけが先に進んでいる状態です。

事業面での使い道は大きく2つあります。1つは、インメモリDB、AI推論、HPCなどで「メモリが足りないという理由だけでサーバーを増やす」状況をなくすことです。もう1つは、余っているメモリを複数のサーバーで融通し、無駄を減らすことです。料金について、CXLは規格なので、利用者が使用料を払うものではありません。お金がかかるのは、CXL対応サーバーやメモリモジュールなどのハードウェアです。モジュール単体の公開価格はこの記事では確認できていないため、サーバーベンダーから見積もりを取るのが現実的です。

規格を作っているのはCXLコンソーシアムという業界団体です。最初の仕様はIntelが提供し、AMD、Arm、Google、Microsoft、Metaなども参加しています。CPUでは、Intelの第4世代Xeonスケーラブル・プロセッサー以降と、AMDの第4世代EPYC以降が対応しています。メモリ増設モジュールはSamsung、SK hynix、Micronが作っています。CXL用のコントローラーは、Astera Labs、Montage Technology、Marvellなどが手がけています。

競合について見ると、以前はGen-ZとOpenCAPIという規格もありました。どちらも技術資産をCXLコンソーシアムに移しており、CPUとメモリをつなぐ標準はCXLにまとまっています。一方、GPU同士を高速につなぐ分野には、NVIDIA独自のNVLinkや、2024年に業界団体が立ち上げたUALinkがあります。こちらは主な用途がCXLと違いますが、アクセラレータの接続では一部が重なります。富士通の国産CPU「FUJITSU-MONAKA」のように、データセンター向けCPUの選択肢は増えています。ここからは筆者の推測ですが、今後サーバーを選ぶときには、CXLのどの世代に対応しているかが確認すべき点の1つになると考えられます。なお、MONAKAがCXLに対応しているかどうかは、今回参考にした情報には書かれていません。

CXLに関する記事

1 件

ほかの用語