1
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) その11 - CXL.ioコマンド: Event Record

1
Posted at

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


今回は前回(CXL (Compute Express Link) その10-CXL.ioコマンド)でご紹介したCXL.ioのコマンドのうち、CXL Device CommandのEventsコマンドセットの詳細を書きます。

1 Events Command Set

CXLメモリデバイスでは、デバイス内でエラー等のイベント発生時、発生したイベントの情報を保持し、ホストシステムの要求に応じて返す必要があります。
Eventsコマンドセットは、ホストシステムがCXLメモリデバイスに対して、イベント情報に関連する設定、およびイベント情報の取得をするためのコマンドセットです。
ホストシステムは、イベント情報を使用してデータの復旧等のシステムのリカバリを行うことになります。

イベント発生時のホストシステムとCXLメモリデバイス間のやり取りの例を下図に示します。
Event.png

CXLメモリデバイスでは、イベント発生後、Event Recordに発生したイベントの情報を記録し、イベントが発生したことをホストシステムに割り込み等で通知します。
ホストシステムは、割り込みに応じて、Get Event Recordでイベント情報を取得し、取得後はClear Event Recordでイベント情報をクリアします。

Eventsコマンドセットでは下表に示す4つのコマンドが定義されています。
下表に示す通り、CXLメモリデバイスは、全てのコマンドへの応答がMandatoryとなっています。

Command Required 概要
Get Event Record M イベント情報の取得をする。
Clear Event Records M イベント情報のクリアをする。
Get Event Interrupt Policy M イベント発生時の通知方法に関する設定の情報の取得をする。
Set Event Interrupt Policy M イベント発生時の通知方法を設定する。

1.1 Event Recordの種類

CXL2.0のEvent Recordには、以下に示す6種類のEvent Recordが定義されています。

  • General Media Event Record
  • DRAM Event Record
  • Memory Module Event Record
  • Physical Switch Event Record
  • Virtual Switch Event Record
  • MLD Port Event Record

不揮発性メモリを搭載するCXLメモリデバイスは、General Media Event RecordとMemory Module Event Recordで定義される2種類のイベントを区別し、保持する必要があります。

ホストCPUがデータの読み書きを行う記録媒体としてDRAMを搭載するCXLメモリデバイスの場合は、DRAM Event Recordにも対応する必要があります。
Physical Switch Event Record、Virtual Switch Event Record、MLD Port Event Recordの3種類は、Switchが対応するイベントの情報です。

自分が関心を持っているのは不揮発性メモリを搭載するCXLメモリデバイスであるため、以降は、General Media Event RecordとMemory Module Event Recordのみを扱います。

詳細は後述しますが、General Media Event Recordでは不揮発性メモリからのデータの読み出しで発生した訂正不可エラーに関するイベント、Memory Module Event RecordではCXLメモリデバイスの温度や寿命等の情報に関するイベントが扱われます。

General Media Event RecordとMemory Module Event Recordのフォーマットを下図に示します。
record.png

図中における緑色の箇所は、General Media Event RecordとMemory Module Event Recordの共通のパラメータです。

Event Record共通のパラメータの詳細を下表に示します。

Field 概要
Event Record ID Event Recordの種類を区別するためのID。
Event Record Length Event Recordのサイズ。
Event Record Flags 発生したイベントによる影響を示すフラグ。
Bit[1:0]: Event Recordの重要度(後述)
Bit[2]: データの永続性のエラーに関するイベント
Bit[3]: CXLメモリデバイスのメインテナンスが必要となるイベント
Bit[4]: イベントによりパフォーマンスの低下が発生
Bit[5]: CXLメモリデバイスの交換が必要となるイベント
Event Record Handle イベントのID。
Related Event Record Handle 関連するイベントのID。
Event Record Timestamp イベントが発生した時間(CXLメモリデバイスがタイムスタンプに対応している場合)。

General Media Event Recordのパラメータを下表に示します。

Field 概要
Physical Address イベントが発生したメモリのアドレス。
Memory Event Descriptor 発生したイベントの種類。
Bit[0]: 訂正不可エラー
Bit[1]: 設定された閾値をオーバー
Bit[2]: Poison Listのオーバーフロー
Memory Event Type イベントの発生箇所を示す。
00h = 記録媒体から読み出したデータの訂正
01h = ホストCPUによる無効なアドレスの指定
02h = CXLメモリデバイス内部のデータパス
Transaction Type イベントが発生した処理。
00h = Unknown/Unreported
01h = Host Read
02h = Host Write
03h = Host Scan Media
04h = Host Inject Poison
05h = Internal Media Scrub
06h = Internal Media Management
Validity Flags イベントが発生したメモリのアドレスの追加情報の使用の有無。
Bit[0]: Channel Field is valid
Bit[1]: Rank Field is valid
Bit[2]: Device Field is valid
Bit[3]: Component Identifiere Field is valid
Channel メモリのアドレスの追加情報の一つ。
Rank メモリのアドレスの追加情報の一つ。
Device メモリのアドレスの追加情報の一つ。
Component Identifier メモリのアドレスの追加情報の一つ。

上に示した表中のPoison Listの詳細については、別にMedia and Poison Managementコマンドセットの詳細で触れたいと思います。

Memory Module Event Recordのパラメータを下表に示します。

Field 概要
Device Event Type 発生したイベントの種類。
00h = Health Status Change
01h = Media Status Change
02h = Life Used Change
03h = Temperature Change
04h = Data Path Error
05h = LSA Error
Health Status CXLメモリデバイスの状態を示す。
Bit[0]: CXLメモリデバイスのメインテナンスが必要とされている状態
Bit[1]: パフォーマンス低下が起こっている状態
Bit[2]: CXLメモリデバイスの交換が必要とされている状態
Media Status CXLメモリデバイスの記録媒体の状態を示す。
00h = 正常な状態
01h = アクセスができない状態
02h = 書き込みが正常に行えない状態
03h = 全てのデータが失われた状態
04h = CXLメモリデバイスで電源断が検出されたことにより書き込みができない可能性のある状態
05h = CXLメモリデバイスのシャットダウンにより書き込みができない可能性のある状態
06h = イベント以降に受け付けた書き込みが正常にできない可能性のある状態
07h = CXLメモリデバイスで電源断が検出されたことにより全てのデータが失われた可能性のある状態
08h = CXLメモリデバイスでシャットダウンが行われたことにより全てのデータが失われた可能性のある状態
09h = 全てのデータが失われた可能性のある状態
Additional Status CXLメモリデバイスの状態を示す。
Bit[1:0]: 消費されたCXLメモリデバイスの寿命の状態(Normal/Warning/Critical)
Bit[3:2]: CXLメモリデバイスの温度状態(Normal/Warning/Critical)
Bit[4]: CXLメモリデバイスの揮発性メモリで発生した訂正可能エラーの発生状態(Normal/Warning)
Bit[5]: CXLメモリデバイスの不揮発性メモリで発生した訂正可能エラーの発生状態(Normal/Warning)
Life Used CXLメモリデバイスの消費された寿命(%)。
Device Temperature CXLメモリデバイスの温度。
Dirty Shutdown Count CXLメモリデバイスに対して行われた電源瞬断の回数。
Corrected Volatile Error Count CXLメモリデバイスの揮発性メモリで発生した訂正可能エラー数
Corrected Persistent Error Count CXLメモリデバイスの不揮発性メモリで発生した訂正可能エラー数

Additional Statusにおける、NormalとWarningの境となる閾値は、CXLメモリデバイスのユーザにより設定される閾値です。閾値の設定は、Health Info and Alertsコマンドセットを使用して行います。
WarningとCriticalの境となる閾値は、CXLメモリデバイスの信頼性の保証の観点から、CXLメモリデバイスのベンダーが製造において設定する閾値です。

SRAM/DRAM等の揮発性メモリではデータの誤りが発生することは稀かと思います。しかし、NANDフラッシュメモリにも当てはまるのですが、一般的に、不揮発性メモリで訂正可能な範囲でのデータの誤りは頻繁に発生します。Corrected Persistent Error Countの値を、ホストシステム側で、CXLメモリデバイスの故障を予測するために使用する場合、カウントアップの条件等、ホストシステムとCXLメモリデバイスとの間で取り決めをしておく必要があると考えています。

1.2 Event Recordの重要度(Severity)

イベントには、重要度に関して4つの分類があります。
CXLメモリデバイスで実際に発生するイベントは製品の実装などにより異なるため、重要度の区分は、CXLメモリデバイスとホストシステム間で製品の実装に合わせて取り決める必要があります。そのためCXLの仕様としては明記されていません。

重要度と例を下表に示します。

Severity
Informational データの読み書きで指定されたアドレスが無効なアドレス
バッファ内のデータで訂正不可エラーが発生
Warning Warningの閾値温度超え発生
Warningの閾値超えた回数の書き込みが発生
記録媒体へのデータの書き込みエラー
Failure バッファ内のデータの管理情報の破損
Criticalの閾値温度超え発生
Criticalの閾値超えた回数の書き込みが発生
記録媒体のダイ単位で故障
キャパシタの性能低下
Fatal 記録媒体へのアクセスができない
コントローラの故障

不揮発性メモリを搭載するCXLメモリデバイスでは、発生したイベントの情報を、Event Recordの2種類と重要度の4種類で、8種類で区別して保持する必要があります。

1.3 コマンドパラメータ

Eventsコマンドセットで定義されるコマンドの詳細を示します
コマンドで指定するパラメータをInput Payload、応答として返されるパラメータをOutput Payloadで記載します。

1.4.1 Get Event Records

Get Event Recordsでは重大度を指定して、Event Recordを取得します。

Input Payload

Byte Offset Length Description
00h 1 Event Log: 取得するEvent Recordの重大度。
00h = Informational Event
01h = Warnning Event
02h = Failure Event
03h = Fatal Event

Output Payload

Byte Offset Length Description
00h 1 CXLメモリデバイスが保持するEvent Recordのサイズに関するフラグ。
Bit[0]: 発生したイベントの数が、CXLメモリデバイスで保持することが可能なEvent Recordの数が超えていること(オーバーフロー)を示す
Bit[1]: CXLメモリデバイスが保持するEvent RecordのサイズがMailboxレジスタに収まらないため、複数回の読み出しが必要であることをしめす
01h 1 Reserved
02h 2 オーバーフローしたイベントの数を示す。
04h 8 オーバーフローした最初のイベント発生時のタイムスタンプ。
0Ch 8 オーバーフロー発生後最後のイベント発生時のタイムスタンプ。
14h 2 CXLメモリデバイスが保持するEvent Recordの数。
16h 10 Reserved
20h Varies Event Record。

Output Payloadでホストシステムに送ることが可能なEvent Recordの数は、CXLデバイスで実装するMailboxレジスタのサイズに依存します。

1.4.2 Clear Event Records

CXLメモリデバイスで保持しているEvent Recordsをクリアします。

Input Payload

Byte Offset Length Description
00h 1 クリアするEvent Recordの重大度。
00h = Informational Event
01h = Warnning Event
02h = Failure Event
03h = Fatal Event
01h 1 全てのEvent Recordをクリアするか否かを示すフラグ。
Bit[0]: Clear All Events
02h 1 消去するイベントの数。
03h 3 Reserved
06h Varies クリアするイベントのID(複数可)。

1.4.3 Get Event Interrupt Policy

イベント発生時の通知方法に関する設定の情報を取得します。
イベントの重大度毎に通知方法が設定されています。

Output Payload

Byte Offset Length Description
00h 1 Informational Eventの通知設定。
Bit[1:0]: Interrupt Mode
00b = No Interrupt
01b = MSI/MSI-X
10b = FW Interrupt (EFN VDM)
Bit[3:2]: Reserved
Bit[7:4]: FW Interuptで通知する場合のメッセージ番号
01h 1 Warning Eventの通知設定。
Informational Eventの通知設定と同じため略。
02h 1 Failure Eventの通知設定。
Informational Eventの通知設定と同じため略。
03h 1 Fatal Eventの通知設定。
Informational Eventの通知設定と同じため略。

1.4.4 Set Event Interrupt Policy

イベント発生時の通知方法を指定します。通知方法は、イベントの重大度毎に設定します。
パラメータ毎の詳細はGet Event Interrupt Policyと同様のため省略します。

Input Payload

Byte Offset Length Description
00h 1 Informational Eventの通知設定。
01h 1 Warning Eventの通知設定。
02h 1 Failure Eventの通知設定。
03h 1 Fatal Eventの通知設定。

次回も、CXL.ioで実行されるコマンドセットからピックアップして詳細について書こうと思っています。

1
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
1
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?