私はメモリデバイスの不揮発性メモリ制御やホストIFなどを扱うソフト屋です。
仕事でCXL(Compute Express Link)まわりの技術に関わっています。
CXL技術に関連するメモ書きを残していこうと思います。
ホストまわりのこと経験・知識共に乏しいので、詳しい親切な方は教えて下さると幸いです。
また、間違い、アドバイス、その他、ご意見やご要望ありましたらお気軽にどうぞ。
1. CXL接続のトポロジー
CXLデバイスとホストCPUとのCXL接続を利用したトポロジーの例を下図に示します。
図中の「CXL1.1」で囲っている箇所はCXL1.1でサポート可能なトポロジー、「CXL2.0」で囲っている箇所はCXL2.0でサポート可能なトポロジーを示しています。
CXL2.0の仕様から、Switchが導入され、Switchを介して、ホストCPUとCXLデバイスの接続は、1対多の接続、多対多の接続がサポートされるようになりました。
ホストCPUとCXLデバイスが直接接続されているケースとSwitchを介して接続されているケース、いずれのケースでも、システムのソフトウェア視点で見ると、CXL Type3 Deviceのメモリ空間は、ホストCPUのNUMA Nodeとは、別のNUMA Nodeのメモリ空間として見えるよう扱われています。
2. CXLのバージョンと接続性
CXLに対応した機器は、ホストCPUとCXLデバイス両者とも下位互換が必須となっています。
CXLでの接続時、Upstream(ホスト側)とDownstream(デバイス側)、それぞれがサポートするバージョンと、接続で使用されるCXLのバージョンの一覧表を以下に示します。
Upstream Component | Downstream Component | Link Training Result |
---|---|---|
Host CPU - CXL 2.0 capable | Switch - CXL 2.0 capable | CXL 2.0 mode |
Host CPU - CXL 1.1 capable | Switch - CXL 2.0 capable | Fail |
Host CPU - CXL 2.0 capable | Device - CXL 2.0 capable | CXL 2.0 mode |
Host CPU - CXL 2.0 capable | Device - CXL 1.1 capable | CXL 1.1 mode (Hot-addはFail) |
Host CPU - CXL 1.1 capable | Device - CXL 2.0 capable | CXL 1.1 mode (Hot-addはFail) |
Host CPU - CXL 1.1 capable | Device - CXL 1.1 capable | CXL 1.1 mode (Hot-addはFail) |
Switch - CXL 2.0 capable | Device - CXL 2.0 capable | CXL 2.0 mode |
Switch - CXL 2.0 capable | Device - CXL 1.1 capable | CXL 1.1 mode (Hot-addはFail) |
Hot-Plug (Hot-AddとHot-Remove)のサポートは、CXL2.0以降となっていますので、ホストCPU側がCXL1.1の場合、デバイスがCXL2.0をサポートしていてもHot-Addには対応できません。
また、Switchの登場もCXL2.0以降となっていますので、ホストCPU側がCXL1.1の場合、Switchを接続しても、CXLでの通信はできません。
3. Memory Pooling
CXLでは、Memory Poolingを以下のように定義しています。
メモリリソースを効率的に利用するための、メモリリソースの動的な管理と割り当てを可能にするソフトウェア(OS、Fabric Manager)、ハードウェア(Platforms、Switches、Memory Devices)とプロトコル(CXL)の組み合わせ。
上記の定義に従うと、CXL2.0からMemory Poolingに対応していることになります。
CXLの仕様書では、MLD (Multi Logical Device)に対応し、デバイスのメモリ空間を動的にホストCPUに割り当てることができるType3のデバイスを、Pooled Deviceと呼んでいます。
MLDとSLDの接続例を下図に示します。
MLDはメモリ空間を複数のホストCPUに割り当てることが可能なデバイスで、SLDはメモリ空間を1つのホストCPUにのみ割り当てることが可能なデバイスです。
図中のFabric Managerは、ホストCPUとデバイスとの結び付けを管理するための仕組みです。Fabric Managerは、Host CPUで動作するアプリケーションであっても良いし、BMC (Baseboard Management Controller)で動作するアプリケーションであっても構いません。
Fabric Managerの詳細についてもそのうち書いていこうと思います。
次回以降もCXLの仕様の詳細について書いていきます。