(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024142542
(43)【公開日】2024-10-11
(54)【発明の名称】インタフェースモジュール、演算装置、通信方法
(51)【国際特許分類】
G06F 13/12 20060101AFI20241003BHJP
G06F 13/10 20060101ALI20241003BHJP
G06F 3/06 20060101ALI20241003BHJP
【FI】
G06F13/12 340G
G06F13/10 340A
G06F13/12 350
G06F3/06 301F
G06F3/06 301Z
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023054705
(22)【出願日】2023-03-30
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】野口 峻
(72)【発明者】
【氏名】横井 伸浩
(57)【要約】
【課題】新たな通信プロトコルに容易に対応できる。
【解決手段】インタフェースモジュールは、ストレージコントローラに接続され、ホストとストレージコントローラとの通信を中継するインタフェースモジュールであって、ホストおよびストレージコントローラは異なる通信プロトコルを用いており、複数の演算コアおよびメモリを備え、複数の演算コアのうち少なくとも1つはホストと通信するIOコアであり、IOコアのそれぞれは、メモリに仮想キューを有し、IOコアは、ホストが出力するストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して仮想キューに格納する受信処理を実行し、IOコアは、仮想キューからストレージインタフェースコマンドを取り出し通信データに変換してホストに送信する送信処理を実行し、同一のセッションでは、受信処理および送信処理を同一のIOコアが実行する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ストレージコントローラに接続され、ホストと前記ストレージコントローラとの通信を中継するインタフェースモジュールであって、
前記ホストおよび前記ストレージコントローラは異なる通信プロトコルを用いており、
複数の演算コアおよびメモリを備え、
前記複数の演算コアのうち少なくとも1つは前記ホストと通信するIOコアであり、
前記IOコアのそれぞれは、前記メモリに仮想キューを有し、
前記IOコアは、前記ホストが出力する前記ストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して前記仮想キューに格納する受信処理を実行し、
前記IOコアは、前記仮想キューからストレージインタフェースコマンドを取り出し通信データに変換して前記ホストに送信する送信処理を実行し、
同一のセッションでは、前記受信処理および前記送信処理を同一の前記IOコアが実行する、インタフェースモジュール。
【請求項2】
請求項1に記載のインタフェースモジュールにおいて、
前記演算コアは、前記受信処理によりそれぞれの前記仮想キューに格納された前記ストレージインタフェースコマンドを統合して前記ストレージコントローラに転送し、前記ストレージコントローラから取得する前記ストレージインタフェースコマンドを分離してそれぞれの前記仮想キューに格納するキュー操作を実行する、インタフェースモジュール。
【請求項3】
請求項1に記載のインタフェースモジュールにおいて、
前記ホストと通信可能な外部通信ポートを複数備え、
前記外部通信ポートごとに前記演算コアの割りあて数をあらかじめ設定可能である、インタフェースモジュール。
【請求項4】
請求項2に記載のインタフェースモジュールにおいて、
前記演算コアのそれぞれは、前記受信処理、前記送信処理、および前記キュー操作のいずれも実行可能に設定される、インタフェースモジュール。
【請求項5】
請求項2に記載のインタフェースモジュールにおいて、
前記演算コアの一部は、前記受信処理および前記送信処理を実行するが前記キュー操作は実行せず、前記演算コアの他の一部は、前記キュー操作を実行するが前記受信処理および前記送信処理は実行しない、インタフェースモジュール。
【請求項6】
請求項2に記載のインタフェースモジュールにおいて、
前記IOコアは、前記仮想キューに格納する前記ストレージインタフェースコマンドに当該IOコアを識別可能な識別子を付し、
前記演算コアは前記キュー操作において、前記ストレージインタフェースコマンドに含まれる前記識別子に基づき当該ストレージインタフェースコマンドを格納する前記仮想キューを決定する、インタフェースモジュール。
【請求項7】
ホストと通信可能なインタフェースモジュール、および前記インタフェースモジュールを介して前記ホストと通信するストレージコントローラを備える演算装置であって、
前記ホストおよび前記ストレージコントローラは異なる通信プロトコルを用いており、
複数の演算コアおよびメモリを備え、
前記複数の演算コアのうち少なくとも1つは前記ホストと通信するIOコアであり、
前記IOコアのそれぞれは、前記メモリに仮想キューを有し、
前記IOコアは、前記ストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して前記仮想キューに格納する受信処理を実行し、
前記IOコアは、前記仮想キューからストレージインタフェースコマンドを取り出し通信データに変換して前記ホストに送信する送信処理を実行し、
同一のセッションでは、前記受信処理および前記送信処理を同一の前記IOコアが実行する、演算装置。
【請求項8】
ストレージコントローラにローカル接続され、ホストと前記ストレージコントローラとの通信を中継し、複数の演算コアおよびメモリを備えるインタフェースモジュールが実行する通信方法であって、
前記ホストおよび前記ストレージコントローラは異なる通信プロトコルを用いており、
前記複数の演算コアのうち少なくとも1つは前記ホストと通信するIOコアであり、
前記IOコアのそれぞれは、前記メモリに仮想キューを有し、
前記IOコアが、前記ホストが出力する前記ストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して前記仮想キューに格納する受信処理を実行することと、
前記IOコアが、前記仮想キューからストレージインタフェースコマンドを取り出し通信データに変換して前記ホストに送信する送信処理を実行することと、
同一のセッションでは、前記受信処理および前記送信処理を同一の前記IOコアが実行することと、を含む通信方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、インタフェースモジュール、演算装置、および通信方法に関する。
【背景技術】
【0002】
新たな技術に基づき通信プロトコルが日々新たに開発されている。特許文献1には、外部伝送路に接続されるシリアル信号送受信部と、上記送受信部に接続されたインタフェース処理部とからなり、上記インタフェース処理部が、上記送受信部から受信したシリアル信号をパラレル信号に変換すると共に、上記外部伝送路に送信すべきパラレル信号をシリアル信号に変換して上記送受信部に出力する直並列変換部と、上記直並列変換部に接続された符号化復号化部と、上記符号化復号化部に接続され、少なくとも2種類のプロトコル処理を選択的に実行するプロトコル処理部と、上記プロトコル処理の切替えに連動して、上記直並列変換部に供給する基本クロック周波数を切替える通信モード切替え手段とを備えたことを特徴とするインタフェースモジュールが開示されている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載されている発明では、新たな通信プロトコルの対応に改善の余地がある。
【課題を解決するための手段】
【0005】
本発明の第1の態様によるインタフェースモジュールは、ストレージコントローラに接続され、ホストと前記ストレージコントローラとの通信を中継するインタフェースモジュールであって、前記ホストおよび前記ストレージコントローラは異なる通信プロトコルを用いており、複数の演算コアおよびメモリを備え、前記複数の演算コアのうち少なくとも1つは前記ホストと通信するIOコアであり、前記IOコアのそれぞれは、前記メモリに仮想キューを有し、前記IOコアは、前記ホストが出力する前記ストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して前記仮想キューに格納する受信処理を実行し、前記IOコアは、前記仮想キューからストレージインタフェースコマンドを取り出し通信データに変換して前記ホストに送信する送信処理を実行し、同一のセッションでは、前記受信処理および前記送信処理を同一の前記IOコアが実行する。
本発明の第2の態様による演算装置は、ホストと通信可能なインタフェースモジュール、および前記インタフェースモジュールを介して前記ホストと通信するストレージコントローラを備える演算装置であって、前記ホストおよび前記ストレージコントローラは異なる通信プロトコルを用いており、複数の演算コアおよびメモリを備え、前記複数の演算コアのうち少なくとも1つは前記ホストと通信するIOコアであり、前記IOコアのそれぞれは、前記メモリに仮想キューを有し、前記IOコアは、前記ストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して前記仮想キューに格納する受信処理を実行し、前記IOコアは、前記仮想キューからストレージインタフェースコマンドを取り出し通信データに変換して前記ホストに送信する送信処理を実行し、同一のセッションでは、前記受信処理および前記送信処理を同一の前記IOコアが実行する。
本発明の第3の態様による通信方法は、ストレージコントローラにローカル接続され、ホストと前記ストレージコントローラとの通信を中継し、複数の演算コアおよびメモリを備えるインタフェースモジュールが実行する通信方法であって、前記ホストおよび前記ストレージコントローラは異なる通信プロトコルを用いており、前記複数の演算コアのうち少なくとも1つは前記ホストと通信するIOコアであり、前記IOコアのそれぞれは、前記メモリに仮想キューを有し、前記IOコアが、前記ホストが出力する前記ストレージコントローラへの指令を含む通信データをストレージインタフェースコマンドに変換して前記仮想キューに格納する受信処理を実行することと、前記IOコアが、前記仮想キューからストレージインタフェースコマンドを取り出し通信データに変換して前記ホストに送信する送信処理を実行することと、同一のセッションでは、前記受信処理および前記送信処理を同一の前記IOコアが実行することと、を含む。
【発明の効果】
【0006】
本発明によれば、新たな通信プロトコルに容易に対応できる。
【図面の簡単な説明】
【0007】
【
図2】セッション管理表、CPU設定表、およびプロトコル設定表の一例を示す図
【
図3】コネクション管理表、タスク管理表、およびCPU管理表の一例を示す図
【
図4】プロトコル設定表およびCPU設定表の一例を示す図
【
図5】スマートNICが実行する処理の概要を示す図
【
図6】通信ポートにおけるCPUコアの割りあての例を示す図
【
図8】キュー操作専用モードおよびキュー操作兼用モードを説明する図
【
図9】セッション管理表、コネクション管理表、およびタスク管理表の関係を示す図
【
図10】セッション管理表、コネクション管理表、およびCPU管理表の関係を示す図
【
図11】タスク管理表およびCPU管理表の関係を示す図
【
図13】CPUによる受信処理を示すフローチャート
【
図14】CPUによるキュー操作処理を示すフローチャート
【
図15】CPUによる送信処理を示すフローチャート
【
図18】CHB設定プログラムが生成する設定画面の一例を示す図
【発明を実施するための形態】
【0008】
―第1の実施の形態―
以下、
図1~
図18を参照して、本発明にかかるインタフェースモジュールであるスマートネットワークインタフェースカード(NIC)の第1の実施の形態を説明する。
【0009】
図1は、スマートNIC3を含む演算装置1の構成図である。演算装置1は、ストレージコントローラ2、スマートNIC3、および入出力装置4を備える。演算装置1は複数のスマートNIC3を備えることができ、本実施の形態では3つのスマートNIC3を備える。3つのスマートNIC3の構成は同一なので、
図1にはスマートNIC3を1つのみ記載している。
【0010】
ストレージコントローラ2は、不揮発性記憶装置であるSSD21と、コントローラCPU22と、メモリであるコントローラDRAM23とを備える。なおSSD21は不揮発性記憶装置の一例として記載しているにすぎず、ハードディスクドライブなどの他の不揮発性記憶装置を用いてもよい。SSD21、コントローラCPU22、およびコントローラDRAM23は、演算装置1が備える不図示の通信バス、たとえばPCIエクスプレス(以下、「PCIe」とも呼ぶ)により相互に接続される。SSD21は1または複数の不揮発性記憶装置である。コントローラCPU22は、後述するプログラムを実行する。
【0011】
コントローラDRAM23には、セッション管理表231、CPU設定一覧表232、プロトコル設定一覧表233、IO処理プログラム234、ネットワーク設定プログラム235、およびCHB設定プログラム236が格納される。セッション管理表231には、演算装置1とホスト99との間の各セッションの情報が格納される。CPU設定一覧表232には、それぞれのスマートNIC3に搭載されるCPU35の設定が格納される。プロトコル設定一覧表233には、それぞれのスマートNIC3についてポートごとの通信プロトコルが設定される。
【0012】
IO処理プログラム234、ネットワーク設定プログラム235、およびCHB設定プログラム236は、コントローラCPU22により実行される。IO処理プログラム234は、スマートNIC3を介して外部から受ける動作指令に基づきSSD21へのデータ書き込み、およびSSD21からのデータ読み出しを行う。ストレージコントローラ2は、所定の通信プロトコルに従ったPDU(プロトコルデータユニット)をスマートNIC3から受信し、このPDUに含まれる動作指令に基づき動作する。所定の通信プロトコルとは、公知または将来策定される通信プロトコルであり、iSCSI、Infini Band、NVMe over TCPなどである。またPDUは、ネットワークパケット、ネットワークフレーム、通信データなどとも呼ばれる。
【0013】
ネットワーク設定プログラム235は、ホスト99と当該演算装置1との間でセッションを生成し、セッション管理表231を更新する。CHB設定プログラム236は、オペレータに対して設定画面を提供し、オペレータの入力に基づきCPU設定一覧表232およびプロトコル設定一覧表233を作成または更新する。この設定画面は
図18を参照して後に説明する。
【0014】
スマートNIC3は、メモリであるDRAM31、フラッシュ32、組み込みメモリ33、ASIC34、CPU35、および通信モジュール36を備える。DRAM31は揮発性メモリである。DRAM31には、コネクション管理表311、タスク管理表312、CPU管理表313、プロトコル設定表314、CPU設定表315、コマンド処理プログラム316、変換プログラム317、キュー操作プログラム318、およびネットワークプロトコル処理プログラム319が格納される。
【0015】
フラッシュ32には、スマートNIC3のファームウエアが格納される。組み込みメモリ33は不揮発性の記憶装置であり、プログラムデータ331および設定情報332が格納される。プログラムデータ331は、DRAM31に展開されることで、コマンド処理プログラム316、変換プログラム317、キュー操作プログラム318、およびネットワークプロトコル処理プログラム319となる。設定情報332は、コネクション管理表311、タスク管理表312、CPU管理表313、プロトコル設定表314、およびCPU設定表315の集合体である。DRAM31に格納されるデータおよびプログラムの説明は後述する。
【0016】
ASIC34は特定用途向け集積回路(application specific integrated circuit)である。ASIC34は、スマートNIC3が実行すべき処理のうち、コマンド処理プログラム316、変換プログラム317、キュー操作プログラム318、およびネットワークプロトコル処理プログラム319が実行する処理以外を実行する。CPU35は、中央演算装置であり複数の演算コアを有する。CPU35は、1または複数の演算コアを有する複数の物理CPUから構成されてもよいし、複数の演算コアを有する1つのCPUから構成されてもよい。本実施の形態ではCPU35が演算コアを8つ備えるとして具体例を説明するが、CPU35は演算コアを少なくとも1つ備えればよい。以下では、演算コアを「コア」とも呼ぶ。
【0017】
通信モジュール36は、演算装置1の外部に存在するホスト99と通信する物理的な通信モジュールである。通信モジュール36は1以上の接続口、たとえばSFPポートを備える。本実施の形態におけるスマートNIC3は2つの接続口を備えており、2つを区別するために以下では「Port 0」と「Port 1」と呼ぶ。ただし「ポート0」と「ポート1」と呼ぶ場合もある。
【0018】
入出力装置4は、キーボード、マウス、および液晶ディスプレイである。入出力装置4は、CHB設定プログラム236が生成する画面情報を液晶ディスプレイに出力し、オペレータによるキーボードやマウスへの入力をCHB設定プログラム236に伝達する。
【0019】
DRAM31に格納されるデータおよびプログラムを説明する。コネクション管理表311には、ポートごとのコネクションのデータが格納される。本実施の形態では通信モジュール36が2つのポートを有するので、コネクション管理表311は2つ存在する。タスク管理表312には、各タスクの状態が格納される。CPU管理表313には、CPU35のコアごとに処理するコネクションの識別子およびタスクの識別子が格納される。プロトコル設定表314には、通信モジュール36の各ポートがホスト99との通信に用いる通信プロトコルが格納される。CPU設定表315には、CPU35の設定が格納される。
【0020】
コマンド処理プログラム316は、スマートNIC3の内部において処理可能な処理を行うプログラムである。コマンド処理プログラム316は、たとえばコネクションの開始や終了の処理を行う。たとえばホスト99から受信したPDUに含まれる指令がSSD21に格納されているデータの読み出しの場合には、スマートNIC3では処理できないのでPDUをストレージインタフェースコマンド(以下、「ストレージI/Fコマンド」とも呼ぶ)に変換してストレージコントローラ2に送信する。しかしスマートNIC3において処理可能な指令の場合には、ストレージコントローラ2に送信することなくコマンド処理プログラム316により処理する。
【0021】
変換プログラム317は、PDUに含まれるコマンドを変換する。具体的には変換プログラム317は、ホスト99から受信したPDUに含まれるコマンドを、ストレージコントローラ2が処理可能な汎用的なストレージインタフェースコマンドに書き換える。また変換プログラム317は、ストレージコントローラ2から受信したストレージインタフェースコマンドに含まれるコマンドを、PDUの送信先であるホスト99が処理可能な他の通信プロトコルのコマンドに書き換える。さらに変換プログラム317は、PDUへのタスクIDやコネクションIDの追加と削除も行う。
【0022】
キュー操作プログラム318は、後述する仮想キューと実キューとの間のデータ転送などを行う。キュー操作プログラム318の詳細は後述する。ネットワークプロトコル処理プログラム319は、PDUにおける通信プロトコルを変換する。換言すると変換プログラム317は、PDUを書き換えることで通信プロトコルをストレージインタフェースコマンドに変換する。
【0023】
図2は、ストレージコントローラ2のコントローラDRAM23に格納されるセッション管理表231、CPU設定一覧表232、およびプロトコル設定一覧表233の一例を示す図である。セッション管理表231には、各セッションのデータが格納される。具体的には、セッションID、プロトコル設定情報、ネットワーク設定情報、LUNマッピング情報が含まれる。セッションIDは、セッションの識別子であり、本実施の形態では「E」と数字の組み合わせで表現する。プロトコル設定情報は、使用する通信プロトコルに関する設定データである。
図2では記載の簡略化のために「iSCSI setting」と記載しているが、実際には具体的な設定データが格納される。ネットワーク設定情報は、ネットワークに関する設定データである。
図2では記載の簡略化のために「TCP setting, IP setting」と記載しているが、実際には具体的な設定データが格納される。LUNマッピング情報は、使用する論理ユニット番号の識別子である。
【0024】
CPU設定一覧表232には、それぞれのスマートNIC3に搭載されるCPU35の設定が格納される。具体的には、CHB ID、キュー操作専用モード、キュー操作兼用モード、ポート0CPUリソース、およびポート1CPUリソースが含まれる。CHB IDは、チャネルボード、すなわちスマートNIC3の識別子であり、本実施の形態では「C」と数字の組み合わせで表現する。
【0025】
キュー操作専用モードおよびキュー操作兼用モードは、CPU35をキュー操作専用モードおよびキュー操作兼用モードのいずれで動作させるかの設定である。キュー操作専用モードおよびキュー操作兼用モードは表裏の関係にあり、一方が「Yes」、他方が「No」に設定される。ポート0CPUリソース、およびポート1CPUリソースは、CPU35の振り分け設定である。ポート0CPUリソース、およびポート1CPUリソースの和は100%以下である。
【0026】
プロトコル設定一覧表233には、それぞれのスマートNIC3についてポートごとの通信プロトコルが設定される。具体的には、それぞれCHB IDについて、プロトコルごとおよびポートごとに適用の可否が記載される。
図2に示す例では、CHB IDが「C1」のスマートNIC3は、ポート0は「iSCSI Target」のみ対応し、ポート1は「NVMe over TCP」のみに対応することが記載されている。各ポートが対応可能なプロトコルは1つに限定されず、たとえばCHB IDが「C3」のスマートNIC3はポート1が「iSCSI Target」と「NVMe over TCP」の両方に対応する。
【0027】
図3は、CHB IDが「C1」であるスマートNIC3のDRAM31に格納されるコネクション管理表311、タスク管理表312、およびCPU管理表313の一例を示す図である。コネクション管理表311には、ポートごとのコネクションのデータが格納される。
図3には、ポート0のコネクション管理表311の一例を示している。すなわち、
図3には記載していないがポート1を用いて生成されたコネクションが記載されたコネクション管理表311も別途存在する。
【0028】
コネクション管理表311には具体的には、コネクションID、コア番号、コネクション情報、およびタスクIDが格納される。コネクションIDはコネクションを識別する識別子であり、本実施の形態では「N」と数字の組み合わせで表現する。タスクIDは、ホスト99からIOを受領するたびに生成される。1つのコネクションで複数のPDUを受領することが一般的なため、コネクションIDとタスクIDは1:多の関係になっている。
【0029】
コア番号はCPU35を構成するコアの識別子であり、本実施の形態では「R」と数字の組み合わせで表現する。コネクション情報は、コネクションに関する各種データである。
図3では記載の簡略化のために「Connection setting」と記載しているが、実際には具体的なコネクションのデータが格納される。タスクIDは、該当するコネクションに紐づくタスクの識別子の一覧であり、本実施の形態では「T」と数字の組み合わせで表現する。なお
図3ではタスクIDを16進数で記載しているが、10進数などで表記してもよい。
【0030】
タスク管理表312には、各タスクの状態が格納される。具体的には、タスクIDごとにPDU1およびPDU2が格納される。CPU管理表313には、CPU35のコアごとに処理するコネクションの識別子およびタスクの識別子が格納される。なお、コア番号とコネクションIDの関係、およびコネクションIDとタスクIDの関係はコネクション管理表311に記載されている。そのためCPU管理表313は、1つのスマートNIC3が有する全てのコネクション管理表311に基づき作成できる。
【0031】
図4は、CHB IDが「C1」であるスマートNIC3のDRAM31に格納されるプロトコル設定表314およびCPU設定表315の一例を示す図である。プロトコル設定表314には、通信モジュール36の各ポートがホスト99との通信に用いる通信プロトコルが格納される。ストレージコントローラ2は、プロトコル設定一覧表233に基づきスマートNIC3の初期化時に動作指令を送るので、スマートNIC3のプロトコル設定表314にはプロトコル設定一覧表233の該当するCHB IDの値がそのまま記載される。具体的には、
図2に示したプロトコル設定一覧表233において、CHB IDが「C1」のポート0は「iSCSI Target」が設定され、ポート1は「NVMe over TCP」が設定された。
図4のプロトコル設定表314には、プロトコル設定一覧表233においてCHB IDが「C1」の場合と同様のデータが格納されている。
【0032】
CPU設定表315には、CPU35の設定が格納される。ストレージコントローラ2は、CPU設定一覧表232に基づきスマートNIC3の初期化時に動作指令を送るので、スマートNIC3のCPU設定表315にはCPU設定一覧表232の該当するCHB IDの値がそのまま記載される。具体的には、
図2に示したCPU設定一覧表232におけるCHB IDが「C1」の値が、
図4のCPU設定表315にそのまま記載されている。
【0033】
図5は、スマートNIC3が実行する処理の概要を示す図である。スマートNIC3は、ホスト99とストレージコントローラ2との間の双方向の通信を中継する。ただし
図5では、ホスト99からストレージコントローラ2に向けての通信を中継する様子を示している。ホスト99とスマートNIC3との間の通信は、RoCEv2、iSCSI、NVMe over TCPなど、様々な通信プロトコルが用いられる。スマートNIC3とストレージコントローラ2との通信は、PCIeが用いられる。スマートNIC3は、ソフトウエア処理によりホスト9との間の様々な通信プロトコルに対応する。
【0034】
スマートNIC3は、ホスト99から通信を受信すると、まずプロトコル解析、たとえばPDUヘッダ解析を行う。次にスマートNIC3は、コマンド振り分けを行う。具体的にはストレージコントローラ2への送付の要否を判断し、スマートNIC3が自ら処理可能な場合は処理結果をホスト9に送信し、ストレージコントローラ2へ送信が必要な場合は処理を続ける。次にスマートNIC3は、PDUをストレージインタフェースコマンドに変換する。具体的には、ストレージコントローラ2が解釈できるように、受信したPDUヘッダを書き換え、必要に応じてPDUペイロードも加工する。次にスマートNIC3は、ストレージコントローラ2へ送信するためにストレージインタフェースコマンドをキュー、すなわち待ち行列に格納する。キューの処理については後述する。
【0035】
次にスマートNIC3は、インタフェースコマンド振り分けを行う。最後にスマートNIC3は、DMAによりストレージコントローラ2のコントローラDRAM23にストレージインタフェースコマンドを転送する。なお、ストレージコントローラ2からホスト99への通信を中継する場合には、
図5とは逆の流れとなる。
【0036】
図6は、通信モジュール36におけるCPUコアの割りあての例を示す図である。スマートNIC3における通信モジュール36におけるCPUコアの割りあては、スマートNIC3の初期化時、たとえば電源投入時にCPU設定表315の記載に基づき決定される。ただしスマートNIC3の初期化時の際に、ストレージコントローラ2のCPU設定一覧表232から該当するスマートNIC3のCPU設定をCPU設定表315にコピーしてもよい。
【0037】
図6の上部に示す例では、スマートNIC3が備える8個のコア全てがポート0に割り当てられている。この場合には、ポート0に接続されたホスト99-1から受信したコマンドは処理されるが、ポート1に接続されたホスト99-2から受信したコマンドは処理されない。
図6の下部に示す例では、スマートNIC3が備える8個のコアがポート0とポート1に均等に割り当てられている。この場合には、ホスト99-1から受信したコマンドとホスト99-2から受信したコマンドは同様の比率で処理される。なおこの構成は、
図4に示したCPU設定表315に対応する。
【0038】
図7は、スマートNIC3の各コアの処理を示す概要図である。ただし本図はキュー操作兼用モードの動作を示している。ストレージコントローラ2はコマンド受領キュー(C-queue)およびレスポンス応答キュー(R-queue)を1つずつ有する。コマンド受領キューは、ホスト99からのコマンドを格納するキューである。レスポンス応答キューは、ホスト99への応答コマンドを格納するキューである。以下では、コマンド受領キューおよびレスポンス応答キューを「実キュー」とも呼ぶ。
【0039】
CPU35の各コアは、仮想コマンド受領キューおよび仮想レスポンス応答キューを有する。仮想コマンド受領キューおよび仮想レスポンス応答キューは、スマートNIC3のDRAM31に確保された領域により実現される。仮想コマンド受領キューおよび仮想レスポンス応答キューは、たとえばリングバッファである。以下では、仮想コマンド受領キューおよび仮想レスポンス応答キューを「仮想キュー」とも呼ぶ。すなわち、実キューは1つしか存在しないが仮想キューはコアの数だけ存在するのでキューの統合や分離が必要となる。実キューと仮想キューを分けているのは、ストレージコントローラ2のキュー数とスマートNIC3のCPU35のコア数が異なる現在の構成において、この差分を吸収するためである。
【0040】
CPU35の各コアは、受信処理と、送信処理と、キュー操作とを行う。受信処理とは、ホスト99からストレージコントローラ2への通信の中継における、
図5を参照して説明した処理のうち、キュー、具体的には仮想コマンド受領キューに格納するまでの処理である。受信処理とは、ストレージコントローラ2からホスト99への通信の中継における、仮想レスポンス応答キューからストレージインタフェースコマンドを取得する処理以後の処理である。キュー操作とは、全コアの仮想コマンド受領キューからストレージインタフェースコマンドを取り出して統合しDMA転送でストレージコントローラ2の実キューに送信すること、およびDMA転送でストレージコントローラ2の実キューから取得したストレージインタフェースコマンドを分離してそれぞれの仮想レスポンス応答キューに格納することである。
【0041】
スマートNIC3は、同一のコネクションは同一のコアが担当する。この目的は、リソースの節約および管理の煩雑さを避けることと、コア間の競合排他待ちによる性能劣化を避けることにある。たとえば、あるホスト99からのデータ要求をコアR3が受信すると、その応答であるストレージコントローラ2から取得したデータの送信はコアR3が行う。
【0042】
図8は、キュー操作専用モードおよびキュー操作兼用モードを説明する図である。ただしここでは、
図4の下部に示したようにポートごとのCPUリソースの割り当ては50%ずつであるとする。
図8の上部はキュー操作専用モードを示し、
図8の下部はキュー操作兼用モードを示す。キュー操作専用モードおよびキュー操作兼用モードの相違点は、コアに役割を分担させるか否かである。
【0043】
図8の上部に示すキュー操作専用モードでは、ポートごとにキュー操作を行う専用のコアを設定する。本実施の形態では通信モジュール36はポート0とポート1の2つのポートを有するので、2コアがキュー操作のみに従事する。そのためこの場合は、残りの6コアが仮想キューを有して受信処理および送信処理を行う。1つのポートに注目すると、1つのコアがキュー操作のみを行い、3つのコアが受信処理および送信処理を行う。
【0044】
図8の下部に示すキュー操作兼用モードでは、全てのコアがキュー操作、受信処理、および送信処理を行う。この場合には、どのコアがキュー操作を行うかは不定である。たとえば同一のコアがあるホスト99からのコマンドについて、キュー操作、受信処理、および送信処理の全てを行うこともある。この場合には、1ポートあたり4つのコアがキュー操作、受信処理、および送信処理を行う。
【0045】
以下では、受信処理および送信処理を行う演算コアを「IOコア」と呼び、キュー操作を行う演算コアを「キューコア」と呼ぶ。キュー操作専用モードではIOコアとキューコアが固定されるが、キュー操作兼用モードではIOコアとキューコアは流動的である。すなわちキュー操作兼用モードでは、1つのコアがあるタイミングではIOコアとして動作するが、別なタイミングではキューコアとして動作する。仮想キューはIOコアと同数が用意され、キュー操作専用モードではCPU35が備える演算コアの数からキューコアの数を除いた下図の仮想キューが用意される。キュー操作兼用モードでは、タイミングによりIOコアの数は異なるが、どのコアもIOコアとなりえるのでCPU35が備える演算コアと同数だけ仮想キューが用意される。
【0046】
キュー操作専用モードおよびキュー操作兼用モードの間には明確な優劣はなく、それぞれに利点および欠点がある。キュー操作専用モードの利点は、キュー操作を行うコアを固定するため、キューを操作するためのコア間の排他処理が不要となり、この排他処理のオーバーヘッドがない点である。その一方で、IO処理を行うコア数が減ってしまう欠点がある。キュー操作兼用モードの利点は、IO処理を行うコア数を増やせる点である。キュー操作兼用モードの欠点は、キューを操作するためのコア間の排他処理が必要となる点である。
【0047】
図9は、セッション管理表231、コネクション管理表311、およびタスク管理表312の関係を示す図である。セッション管理表231はストレージコントローラ2に格納され、コネクション管理表311およびタスク管理表312はスマートNIC3に格納される。セッション管理表231には、セッションごとの情報が格納される。コネクション管理表311には、それぞれのセッションIDに対応付けられる1以上のタスクID、およびコネクションごとの情報が格納される。タスク管理表312には、タスクごとの情報が格納される。セッションIDとコネクションIDの対応関係は、セッションIDに紐づくネットワーク設定情報と、コネクションIDに紐づくコネクション情報との対応から特定できる。
【0048】
図10は、セッション管理表231、コネクション管理表311、およびCPU管理表313の関係を示す図である。セッション管理表231はストレージコントローラ2に格納され、コネクション管理表311およびCPU管理表313はスマートNIC3に格納される。コネクションIDとコア番号の対応関係は、コネクション管理表311およびCPU管理表313のそれぞれから特定できる。
【0049】
図11は、タスク管理表312およびCPU管理表313の関係を示す図である。タスク管理表312には、タスクIDごとの情報が格納される。CPU管理表313には、コア番号に対応する1以上のタスクIDの情報が格納される。
【0050】
図12は、演算装置1におけるデータ処理を示す概要図である。まずホスト99が処理を要求する旨のデータである処理要求データを演算装置1に送信すると、演算装置1のネットワークインタフェースであるスマートNIC3がこれを受信する。そしてスマートNIC3は、変換プログラム317によるコマンド変換処理によりタスクIDとコネクションIDをストレージインタフェースコマンドに付加してストレージコントローラ2にDMA転送する。
【0051】
ストレージコントローラ2は、セッション管理表231を参照してセッションIDを特定し、処理要求に基づき処理を行い処理結果を得る。この処理はたとえば、SSD21からの指定されたデータの読み取りであり、処理結果はSSD21から読み取ったデータである。ストレージコントローラ2は、処理結果にスマートNIC3から受信したデータに付加されていたタスクIDおよびコネクションIDをそのまま書き戻して、DMA転送によりスマートNIC3にコピーする。スマートNIC3は、再びコマンド変換を行い処理結果をホスト99へ送信する。
【0052】
図13は、CPU35による受信処理を示すフローチャートである。本フローチャートの処理は概ね変換プログラム317により実行される。ステップS501では変換プログラム317は、ホスト99からプロトコルコマンドを受領する。続くステップS502では変換プログラム317は、プロトコルコマンドの振り分けを行い、スマートNIC3の内部で処理可能であると判断するステップS506に進み、ストレージコントローラ2の処理が必要であると判断する場合はステップS503に進む。ステップS503ではコマンド処理プログラム316は、コマンド処理を行う。続くステップS504では変換プログラム317は、コマンド変換を行い、ホスト99が使用する通信プロトコルからストレージコントローラ2が解釈可能なインタフェースコマンドに変換する。
【0053】
続くステップS505では変換プログラム317は、生成したメッセージを仮想キューに追加し、
図13に示す処理を終了する。この際に追加する仮想キューは、
図13に示す処理を実行しているCPUコアの仮想キューである。ステップS506ではコマンド処理プログラム316は、スマートNIC3においてコマンド処理を行う。続くステップS507では変換プログラム317は、ステップS506における結果を用いてホスト99へ応答を行い、
図13に示す処理を終了する。
【0054】
図14は、CPU35によるキュー操作処理を示すフローチャートである。ステップS511ではキュー操作プログラム318は、キューの統合、すなわちそれぞれのCPUコアの仮想キューに格納されたメッセージの統合を行う。続くステップS512ではキュー操作プログラム318は、ステップS511において統合したストレージインタフェースコマンドをDMA転送によりストレージコントローラ2に転送する。またストレージコントローラ2からの要求に応じて、ストレージコントローラ2の処理結果をDMA転送によりストレージコントローラ2からスマートNIC3に転送する。
【0055】
続くステップS513ではキュー操作プログラム318はコマンド応答を受領し、続くステップS514ではキュー操作プログラム318はキューの分離を行う。続くステップS515ではキュー操作プログラム318は、分離したキューを適切なコアの仮想レスポンス応答キューに追加して
図14に示す処理を終了する。ここで、適切なコアの選定方法は次のとおりである。
図12に示したようにストレージコントローラ2から受信したストレージインタフェースコマンドにはコネクションIDおよびタスクIDが付加されている。そのためキュー操作プログラム318は、コネクション管理表311またはCPU管理表313を参照することで、当該ストレージインタフェースコマンドを変換したPDUを送信すべきコア番号を特定できる。前述のとおり、CPU35のコアごとに仮想キューが用意されておりコアと仮想キューの対応は既知なので、キュー操作プログラム318は特定したコア番号に対応する仮想キューにストレージインタフェースコマンドを追加する。
【0056】
図15は、CPU35による送信処理を示すフローチャートである。ステップS521では変換プログラム317は、対応する仮想レスポンス応答キューから1つストレージインタフェースコマンドを取り出す。続くステップS522では変換プログラム317は、取り出したストレージインタフェースコマンドに対してコマンド処理を行い、続くステップS523ではコマンド変換によりインタフェースコマンドからホスト99が使用する通信プロトコルのPDUに変換する。続くステップS524では変換プログラム317は、ステップS523の処理結果を用いてホスト99へ応答して
図15に示す処理を終了する。
【0057】
図16および
図17は、演算装置1の処理を示すタイムチャートである。ただし
図16および
図17は、ホスト99からの要求に応答する演算装置1の一連の処理を示しており連続性がある。具体的には、
図16における最初の処理であるS551に対する応答が、
図17の最後に示すS585である。このタイムチャートは処理を行うCPU35のコアの例示を目的としている。
【0058】
まずホスト99がスマートNIC3に対してネットワークプロトコルコマンドを発行する(S551)。これを受信したスマートNIC3のコアR1は、プロトコル処理であるネットワークプロトコル解析(S552)およびコマンド振り分け(S553)を行う。次に広義のコマンド処理として、コマンド処理(S554)およびコマンド変換(S555)を行う。さらにCPU35は、コマンド変換の結果を仮想キューに入力する(S556)。S552~S556は同一のコア、たとえばコアR1が実行する。
【0059】
次にCPU35は、複数の仮想キューからコマンドを取り出して統合し(S561)、DMA転送によりストレージコントローラ2に統合したコマンドを転送する(S562)。転送されたコマンドはストレージコントローラ2の実キューに入力され、IO処理プログラム234はコマンドを順番に受領する(S563)。S561~S562は同一のコア、たとえばコアR2が実行する。ただしS561~S562は、S552~S556と同一のコアが実行してもよいし異なるコアが実行してもよい。
【0060】
図17を参照して説明を続ける。IO処理プログラム234はコマンド応答を作成すると(S564)、スマートNIC3にDMA転送を要求する(S565)。この要求を受信したスマートNIC3のCPU35は、DMA転送を行いストレージコントローラ2からDRAM31にストレージインタフェースコマンドをコピーし(S567)、コマンド応答を受領する(S568)。そして、キューを分離して(S569)、コネクション管理表311またはCPU管理表313を参照して分離したキューを適切な仮想レスポンス応答キューに追加する(S570)。S567~S570は同一のコア、たとえばコアR3が実行する。ただしS561~S562は、S552~S556やS561~S562と同一のコアが実行してもよいし異なるコアが実行してもよい。
【0061】
図17におけるS552~S556を実行したCPU35のコア、たとえばコアR1は、コアR3の仮想レスポンス応答キューからdequeue、すなわちストレージインタフェースコマンドを取り出し(S581)コマンド処理を行う(S582)。そしてコアR1は、ストレージインタフェースコマンドをホスト99のネットワークプロトコルにあわせてコマンド変換し(S583)、ネットワークプロトコル処理を行い(S584)、ホスト99に応答を送信する(S585)。このS581~S585は、S552~S556と同一のコアが実行する。
【0062】
図18は、CHB設定プログラム236が生成する設定画面の一例を示す図である。設定画面は演算装置1の入出力装置4に表示されてもよいし、ネットワーク通信を介して他の装置に表示されてもよい。
図18の上部にはプロトコル設定画面910を示し、
図18の下部にはCPU設定画面920を示す。プロトコル設定画面910およびCPU設定画面920は、
図18に示すように同時に表示されてもよいし、別々に表示されてもよい。
【0063】
プロトコル設定画面910は、CHB選択ボタン911、ポート0設定ボタン912、ポート1設定ボタン913を備える。オペレータは、CHB選択ボタン911を用いて設定対象のチャネルボードを変更する。オペレータは、ポート0設定ボタン912を用いてポート0が対応する通信プロトコルを設定する。オペレータは、ポート1設定ボタン913を用いてポート0が対応する通信プロトコルを設定する。オペレータによるプロトコル設定画面910への操作結果は、プロトコル設定一覧表233に反映される。なお、
図18に示す例では、ポート0設定ボタン912およびポート1設定ボタン913はプルダウンメニューなので1つの項目しか選択できないが、2以上の項目を選択可能としてもよい。
【0064】
CPU設定画面920は、CHB選択ボタン921、モード設定ボタン922、ポート0比率設定ボタン923、およびポート1比率設定ボタン924を備える。オペレータは、CHB選択ボタン921を用いて設定対象のチャネルボードを変更する。オペレータは、モード設定ボタン922を用いてキュー操作専用モードおよびキュー操作兼用モードのいずれかに設定する。オペレータは、ポート0比率設定ボタン923を用いてポート0に利用されるCPU35の比率を設定する。オペレータは、ポート1比率設定ボタン924を用いてポート1に利用されるCPU35の比率を設定する。オペレータによるプロトコル設定画面910への操作結果は、CPU設定一覧表232に反映される。
【0065】
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)インタフェースモジュールとも呼べるスマートNIC3は、ストレージコントローラ2に接続され、ホスト99とストレージコントローラ2との通信を中継する。ホスト99およびストレージコントローラ2は異なる通信プロトコルを用いている。スマートNIC3は、複数の演算コアおよびDRAM31を備える。複数の演算コアのうち少なくとも1つはホスト99と通信するIOコアであり、IOコアのそれぞれは、DRAM31に仮想キューを有する。IOコアは、ホスト99が出力するPDUの通信プロトコルを変換して仮想キューに格納する受信処理、および仮想キューからストレージインタフェースコマンドを取り出し通信プロトコルを変換してホスト99に送信する送信処理を実行し、同一のセッションでは、受信処理および送信処理を同一のIOコアが実行する。そのため、新たな通信プロトコルに容易に対応できる。
【0066】
(2)演算コアは、受信処理によりそれぞれの仮想キューに格納されたストレージインタフェースコマンドを統合してストレージコントローラ2に転送し、ストレージコントローラ2から取得するストレージインタフェースコマンドを分離してそれぞれの仮想キューに格納するキュー操作を実行する。
【0067】
(3)スマートNIC3はホスト99と通信可能な外部通信ポートを複数備える。本実施の形態では通信モジュール36はポート0とポート1の2つの通信ポートを備える。CPU設定表315により、外部通信ポートごとに演算コアの割りあて数をあらかじめ設定可能である。
【0068】
(4)キュー操作兼用モードでは、演算コアのそれぞれは、受信処理、送信処理、およびキュー操作のいずれも実行可能に設定される。そのため、IO処理を行うコア数を増やせる。
【0069】
(5)キュー操作専用モードでは、演算コアの一部であるIOコアは、受信処理および送信処理を実行するがキュー操作は実行せず、演算コアの他の一部であるキューコアは、キュー操作を実行するが受信処理および送信処理は実行しない。そのため、キューを操作するためのコア間の排他処理が不要となり、この排他処理のオーバーヘッドがない。
【0070】
(変形例1)
上述した実施の形態では、ストレージコントローラ3に備えられる実キューが1つのみであった。しかしストレージコントローラ3は実キューを2以上備えてもよい。
【0071】
上述した各実施の形態および変形例において、機能ブロックの構成は一例に過ぎない。別々の機能ブロックとして示したいくつかの機能構成を一体に構成してもよいし、1つの機能ブロック図で表した構成を2以上の機能に分割してもよい。また各機能ブロックが有する機能の一部を他の機能ブロックが備える構成としてもよい。
【0072】
上述した各実施の形態および変形例において、演算装置1が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースと演算装置1が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、例えば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGAにより実現されてもよい。
【0073】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。たとえば、あるストレージと別のストレージとの間のインタフェースにスマートNIC3を用いてもよい。
【符号の説明】
【0074】
1 :演算装置
2 :ストレージコントローラ
3 :スマートNIC
35 :CPU
44 :動作モード表
99 :ホスト
231 :セッション管理表
232 :CPU設定一覧表
233 :プロトコル設定一覧表
234 :IO処理プログラム
235 :ネットワーク設定プログラム
311 :コネクション管理表
312 :タスク管理表
313 :CPU管理表
314 :プロトコル設定表
315 :CPU設定表
316 :コマンド処理プログラム
317 :コマンド変換プログラム
318 :キュー操作プログラム
319 :ネットワークプロトコル処理プログラム