2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CXL (Compute Express Link) その7 - コマンドとレスポンス

Posted at

私はメモリデバイスの不揮発性メモリ制御やホストIFなどを扱うソフト屋です。
仕事でCXL(Compute Express Link)まわりの技術に関わっています。
CXL技術に関連するメモ書きを残していこうと思います。
ホストのCPUとOS/Applicationまわりの経験・知識共に乏しいので、親切な方は教えて下さると幸いです。
また、間違い、アドバイス、その他、ご意見やご要望ありましたらお気軽にどうぞ。

1. CXL.memのコマンドとレスポンス

CXL.memのプロトコルでは、ホストCPUからCXLデバイスのメモリ空間にデータの読み書きする際に実行されるコマンドは、以下の2種類のいずれかのフォーマットに従って送信されます。

  • Request (Req)
    データの読み出し等、ホストCPUからデータの転送が不要であるコマンドの実行を指示するためのフォーマット。

  • Requeset with Data (RwD)
    データの書き込み等、ホストCPUからデータの転送が必要であるコマンドの実行を指示するためのフォーマット。

コマンドに対するレスポンスは、以下の2種類のいずれかのフォーマットで返されます。

  • Data Response (DRS)
    Reqに対するレスポンス。Reqの実行結果として、CXLデバイスからデータの転送が伴う場合に返される。DRSは、データのヘッダとして転送され、以降のSlotにData Chunkが入る。

  • No Data Response (NDR)
    Req、もしくはRwDに対するレスポンス。Req、もしくはRwDの実行結果として、CXLデバイスからデータの転送が伴わない場合に返される。

2. Request (Req)

Reqのデータフォーマットを下図に示します。
Req.png
それぞれのパラメータ下表に示します。

Field Bits 概要
Valid 1 リクエストが有効であるか無効であるか示す。
0b: 無効なリクエスト
1b: 有効なリクエスト
Memory Operation 4 リクエストのオペレーションコード。ReqでCXL Type3に実行指示が可能なリクエストは以下の通り。
0000: MemInv
0001: MemRd
0010: MemRdData
1000: MemSpecRd
1001: MemInvNT
Snoop Type 3 スヌープタイプ。
000: No-Op
001: リクエスタがデータのShared Copyを要求している示す
010: リクエスタがデータをキャッシュしないことを示す
011: リクエスタがデータのExclusive Copyを要求していることを示す
Meta Data Field 2 メタステートの更新の有無を指示する。
00: メタステートをMeta Data Valueで指定する値に更新 (MS0)
11: Meta Data Valueの値を無視 (No-Op)
Meta Data Value 2 キャッシュラインのメタステートの値。MESIプロトコルに従う。
00: Invalid
10: Any (Exclusive or Modified)
11: Shared
Tag 16 リクエストの発行元(リクエスター)を示す
Address [51:5] 47 リクエストを実行するメモリ空間のアドレス。Address[5]は将来の用途のための予約であるため、アドレスは64Bアライン。
Traffic Class 2 QoSに関連するパラメータに使用される(将来の用途のための予約)。
LD-ID 4 Logical Device Identifier。MLDをサポートするデバイスで使用される。Requestを実行するLogical DeviceのIDを示す。
Reserved 6 Reserved

3. Request with Data (RwD)

RwDのデータフォーマットを下図に示します。
RwD.png
それぞれのパラメータ下表に示します。

Field Bits 概要
Valid 1 リクエストが有効であるか無効であるか示す。
0b: 無効なリクエスト
1b: 有効なリクエスト
Memory Operation 4 リクエストのオペレーションコード。RwDでCXL Type3に実行指示が可能なリクエストは以下の通り。
0001: MemWr
0010: MemWrPtl
Snoop Type 3 スヌープタイプ。
000: No-Op
001: リクエスタがデータのShared Copyを要求している示す
010: リクエスタがデータをキャッシュしないことを示す
011: リクエスタがデータのExclusive Copyを要求していることを示す
Meta Data Field 2 メタステートの更新の有無を指示する。
00: メタステートをMeta Data Valueで指定する値に更新 (MS0)
11: Meta Data Valueの値を無視 (No-Op)
Meta Data Value 2 キャッシュラインのメタステートの値。MESIプロトコルに従う。
00: Invalid
10: Any (Exclusive or Modified)
11: Shared
Tag 16 リクエストの発行元(リクエスター)を示す
Address [51:6] 46 リクエストを実行するメモリ空間のアドレス。アドレスは64Bアライン。
Poison 1 リクエストで送信するデータがPoisonの状態であることを示す。
0: Poisonでない
1: Poison
Traffic Class 2 QoSに関連するパラメータに使用される(将来の用途のための予約)。
LD-ID 4 Logical Device Identifier。MLDをサポートするデバイスで使用される。Requestを実行するLogical DeviceのIDを示す。
Reserved 6 Reserved

ReqとRwDのフォーマットの違いは、Addressのビット数と、RwDにPoisonのパラメータが存在することです。Poisonは、何らかの誤りを含むデータを、ホストCPUとCXLデバイス間で転送する際に付けられるフラグです。
CXLデバイスは、Poisonであるデータを受信した場合、受信したデータがPoisonであることを保持しておく必要があります。Poisonの詳細は、エラーに関して書く際に触れたいと思います。

4. No Data Response (NDR)

NDRのデータフォーマットを下図に示します。
NDR.png
パラメータ下表に示します。

Field Bits 概要
Valid 1 リクエストが有効であるか無効であるか示す。
0b: 無効なリクエスト
1b: 有効なリクエスト
Memory Operation 4 リクエストのオペレーションコード。RwDでCXL Type3に実行指示が可能なリクエストは以下の通り。
0001: MemWr
0010: MemWrPtl
Meta Data Field 2 メタステートの更新の有無を指示する。
00: メタステートをMeta Data Valueで指定する値に更新 (MS0)
11: Meta Data Valueの値を無視 (No-Op)
Meta Data Value 2 キャッシュラインのメタステートの値。MESIプロトコルに従う。
00: Invalid
10: Any (Exclusive or Modified)
11: Shared
Tag 16 リクエストの発行元(リクエスター)を示す
LD-ID 4 Logical Device Identifier。MLDをサポートするデバイスで使用される。Requestを実行するLogical DeviceのIDを示す。
Device Load 2 デバイスのQoSを示す。

5. Data Response (DRS)

DRSのデータフォーマットを下図に示します。
DRS.png

パラメータ下表に示します。

Field Bits 概要
Valid 1 リクエストが有効であるか無効であるか示す。
0b: 無効なリクエスト
1b: 有効なリクエスト
Memory Operation 4 リクエストのオペレーションコード。RwDでCXL Type3に実行指示が可能なリクエストは以下の通り。
0001: MemWr
0010: MemWrPtl
Meta Data Field 2 メタステートの更新の有無を指示する。
00: メタステートをMeta Data Valueで指定する値に更新 (MS0)
11: Meta Data Valueの値を無視 (No-Op)
Meta Data Value 2 キャッシュラインのメタステートの値。MESIプロトコルに従う。
00: Invalid
10: Any (Exclusive or Modified)
11: Shared
Tag 16 リクエストの発行元(リクエスター)を示す
LD-ID 4 Logical Device Identifier。MLDをサポートするデバイスで使用される。Requestを実行するLogical DeviceのIDを示す。
Device Load 2 デバイスのQoSを示す。

NDRとDRSのフォーマットの違いは、Reservedとして確保されているサイズの違いはありますが、DRSにPoisonのパラメータが存在することです。このPoisonは、RwDのPoison同様、ホストCPUとCXLデバイス間で転送されるデータに誤りが含まれることを示します。
Poisonは、CXLデバイスのメモリから読み出されたデータに含まれる誤りが、CXLデバイス内部で訂正し切れなかった場合にも用いられます。
CXLデバイスは、Poisonであるデータを送信した場合も、Poisonでデータを送信したことを保持しておく必要があります。

6.CXL.memのコマンドとレスポンスの対応

Req/RwDとDRS/NDRとの対応関係を以下の表に示します。
仕様上発生しないコマンドおよびレスポンスのパラメータの組み合わせは表から除外してあります。
Command_Response.png
上記に挙げたReq/RwD/DRS/NDRが、前回の記事(CXLその6)で示した、Header Slot(12B)/Generic Slot(16B)に埋め込まれて転送されます。それぞれのSlotに埋め込まれるReq/RwD/DRS/NDRは1つとは限りません。複数個のReq/RwD/DRS/NDRが組み合わされてSlotに埋め込まれ、Flit単位で転送されます。


次回以降もCXLの仕様の詳細について書いていきます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?