要約

  • RFC 9561はpNFS SCSIレイアウトの名前空間識別、予約キー、クライアントのフェンシング、揮発性キャッシュのフラッシュをNVMeへ写像する。
  • NGUIDは対象を示し、Preemptは状態変更を求め、Flushは限定された安定記憶の主張を支える。どれもアプリの最終状態そのものではない。
  • Host Identifier、全コントローラ経路、予約状態、フェンス後のE/S、キャッシュ、LAYOUTCOMMIT、読戻しを結ぶ必要がある。

MDSがLAYOUTCOMMITへ成功を返すと、運用画面は作業を終えたように見える。しかし古いクライアントが全経路で拒否されたか、データが揮発性キャッシュを出たか、アプリが期待するファイルを読めたかは別問題である。

2024年4月にIETF Standards Trackとして発行されたRFC 9561は、RFC 8154を書き換えず、そのSCSI概念をNVMeへ対応づける。PCIe、RDMA、TCP、Fibre Channelの違いを越えて使える設計だ。

名前空間の一致は内容の一致ではない

対象名前空間はEUI64またはNGUIDを備える。pNFSのバイナリdesignatorにはどちらかが入り、XDR長の8または16オクテットで判別する。これは線上の解釈を揃える仕組みである。

現在の内容や全経路の一致までは保証しない。NVMe予約キーは、同じHost Identifierに関連づく全コントローラへ及ぶ。したがって予約の意味は、実際のコントローラ一覧とHost Identifierの整合を伴って初めて読める。

フェンシングは拒否結果まで観測する

MDSはボリュームを返す前に自身のキーを登録し、登録者限定の排他予約を取得する。応答しないクライアントにはPreemptまたはPreempt and Abortを発行し、対象キーを指定する。クライアントはReservation Conflictで状態を識別できる。

RFC 8154が求める結果はさらに具体的で、フェンスされたクライアントの全E/Sをストレージが拒否しなければならない。ゆえにコマンド完了だけでなく、予約の前後と各経路での旧キーの振る舞いが要る。

DNR付きの再試行不能エラー後、クライアントは関連レイアウトをMDS経由でコミットし、未処理レイアウトを返し、デバイスIDを忘れ、キーを解除する。義務の記述は、個別実行のログではない。

コミットの前に条件付きのFlushがある

VWCとWCEが揮発性書込みキャッシュの有効化を示す場合、MDSはLAYOUTCOMMITを返す前にNVMe Flushを完了させる。SCSI SYNCHRONIZE CACHEに対応する操作だ。

成功は特定の名前空間、順序、完了状態について意味を持つが、複製、将来の可読性、業務トランザクションまでは証明しない。NFSv4/RPCの保護も下位NVMe経路へ自動継承されない。NVMe/TCPではTLSを使える一方、PCIeには同等の追加保護がない場合がある。ファイル権限とボリューム権限の対応もクライアントの責任である。

陸恒の現実層の考え方では、識別子、設定、実行命令、装置状態、アプリ観測を同じものとして扱わない。