(57)【要約】【課題】I/O処理するプロセッサの数が増えても、キューが枯渇することなく、I/O性能を向上させたマルチノードストレージシステムを提供する。【解決手段】マルチノードストレージシステムは、計算機に論理的な記憶領域としてボリュームを提供し、計算機からI/O要求を処理するコントローラを有するノードを複数備え、ノードのコントローラの何れかにPCI接続される複数のNVMeドライブと、複数のノードのコントローラを相互に接続するスイッチとを備え、コントローラは、計算機からのI/O要求を処理する複数のプロセッサと、メモリを有し、メモリには、複数のNVMeドライブ毎に、マルチノードストレージシステムを構成する複数のコントローラのプロセッサ数の仮想キューと、複数のNVMeドライブの何れかに対しコマンドを格納する、仮想キューの数よりも少ない、実キューと、を有する。【選択図】図３
2020091554.tif 000002
【特許請求の範囲】
【請求項１】
計算機に論理的な記憶領域としてボリュームを提供し、計算機からI/O要求を処理するコントローラを有するノードを複数備えたマルチノードストレージシステムであって、
前記マルチノードストレージシステムは、
前記ノードの前記コントローラの何れかにPCI接続される複数のNVMeドライブと、
前記複数のノードの前記コントローラを相互に接続するスイッチとを備え、
前記コントローラは、計算機からのI/O要求を処理する複数のプロセッサと、メモリを有し、
前記メモリには、前記複数のNVMeドライブ毎に、
前記マルチノードストレージシステムを構成する複数のコントローラのプロセッサ数の仮想キューと、
前記複数のNVMeドライブの何れかに対しコマンドを格納する、前記仮想キューの数よりも少ない、実キューを、有することを特徴とするマルチノードストレージシステム。
【請求項２】
前記仮想キューは、コマンドを格納するVSQと、応答を格納するVCQとを有し、
前記実キューは、コマンドを格納するSQと、応答を格納するCQとを有し、
前記複数のプロセッサの第1のプロセッサは、前記計算機からリード要求を受領すると、前記第1のプロセッサに割り当てられた第1のVSQにリード要求を格納し、
前記第1のプロセッサを収容する、前記複数のコントローラの第1のコントローラに、収容される代表プロセッサは、前記第1のVSQからリード要求を刈り取り、前記リード要求の対象データを格納する、前記複数のNVMeドライブの第１のNVMeドライブ、に対して設定されている第１のSQにリード要求を格納し、
前記第１のNVMeドライブは、前記第１のSQに格納されたリード要求を刈り取り、リード要求を実行することを特徴とする請求項１に記載のマルチノードストレージシステム。
【請求項３】
前記第１のNVMeドライブは、リード要求を実行すると、応答を第1のコントローラのCQに格納すると共に、リードデータをキャッシュメモリに格納し、
前記代表プロセッサは、前記第1のCQに格納された応答を刈り取り、前記第１のプロセッサに割り当てられた第１のVCQに応答を格納し、
前記第１のプロセッサは、前記第１のVCQに格納された応答を刈り取り、前記キャッシュメモリからリードデータを読み出すことを特徴とする請求項２に記載されたマルチノードストレージシステム。
【請求項４】
前記第１のプロセッサは、前記計算機からリード要求を受領すると、前記第１のプロセッサに割り当てられた第１のVSQにリード要求を格納する前に、キャッシュメモリにリード要求に対応するデータが格納されているか判定することを特徴とする請求項２に記載のマルチノードストレージシステム。
【請求項５】
前記仮想キューは、コマンドを格納するVSQと、応答を格納するVCQとを有し、
前記実キューは、コマンドを格納するSQと、応答を格納するCQとを有し、
前記複数のプロセッサの第１のプロセッサは、
前記計算機からリード要求を受領すると、前記リード要求からアクセス先NVMeドライブを算出し、
算出されたNVMeドライブが前記第１のプロセッサを収容する第１のコントローラ以外の第２のコントローラにPCI接続されている場合、
前記第１のプロセッサに割り当てられた前記第２のコントローラの第２のVSQにリード要求を格納し、
前記第２のコントローラに、収容される代表プロセッサは、前記第２のVSQからリード要求を刈り取り、前記リード要求の対象データを格納する、前記複数のNVMeドライブの第２のNVMeドライブ、に対して設定されている第２のSQにリード要求を格納し、
前記第２のNVMeドライブは、前記第２のSQに格納されたリード要求を刈り取り、リード要求を実行することを特徴とする請求項１に記載のマルチノードストレージシステム。
【請求項６】
前記第２のNVMeドライブは、リード要求を実行すると、応答を第２のCQに格納すると共に、リードデータを前記第２のコントローラのキャッシュメモリと前記第１のコントローラのキャッシュメモリに格納し、
前記第２のコントローラの代表プロセッサは、前記第２のCQに格納された応答を刈り取り、前記第１のプロセッサに割り当てられた第１のVCQに応答を格納し、
前記第１のプロセッサは、第１のVCQに格納された応答を刈り取り、前記キャッシュメモリからリードデータを読み出すことを特徴とする請求項５に記載されたマルチノードストレージシステム。
【請求項７】
前記第１のプロセッサは、前記計算機からリード要求を受領すると、前記第１のプロセッサに割り当てられた第１のVSQにリード要求を格納する前に、キャッシュメモリにリード要求に対応するデータが格納されているか判定することを特徴とする請求項５に記載のマルチノードストレージシステム。
【請求項８】
前記メモリは、
I/O要求に含まれる論理的アドレスとデータが格納されるNVMeドライブとの対応を管理するストレージ構成テーブルと、
前記複数のNVMeドライブ毎に、プロセッサ、仮想キュー、実キューとの対応関係、プロセッサが代表プロセッサであることを管理するキュー管理テーブルと、
仮想キューを設定する仮想キュー領域と、
実キューを設定する実キュー領域を有することを特徴とする請求項１に記載のマルチノードストレージシステム。
【請求項９】
計算機に論理的な記憶領域としてボリュームを提供し、計算機からI/O要求を処理するコントローラを有するノードを複数備えたマルチノードストレージシステムのキュー制御方法であって、
前記マルチノードストレージシステムは、
前記ノードの前記コントローラの何れかにPCI接続される複数のNVMeドライブと、
前記複数のノードの前記コントローラを相互に接続するスイッチとを備え、
前記コントローラは、計算機からのI/O要求を処理する複数のプロセッサと、メモリを有し、
前記メモリには、前記複数のNVMeドライブ毎に、
前記マルチノードストレージシステムを構成する複数のコントローラのプロセッサ数の仮想キューと、
NVMeドライブに対しコマンドを格納し、前記仮想キューの数よりも少ない実キューとをと有し、
前記仮想キューは、コマンドを格納するVSQと、応答を格納するVCQとを有し、
前記実キューは、コマンドを格納するSQと、応答を格納するCQとを有し、
前記複数のプロセッサの第1のプロセッサは、
前記計算機からリード要求を受領すると、前記第1のプロセッサに割り当てられた第1のVSQにリード要求を格納し、
前記第1のプロセッサを収容する、前記複数のコントローラの第1のコントローラに、収容される代表プロセッサは、
前記第1のVSQからリード要求を刈り取り、前記リード要求の対象データを格納する、前記複数のNVMeドライブの第１のNVMeドライブ、に対して設定されている第１のSQにリード要求を格納し、
前記第１のNVMeドライブは、
前記第１のSQに格納されたリード要求を刈り取り、リード要求を実行することを特徴とするマルチノードストレージシステムのキュー管理方法。
【請求項１０】
計算機に論理的な記憶領域としてボリュームを提供し、計算機からI/O要求を処理するコントローラを有するノードを複数備えたマルチノードストレージシステムのキュー制御方法であって、
前記マルチノードストレージシステムは、
前記ノードの前記コントローラの何れかにPCI接続される複数のNVMeドライブと、
前記複数のノードの前記コントローラを相互に接続するスイッチとを備え、
前記コントローラは、計算機からのI/O要求を処理する複数のプロセッサと、メモリを有し、
前記メモリには、前記複数のNVMeドライブ毎に、
前記マルチノードストレージシステムを構成する複数のコントローラのプロセッサ数の仮想キューと、
NVMeドライブに対しコマンドを格納し、前記仮想キューの数よりも少ない実キューとを有し、
前記仮想キューは、コマンドを格納するVSQと、応答を格納するVCQとを有し、
前記実キューは、コマンドを格納するSQと、応答を格納するCQとを有し、
前記複数のプロセッサの第１のプロセッサは、
前記計算機からリード要求を受領すると、前記リード要求からアクセス先NVMeドライブを算出し、
算出されたNVMeドライブが前記第１のプロセッサを収容する第１のコントローラ以外の第２のコントローラにPCI接続されている場合、
前記第１のプロセッサに割り当てられた前記第２のコントローラの第２のVSQにリード要求を格納し、
前記第２のコントローラに、収容される代表プロセッサは、
前記第２のVSQからリード要求を刈り取り、前記リード要求の対象データを格納する、前記複数のNVMeドライブの第２のNVMeドライブ、に対して設定されている第２のSQにリード要求を格納し、
前記第２のNVMeドライブは、前記第２のSQに格納されたリード要求を刈り取り、リード要求を実行することを特徴とするマルチノードストレージシステムのキュー管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチノードストレージシステム、及びマルチノードストレージシステムのキュー制御方法に関する。
【背景技術】
【０００２】
通常、多数のプロセッサまたはプロセッサコアを有するストレージ装置においては、ドライブを処理するキュー制御を多数のプロセッサ間で排他制御しながら処理を行う必要がある。
【０００３】
近年、ストレージ装置の記憶媒体にフラッシュメモリをドライブに搭載した高性能なNVMeドライブを用いたストレージ装置が開発されている。このNVMeドライブでは、規格上、チャネル制御機能によりコマンドを処理するキューを、約64K個まで提供することができる。キューの排他制御を考慮し、NVMeの特徴である多くのキューを利用した高性能化を図る技術として特許文献１が挙げられる。
【０００４】
特許文献１には、一つの記憶デバイスに対してプロセッサ数分のキュー群を生成することで、処理の高速化を図る技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開２０１７／１５８７９９号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
NVMeドライブを管理するキューは規格上64K個作成可能であるが、実際にドライブベンダーから提供されているキューの数は、128本程度である。特許文献１に記載された技術のように、一つの記憶デバイスに対してプロセッサ数分のキュー群を生成すると、キューが枯渇することが考えられる。
【０００７】
また、特許文献１では、どのプロセッサもNVMeドライブにPCI接続され、NVMeドライブのキューにアクセスすることが前提の技術であるが、複数のストレージ装置をネットワークで接続したマルチノードストレージシステムについては十分に考慮されていない。つまり、Software Defined Storage(SDS)、hyper converged infrastructure（HCI環境）のようなマルチノードストレージシステムでは、ドライブに対するアクセス要求を処理するプロセッサの数は、従来のストレージ装置と比較して飛躍的に増加する。このため、キューの数よりプロセッサの数が多くなる可能性があり、特許文献１を適用することができなくなる。
【０００８】
また、NVMeのキューはPCI接続されているプロセッサのみが操作できるため、マルチノードストレージシステムのようなネットワークに接続された他のストレージ装置のプロセッサからキューを操作することができない。そのため、I/O要求を受領したストレージ装置が、I/O要求のアクセス先となるデータを格納するドライブがPCI接続されている他のストレージ装置に、I/O要求を転送する必要がある。
【０００９】
つまり、転送元のストレージ装置と転送先のストレージ装置の間では、LUN等の論理アドレスを用いたI/O要求を転送する必要がある。そのため、転送元のストレージ装置でアクセス先のドライブを特定するために、LUN等の論理アドレスから実際のデータ格納先のドライブを特定するためのアドレス変換と、転送元のストレージ装置からI/O要求を受信した転送先のストレージ装置で、LUN等の論理アドレスから実際のドライブへのアドレス変換の、二つのアドレス変換が必要となる。
【００１０】
そこで、本発明の目的は、I/O処理するプロセッサの数が増えても、キューが枯渇することなく、I/O性能を向上させたマルチノードストレージシステム、及びマルチノードストレージシステムのキュー制御方法を提供することにある。
【００１１】
また、本発明の他の目的は、複数のストレージ装置がネットワークを介して接続されるマルチノードストレージシステムにおいて、I/O性能を向上させたマルチノードストレージシステム、及びマルチノードストレージシステムのキュー制御方法を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明のマルチノードストレージシステムの一態様は、計算機に論理的な記憶領域としてボリュームを提供し、計算機からI/O要求を処理するコントローラを有するノードを複数備えたマルチノードストレージシステムであって、マルチノードストレージシステムは、ノードのコントローラの何れかにPCI接続される複数のNVMeドライブと、複数のノードのコントローラを相互に接続するスイッチとを備え、コントローラは、計算機からのI/O要求を処理する複数のプロセッサと、メモリを有し、メモリには、複数のNVMeドライブ毎に、マルチノードストレージシステムを構成する複数のコントローラのプロセッサ数の仮想キューと、複数のNVMeドライブの何れかに対しコマンドを格納する、前記仮想キューの数よりも少ない、実キューと、を有する。
【発明の効果】
【００１３】
本発明によれば、I/O処理を行うプロセッサの数が増えても、NVMeのキューの排他制御によるI/O処理性能の低下を防止することができる。
【００１４】
また、マルチノードストレージシステム環境において、I/O処理性能を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】システム構成図である。
【図２】システムブロック図である。
【図３】代表MPによる仮想キューVSQを介したSQ(要求)と制御を説明する図である。
【図４】代表MPによる仮想キューVCQを介したCQ(応答)制御を説明する図である。
【図５】リード時の動作（ストレート）を説明する図である。
【図６】リード時の動作(クロス)を説明する図である。
【図７】キャッシュミス時(ストレート)のリードシーケンスを示す図である。
【図８】キャッシュミス時(クロス)のリードシーケンスを示す図である。
【図９】IO要求受領時のVSQ格納処理フローを示す図である。
【図１０】代表MPによるVSQ刈取りとSQ(要求)格納処理フローを示す図である。
【図１１】代表MPによるCQ(応答)刈取りとVCQ格納(クロス間)処理フローを示す図である。
【図１２】VCQ刈取りと応答処理フローを示す図である。
【図１３】キュー管理テーブルを示す図である。
【図１４】ストレージ構成テーブルを示す図である。
【発明を実施するための形態】
【００１６】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１７】
以下の説明では、［AAAテーブル］の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、［AAAテーブル］を［AAA情報］とすることができる。
【００１８】
また、以下の説明では、［MP］は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、CPU（Central  Processing  Unit）である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１９】
また、以下の説明では、［プログラム］を動作の主体として処理を説明する場合があるが、プログラムは、MP（例えばＣＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）等を用いながら行うため、実際の処理の主体はMPである。従って、プログラムを動作の主体として説明された処理は、プロセッサを含む装置が行う処理としてもよい。また、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、計算機が読み取り可能な記憶メディアであってもよい。
【００２０】
＜概要＞
本技術は、Software Defined Storage(SDS)、hyper converged infrastructure （HCI環境）のようなマルチノードストレージシステム環境では、プロセッサ（MP）数が増加するため、NVMeドライブを制御するキューの数（本数）より、MPの数の方が多くなることが想定される。
【００２１】
その場合、1本のキューを複数のMPで共有することとなり、MP間でキューの操作の排他制御が必要となる。この排他制御により、I/O処理性能が低下する可能性がある。
【００２２】
また、NVMeドライブのキュー（SQ、CQ）は、NVMeドライブとPCIにより物理的に接続されているMPからのみ操作が可能である。そのため、複数のストレージ装置がネットワークを介して接続されるSDSやHCIのようなマルチノードストレージシステムでは、ネットワークで接続された他のストレージ装置からNVMeドライブへアクセスするためには、I/Oに含まれるアドレス情報の変換処理が必要となる。つまり、どのストレージ装置にI/Oを転送すべきか、I/Oに含まれるアドレス情報（例えば、LUN）からアクセスすべきNVMeドライブを特定するために、アドレス情報の変換処理が必要となる。
【００２３】
しかし、近年のストレージ装置は、多くの仮想的なアドレスレイヤによって管理されているため、I/Oに含まれるアクセス先を特定するLUN等から実際にデータが格納されているドライブへの変換処理を全てのI/O要求に対して行うと、多くの処理を要する。
【００２４】
全てのI/O要求に対し、アドレス変換を行うとなると処理性能が低下する恐れがある。
【００２５】
本技術は、これら、マルチノードストレージ環境において、NVMeドライブに設けられるキュー（SQ、CQ）とは別に、各MPに対応する仮想的なキュー（VSQ、VCQ）を設けることにより、キューの排他制御を不要とし、I/O処理性能を向上させることができる。
【００２６】
また、複数のストレージ装置がネットワークを介して接続されるマルチノードストレージシステムにおいて、キャッシュミスをした場合のみ、アクセス先となるNVMeドライブが接続されたストレージ装置にコマンドを転送（クロス転送）するため、I/O処理性能の向上させることができる。
【００２７】
＜用語の説明＞
NVMe(Non-Volatile Memory Express)：PCI Expressを通じて不揮発性ストレージメディア（SSD）を接続するための論理デバイスインタフェース規格。
SQ(Submission Queue)：NVMeドライブに対しコマンドを格納するためのキュー。
CQ(Completion Queue): NVMeドライブからの応答を格納するためのキュー。SQとCQはそれぞれ一本ずつでペアを構成する。
本明細書では、SQとCQを実キューと呼ぶ。
【００２８】
VSQ(Virtual Submission Queue)：MP毎に割り当てられた仮想的なSQ。
VCQ(Virtual Completion Queue): MP毎に割り当てられた仮想的なCQ。
本明細書では、VSQとVCQを仮想キューと呼ぶ。
【００２９】
ISW(Intelligent System Switch)：ストレージモジュールのコントローラ（CTL）を接続するためのスイッチ。
DKB：CTLとNVMeドライブを接続するためのボード。
【００３０】
MP番号：ストレージシステム内でMPを特定するための識別子。
使用VSQ/VCQ番号：MPに対して一意に割り振られるVSQ/VCQの番号。
使用SQ/CQ番号：実際にNVMeドライブとのコマンドの受け渡しを行う際に使用するSQ/CQの番号。
【００３１】
VSQ用producer：VSQにどこまでコマンドを格納したかを管理するためのインデックス。
VSQ用Consumer：VSQに格納されたコマンドをどこまで刈り取ったか管理するためのインデックス。
【００３２】
VCQ用producer：VCQにどこまでコマンドを格納したかを管理するためのインデックス。
VCQ用Consumer：VCQに格納されたコマンドをどこまで刈り取ったか管理するためのインデックス。
【００３３】
代表フラグ：ポーリング処理でVSQからSQ（またはCQからVCQ）に対して、代表して要求を格納するMPであることを管理するための情報。
【００３４】
＜システム構成＞
まず、本発明の一実施形態に係るマルチノードストレージシステムについて説明する。
【００３５】
図１は、一実施形態に係るシステム構成図である。
複数のモジュール102a、102b、103cは、インテリジェントシステムスイッチ（ISW）101を介して、相互に接続されている。一つのモジュール102には、二つのノード103が収容され、各ノード103には、二つのコントローラ104が収容されている。各コントローラ104は、ISW101を介して、同一のノード103の他のコントローラ、同一のモジュールの他のノードのコントローラ、或いは、他のモジュールのコントローラと接続される構成となる。
【００３６】
各コントローラは、複数のNVMeドライブ107と接続するためのボードDKB105に接続されている。複数のNVMeドライブ107は、NVMeドライブボックス106に収容され、一つ、または複数のNVMeドライブボックス106が各ノード103に接続され、一つのモジュール102を構成している。各コントローラ104は、サーバ等（図示せず）の計算機とネットワークを介して接続され、計算機からI/O要求を処理する。以下、本明細書においては、NVMeドライブを、単にドライブと略す場合がある。
【００３７】
モジュール102には、１つ以上のNVMeドライブボックス106が内蔵もしくは外部接続されていても良い。各ノード103は、ストレージ装置に相当し、１つ以上の論理的な記憶領域としてボリュームを計算機に対して提供している。
【００３８】
ボリュームは、複数の論理ブロックから構成される。本実施形態での論理ブロックサイズは、例えば、書き込み時に論理ブロックに対して物理ブロックを割り当てるThin  Provisioning（容量仮想化）の管理単位と同じサイズとしている。なお、論理ブロックは、Thin  Provisioningの管理単位と同じサイズでなくてもよい。ストレージデバイスであるNVMeドライブ107の記憶領域に基づいて複数の物理ブロックが形成されている。ボリュームの論理ブロックには、物理ブロックが割り当てられる。
【００３９】
図１に示すマルチノードストレージシステムでは、計算機とモジュール102とが別に構成されている例を示しているが、計算機とモジュール102或いはノード103とを一つのベアメタル（物理計算機）を用いて構成してもよい。例えば、計算機とノード103とのそれぞれを同一の計算機上で動作するVM（Virtual  Machine）と呼ばれる仮想計算機としてもよく、コンテナ仮想化により構成されたコンテナとしてもよい。
【００４０】
図１には、一つのモジュールが二つのノードで構成される例を示したが、一つのモジュールに含まれるノードの数は、３以上であっても良い。また、図１には各ノードに二つのコントローラが含まれる例を示しているが、ノードに含まれるコントローラの数は、３以上であっても良い。
【００４１】
次に、ノード（ストレージ装置）102のハードウェア構成について説明する。
【００４２】
図２は、一実施形態に係るノード102（ストレージ装置）のシステムブロック図である。
ストレージ装置102は、サーバ等の計算機からのI/O要求を処理し、NVMeドライブ107にデータを格納、或いは、NVMeドライブ107からデータを読み出し、計算機に送る処理を行うコントローラ104と、1以上のNVMeドライブ107とを有する。図２では、NVMeドライブボックスと、コントローラの一つを省略している。
【００４３】
コントローラ104は、サーバ等の計算機201と接続する上位I/F202と、他のノードのコントローラとISW101を介してNVMeで接続するコントローラ間I/F203と、複数のプロセッサ（MP）205と、NVMeドライブ107に接続するための下位I/F206、メモリ204を有する。コントローラ間I/F203は、コントローラを同一のノード103の他のコントローラ、同一のモジュールの他のノードのコントローラ、或いは、他のモジュールのコントローラと接続する。
【００４４】
メモリ204には、ノードが計算機に提供するボリュームとNVMeドライブとの関係を示すストレージ構成テーブル2041、キュー管理テーブル2042、コントローラ実行する各種処理を実現するMP処理プログラム2045を格納し、VSQやVCQを設定するVSQ/VCQ領域2043、SQやCQを設定するSQ/CQ領域2044、I/Oに関するデータを一時的に記憶するキャッシュメモリとなるキャッシュメモリ領域2046を有する。
【００４５】
図１４に、メモリ204に格納されるストレージ構成テーブル2041を示す。ストレージ構成テーブル2041には、例えば、ノードが計算機に提供するボリュームを識別するための情報であるLUN1401に対し、実際にデータが格納される、或いは格納されているNVMeドライブの番号1402を対応させて管理している。
【００４６】
図１４では、LUNとドライブ番号が直接対応付けられているように記載されているが、実際には、LUNとドライブ番号との間に、仮想ボリュームや各ドライブの容量を管理するプール等、複数のアドレスを管理するレイヤがある場合がある。本実施の形態では、これら中間に存在する各種アドレス管理レイヤの説明を省略して、サーバ等の計算機がI/O要求で指定するLUN番号と、LUN番号を含むI/O要求を実行する場合に利用される物理的なNVMeドライブとの対応関係を必要最低限の情報としてストレージ構成テーブルを説明する。
【００４７】
そのため、LUNに対応してストレージ構成テーブルに示されるNVMeドライブ番号は、例えば、RAIDグループを構成するドライブと理解することもできる。また、ストレージ構成テーブルとして、複数種のRAID、EC（Eraser Coding）のデータ保護技術、二つのLUNでペアを組む、ミラーリング、RC(Remote Copy)等の、LUとドライブとの関係を管理する情報を用いることができる。
【００４８】
MP（Main Processor）205、メモリ204、上記I/F202、コントローラ間I/F203、下記I/F206は、例えば内部バスや外部バスで接続されている。
【００４９】
コントローラは、メモリに格納されたプログラムを、MP205によって実行されることで、定められた処理を、メモリに格納された各種情報を参照しながら行うため、実際の処理の主体はMPであるが、説明上、プログラムを動作の主体として説明する場合がある。その場合、各処理をMPが行う。また、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。
【００５０】
次に、図３を用いて、ノード102で実行される代表MPによる仮想キューVSQを介したSQ(要求)と制御を説明する。
ノード102は、複数のMP205、メモリ204、PCI-SW302を有し、NVMeドライブ107にアクセスする。PCI−SW302は、図２の下記I/F206とNVMeドライブ107の間に存在する。
【００５１】
メモリ204には仮想的なキューであるVSQとNVMeドライブに対しコマンドを格納するためのキューであるSQの領域が設けられ、各MP205に対して、仮想的なキューであるVCQ3011が割り当てられ、NVMeに従って動作する。例えば、MP番号［0］のMP205aにはVSQ番号［0］のVSQ3011a、MP番号［x］のMP205xにはVSQ番号［x］のVSQ3011cが割り当てられている。
【００５２】
各VSQに、NVMeドライブに対しコマンドを格納するためのキューSQ3012が対応付けられている。例えば、VSQ3011aとVSQ3011cは、SQ番号［0］のSQ3012aが対応している。
このSQ3012に格納されたコマンドは、NVMeドライブ107が刈り取って処理を行う。VSQとSQとの対応は、図１３に示すドライブ毎に管理されるキュー管理テーブルによって管理されている。
【００５３】
図１３は、キュー管理テーブルを示す図である。図１３に示すキュー管理テーブル2042はNVMeドライブ毎の情報であり、複数のNVMeドライブを有するマルチノードストレージシステムにおいては、NVMeドライブ毎に複数のキュー管理テーブルを管理する。図１３では、NVMeドライブの内、NVMeドライブ番号［ZZ］用のキュー管理テーブルを示している。
【００５４】
各MPに対してストレージシステムを通して割り振ったMP番号1301、各MPが使用するVSQ/VCQ番号1302、MPが使用する使用SQ/CQ番号1303、NVMeドライブ番号［ZZ］がPCI接続されているコントローラの情報であるNVMe接続先CTL番号1304、VSQにどこまで格納したか管理するためのインデックスであるVSQ用producer1305、VSQをどこまで刈り取ったか管理するためのインデックスであるVSQ用Consumer1306、VCQにどこまで格納したか管理するためのインデックスであるVCQ用producer1307、VCQをどこまで刈り取ったか管理するためのインデックスであるVCQ用Consumer1308、ポーリング処理でVSQからSQへ、CQからVCQに対して、要求を格納する代表MPであるかどうか示す情報である代表フラグ1309が対応して管理されている。
【００５５】
例えば、MP番号［0］に対し、VSQ/VCQ番号は［0］、SQ/CQ番号1303は［0］、NVMeドライブ接続先コントローラの番号1304は［0］、VSQ用producer1305は［10］、VSQ用Consumer1306は［8］、VCQ用producer1307は［6］、VCQ用Consumer1308は［4］、代表フラグ1309が［ON］が対応して管理されている。ここで、NVMe接続先コントローラ番号1304は、キュー管理テーブル2402で管理されるNVMeドライブが、コントローラに対して直接PCI接続されている場合には［0］、直接PCI接続されていない他のコントローラに接続されている場合には［1］が格納される。
【００５６】
コントローラ104がI/O要求を受領すると、I/O要求に含まれるLUN等の仮想的なアドレス情報から図１４のストレージ構成テーブル1402を参照し、アクセス先のデータを格納するNVMeドライブを特定し、特定されたNVMeドライブの情報から、NVMeドライブ毎に管理されているキュー管理テーブル2402を参照することができる。この動作は、MP処理プログラム2045の内容を、MP205が処理することで実現する。
【００５７】
このように、MP毎に割り当てられた仮想的なSQであるVSQを設けることで、MP間の排他制御を不要とし、MP数が多いマルチノードストレージ環境において、I/O処理性能を向上させることができる。
【００５８】
図４は、代表MPによる仮想キューVCQを介したCQ(応答)制御を説明する図である。
メモリ204には、仮想的なキューであるVCQとNVMeドライブからの応答を格納するためのキューであるCQの領域が設けられ、各MP205に対して一つの仮想的なキューであるVCQ4011が割り当てられている。例えば、MP番号［0］のMP205aには、VCQ番号［0］のVCP4011aが割り当てられている。
【００５９】
各VCQに対して、NVMeドライブからの応答を、NVMeに従って格納するためのキューCQ4012が対応付けられている。このCQ4012に格納されたコマンドは、代表MP205が刈り取って処理を行う。VCQとCQとの対応は、図１３に示すドライブ毎に管理されるキュー管理テーブルによって管理されている。
【００６０】
このように、MP毎に割り当てられた仮想的なCQであるVCQを設けることで、MP間の排他制御を不要とし、MP数が多いマルチノードストレージ環境において、I/O処理性能を向上させることができる。
【００６１】
＜ストレート転送動作＞
図５は、リード時の動作（ストレート転送）を説明する図である。ここで、ストレート転送とは、I/Oを処理するMPとI/Oのアクセス対象となるNVMeドライブ107がPCI接続されている場合をいう。
【００６２】
尚、VSQとVCQのペアは、マルチノードストレージシステムのコントローラに収容されるMPの数だけメモリ204に用意する。SQとCQのペアはNVMeドライブ107がPCI接続されているコントローラ104のメモリ204に用意する。ちなみに、現在入手可能なNVMeドライブ107では、SQとCQのペアは一つのNVMeドライブ107当たり、NVMeドライブ107がサポートしているキューの本数の数だけ作成可能である。
【００６３】
図５の点線は、NVMeに従ったデータやコマンドの動きを示す。
【００６４】
まず、コントローラ1(104)のMP［00］205aは、自身に割り当てられているVSQ3011aに対し、I/O要求（リード要求）コマンドをNVMeに従って格納する（501）。MP［00］205aは、上位I/FからI/O要求を引き渡されI/Oを処理するMPである。
【００６５】
VSQに格納されたリードコマンドは、代表MPによって刈り取られ、SQに格納（エンキュー）される（502）。代表MPは、図１３に示す代表フラグが設定されているMPである。代表MPを決める処理は、後述する。
【００６６】
SQにエンキューされたリードコマンドは、NVMeドライブ107によって刈り取られ（503）、実行される。ドライブ107によってリードコマンドが実行され、読み出されたデータは、メモリのキャッシュメモリ領域2046に格納される（504）。NVMeドライブ107は、リード要求コマンドを実行したことを示す完了応答をCQ4012aに格納する（505）。
【００６７】
代表MPは、CQ4012aに格納された完了応答を、MP205a用のVCQ4011aにエンキューする（506）。MP205aは、VCQ4011aにエンキューされた完了応答を刈り取り（507）、キャッシュメモリ2046に格納されたデータを読み出す。
【００６８】
尚、図５はリードコマンドについて説明したが、管理用のコマンドであるAdminコマンドの場合も同様の動作となる。
【００６９】
＜クロス転送動作＞
図６は、リード時の動作(クロス)を説明する図である。クロス転送とは、リードコマンドの処理が異なるコントローラを跨ぐ動作であり、所謂他系への処理依頼動作をいう。そのため、マルチノードストレージシステムにおいては、クロス転送となる他系処理には、同一ノードの異なるコントローラの他、異なるモジュールのコントローラがI/O処理を行う場合も含まれる。
【００７０】
コントローラ2(104b)のMP205Cが計算機からI/O要求を受領すると、自身に割り当てられているVSQ3011（MP番号XX用）に、リードコマンドを格納する（601）。コントローラ104bの代表MPはVSPに格納されたリードコマンドを刈り取り、データを格納するNVMeドライブ107が接続されている他系コントローラ104aのVSQにクロス転送してエンキューする(602)。コントローラ104aの代表MPは、VSQに格納されたコマンドをSQにエンキューする(603)。
【００７１】
SQ3012に格納されたコマンドは、NVMeドライブ107によって刈り取られ（604）、実行される。NVMeドライブ107によってリードコマンドが実行され、読み出されたデータは、メモリのキャッシュメモリ領域2046に格納される（605）。NVMeドライブ107は、リード要求コマンドを実行したことを示す完了応答をCQに格納する（606）。
【００７２】
コントローラ１の代表MPは、CQに格納された完了応答を、MP用のVCQにエンキューする（607）。コントローラ２のVCQにクロス転送してエンキューする(608)。MP205cは、VCQにエンキューされた完了応答を刈り取り（609）、キャッシュメモリに格納されたデータを読み出す。
【００７３】
このように、マルチノードストレージシステムの全MPに対し、MP毎に割り当てられた仮想的なSQであるVSQを設けることで、MP間の排他制御を不要とし、MP数が多いマルチノードストレージ環境において、I/O処理性能を向上させることができる。
【００７４】
尚、図６はリードコマンドについて説明したが、管理用のコマンドであるAdminコマンドの場合も同様の動作となる。
【００７５】
このように、クロス転送の際には、転送先のストレージ装置の仮想キューに対して、ネットワークで接続されるストレージ装置間のLUN等の仮想アドレスを用いたI/O要求と比較し、転送先のストレージ装置でアドレス変換を行う必要がないため、I/O処理性能を向上させることができる。
【００７６】
＜ストレート転送シーケンス＞
図７は、ストレート転送の場合であって、キャッシュミス時のリードシーケンス図である。キャッシュミス判定により、キャッシュミスの場合、図５に示す動作と同様である。本図では、図１３の情報を用いながら、処理のシーケンスを説明する。
【００７７】
上位I/F202が計算機からリードコマンドを受領する(S701)。上位I/Fは、MP00にリードコマンドの受領を通知する（S702）。MP00はキャッシュメモリにリードコマンドで要求されているデータが自コントローラのキャッシュメモリ内にあるかヒット/ミス判定を行う(S703)。キャッシュヒットした場合、自コントローラのキャッシュメモリからデータを読み出し、計算機に応答する。
【００７８】
キャッシュヒットした場合、I/O要求に含まれるLUN等のアクセス先論理アドレス情報を、ドライブの特定やデータ格納位置を示す物理アドレス情報への変換を行うことなく、キャッシュメモリからデータを計算機に転送できるので、I/O要求毎にアドレス変換を行う必要がなく、I/O処理性能を向上させることができる。
【００７９】
キャッシュミスの場合(S704)、MP00は、リードコマンドに含まれるLUN等の仮想アドレス情報から、図１４のストレージ構成テーブルを参照して、データが格納されているNVMeドライブを算出(特定)する(S705)。
【００８０】
MP00は自身に割り当てられているVSQに対して、リードコマンドを格納する（S706）。この際、リードコマンドを受領したMP00は、図１３に示したキュー管理テーブルを参照することで、MP00に割り当てられているVSQ1302を取得することができる。尚、NVMeドライブ毎に管理されている図１３のキュー管理テーブルは、図１４のストレージ構成テーブルを参照して特定したNVMeドライブに基づいて、選択することができる。
【００８１】
アクセス先のNVMeドライブが図１４のストレージ構成テーブルによって特定されると、NVMeドライブ毎に管理されているキュー管理テーブルによって、MP毎にVSQ/VCQ、SQ/CQの対応、代表MPか否か、ドライブがPCI接続されているコントローラでI/Oが処理されるかが把握できるので、当該I/Oの処理がストレート転送かクロス転送か判断できる。
【００８２】
各MPは、キュー管理テーブル2042をポーリングし、自身が代表MPかを判断する。図１３を参照して説明すると、例えば、ポーリングしているMPのMP番号[0]であって、リードコマンドが、NVMeドライブZZをアクセス先とする場合、代表フラグ1309が設定[ON]であるため、代表MPとなる。同様に、ポーリングしているMPのMP番号[XX]の場合、代表フラグ1309は[OFF]であるため、MP番号[XX]のMPは代表MPとはならない。図７は、MP番号[01]が代表MPとなり、MP番号[00]が代表MPではなく、I/O処理をするMPである場合が示されている。
【００８３】
代表MPは、MP00用のVSQからコマンドを刈り取り（S707）、SQにエンキューする（S708）。
【００８４】
SQに格納されたコマンドは、アクセス先となるNVMeドライブ107によって、刈り取られ(S709)、コマンドが実行されて、データを読み出す（S710、S711）。読み出されたデータはキャッシュメモリに格納される（S712）と共に、CQに対して完了応答を格納する（S713）。
【００８５】
代表MPは、CQから完了応答を刈り取り(S714)、MP00用のVCQにエンキューする(S715)。MP00は、MP00用のVCQから完了応答を刈り取り(S716)、キャッシュメモリからリードデータを読み出し、上位I/Fに送信する（S718）。上位I/Fは計算機に対してリードデータを送信する（S719）。
【００８６】
このように、MP毎に割り当てられた仮想的なCQであるVCQを設けることで、MP間の排他制御を不要とし、MP数が多いマルチノードストレージ環境において、I/O処理性能を向上させることができる。
【００８７】
マルチノードストレージ環境において、I/O処理性能を向上させることができる。
【００８８】
また、キャッシュヒットした場合、I/O要求に含まれるLUN等のアクセス先論理アドレス情報を、ドライブの特定やデータ格納位置を示す物理アドレス情報への変換を行うことなく、キャッシュメモリからデータを計算機に転送できるので、I/O要求毎にアドレス変換を行う必要がなく、I/O処理性能を向上させることができる。
【００８９】
つまり、リード要求のデータを格納するNVMeドライブがPCI接続されていないコントローラのMP（I/O処理MP）が処理を受けても、I/O処理MPが収容されているコントローラのキャッシュメモリにデータがあり、キャッシュヒットした場合には、I/O要求に高速に応答することができる。この場合、I/O要求に含まれているLUN等の仮想アドレス情報を、ドライブ等を特定する物理アドレス情報に変換する必要がないため、I/O処理の高速化が図れる。さらに、不要なアドレス変換からMPを解放するので、MPのリソースを他の処理に有効に活用することができる。
【００９０】
＜クロス転送＞
図８は、キャッシュミス時(クロス)のリードシーケンスを示す図である。図８は、図６のクロスの動作にキャッシュヒット判定の説明も加えたシーケンス図である。本図では、図１３の情報を用いながら、処理のシーケンスを説明する。
【００９１】
上位I/F202が計算機からリードコマンドを受領する(S801)。上位I/Fは、MPXXにリードコマンドの受領を通知する（S802）。通知を受けたMPXXがI/O処理を行うMPとなる。MPXXはキャッシュメモリにリードコマンドで要求されているデータが自コントローラのキャッシュメモリ内にあるかヒット/ミス判定を行う(S803)。キャッシュヒットした場合、自コントローラのキャッシュメモリからデータを読み出し、計算機に応答する。
【００９２】
キャッシュヒットした場合、I/O要求に含まれるLUN等のアクセス先論理アドレス情報を、ドライブの特定やデータ格納位置を示す物理アドレス情報への変換を行うことなく、キャッシュメモリからデータを計算機に転送できるので、I/O要求毎にアドレス変換を行う必要がなく、I/O処理性能を向上させることができる。
【００９３】
キャッシュミスの場合(S804)、MPXXは、リードコマンドに含まれるLUN等の仮想アドレス情報から、図１４のストレージ構成テーブルを参照して、データが格納されているNVMeドライブを算出(特定)する(S805)。
【００９４】
MPXXは自身に割り当てられているVSQに対して、リードコマンドを格納する（S806）。この際、リードコマンドを受領したMPXXは、図１３に示したキュー管理テーブルを参照することで、MPXXに割り当てられているVSQを取得することができる。尚、NVMeドライブ毎に管理されている図１３のキュー管理テーブルは、図１４のストレージ構成テーブルを参照して特定したNVMeドライブに基づいて、選択することができる。
【００９５】
アクセス先のNVMeドライブが図１４のストレージ構成テーブルによって特定されると、NVMeドライブ毎に管理されているキュー管理テーブルによって、MP毎にVSQ/VCQ、SQ/CQの対応、代表MPか否か、ドライブがPCI接続されているコントローラでI/Oが処理されるかが特定されるので、当該I/Oの処理がストレート転送かクロス転送か判断できる。
【００９６】
クロス転送であった場合、MPXXは、図１３のキュー管理テーブルに従い、他のコントローラ（CTL1）の使用VSQに対してコマンドを格納する(S807)。他のコントローラ１の代表MPは、使用VSQからコマンドを刈り取り（S808）、SQにエンキューする（S809）。
【００９７】
SQに格納されたコマンドは、アクセス先となるNVMeドライブ107によって、刈り取られ、コマンドが実行されて、データを読み出す（S811、S812）。
【００９８】
読み出されたデータはコントローラ1のキャッシュメモリに格納される（S813）と共に、コントローラ2のキャッシュメモリに対してDMA転送される（S814)。また、CQに対して完了応答を格納する（S815）。
【００９９】
コントローラ１の代表MPは、CQから完了応答を刈り取り(S816)、コントローラ1のVCQとコントローラ2のMPXX用のVCQにエンキューする(S817、S818)。MPXXは、MPXX用のVCQから完了応答を刈り取り(S819)、キャッシュメモリからリードデータを読み出し、上位I/Fに送信する（S821）。上位I/Fは計算機に対してリードデータを送信する（S822）。
【０１００】
このように、マルチノードストレージ環境において、NVMeドライブに設けられるキュー（SQ、CQ）とは別に、各MPに対応する仮想的なキュー（VSQ、VCQ）を設けることにより、キューの排他制御を不要とし、I/O処理性能を向上させることができる。
【０１０１】
また、複数のストレージ装置がネットワークを介して接続されるマルチノードストレージシステムにおいて、キャッシュミスをした場合のみ、アクセス先となるNVMeドライブが接続されたストレージ装置にコマンドを転送（クロス転送）するため、I/O処理性能の向上させることができる。
【０１０２】
＜処理フロー＞
図９は、IO要求受領時のVSQ格納処理フローを示す図である。この処理フローは、MPがMP処理プログラム2045を実行することで実現される。I/O要求を受けると、図１４のストレージ構成テーブルを参照して、I/O要求に含まれるLUN等からアクセス先ドライブを特定する（S901）。
【０１０３】
アクセス先ドライブが特定されると、図１４のキュー管理テーブルを読み出し、I/O要求を受けたMP(自MP)の番号から対応するVSPの番号を取得する（S902）。
【０１０４】
MPは、取得した番号のVSPにコマンドを格納し(S903)、図１４のキュー管理テーブルを参照(1304)して、アクセス先ドライブ（NVMeドライブ）が、MPが搭載されているコントローラ（自CTL）に接続されているかを判定する(S904)。判定結果、自CTLにドライブが接続されていない場合、ドライブが接続されているコントローラにコマンドを転送する(S905)。なお、転送先は、ドライブが接続されているドライブのVSPを図１３のキュー管理テーブルの使用VSQ1302に基づいて取得する。最後に、VSQのProducerの値を更新する(S906)。
【０１０５】
図１０は、代表MPによるVSQ刈取りとSQ(要求)格納処理フローを示す図である。
各MPは、VSQからポーリング処理を開始する（S1002）。VSQからSQ（またはCQからVCQ）に対して、代表して要求を格納するMPであることを管理するための情報である図１３のキュー管理テーブルの代表フラグ1309をポーリングし、自身が代表MPかどうかを判断する(S1003)。
【０１０６】
MPは自身が代表MPでないと判断した場合は処理を終了し、自身が代表MPと判断した場合はステップS1004に進む。キュー管理テーブルの使用SQ番号からVSQ番号を算出する（S1004）。既にVSQに要求があるか（コマンドが格納されているか）を判断し(S1005)、あればステップS1006に、なければステップS1007に進む。
【０１０７】
VSPにコマンドが格納されている場合、コマンドをSQに退避し、Consumerの値を更新する(S1006)。ステップS1007では、次のVSQを確認し(S1007)、全VSPが確認されていたら処理を終了し、未確認のVSPがあればステップS1004に戻り処理を継続する（S1008）。
【０１０８】
図１１は、代表MPによるCQ(応答)刈取りとVCQ格納(クロス間)処理フローを示す図である。図１０のステップS1002同様、MPはポーリング処理を開始する(S1102)。ポーリング処理の結果自身が代表MPの場合、ステップS1104に進み、代表MPでなかった場合には、処理を終了する。
【０１０９】
ステップS1104では、使用CQに応答があるかを判断し(S1104)、ない場合には処理を終了し、ある場合には、CQの応答をキュー管理テーブルに従ってVCQに退避する（S1105）。
【０１１０】
操作VCQは、代表MPが収容されているコントローラか判断する（S1106）。異なるコントローラの場合、使用VCQが収容されている他のコントローラに対し、要求（応答）を転送する(S1107)。最後に、Producerの値を更新して（S1108）、処理を終了する。
【０１１１】
図１２は、VCQ刈取りと応答処理フローを示す図である。I/O処理を行うMPは、自身のMP番号から図１３のキュー管理テーブルを参照して、VCQ番号を算出する（S1202）。I/O処理を行うMPは、算出されたVCQから要求（応答）を刈り取り（S1203）、Consumerの値を更新して（S1204）、処理を終了する。
【０１１２】
本実施の形態によれば、マルチノードストレージシステムの全MPに対し、NMP毎に割り当てられた仮想的なSQであるVSQを設けることで、MP間の排他制御を不要とし、MP数が多いマルチノードストレージ環境において、I/O処理性能を向上させることができる。
【０１１３】
また、キャッシュヒットした場合、I/O要求に含まれるLUN等のアクセス先論理アドレス情報を、ドライブの特定やデータ格納位置を示す物理アドレス情報への変換を行うことなく、キャッシュメモリからデータを計算機に転送できるので、I/O要求毎にアドレス変換を行う必要がなく、I/O処理性能を向上させることができる。
【０１１４】
つまり、リード要求のデータを格納するNVMeドライブがPCI接続されていないコントローラのMP（I/O処理MP）が処理を受けても、I/O処理MPが収容されているコントローラのキャッシュメモリにデータがあり、キャッシュヒットした場合には、I/O要求に高速に応答することができる。この場合、I/O要求に含まれているLUN等の仮想アドレス情報を、ドライブ等を特定する物理アドレス情報に変換する必要がないため、I/O処理の高速化が図れる。さらに、不要なアドレス変換からMPを解放するので、MPのリソースを他の処理に有効に活用することができる。
【０１１５】
また、キャッシュヒット判定により、マルチノードストレージシステムのクロス転送を減らすことができ、ISW等で構成されるネットワークの帯域を有効活用することができる。
マンドを転送（クロス転送）するため、I/O処理性能の向上させることができる。
【０１１６】
さらに、クロス転送の際には、転送先のストレージ装置の仮想キューに対して、NVMeでコマンドを転送するため、ネットワークで接続されるストレージ装置間のLUN等の仮想アドレスを用いたI/O要求と比較し、転送先のストレージ装置でアドレス変換を行う必要がないため、I/O処理性能を向上させることができる。
【符号の説明】
【０１１７】
１０１：ISW、１０２：モジュール、１０３：ノード（ストレージ装置）、１０４：コントローラ、１０６：NVMeドライブボックス、１０７：NVMeドライブ、２０１：サーバ(計算機)、２０２：上位I/F、コントローラ間I/F、２０４：メモリ、２０５：ＭＰ、２０６：下位Ｉ／Ｆ。
【図１】
2020091554.tif 000003
【図２】
2020091554.tif 000004
【図３】
2020091554.tif 000005
【図４】
2020091554.tif 000006
【図５】
2020091554.tif 000007
【図６】
2020091554.tif 000008
【図７】
2020091554.tif 000009
【図８】
2020091554.tif 000010
【図９】
2020091554.tif 000011
【図１０】
2020091554.tif 000012
【図１１】
2020091554.tif 000013
【図１２】
2020091554.tif 000014
【図１３】
2020091554.tif 000015
【図１４】
2020091554.tif 000016