(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-02-25
(45)【発行日】2025-03-05
(54)【発明の名称】ストレージ装置及びそのプロトコル変換方法
(51)【国際特許分類】
G06F 13/36 20060101AFI20250226BHJP
G06F 3/06 20060101ALI20250226BHJP
【FI】
G06F13/36 320A
G06F3/06 301N
(21)【出願番号】P 2022060208
(22)【出願日】2022-03-31
【審査請求日】2024-02-26
(73)【特許権者】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】田中 勝也
(72)【発明者】
【氏名】小林 佑太朗
(72)【発明者】
【氏名】福田 秀明
【審査官】豊田 真弓
(56)【参考文献】
【文献】特開2021-189462(JP,A)
【文献】国際公開第2015/008354(WO,A1)
【文献】米国特許第06742075(US,B1)
【文献】米国特許出願公開第2010/0281201(US,A1)
【文献】国際公開第2015/162674(WO,A1)
【文献】米国特許出願公開第2019/0149486(US,A1)
【文献】米国特許出願公開第2013/0151750(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/36
G06F 3/06
(57)【特許請求の範囲】
【請求項1】
複数のストレージコントローラを含むストレージ装置であって、
前記複数のストレージコントローラのそれぞれは、ストレージコントローラ間を接続するためのコントローラインターフェースを含み、
前記コントローラインターフェースは、接続先のストレージコントローラ毎に対応する一つ以上の論理ポート
と、バッファと、を含み、
前記コントローラインターフェースは、
ストレージコントローラ内で使用する第1のプロトコルの第1のリクエストを、ストレージコントローラ間ネットワークで使用する第2のプロトコルの第2のリクエストに変換する場合に、前記第1のリクエストの識別情報と、前記第2のリクエストの識別情報とを、前記論理ポートの送信キューに格納
し、
前記第1のリクエストの送信元デバイスの識別情報に基づいて、送信データを前記バッファへ格納するか、前記送信キューに格納するかを判定する、ストレージ装置。
【請求項2】
請求項1記載のストレージ装置であって、
前記第1のリクエストの識別情報は、前記第1のリクエストの送信元デバイスの識別情報と前記第1のリクエストのパケット識別情報とを含み、
前記第2のリクエストの識別情報は、前記第2のリクエストのパケット識別情報を含む、ストレージ装置。
【請求項3】
請求項1記載のストレージ装置であって、
前記コントローラインターフェースは、前記第1のリクエストの送信先情報と前記論理ポートの識別情報との対応関係の情報を格納する、ストレージ装置。
【請求項4】
請求項1記載のストレージ装置であって、
前記コントローラインターフェースは、前記送信データを前記バッファから読み出す論理ポートと、前記送信データを前記第2のリクエストの識別情報と共に送信キュー内に格納する論理ポートとを含む、ストレージ装置。
【請求項5】
請求項1記載のストレージ装置であって、
読み出しリクエストである前記第2のリクエストを受信したストレージコントローラの前記コントローラインターフェースは、前記読み出しの実行結果である前記第1のプロトコルの第1のレスポンスを、前記第2のプロトコルの第2のレスポンスに変換する場合に、前記読み出しの実行結果のステータスを前記第2のレスポンスのヘッダに格納して送信する、ストレージ装置。
【請求項6】
請求項3記載のストレージ装置であって、
前記コントローラインターフェースは、さらに前記論理ポートの識別情報と前記論理ポートの前記第1のプロトコルにおけるアドレス情報の対応関係の情報を格納する、ストレージ装置。
【請求項7】
請求項1記載のストレージ装置であって、
読み出しリクエストである前記第2のリクエストを受信したストレージコントローラの前記コントローラインターフェースは、前記第2のリクエストを前記第1のプロトコルの第3のリクエストに変換する場合に、前記第2のリクエストを受信した前記論理ポートの識別情報と、前記第2のリクエストの識別情報と、前記第3のリクエストの識別情報との対応関係の情報を格納する、ストレージ装置。
【請求項8】
請求項1記載のストレージ装置であって、
前記コントローラインターフェースは、
前記第1のプロトコルのパケットを送受信するDMAを含むインターフェース論理部と、
前記第1のプロトコルと前記第2のプロトコルとの間でパケットを変換する変換部と、
バッファと、を含み、
前記DMAは、前記バッファに送信データを格納し、前記送信データの格納先バッファアドレスと前記送信データのサイズを格納した前記第1のプロトコルのリクエストを前記変換部に送信する、ストレージ装置。
【請求項9】
ストレージ装置が実行するプロトコル変換方法であって、
前記ストレージ装置は、複数のストレージコントローラを含み、
前記複数のストレージコントローラのそれぞれは、ストレージコントローラ間を接続するためのコントローラインターフェースを含み、
前記コントローラインターフェースは、接続先のストレージコントローラ毎に対応する一つ以上の論理ポートと、バッファと、を含み、
前記プロトコル変換方法は、
ストレージコントローラ内で使用する第1のプロトコルの第1のリクエストを、ストレージコントローラ間ネットワークで使用する第2のプロトコルの第2のリクエストに変換する場合に、前記第1のリクエストの識別情報と、前記第2のリクエストの識別情報とを前記論理ポートの送信キューに格納し、
前記第1のリクエストの送信元デバイスの識別情報に基づいて、送信データを前記バッファから読み出す論理ポートか、前記送信データを前記第2のリクエストの識別情報と共に送信キュー内に格納する論理ポートかを選択する、プロトコル変換方法。
【請求項10】
請求項9記載のプロトコル変換方法であって、
前記第1のリクエストの識別情報は、前記第1のリクエストの送信元デバイスの識別情報と前記第1のリクエストのパケット識別情報とを含み、
前記第2のリクエストの識別情報は、前記第2のリクエストのパケット識別情報を含む、プロトコル変換方法。
【請求項11】
請求項9記載のプロトコル変換方法であって、
前記コントローラインターフェース内に格納された前記第1のリクエストの送信先情報と前記論理ポートの識別情報との対応関係を参照して前記論理ポートを選択する、プロトコル変換方法。
【請求項12】
請求項9記載のプロトコル変換方法であって、
前記第1のリクエストが読み出しリクエストであり、
前記読み出しの実行結果である前記第1のプロトコルの第1のレスポンスを、前記第2のプロトコルの第2のレスポンスに変換する場合に、前記読み出しの実行結果のステータスを前記第2のレスポンスのヘッダに格納して送信する、プロトコル変換方法。
【請求項13】
請求項11記載のプロトコル変換方法であって、
前記論理ポートの識別情報と前記論理ポートの前記第1のプロトコルにおけるアドレス情報の対応関係を参照して選択した前記論理ポートのアドレスに、前記第1のリクエストの識別情報を送信する、プロトコル変換方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のストレージコントローラがネットワークを介して通信するストレージ装置に関する。
【背景技術】
【0002】
複数のストレージノードを集めたクラスタ構成のストレージ装置は、各ストレージノードを並列に稼働させることにより、並列アクセスによる高いデータアクセス性能を実現すると共に、データの冗長化による高可用を実現できる。そして、複数のストレージノードをネットワークで相互接続することで、大規模なストレージ装置を構成することができる。例えば特許文献1のストレージ装置では、複数のストレージコントローラ間をPCIe (Peripheral Component Interconnect Express)ベースの独自プロトコルを使ったインターフェースで接続することにより、ストレージ装置の高機能化や高性能化を実現することが開示されている。
【0003】
以下の説明及び図面において、複数のストレージノードを接続したストレージ装置の内部ネットワークを、ストレージ内部ネットワークと呼ぶことにする。また、ストレージ内部ネットワークを単に内部ネットワーク、ストレージノードを単にノード、と呼ぶことがある。
【0004】
ストレージノードは、一般的に、ストレージコントローラと、ランダムアクセス可能な不揮発性記録媒体とを有する。この記録媒体は、例えば、不揮発性半導体メモリドライブやハードディスクドライブを多数備えたドライブボックスである。ストレージコントローラは、上位装置(ホストシステム等)を接続するためのフロントエンドインターフェースと、ドライブボックスを接続するためのバックエンドインターフェースと、上位装置がドライブボックスに対して読み書きするユーザデータを一時的に保存するキャッシュメモリを有する。
【0005】
さらに、ストレージコントローラは、ストレージコントローラ内で扱う制御データを格納する制御メモリと、ユーザデータ及び制御データのデータ転送を制御するためのプロセッサを有する。複数のストレージノードを接続したストレージ装置においては、複数のストレージノードがストレージ内部ネットワークを介して、ユーザデータや制御データをノード間で送受信する。
【0006】
また、ストレージノードをはじめとする、計算機ノード間の接続に好適なネットワークの標準規格としては、例えば、イーサネットが知られている。そして、イーサネット上でRDMA(Remote Direct Memory Access)によるデータ転送を可能にするプロトコルとしては、例えば、RoCE(RDMA over Ethernet)が知られている。
【先行技術文献】
【特許文献】
【0007】
【発明の概要】
【発明が解決しようとする課題】
【0008】
例えば、ストレージコントローラ間をPCIeより転送速度が速いイーサネットベースのRoCEで接続することで、ストレージ装置の高性能化が可能となる。しかし、特許文献1のストレージ装置のような従来のストレージ装置では、ストレージコントローラ間の接続にPCIeベースの独自プロトコルを適用することにより、高機能化と高性能化を実現している。そのため、一般的なRoCEインターフェースではストレージ向け機能の全てを実現できず、従来のPCIeベースのコントローラインターフェース代替することが困難である。
【0009】
本発明の一実態様の目的は、PCIeやRoCEのような、ストレージコントローラインターフェースに好適な二つのプロトコルのパケット間の変換方法及びそれを用いたストレージ装置を提供することである。
【課題を解決するための手段】
【0010】
本発明の一態様は、複数のストレージコントローラを含むストレージ装置であって、前記複数のストレージコントローラのそれぞれは、ストレージコントローラ間を接続するためのコントローラインターフェースを含み、前記コントローラインターフェースは、接続先のストレージコントローラ毎に対応する一つ以上の論理ポートを含む。前記コントローラインターフェースは、ストレージコントローラ内で使用する第1のプロトコルの第1のリクエストを、ストレージコントローラ間ネットワークで使用する第2のプロトコルの第2のリクエストに変換する場合に、前記第1のリクエストの識別情報と、前記第2のリクエストの識別情報とを、前記論理ポートの送信キューに格納する。
【発明の効果】
【0011】
本発明の一態様によれば、ストレージ装置のコントローラインターフェースは、適切なプロトコル変換を行うことができる。
【図面の簡単な説明】
【0012】
【
図1】
図1は、実施例1のストレージ装置を説明する図である。
【
図2】
図2は、ストレージノードを説明する図である。
【
図3】
図3は、ストレージコントローラ間の論理的な接続を説明する図である。
【
図4】
図4は、エッジインターフェースの構成を説明する図である。
【
図5】
図5は、アドレス-QP番号変換テーブルを説明する図である。
【
図6】
図6は、リクエスタID-QP番号変換テーブルを説明する図である。
【
図7】
図7は、WQEコンバータの処理フローを説明する図である。
【
図8】
図8は、RDMA Writeシーケンスを説明する図である。
【
図9】
図9は、RDMA Writeリクエストパケットを説明する図である。
【
図11】
図11は、RDMA Readシーケンスを説明する図である。
【
図12】
図12は、RDMA Readリクエストパケットを説明する図である。
【
図13】
図13は、RDMA Readレスポンスパケットを説明する図である。
【
図14】
図14は、RDMA Readレスポンスパケットを説明する図である。
【
図15】
図15は、BTHのフォーマットを説明する図である。
【
図16】
図16は、RETHのフォーマットを説明する図である。
【
図17】
図17は、PCIe WriteリクエストをRDMA Writeリクエストに変換する動作を説明する図である。
【
図18】
図18は、RDMA Writeリクエスト用WQEの内容を説明する図である。
【
図19】
図19は、再送バッファへの書き込み動作を説明する図である。
【
図20】
図20は、再送バッファからの読み出し動作を説明する図である。
【
図21】
図21は、PCIeリクエストヘッダのフォーマットを説明する図である。
【
図22】
図22は、PCIe WriteリクエストヘッダとRDMA Writeリクエストヘッダ間の変換処理を説明する図である。
【
図23】
図23は、PCIe ReadリクエストをRDMA Readリクエストに変換する動作を説明する図である。
【
図24】
図24は、RDMA Readリクエスト用WQEの内容を説明する図である。
【
図25】
図25は、PSN-PCIeTag変換テーブルを説明する図である。
【
図26】
図26は、PCIe ReadリクエストヘッダとRDMA Readリクエストヘッダ間の変換処理を説明する図である。
【
図27】
図27は、PCIeコンプリーションヘッダのフォーマットを説明する図である。
【
図28】
図28は、PCIeコンプリーションヘッダとRDMA Readレスポンスのヘッダ間の変換処理を説明する図である。
【
図29】
図29は、RDMA ReadレスポンスのヘッダとPCIeコンプリーションヘッダ間の変換処理を説明する図である。
【
図30】
図30は、実施例2のストレージ装置におけるエッジインターフェースの構成を説明する図である。
【
図31】
図31は、実施例2のストレージ装置におけるPCIe WriteリクエストをRDMA Writeリクエストに変換する動作を説明する図である。
【
図32】
図32は、実施例2のストレージ装置における制御データ転送のためのRDMA Write用WQEの内容を説明する図である。
【
図33】
図33は、実施例2のストレージ装置におけるリクエスタID-データ転送タイプ管理テーブルを説明する図である。
【
図34】
図34は、実施例2のストレージ装置におけるWQEコンバータの処理フローを説明する図である。
【
図35】
図35は、実施例3のストレージ装置におけるエッジインターフェースの構成を説明する図である。
【
図36】
図36は、実施例3のストレージ装置における再送バッファへの書き込み動作を説明する図である。
【
図37】
図37は、実施例3のストレージ装置におけるWQEコンバータが受信するPCIe Writeリクエストを説明する図である。
【発明を実施するための形態】
【0013】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。なお、全ての実施例を通して、同一符号が付されている構成要素は、実質的に同じものであるとする。また、プロセッサが実行する処理は、適宜に記憶資源(例えばメモリ)及び通信インターフェース装置(例えば、通信ポート)を用いながら行うため、処理の主語がプロセッサとされてもよい。プロセッサは、CPU(Central Processing Unit)の他に専用ハードウェアを有していても良い。
【実施例1】
【0014】
図1から
図29を参照して、実施例1に係るストレージ装置の説明を行う。
図1は、実施例1に係るストレージ装置のハードウェア構成を説明する図である。実施例1のストレージ装置100は、内部ネットワークにより相互接続されたストレージノード101、111を含む複数のストレージノードを有する。
図1では、2個のストレージノードを図示しているが、内部ネットワークに接続されるストレージノード数は任意である。この内部ネットワークを、本明細書ではストレージ内部ネットワークと呼ぶ。
【0015】
実施例1に係るストレージ装置100では、ストレージ内部ネットワークに、たとえばイーサネット(登録商標)規格のスイッチやリンクで構築されたネットワークが用いられる。ストレージノード101、111は、イーサネットスイッチ120、130を介して相互接続される。なお、イーサネットスイッチの数は任意であり、イーサネットと異なるプロトコルのスイッチ及びリンクが使用されてもよい。
【0016】
ストレージノード101は、その内部に2個のストレージコントローラ102、103を有する。ストレージコントローラ102は、イーサネットスイッチ120、130と接続するためのエッジインターフェース(EIF)104を有する。同様に、ストレージコントローラ103は、イーサネットスイッチ120、130と接続するためのエッジインターフェース(EIF)105を有する。エッジインターフェースは、コントローラインターフェースである。ストレージノード111は、ストレージノード101と同様の構成を有している。なお、ストレージノード内のストレージコントローラの数は任意であり。異なるストレージコントローラが異なる構成を有してもよい。
【0017】
図2は、実施例1に係るストレージノードのハードウェア構成を説明する図である。ストレージノード101は、ストレージコントローラ102、103と、複数のハードディスクドライブ(HDD)または複数のソリッドステートドライブ(SSD)を有するドライブボックス230を含む。
【0018】
ストレージコントローラ102は、プロセッサ(MP)200と、メモリ202と、フロントエンドインターフェース(FE)204と、バックエンドインターフェース(BE)205を有する。同様に、ストレージコントローラ103は、プロセッサ(MP)210と、メモリ212と、フロントエンドインターフェース(FE)214と、バックエンドインターフェース(BE)215を有する。プロセッサ200、210は、それぞれ内部に複数のプロセッサコア(非図示)を有する。
【0019】
ストレージ装置100にアクセスするホストシステム(非図示)は、フロントエンドインターフェース204、214を介して、ストレージ装置100に接続される。ホストシステムとフロントエンドインターフェース204、214との間は、ファイバチャネルケーブルやイーサネットケーブル等の伝送線で接続される。
【0020】
あるいはホストシステムとフロントエンドインターフェース204、214が、複数の伝送線と複数のスイッチで構成されたストレージエリアネットワークを介して接続される構成でも良い。フロントエンドインターフェース204、214は、ホストシステムとストレージノード101間のデータ転送プロトコルと、ストレージコントローラ102、103内のデータ転送プロトコルを変換する。
【0021】
ドライブボックス230は、バックエンドインターフェース205、215を介して、ストレージコントローラ102、103に接続される。バックエンドインターフェース205、215は、ストレージコントローラ102、103内のデータ転送プロトコルと、ストレージコントローラ102、103とドライブボックス230との間のデータ転送プロトコルを変換する。なお、ドライブボックス内のドライブがPCIe接続のNVMeSSDの場合、バックエンドインターフェース205、215は、プロトコル変換を行わないPCIeスイッチである。
【0022】
プロセッサ200、210は、フロントエンドインターフェース204、214を介して接続したホストシステムと、バックエンドインターフェース205、215を介して接続したドライブボックス230との間のデータ転送を制御する。さらに、プロセッサ200、210は、ストレージノード間のデータ転送を制御する。
【0023】
メモリ202、212は、それぞれ、プロセッサ200、210の主記憶であり、プロセッサ200、210が実行するプログラム(ストレージ制御プログラム等)や、プロセッサ200、210が参照する管理テーブル等を格納する。また、メモリ202、212は、それぞれストレージコントローラ102、103のキャッシュメモリとしても使用される。
【0024】
さらに、ストレージコントローラ102、103は、それぞれPCIeによりプロセッサ200、210に接続されているNTB(Non-Transparent Bridge)203、213と、エッジインターフェース(EIF)104、105とを有する。
【0025】
NTB203とNTB213との間は、Non-Transparentリンク220で接続されている。プロセッサ200と210は、Non-Transparentリンク220を介して相互に通信可能である。このようにして、ストレージノード101内は、2個のコントローラ102、103によりデュアルコントローラを構成する。
【0026】
エッジインターフェース104、105はそれぞれ、イーサネットのリンクを接続するための物理ポートを1以上有する。以下、この物理ポートのことをイーサネットポートと呼ぶ。本実施例に係るストレージ装置100では、エッジインターフェース104は1以上のイーサネットポート207を有し、エッジインターフェース105は1以上のイーサネットポート217を有する。プロセッサ200、210は、それぞれイーサネットポート207、217を介して、
図1のイーサネットスイッチ120、130に接続している。その結果、異なるストレージノードに属するストレージコントローラは、相互に通信可能になっている。
【0027】
図3は、実施例1に係るストレージ内部ネットワークのイーサネットによる論理的な接続を説明する図である。実施例1に係るストレージ装置では、ストレージコントローラ間のデータ転送にRoCEを用いる。RoCEは、イーサネット上でRDMAによるデータ転送を可能にするプロトコルである。ストレージコントローラ間を接続するエッジインターフェース104、105は、RoCEによるRDMAデータ転送が可能である。
【0028】
図3において、ストレージコントローラ102のエッジインターフェース104は、PCIe-EIF論理部302とPCIe-RoCE変換部301を含む。PCIe-EIF論理部302は、エッジインターフェースのストレージ向けデータ転送機能を実現する。内部ネットワークにPCIeを適用する場合は、PCIe-EIF論理部302をPCIeスイッチに接続することにより、ストレージ内部ネットワークを構成する。
【0029】
PCIe-RoCE変換部301は、PCIe-EIF論理部302が送受信するPCIeパケットと内部ネットワーク(Ethernet)上を転送されるRoCEパケットとの間の変換を行う。ストレージコントローラ320のエッジインターフェース325は、PCIe-EIF論理部322とPCIe-RoCE変換部321を含む。同様に、ストレージコントローラ330のエッジインターフェース335は、PCIe-EIF論理部332とPCIe-RoCE変換部331を含む。
【0030】
RoCEでは、論理的な通信ポート(論理ポート)であるQueue Pair(QP)を用いてデータ転送を行う。特にRoCEのRC(Reliable Connection)サービスでは、通信相手となるストレージコントローラ毎にQPが用意される。実施例1に係るストレージ装置では、RoCEのRCサービスを使用する。従って、各ストレージコントローラのエッジインターフェースは、少なくとも接続先のストレージコントローラ毎に個別のQPを備える。
【0031】
例えば、ストレージコントローラ102のエッジインターフェース104は、ストレージコントローラ320と接続するためのQP303を有する。また、ストレージコントローラ102のエッジインターフェース104は、ストレージコントローラ330と接続するためのQP304を有する。
【0032】
同様に、ストレージコントローラ320のエッジインターフェース325は、ストレージコントローラ102と接続するためのQP323を有する。また、ストレージコントローラ320のエッジインターフェース325は、ストレージコントローラ330と接続するためのQP324を有する。
【0033】
同様に、ストレージコントローラ330のエッジインターフェース335は、ストレージコントローラ102と接続するためのQP334を有する。また、ストレージコントローラ330のエッジインターフェース335は、ストレージコントローラ320と接続するためのQP333を有する。なお、2個のQP間では双方向通信が可能である。
【0034】
図4は、実施例1に係るエッジインターフェース104の構成を説明する図である。前述の通り、エッジインターフェース104は、PCIe-EIF論理部302と、PCIe-RoCE変換部301で構成される。
【0035】
PCIe-EIF論理部302は、ストレージコントローラ内のプロセッサ200と接続するためのインターフェース部433と、制御部431と、DMA(Direct Memory Access)434と、それらを接続する内部バス432を含む。
【0036】
PCIe-RoCE変換部301は、WQEコンバータ401、再送バッファ402、ソータ403、413、423、アービタ404、411、421、複数のQP405、イーサネットフレームビルダ412、422、イーサネットヘッダリムーバ414、424を含む。なお、複数のQP405のうち、一つのQPが例として符号405で指示されている。
【0037】
WQEコンバータ401は、PCIe-EIF論理部302から受信したPCIeリクエストを、RoCEのWQE(Work Queue Element)に変換し、ソータ403へ送信する。WQEは、QPが処理するRDMAのデータ転送指示を含む。PCIe-EIF論理部302からPCIeコンプリーションを受信した場合、WQEコンバータ401は、PCIeコンプリーションを変換せずにそのままソータ403へ送信する。また、WQEコンバータ401は、PCIe Writeリクエストを受信した場合、そのペイロードに含まれる送信データを再送バッファ402に格納する。WQEコンバータ401の処理の詳細は後述する。
【0038】
ソータ403は、WQEコンバータ401から受信したWQEを、WQE内に指定されたQP番号に従って、QP_1からQP_2n-2の何れかのQP405に振り分ける。PCIeコンプリーションを受信した場合、ソータ403は、ヘッダ内のリクエスタIDに従って、PCIeコンプリーションをQP_1からQP_2n-2の何れかのQP405に振り分ける。
【0039】
QP405は、WQEまたはPCIeコンプリーションをRoCEのトランスポート層パケットに変換し、アービタ411、421へ送信する。また、QP405は、RoCEトランスポート層における再送制御を担う。再送する場合、QP405は、再送するデータを再送バッファ402から読み出す。PCIe-RoCE変換部301は、エッジインターフェース104の1ポート当たりの接続先コントローラ数が最大n-1個の場合、その2ポート分のQPを有する。従って、PCIe-RoCE変換部301は合計2n-2個のQPを備える。
【0040】
アービタ411、421は、QP405から受信したRoCEトランスポート層パケットを、イーサネットフレームビルダ412、422へ送信する。
【0041】
イーサネットフレームビルダ412、422は、アービタ411、421から受信したRoCEトランスポート層パケットに、イーサネットヘッダ、IP(Internet Protocol)ヘッダ、UDP(User Datagram Protocol)ヘッダ及びFCS(Frame Check Sequence)を追加し、イーサネットフレームを組み立てて、イーサネットポートから内部ネットワークへ送信する。
【0042】
イーサネットヘッダリムーバ414、424は、内部ネットワークからイーサネットポートを介して受信したイーサネットフレームから、イーサネットヘッダ、IPヘッダ、UDPヘッダ及びFCSを除去し、得られたRoCEトランスポート層パケットをソータ413、423へ送信する。
【0043】
ソータ413、423は、イーサネットヘッダリムーバ414、424から受信したRoCEトランスポート層パケットを、ヘッダ内QP番号に従って、QP_1からQP_2n-2の何れかのQP405に振り分ける。
【0044】
QP405は、ソータ413、423から受信したRoCEトランスポート層パケットを、PCIeパケットに変換し、アービタ404へ送信する。
【0045】
アービタ404は、QP405から受信したPCIeパケットを、PCIe-EIF論理部302へ送信する。
【0046】
次に、
図5から
図7を用いて、WQEコンバータ401の動作を説明する。
図5は、WQEコンバータ401が備える、アドレス-QP番号変換テーブル500を示す。アドレス-QP番号変換テーブル500は、PCIeリクエストの送信先アドレス範囲501、送信先QP番号502及び送信元QP番号503を格納する。
【0047】
ここで、送信先QP番号502はRoCEパケット送信先である他コントローラのQP番号で、送信元QP番号503はRoCEパケット送信元である自身のコントローラのQP番号である。実施例1のストレージ装置では、PCIe-EIF論理部が送信するPCIeリクエストの送信先アドレス範囲501と、RoCEパケットの送信先QP番号502を1対1に対応付ける。
【0048】
また、RoCEのRCサービスでは、送信先QP番号502と送信元QP番号503は、1対1に対応する。従って、WQEコンバータ401は、このテーブルを参照することにより、PCIeリクエストの送信先アドレス範囲から、送信元QP番号を特定することができる。
【0049】
ソータ403をPCIeスイッチで実現する場合は、アドレス-QP番号変換テーブル500はWQEの送信先となるQPアドレス504を格納する。WQEコンバータ401は、WQEの変換元PCIeリクエストの送信先アドレスから、WQEの送信先となるQPのアドレス504を特定する。そして、WQEコンバータ401は、WQEをペイロードに格納したPCIe Writeを特定したQPアドレス504へ送信する。
【0050】
図6は、WQEコンバータ401が備える、リクエスタID-QP番号変換テーブル600を示す。リクエスタID-QP番号変換テーブル600は、PCIeコンプリーションパケットの送信先リクエスタID601及び送信元QP番号602を格納する。WQEコンバータ401は、このテーブルを参照することにより、PCIeコンプリーションパケットの送信先リクエスタIDから、送信元QP番号を特定することができる。
【0051】
なお、ソータ403をPCIeスイッチで実現する場合は、PCIeスイッチがリクエスタIDに基づいてPCIeパケットをルーティングできるので、WQEコンバータ401はリクエスタID-QP番号変換テーブル600を備えなくてもよい。
【0052】
図7は、WQEコンバータ401が実行する処理例のフローチャートを説明する図である。
【0053】
ステップ701において、WQEコンバータ401は、PCIe-EIF論理部302から受信したパケットがPCIeリクエストかPCIeコンプリーションかを判別する。受信したパケットがPCIeリクエストであった場合(701:N)はステップ702に進み、PCIeコンプリーションであった場合(701:Y)はステップ705に進む。
【0054】
ステップ702において、WQEコンバータ401は、PCIeリクエストをWQEに変換する。この変換処理の内容は後述する。また、PCIeリクエストがPCIe Writeであった場合、WQEコンバータ401は、そのペイロードに含まれる送信データを再送バッファ402に送信する。
【0055】
ステップ703において、WQEコンバータ401は、アドレス-QP番号変換テーブル500を参照して、送信元QP番号を特定する。なお、ソータ403をPCIeスイッチで実現する場合、WQEコンバータ401は、アドレス-QP番号変換テーブル500を参照して、送信先QPのアドレスを特定する。
【0056】
ステップ704において、WQEコンバータ401は、ソータ403を介してWQEを特定した番号のQP405に送信する。
【0057】
ステップ705において、WQEコンバータ401は、リクエスタID-QP番号変換テーブル600を参照して、送信元QP番号を特定する。なお、ソータ403をPCIeスイッチで実現する場合、このステップは省略できる。
【0058】
ステップ706において、WQEコンバータ401は、ソータ403を介してPCIeコンプリーションを特定した番号のQP405に送信する。
【0059】
次に、
図8から
図10を用いて、RoCEのRDMA Writeオペレーションとそのパケットフォーマットについて説明する。
図8は、RDMA Writeオペレーションのシーケンス例を示す図である。RDMA Writeは、リクエスタ側のメモリ空間にあるデータを、レスポンダ側のメモリ空間に書き込むオペレーションである。リクエスタは、書き込みデータをペイロードに格納したRDMA Writeリクエスト801をレスポンダへ送信する。レスポンダは、書き込みデータの受信完了をリクエスタに通知するため、ACK(Acknowledgement)802をリクエスタへ送信する。
【0060】
図9は、RDMA Writeリクエストのパケットフォーマットを示す図である。RDMA Writeリクエストパケットは、BTH(Base Transport Header)901、RETH(RDMA Extended Transport Header)902、ペイロード903とICRC(Invariant Cyclic Redundancy Check)904を含む。
【0061】
図10は、ACKのパケットフォーマットを示す図である。ACKパケットは、BTH1001、AETH(ACK Extended Transport Header)1002とICRC1003を含む。
【0062】
次に、
図11から
図14を用いて、RoCEのRDMA Readオペレーションとそのパケットフォーマットについて説明する。
図11は、RDMA Readオペレーションのシーケンス例を示す図である。RDMA Readは、レスポンダのメモリ空間にあるデータを、リクエスタのメモリ空間に読み出すオペレーションである。
【0063】
リクエスタは、読み出し先情報を格納したRDMA Readリクエスト1101をレスポンダへ送信する。レスポンダは、読み出しデータをペイロードに格納したRDMA Readレスポンスをリクエスタに送信する。読み出しデータサイズが最大ペイロードサイズを超える場合、レスポンダは読み出しデータを分割し、First、Middle及びLastからなる複数のRDMA Readレスポンス1102、1103、1104を送信する。
【0064】
図12は、RDMA Readリクエストのパケットフォーマットを示す図である。RDMA Readリクエストパケットは、BTH1201、RETH1202とICRC1203を含む。
【0065】
図13は、RDMA Readレスポンス(First/Last/Only)のパケットフォーマットを示す図である。RDMA Readレスポンス(First/Last/Only)パケットは、BTH1301、AETH1302、ペイロード1303とICRC1304を含む。RDMA Readレスポンス(Only)パケットは、レスポンスが単一パケットの場合に使用される。
【0066】
図14は、RDMA Readレスポンス(Middle)のパケットフォーマットを示す図である。RDMA Readレスポンス(Middle)パケットは、BTH1401、ペイロード1402とICRC1403を含む。
【0067】
図15は、実施例1に係るストレージ装置で使用するBTHのフォーマットを説明する図である。BTHフォーマット1500は、RoCE標準のBTH(12B長)から、実施例1に係るストレージ装置では使用しないフィールドを省略した結果、BTHのデータサイズが8Bになっている。
【0068】
OpCode(Operation Code)1501は、RoCEのオペレーションコードを格納するフィールドである。
【0069】
Destination QP1502は、パケット送信先のQP番号を示す。RoCE標準のQP番号は3B長であるが、実施例1に係るストレージ装置ではQP総数が少なくてもよいため、2B長に短縮している。
【0070】
1stBE(First Byte Enable)1504とLastBE(Last Byte Enable)1503は、変換元PCIeパケットヘッダの1st Byte EnableおよびLast Byte Enableフィールドの値をそのまま格納する。後述するように、実施例1に係るストレージ装置の内部ネットワークではPCIeと同様に4B単位でアドレスを指定するため、RoCE標準には無いこれらのフィールドが必要となる。フィールドの意味はPCIeのByte Enableと同様である。
【0071】
A(ACKREQ)1505は、ACK Requestビットを示す。リクエスタがA=1にセットしたRDMA Writeリクエストを送信すると、それを受信したレスポンダはACKの送信をスケジュールする。ACKREQはRDMA Writeリクエストの場合のみに有効である。
【0072】
E(Error Poisoned)1506は、RoCE標準には無いフィールドで、変換元PCIeパケットヘッダのError Poisonedフィールドの値をそのまま格納する。
【0073】
CS(Completion Status)1507は、RoCE標準には無いフィールドで、変換元PCIeコンプリーションヘッダのCompletion Statusフィールドの値をそのまま格納する。このフィールドは、RoCEパケットがRDMA Readレスポンスの場合のみに有効である。
【0074】
PSN(Packet Sequence Number)1508は、RoCEの送信パケット毎に付与されるパケットシーケンス番号である。
【0075】
BTHの他のフィールドは、実施例1に係るストレージ装置では使用しないか、RoCE標準と同じであるので、説明を省略する。上述のように、RoCE標準には無いフィールドにPCIeの情報を格納することで、PCIeとRoCEとの間の変換が容易となる。
【0076】
図16は、実施例1に係るストレージ装置で使用するRETHのフォーマットを説明する図である。RETHフォーマット1600は、RoCE標準のRETH(16B長)から、実施例1に係るストレージ装置では使用しないフィールドを省略した結果、RETHのデータサイズが12Bになっている。
【0077】
リモートアドレス1601、1602は、RoCE標準では0bitから63bitの64bitの値を使って1B単位で指定するが、実施例1に係るストレージ装置ではPCIeと同様に、2bitから63bitの62bitの値を使って4B単位で指定する。従って、使用しない下位2bitは予約フィールド(R: Reserved)になっている。4B以下のアドレス指定が必要な場合は、BTHのByte Enableフィールドで指定する。
【0078】
DMA長1603フィールドにはデータ転送長を指定する。DMA長1603は、RoCE標準では1B単位でデータ転送長を指定するが、実施例1に係るストレージ装置では、PCIeと同様に4B(Double Word)単位で指定する。
【0079】
なお、実施例1に係るストレージ装置で使用するAETHは、RoCE標準のフォーマットと同内容であるので、説明を省略する。
【0080】
図17は、実施例1に係るストレージ装置において、PCIe-RoCE変換部がPCIe WriteリクエストをRDMA Writeリクエストに変換する動作を説明する図である。例として、プロセッサ200がメモリ202内のデータを、プロセッサ1701に接続されたメモリ1702へ送信する場合について述べる。プロセッサ200とプロセッサ1701は、EIF104、EIF1703を介して接続する。EIF104とEIF1703の間を接続するイーサネットスイッチやイーサネットリンクは省略している。
【0081】
先ずプロセッサ200は、PCIe-EIF論理部302に対してPCIe Writeリクエスト1707を送信することにより、メモリ202からメモリ1702へのデータ書き込みを指示する。
【0082】
PCIe-EIF論理部302は、メモリ202内の送信データをペイロードに格納したPCIe Writeリクエスト1708を、PCIe-RoCE変換部301に送信する。PCIe-RoCE変換部301は、受信したPCIe WriteリクエストをWQEに変換して送信キュー1706にポストする。そして、WQEを処理したPCIe-RoCE変換部301は、送信データを含むRDMA Writeリクエスト1709を内部ネットワーク(Ethernet)へ送信する。この場合のPCIe-RoCE変換部301における再送バッファ402を介したデータ転送動作については、
図19と20を使って後述する。ここで、PCIe-RoCE変換部301はRoCEのリクエスタとして動作する。
【0083】
EIF1703は、PCIe-EIF論理部1704とPCIe-RoCE変換部1705を備える。PCIe-RoCE変換部1705は、内部ネットワーク(Ethernet)を介して受信したRDMA Writeリクエスト1709を、PCIe Writeリクエスト1710に変換してPCIe-EIF論理部1704に送信する。ここで、PCIe-RoCE変換部1705はRoCEのレスポンダとして動作する。PCIe Writeリクエスト1710を送信したPCIe-RoCE変換部1705は、ACK1712をリクエスタであるPCIe-RoCE変換部301へ送信する。
【0084】
PCIe-EIF論理部1704は、受信したPCIe Writeリクエスト1710をPCIe Writeリクエスト1711としてプロセッサ1701へ送信する。PCIe Writeリクエスト1711を受信したプロセッサ1701は、そのペイロードに格納されたデータをメモリ1702に書き込む。
【0085】
図18は、実施例1に係るストレージ装置において、PCIe-RoCE変換部301のWQEコンバータがPCIe Writeリクエストから変換したRDMA Writeリクエスト用WQEの内容について説明する図である。WQE1800は、SSN(Send Sequence Number)1801と、変換元PCIe WriteリクエストのリクエスタIDおよびTag1802と、変換先RDMA WriteリクエストのBTH1803及びRETH1804と、送信データ格納先の再送バッファアドレス1805を含む。これにより、変換元PCIe Writeリクエストと変換先RDMA Writeリクエストとが一対一に対応付けできる。
【0086】
図19と20は、再送バッファ402に係るデータ転送動作を説明する図である。
図19において、PCIe-EIF論理部302のDMA434は、プロセッサ200に対してPCIe Readリクエスト1901を送信し、それに対するPCIeコンプリーション1902を受信することにより、メモリ202から送信データを読み出す。PCIe-EIF論理部302は、送信データをPCIe-RoCE変換部301へPCIe Writeリクエスト1903で送信する。PCIe-RoCE変換部301は、このPCIe Writeリクエスト1903のヘッダに後述する変換処理を施した後、QPの送信キュー1706にWQEとして格納する。また、PCIe-RoCE変換部301は、PCIe Writeリクエスト1903のペイロードの内容をPCIe Writeリクエスト1904で再送バッファ402に格納する。
【0087】
図20において、PCIe-RoCE変換部301は、QPの送信キュー1706内のWQEを処理する際に、WQEに格納したバッファアドレス1805を参照する。そして、PCIe-RoCE変換部301は、再送バッファ402に対してPCIe Readリクエスト2001を送信して、それに対するPCIeコンプリーション2002を受信することより、送信データを読み出す。そして、PCIe-RoCE変換部301は、送信データをペイロードに格納したRDMA Writeリクエスト1709を、内部ネットワーク(Ethernet)へ送信する。RDMA Writeリクエストの再送時も、PCIe-RoCE変換部301は、再送バッファ402から送信データを読み出して、リクエストを再送する。
【0088】
次に、
図21と22を参照して、PCIe WriteリクエストからWQEへの変換処理について説明する。
図21は、PCIeリクエストのヘッダフォーマットを説明する図である。PCIeリクエストのヘッダフォーマット2100は、PCIe標準のフォーマットから変更が無いが、ここではPCIe WriteリクエストからWQEへの変換処理に関連するフィールドについて説明する。
【0089】
Length2101は、PCIe Writeリクエストのペイロードに格納したDW(Double Word、4B)単位のデータサイズを格納する。
【0090】
Type2102は、Memory WriteやMemory Read等のPCIeリクエストタイプを格納する。
【0091】
1stBE2103は、4B単位の最初のデータのByte Enable値を格納する。
【0092】
LastBE2104は、4B単位の最後のデータのByte Enable値を格納する。
【0093】
リクエスタID2106は、PCIeリクエストの送信元PCIeデバイスの識別情報を格納する。リクエスタID2106とTag2105を合わせて、PCIeリクエストの識別情報になる。
【0094】
アドレス2107と2108は、PCIeリクエストの送信先アドレスを格納する。
【0095】
他のフィールドは、RDMA Writeリクエストへの変換では使用しないので、説明を省略する。
【0096】
図22は、リクエスタ側のPCIe-RoCE変換部がPCIe Writeリクエストを受信した場合の、PCIe Writeリクエストのヘッダ2201とRDMA Writeリクエストのヘッダ2202の間の変換処理を説明する図である。以下、リクエスタ側PCIe-RoCE変換部におけるPCIeリクエストヘッダからRDMAリクエストヘッダへの変換について述べるが、レスポンダ側PCIe-RoCE変換部におけるRDMAリクエストヘッダからPCIeリクエストヘッダへの変換も、方向が異なるだけで同様である。
【0097】
PCIeリクエストヘッダのTypeフィールドがMemory Writeの場合は、RoCEのBTHのOpCodeフィールドをRDMA Write Onlyに設定する(2203)。実施例1のストレージ装置では、PCIe WriteリクエストをRDMA Writeリクエストに1対1に変換する。ここで、PCIeとRoCEの最大ペイロードサイズは同じであるとする。
【0098】
PCIeリクエストヘッダの1st Byte Enable及びLast Byte Enableフィールドの値は、RoCEのBTH内に設けた1st Byte Enable及びLast Byte Enableフィールドにそのまま格納する(2204、2205)。
【0099】
PCIeリクエストヘッダのError Poisonedフィールドは、RoCEのBTH内に設けたError Poisonedフィールドにそのまま格納する(2206)。
【0100】
リクエスタ側のPCIe-RoCE変換部において、変換元PCIeリクエストヘッダのリクエスタIDとTagは、QPの送信キュー内のWQEに保存する(2207)。WQEには、ペイロードに含まれる送信データの格納先である再送バッファアドレスも保存する。レスポンダ側PCIe-RoCE変換部では、PCIeリクエストヘッダのリクエスタIDとTagを保存しない。
【0101】
PCIeリクエストヘッダのPCIe Addressフィールド(63:2)の値は、RoCEのRETHのRemote Addressフィールド(63:2)にそのまま格納する(2208、2209)。
【0102】
PCIeリクエストヘッダのLengthフィールドの値(10bit長)は、RoCEのRETHのDMA Lengthフィールドにそのまま格納する(2210)。RETHのDMA Lengthフィールド(31:10)は0とする。
【0103】
図23は、実施例1に係るストレージ装置において、PCIe-RoCE変換部がPCIe ReadリクエストをRDMA Readリクエストに変換する動作を説明する図である。例として、プロセッサ200がプロセッサ1701に接続されたメモリ1702内のデータを、メモリ202に受信する場合について述べる。プロセッサ200とプロセッサ1701は、EIF104、EIF1703を介して接続する。EIF104とEIF1703の間を接続するイーサネットスイッチやイーサネットリンクは省略している。
【0104】
先ずプロセッサ200は、PCIe-EIF論理部302に対して、メモリ1702からのデータ読み出し指示をペイロードに格納したPCIe Writeリクエスト2301を送信することにより、メモリ1702からメモリ202へのデータ読み出しを指示する。
【0105】
PCIe-EIF論理部302は、メモリ1702内のデータ読み出しを指示するPCIe Readリクエスト2302を、PCIe-RoCE変換部301に送信する。そして、PCIe-RoCE変換部301は、受信したPCIe Readリクエスト2302を変換したRDMA Readリクエスト2303を内部ネットワーク(Ethernet)へ送信する。ここで、PCIe-RoCE変換部301はRoCEのリクエスタとして動作する。
【0106】
EIF1703のPCIe-RoCE変換部1705は、内部ネットワーク(Ethernet)を介して受信したRDMA Readリクエスト2303を、PCIe Readリクエスト2304に変換してPCIe-EIF論理部1704に送信する。ここで、PCIe-RoCE変換部1705はRoCEのレスポンダとして動作する。
【0107】
PCIe-EIF論理部1704は、受信したPCIe Readリクエスト2304をPCIe Readリクエスト2305としてプロセッサ1701へ送信する。PCIe Readリクエスト2305を受信したプロセッサ1701は、メモリ1702から、指定されたアドレスのデータを読み出す。
【0108】
次に、プロセッサ1701は、読み出しデータを格納したPCIeコンプリーション2306をEIF1703のPCIe-EIF論理部1704に送信する。PCIe-EIF論理部1704は、受信したPCIeコンプリーション2306をPCIeコンプリーション2307として、PCIe-RoCE変換部1705に送信する。
【0109】
PCIe-RoCE変換部1705は、PCIe-EIF論理部1704から受信したPCIeコンプリーション2307をRDMA Readレスポンス2308に変換して、内部ネットワーク(Ethernet)に送信する。
【0110】
EIF104のPCIe-RoCE変換部301は、内部ネットワーク(Ethernet)を介して受信したRDMA Readレスポンス2308を、PCIeコンプリーション2309に変換してPCIe-EIF論理部302に送信する。
【0111】
PCIe-EIF論理部302は、受信したPCIeコンプリーション2309をPCIe Writeリクエスト2310に変換して、プロセッサ200に送信する。
【0112】
プロセッサ200は、PCIe-EIF論理部302から受信したPCIe Writeリクエストのペイロードに含まれるデータをメモリ202に書き込む。
【0113】
図24は、実施例1に係るストレージ装置において、PCIe-RoCE変換部301のWQEコンバータがPCIe Readリクエストから変換したRDMA Readリクエスト用のWQEの内容について説明する図である。WQE2400は、SSN(Send Sequence Number)2401と、変換元PCIe ReadリクエストのリクエスタIDおよびTag2402と、変換先RDMA ReadリクエストのBTH2403及びRETH2404を含む。これにより、変換元PCIe Readリクエストと変換先RDMA Readリクエストとが一対一に対応付けできる。
【0114】
図25は、レスポンダ側のPCIe-RoCE変換部が備えるPSN-PCIeTag変換テーブルを説明する図である。PSN-PCIeTag変換テーブル2500は、レスポンダ側のPCIe-RoCE変換部が受信したRDMA ReadリクエストのBTHに含まれるQP番号2501とPSN2502を格納する。さらに、PSN-PCIeTag変換テーブル2500は、受信したRDMA Readリクエストを変換したPCIe Readリクエストのヘッダに含まれるリクエスタIDとTag2503を格納する。PCIe-RoCE変換部は、PSN-PCIeTag変換テーブル2500を参照することにより、PCIe-EIF論理部から受信したPCIeコンプリーションを、変換元のRDMA Readリクエストに対応するRDMA Readレスポンスに変換することができる。
【0115】
図26は、リクエスタ側のPCIe-RoCE変換部がPCIe Readリクエストを受信した場合の、PCIe Readリクエストのヘッダ2601とRDMA Readリクエストのヘッダ2602の間の変換処理を説明する図である。以下、リクエスタ側PCIe-RoCE変換部におけるPCIeリクエストヘッダからRDMAリクエストヘッダへの変換について述べるが、レスポンダ側PCIe-RoCE変換部におけるRDMAリクエストヘッダからPCIeリクエストヘッダへの変換も、方向が異なるだけで同様である。
【0116】
PCIeリクエストヘッダのTypeフィールドがMemory Readの場合は、RoCEのBTHのOpCodeフィールドをRDMA Readに設定する(2603)。
【0117】
PCIeリクエストヘッダの1st Byte Enable及びLast Byte Enableフィールドの値は、RoCEのBTH内に設けた1st Byte Enable及びLast Byte Enableフィールドにそのまま格納する(2604、2605)。
【0118】
PCIeリクエストヘッダのError Poisonedフィールドは、RoCEのBTH内に設けたError Poisonedフィールドにそのまま格納する(2606)。
【0119】
リクエスタ側のPCIe-RoCE変換部において、変換元PCIeリクエストヘッダのリクエスタIDとTagは、QPの送信キュー内のWQEに保存する。レスポンダ側のPCIe-RoCE変換部では、PCIeリクエストヘッダに含まれるリクエスタIDとTag及びRDMA Readリクエストヘッダに含まれるQP番号とPSNは、
図25のPSN-PCIe Tag変換テーブル2500に保存する(2607)。
【0120】
PCIeリクエストヘッダのPCIe Addressフィールド(63:2)の値は、RoCEのRETHのRemote Addressフィールド(63:2)にそのまま格納する(2608、2609)。
【0121】
PCIeリクエストヘッダのLengthフィールドの値(10bit長)は、RoCEのRETHのDMA Lengthフィールドにそのまま格納する(2610)。RETHのDMA Lengthフィールド(31:10)は0とする。
【0122】
図27は、PCIeコンプリーションのヘッダフォーマットを説明する図である。PCIeコンプリーションのヘッダフォーマット2700はPCIe標準のフォーマットから変更が無いが、ここではPCIeコンプリーションからRDMA Readレスポンスへの変換処理に関連するフィールドについて説明する。
【0123】
Length2701は、PCIeコンプリーションのペイロードに格納したDW(Double Word)単位のデータサイズを格納する。
【0124】
Type2702は、PCIeコンプリーションを示すタイプを格納する。
【0125】
Byte Count2703は、PCIe Readリクエストで指定された読み出しデータサイズに対する、現行パケットも含めた残りバイト数を格納する。
【0126】
コンプリーションステータス(CplCts)2704は、レスポンダ側でPCIe Readを実行した結果のステータスを格納する。
【0127】
Lower Address2706は、PCIeコンプリーションに含まれるデータの先頭アドレスを格納する。
【0128】
コンプリータID2705は、PCIeコンプリーション送信元PCIeデバイスの識別情報を格納する。
【0129】
リクエスタID2708は、PCIeコンプリーションに対応するPCIe Readリクエストの送信元PCIeデバイスの識別情報を格納する。リクエスタID2708とTag2707を合わせて、PCIeコンプリーションに対応するPCIe Readリクエストの識別情報になる。
【0130】
図28は、レスポンダ側PCIe-RoCE変換部1705が受信するPCIeコンプリーション2307のヘッダ2801と、その変換先RDMA Readレスポンス2308のヘッダ2802の変換内容を説明する図である。
【0131】
PCIeコンプリーションヘッダのTypeフィールドがCompletionの場合は、RDMA ReadレスポンスのBTHのOpCodeフィールドをRDMA Read Responseに設定する(2803)。ただし、
図11で示した様に、RDMA ReadレスポンスのOpCodeは、読み出しデータサイズまたはレスポンスに含まれる読み出しデータの全体に対する位置によって、RDMA ReadレスポンスFirst(1102)、Middle(1103)、Last(1104)またはRDMA ReadレスポンスOnlyに変える必要がある。
【0132】
PCIeコンプリーションヘッダのLengthフィールドは、対応するRDMA Readレスポンスヘッダフィールドが無いので変換しない(2804)。
【0133】
PCIeコンプリーションヘッダのCplStsフィールドの値は、RDMA ReadレスポンスのBTH内に設けたCSフィールドにそのまま格納する(2805)。
【0134】
PCIeコンプリーションヘッダのByte Countフィールドは、対応するRDMA Readレスポンスヘッダフィールドが無いので変換しない(2806)。
【0135】
PCIeコンプリーションヘッダのリクエスタIDとTagは、
図25のPSN-PCIeTag変換テーブル2500を参照して、RDMA ReadレスポンスのBTH内のQP番号とPSNに変換する(2807)。
【0136】
PCIeコンプリーションヘッダのLower Addressフィールドは、対応するRDMA Readレスポンスヘッダフィールドが無いので変換しない(2808)。
【0137】
なお、プロセッサは、読み出しデータサイズが最大ペイロードサイズ以下の場合でも、複数のパケットに分割してPCIeコンプリーションを送信する場合がある。その場合、PCIe-RoCE変換部は、分割されて送信された複数の読み出しデータを、RDMA Readレスポンスの最大ペイロードサイズ単位にまとめて、PCIeコンプリーションをRDMA Readレスポンスに変換する。
【0138】
図29は、リクエスタ側PCIe-RoCE変換部301が受信するRDMA Readレスポンス2308のヘッダ2901と、その変換先PCIeコンプリーション2309のヘッダ2902の変換内容を説明する図である。
【0139】
RDMA ReadレスポンスヘッダのOpCodeフィールドがRDMA Readレスポンス(First、Middle、Last、Only)の場合は、PCIeコンプリーションヘッダのタイプフィールドをCompletionに設定する(2903)。
【0140】
PCIeコンプリーションヘッダのLengthフィールド(2904)は、RDMA Readレスポンスの種類によって次のように設定値が変わる。ここで、PCIeとRoCEの最大ペイロードサイズは同じであるとする。
【0141】
OpCodeフィールドがRDMA ReadレスポンスOnlyの場合、PCIeコンプリーションヘッダのLengthフィールドは、RDMA ReadレスポンスヘッダのPSNに対応するWQEに保存していたRETHを参照して、そのDMA Lengthフィールドの値を設定する。OpCodeフィールドがRDMA ReadレスポンスFirstまたはMiddleの場合、Lengthフィールドには最大ペイロードサイズ(バイト単位)の1/4の値を設定する。OpCodeフィールドがRDMA ReadレスポンスLastの場合、PCIeコンプリーションヘッダのLengthフィールドは、RDMA ReadレスポンスヘッダのPSNに対応するWQEに保存していたRETHを参照して、そのDMA Lengthフィールドの値を最大ペイロードサイズの1/4で割った余りの値を設定する。
【0142】
PCIeコンプリーションヘッダのCplStsフィールドは、RDMA ReadレスポンスのBTH内に設けたCSフィールドの値をそのまま設定する(2905)。
【0143】
PCIeコンプリーションヘッダのByte Countフィールド(2906)は、RDMA ReadレスポンスヘッダのPSNに対応するWQEに保存していたRETHを参照して、そのDMA Lengthフィールドの値の4倍から受信済データサイズ(受信済レスポンス数×最大ペイロードサイズ、ただし現パケット分は含まず)を引いた値を設定する。つまり、Byte Countフィールドは、Readリクエストで指示した読み出しデータサイズに対する、現行パケットも含めた残りバイト数を設定する。
【0144】
PCIeコンプリーションヘッダのリクエスタIDおよびTagフィールドは、RDMA ReadレスポンスヘッダのPSNに対応するWQEを参照して保存しておいた値を格納する(2907)。
【0145】
PCIeコンプリーションヘッダのLower Addressフィールド(2908)は、RDMA ReadレスポンスヘッダのPSNに対応するWQEを参照して、保存していたBTHの1st Byte EnableフィールドとRETHのRemote Addressフィールド、および受信済データサイズ(現行パケット含まず)から変換した値を設定する。PCIe及びRoCEの最大ペイロードサイズが128Bの倍数の場合、Lower Addressフィールド(2908)は、Remote Addressフィールドの値と次に示すOffsetの和の下位7bitを設定する。ここで1st Byte Enableが‘1111b’の場合のOffsetは0、1st Byte Enableが‘1110b’の場合のOffsetは1、1st Byte Enableが‘1100b’の場合のOffsetは2、1st Byte Enableが‘1000b’の場合のOffsetは3である。
【0146】
以上述べた実施例1に係るストレージ装置における、PCIe ReadリクエストとRDMA Readリクエストの間の変換動作をまとめる。先ず、PCIe-EIF論理部302からPCIeリクエスト2302を受信したリクエスタ側PCIe-RoCE変換部301が、受信したPCIeリクエスト2302のリクエスタIDとTagを送信キュー1706のWQEに保存する。さらにPCIe-RoCE変換部301は、受信したPCIeリクエスト2302を変換したRDMA Readリクエスト2303のPSNもWQEに保存する。そして、PCIe-RoCE変換部301はレスポンダ側PCIe-RoCE変換部1705からRDMA Readレスポンス2308を受信する。そして、PCIe-RoCE変換部301は、RDMA Readレスポンス2308のPSNと、WQEに保存しておいたPSN及びリクエスタIDとTagを参照することにより、RDMA Readレスポンス2308をPCIeコンプリーション2309に変換することができる。
【0147】
以上述べたように、実施例1に係るストレージ装置は、ストレージ向け機能を実現するPCIe-EIF論理部が送信するPCIeリクエストを、RoCEのRDMAリクエストに1対1に変換することができる。これにより、実施例1に係るストレージ装置は、内部ネットワークにイーサネットを適用した場合でも、PCIe-EIF論理部が備えるストレージ向けデータ転送機能を実現することができる。
【0148】
例えば
図17又は23を参照して説明したように、コントローラインターフェースであるエッジインターフェースは、ストレージコントローラ内で使用するPCIeリクエストを、ストレージコントローラ間ネットワークで使用するRDMAリクエストに変換する場合に、PCIeリクエストの識別情報と、RDMAリクエストの識別情報とをWQEに含めて、QPの送信キューに格納する。
【0149】
PCIeのリクエストの識別情報は、例えば
図18又は24を参照して説明したように、リクエスタID及びTagを含むことができる。リクエスタID及びTagは、それぞれ、送信元デバイスの識別情報とリクエストのパケット識別番号である。さらに、RDMAリクエストの識別情報は、PSNを含むことができる。PSNは、RDMAリクエストのパケット識別番号であり、BTHに含まれる。
【0150】
例えば
図5を参照して説明したように、エッジインターフェースは、PCIeリクエストの送信先アドレスと、QPの識別情報、例えば、DestQPN及びSrcQPNの対応関係の情報を格納してよい。さらに、QPの識別情報とQPのPCIeにおけるアドレス情報の対応関係の情報、例えば、QPアドレスを格納してもよい。
【0151】
例えば
図15、27又は28を参照して説明したように、RDMA Readリクエストを受信したストレージコントローラのエッジインターフェースは、PCIeのPCIeコンプリーションを、RDMAリードレスポンスに変換する場合に、読み出し実行結果のステータスをRDMAリードレスポンスのヘッダに格納して送信する。Completion Statusは、読み出し実行結果のステータスである。
【0152】
例えば、
図25を参照して説明したように、RDMA Readリクエストを受信したエッジインターフェースは、そのリクエストをPCIeリクエストに変換する場合に、RDMA Readリクエストを受信したQPの識別情報と、RDMA Readリクエストの識別情報と、変換したPCIeリクエストの識別情報との対応関係の情報を格納してもよい。
【0153】
なお、実施例1は、PCIeとRoCEとの間の変換を説明するが、本開示の特徴は、これらと異なるプロトコル間の変換に適用することができる。この点は、以下に説明する他の実施例について同様である。
【実施例2】
【0154】
図30から
図34を参照して、実施例2に係るストレージ装置の説明を行う。実施例2のストレージ装置のその他の構成は、実施例1のストレージ装置と同様であるので、説明を省略する。
【0155】
ストレージコントローラ間で送受信されるデータには、ユーザデータと制御データが含まれる。ストレージ高性能化のためには、ユーザデータ転送においてはスループット性能が、制御データ転送においては転送時間の短縮が求められる。実施例2のストレージ装置では、特に短時間での制御データ転送時間に適したPCIe WriteリクエストとRoCEのRDMA Writeリクエストの間の変換方法について述べる。
【0156】
図30は、実施例2に係るPCIe-RoCE変換部3000の構成を説明する図である。PCIe-RoCE変換部3000は、WQEコンバータ3001、再送バッファ3002、ソータ3003、3013、3023、アービタ3004、3011、3021、複数のQP3005、複数のQP3006、イーサネットフレームビルダ3012、3022、イーサネットヘッダリムーバ3014、3024で構成される。複数のQP3005は破線で囲まれ、それら一つのQPが例として符号で指示されている。複数のQP3006は破線で囲まれ、一つのQPが例として符号で指示されている。
【0157】
WQEコンバータ3001は、PCIe-EIF論理部302から受信したPCIeリクエストを、RoCEのWQE(Work Queue Element)に変換し、ソータ3003へ送信する。PCIe-EIF論理部302からPCIeコンプリーションを受信した場合、WQEコンバータ3001は、PCIeコンプリーションを変換せずにそのままソータ3003へ送信する。また、WQEコンバータ3001は、ユーザデータ転送用のPCIe Writeリクエストを受信した場合、そのペイロードに含まれるユーザデータを再送バッファ3002に格納する。さらにWQEコンバータ3001は、制御データ転送用のPCIe Writeリクエストを受信した場合、そのペイロードに含まれる送信データをWQEに格納してソータ3003へ送信する。WQEコンバータ3001の処理の詳細は後述する。
【0158】
ソータ3003は、WQEコンバータ3001から受信したWQEがユーザデータ転送用であった場合に、WQE内に指定されたQP番号に従って、WQEをQP1_1からQP1_2n-2の何れかのQP3005に振り分ける。また、ソータ3003は、WQEコンバータ3001から受信したWQEが制御データ転送用であった場合に、WQE内に指定されたQP番号に従って、WQEをQP0_1からQP0_2n-2の何れかのQP3006に振り分ける。
【0159】
PCIeコンプリーションを受信した場合、ソータ3003は、ヘッダ内のリクエスタIDに従って、PCIeコンプリーションをQP1_1からQP1_2n-2の何れかのQP3005、またはQP0_1からQP0_2n-2の何れかのQP3006に振り分ける。
【0160】
QP3005、3006は、WQEまたはPCIeコンプリーションをRoCEのトランスポート層パケットに変換し、アービタ3011、3021へ送信する。また、QP3005、3006は、RoCEトランスポート層における再送制御を担う。ユーザデータを再送する場合、QP3005は、再送するデータを再送バッファ3002から読み出す。制御データを再送する場合、QP3006は、再送するデータを送信キュー1706内に保存したWQEから取得する。PCIe-RoCE変換部3000は、接続先コントローラ数が最大n-1個の場合、ユーザデータ転送用2n-2個と制御データ転送用2n-2個の合計4n-4個のQPを備える。
【0161】
アービタ3011、3021は、QP3005、3006から受信したRoCEトランスポート層パケットを、イーサネットフレームビルダ3012、3022へ送信する。
【0162】
イーサネットフレームビルダ3012、3022は、アービタ3011、3021から受信したRoCEトランスポート層パケットに、イーサネットヘッダ、IPヘッダ、UDPヘッダ及びFCSを追加し、イーサネットフレームを組み立てて、イーサネットポートから内部ネットワークへ送信する。
【0163】
イーサネットヘッダリムーバ3014、3024は、内部ネットワークからイーサネットポートを介して受信したイーサネットフレームから、イーサネットヘッダ、IPヘッダ、UDPヘッダ及びFCSを除去し、得られたRoCEトランスポート層パケットをソータ3013、3023へ送信する。
【0164】
ソータ3013、3023は、イーサネットヘッダリムーバ3014、3024から受信したRoCEトランスポート層パケットを、ヘッダ内QP番号に従って、QP1_1からQP1_2n-2の何れかのQP3005またはQP0_1からQP0_2n-2の何れかのQP3006に振り分ける。
【0165】
QP3005、3006は、ソータ3013、3023から受信したRoCEトランスポート層パケットを、PCIeパケットに変換し、アービタ3004へ送信する。
【0166】
アービタ3004は、QP3005、3006から受信したPCIeパケットを、PCIe-EIF論理部302へ送信する。
【0167】
図31は、実施例2に係るストレージ装置において、PCIe-RoCE変換部が制御データ転送用のPCIe WriteリクエストをRDMA Writeリクエストに変換する動作を説明する図である。例として、プロセッサ200がメモリ202内のデータを、プロセッサ1701に接続されたメモリ1702へ送信する場合について述べる。プロセッサ200とプロセッサ1701は、2個のEIF104、EIF3108を介して接続する。EIF104とEIF3108の間を接続するイーサネットスイッチやイーサネットリンクは省略している。
【0168】
先ずプロセッサ200は、PCIe-EIF論理部302に対して、制御データ転送用のPCIe Writeリクエスト3101を送信することにより、メモリ202からメモリ1702へのデータ書き込みを指示する。このPCIe Writeリクエスト3101のペイロードは送信データを含む。
【0169】
PCIe-EIF論理部302は、メモリ202内の送信データをペイロードに格納したPCIe Writeリクエスト3102を、PCIe-RoCE変換部3000に送信する。PCIe-RoCE変換部3000は、受信したPCIe WriteリクエストをWQEに変換して送信キュー3103にポストする。そして、WQEを処理したPCIe-RoCE変換部3000は、送信データを含むRDMA Writeリクエスト3104を内部ネットワーク(Ethernet)へ送信する。ここで、PCIe-RoCE変換部3000はRoCEのリクエスタとして動作する。また、制御データ転送においてPCIe-RoCE変換部3000は、送信データを再送バッファ3002に保存せずに、送信キュー3103内のWQEに保存する。
【0170】
EIF3108は、PCIe-EIF論理部1704とPCIe-RoCE変換部3109を備える。PCIe-RoCE変換部3109は、内部ネットワーク(Ethernet)を介して受信したRDMA Writeリクエスト3104をPCIe Writeリクエスト3105に変換してPCIe-EIF論理部1704に送信する。ここで、PCIe-RoCE変換部3109はRoCEのレスポンダとして動作する。PCIe Writeリクエスト3105を送信したPCIe-RoCE変換部1705は、ACK3107をリクエスタであるPCIe-RoCE変換部3000へ送信する。
【0171】
PCIe-EIF論理部1704は、受信したPCIe Writeリクエスト3105をPCIe Writeリクエスト3106としてプロセッサ1701へ送信する。PCIe Writeリクエスト3106を受信したプロセッサ1701は、そのペイロードに格納されたデータをメモリ1702に書き込む。
【0172】
図32は、実施例2に係るストレージ装置において、PCIe-RoCE変換部3000のWQEコンバータ3001が、制御データ転送のためのPCIe Writeリクエストから変換したRDMA Writeリクエスト用WQEの内容について説明する図である。WQE3200は、SSN(Send Sequence Number)3201と、変換元PCIe WriteリクエストのリクエスタIDおよびTag3202と、変換先RDMA WriteリクエストのBTH3203及びRETH3204と、変換元PCIe Writeリクエストのペイロード3205を含む。このペイロード3205は送信データを含む。
【0173】
図33は、実施例2に係るストレージ装置において、PCIe-RoCE変換部3000のWQEコンバータ3001が備える、リクエスタID-データ転送タイプ管理テーブル3300を示す。リクエスタID-データ転送タイプ管理テーブル3300は、WQEコンバータ3001が受信するPCIeリクエストの送信元リクエスタID3301とデータ転送タイプ3302を格納する。
【0174】
データ転送タイプ3302は、制御データ転送かユーザデータ転送かを示す情報である。実施例2に係るストレージ装置では、制御データとユーザデータは、リクエスタID異なる別のPCIeデバイスが送信する。WQEコンバータ3001は、このテーブルを参照することにより、受信したPCIeリクエストが制御データ転送用またはユーザデータ転送用かを判断することができる。
【0175】
図34は、実施例2に係るストレージ装置において、PCIe-RoCE変換部3000のWQEコンバータ3001が実行する処理例のフローチャートを説明する図である。
【0176】
ステップ3401において、WQEコンバータ3001は、PCIe-EIF論理部302から受信したパケットがPCIeリクエストかPCIeコンプリーションかを判別する。受信したパケットがPCIeリクエストであった場合はステップ3402に進み、PCIeコンプリーションであった場合はステップ3407に進む。
【0177】
ステップ3402において、WQEコンバータ3001は、リクエスタID-データ転送タイプ管理テーブル3300を参照して、受信したPCIeリクエストのリクエスタIDに応じて、そのリクエストが制御データ転送用またはユーザデータ転送用かを判断する。受信したPCIeリクエストが制御データ転送用であった場合はステップ3403に進み、ユーザデータ転送用であった場合はステップ3404に進む。
【0178】
ステップ3403において、WQEコンバータ3001は、PCIeリクエストを制御データ転送用WQEに変換する。
【0179】
ステップ3404において、WQEコンバータ3001は、PCIeリクエストをユーザデータ転送用WQEに変換する。また、PCIeリクエストがPCIe Writeであった場合、WQEコンバータ3001は、そのペイロードに含まれる送信データを再送バッファ3002に格納する。
【0180】
ステップ3405において、WQEコンバータ3001は、アドレス-QP番号変換テーブル500を参照して、送信元QP番号を特定する。
【0181】
ステップ3406において、WQEコンバータ3001は、ソータ3003を介してWQEを特定した番号のQP3005、3006に送信する。
【0182】
ステップ3407において、WQEコンバータ3001は、リクエスタID-QP番号変換テーブル600を参照して、送信元QP番号を特定する。
【0183】
ステップ3408において、WQEコンバータ3001は、ソータ3003を介してPCIeコンプリーションを特定した番号のQP3005、3006に送信する。
【0184】
実施例2に係るストレージ装置において、PCIe-RoCE変換部3000が制御データ転送用及びユーザデータ転送用のPCIe ReadリクエストをRDMA Readリクエストに変換する動作は、実施例1のストレージ装置と同様であるので説明を省略する。
【0185】
以上述べたように、実施例2に係るストレージ装置は、制御データを送信する場合、WQE3200内に送信データ3205を格納する。そのため、QP3006が送信キュー3103内のWQEを処理する際に、送信データを再送バッファ3002から読み出す必要がない。従って、実施例2に係るストレージ装置は、制御データ転送の送信において、再送バッファ3002からの読み出しにかかる時間を短縮することができる。
【0186】
例えば、
図33及び34を参照して説明したように、エッジインターフェースは、PCIeリクエストのリクエスタIDに基づいて、送信データをバッファへ格納するか、送信キューに格納するかを判定してよい。リクエスタIDは、PCIeのリクエストの送信元デバイスを示す識別情報である。また、例えば
図30を参照して説明したように、エッジインターフェースは、送信データをバッファから読み出すQPと、送信データをRDMAリクエストの識別情報と共に送信キュー内に格納するQPとを含んでよい。
【実施例3】
【0187】
図35から
図37を参照して、実施例3に係るストレージ装置の説明を行う。実施例3のストレージ装置のその他の構成は、実施例1のストレージ装置と同様であるので、説明を省略する。
【0188】
ストレージ装置は、高信頼化のため、ユーザデータを2個のコントローラのメモリに保存する。その場合、実施例1のストレージ装置では、PCIe-EIF論理部302が、2個のコントローラ宛に、同じ送信データをペイロードに格納した合計2個のPCIe Writeリクエストを送信する。その結果、PCIe-RoCE変換部301は2個のPCIe Writeリクエストに含まれる送信データを再送バッファ402に格納する。つまり、送信データ2個分の再送バッファ容量が必要になる。実施例3に係るストレージ装置では、特に再送バッファの小容量化に適したPCIe WriteリクエストとRoCEのRDMA Writeリクエスト間の変換方法について述べる。
【0189】
図35は、実施例3に係るエッジインターフェース3500の構成を説明する図である。エッジインターフェース3500は、PCIe-EIF論理部3502と、PCIe-RoCE変換部3501で構成される。エッジインターフェース3500は、送信データの再送バッファ402への格納動作が、実施例1のエッジインターフェース104と異なる。DMA3503は、WQEコンバータ3504を介さずに他ノードへの送信データを再送バッファ402に格納する(3505)。
【0190】
図36は、実施例3のストレージ装置において、再送バッファ402への送信データの書き込み動作を説明する図である。
図36において、PCIe-EIF論理部3502のDMA3503は、プロセッサ200に対してPCIe Readリクエスト3601を送信し、それに対するPCIeコンプリーション3602の受信することにより、メモリ202から送信データを読み出す。PCIe-EIF論理部3502は、送信データをPCIe-RoCE変換部3501へPCIe Writeリクエスト3603で送信する。PCIe-RoCE変換部3501は、このPCIe Writeリクエストのペイロードに含まれる送信データを再送バッファ402に格納する。
【0191】
図37は、実施例3に係るストレージ装置において、DMA3503がユーザデータを転送する場合に、WQEコンバータ3504に送信するPCIe Writeリクエストパケット3700を説明する図である。
【0192】
PCIe Writeリクエストパケット3700は、PCIeリクエストヘッダ3701とペイロード3702を含む。ペイロード3702は、送信データを格納した再送バッファ402のバッファアドレス3703と、送信データのデータサイズ3704を含む。
【0193】
WQEコンバータは、ペイロード3702に格納されたバッファアドレス3703と送信データのデータサイズ3704に基づいて、PCIe Writeリクエストパケット3700をユーザデータ転送用のWQE1800に変換する。
【0194】
以上述べたように、実施例3に係るストレージ装置は、PCIe Writeリクエストを他のコントローラに送信する場合、先ずPCIe-EIF論理部3502のDMA3503が、再送データを再送バッファ402に送信する。そして、DMA3503は、送信データ格納先の再送バッファアドレス3703と送信データサイズ3704を格納したPCIe Writeリクエスト3700を、PCIe-RoCE変換部3501へ送信する。
【0195】
同じユーザデータを2個のコントローラへ送信する場合、DMA3503は、送信データを含まない2個のPCIe Writeリクエスト3700を送信することになる。その結果、2個のコントローラへユーザデータを送信する場合でも、ユーザデータ1個分しか再送バッファ容量を消費しないので、再送バッファを小容量化することができる。
【0196】
例えば
図36及び37を参照して説明したように、エッジインターフェースは、PCIeパケットを送受信するDMAを含むインターフェース論理部と、PCIeとRoCEとの間でパケットを変換する変換部と、バッファと、を含んでよい。DMAは、バッファに送信データを格納し、送信データ格納先バッファアドレスと送信データサイズを格納したPCIeリクエストを変換部に送信してよい。
【0197】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0198】
また、上記の各構成・機能・処理部等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスクドライブ、ソリッドステートドライブ等の記録装置の記録媒体に置くことができる。
【0199】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0200】
100 ストレージ装置、120、130 イーサネットスイッチ、101、111 ストレージノード、102、103、320、330 ストレージコントローラ、104、105、325、335、1703、3108、3500 エッジインターフェース、200、210、1701 プロセッサ、202、212、1702 メモリ、203、213 NTB、204、214 フロントエンドインターフェース、205、215 バックエンドインターフェース、207、217 イーサネットポート、220 NTBリンク、230 ドライブボックス、303、304、323、324、333、334、405、3005、3006 QP、301、321、331、1705、3000、3109 PCIe-RoCE変換部、302、322、332、1704 PCIe-EIF論理部、401、3001、3504 WQEコンバータ、402、3002 再送バッファ、403、413、423、3003、3013、3023 ソータ、404、411、421、3004、3011、3021 アービタ、412、422、3012、3022 イーサネットフレームビルダ、414、424、3014、3024 イーサネットヘッダリムーバ、431 制御部、432 内部バス、433 インターフェース部、434、3503 DMA、1706、3103 送信キュー