(57)【要約】      （修正有）【課題】フラッシュメモリデバイスのＩ／Ｏ性能を向上させる。【解決手段】計算機システムにおいて、複数のサーバ計算機が仮想化されたnamespaceを共有する。ストレージコントローラは、第１サーバ計算機及び第２サーバ計算機により共有される仮想記憶領域を提供する。第１サーバ計算機及び第２サーバ計算機の夫々であるサーバ計算機は、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを格納する。プログラムは、仮想記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することによりPCI-Expressを介して仮想記憶領域にアクセスすることを、サーバ計算機に実行させる。ストレージコントローラは、アクセスに基づいて、不揮発メモリデバイス内の記憶領域を仮想記憶領域に割り当てる。【選択図】図１
2018101440.tif 000002
【特許請求の範囲】
【請求項１】
第１サーバ計算機と、
第２サーバ計算機と、
不揮発メモリデバイスと、
前記第１サーバ計算機及び前記第２サーバ計算機にPCI-Expressを介して接続され、前記不揮発メモリデバイスに接続されるストレージコントローラと、
を含み、
前記ストレージコントローラは、前記第１サーバ計算機及び前記第２サーバ計算機により共有される仮想記憶領域を提供し、
前記第１サーバ計算機及び前記第２サーバ計算機の夫々であるサーバ計算機は、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを格納し、
前記プログラムは、前記仮想記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することによりPCI-Expressを介して前記仮想記憶領域にアクセスすることを、前記サーバ計算機に実行させ、
前記ストレージコントローラは、前記アクセスに基づいて、前記不揮発メモリデバイス内の記憶領域を前記仮想記憶領域に割り当てる、
計算機システム。
【請求項２】
前記ストレージコントローラは、前記仮想記憶領域を作成し、前記不揮発メモリデバイスに基づくプールを仮想記憶領域に関連付け、前記仮想記憶領域へ書き込まれるデータの増加に応じて、前記プールの一部を前記仮想記憶領域に割り当て、
前記サーバ計算機が前記namespaceを指定するIdentifyコマンドを発行した場合、前記ストレージコントローラは、前記仮想記憶領域の容量をLBAサイズで除した値を示す第１フィールドと、前記プールの容量をLBAサイズで除した値を示す第２フィールドと、前記プールから前記仮想記憶領域に割り当てられている記憶領域のサイズをLBAサイズで除した値を示す第３フィールドとを含む応答を発行する、
請求項１に記載の計算機システム。
【請求項３】
前記ストレージコントローラは、前記仮想記憶領域の作成の指示を受信した場合、前記仮想記憶領域及び前記プールを作成し、前記プールを前記仮想記憶領域に関連付ける、
請求項２に記載の計算機システム。
【請求項４】
前記ストレージコントローラは、前記プールの容量が前記仮想記憶領域の容量より大きい場合、前記応答内の前記第２フィールドに、前記第１フィールドの値を設定する、
請求項２に記載の計算機システム。
【請求項５】
前記サーバ計算機にPCI-Expressを介して接続されると共に、前記ストレージコントローラにPCI-Expressを介して接続されることにより、前記サーバ計算機と前記ストレージコントローラの間に介在するインターフェースデバイスを更に含み、
前記ストレージコントローラは、SCSIリクエストを解釈し前記SCSIリクエストに基づいて前記不揮発メモリデバイスにアクセスすることにより、前記仮想記憶領域を提供し、
前記インターフェースデバイスは、
前記第１サーバ計算機に含まれるRoot  Complex（RC）である第１サーバ側RCに対して第１Endpoint（EP）を提供するロジックと、
前記第２サーバ計算機に含まれるRCである第２サーバ側RCに対して第２EPを提供するロジックと、
前記ストレージコントローラに含まれるRCであるストレージ側RCに対して第３EPを提供するロジックと、
前記サーバ計算機により発行されたNVM-Expressコマンドを解釈し、前記解釈されたNVM-Expressコマンドに基づくSCSIリクエストを前記ストレージコントローラへ発行するロジックと、
前記発行されたSCSIリクエストに応じて前記ストレージコントローラにより発行されたSCSI応答を解釈し、前記SCSI応答に基づくNVMe応答を前記サーバ計算機へ発行するロジックと、
を含む、
請求項１に記載の計算機システム。
【請求項６】
前記ストレージコントローラは、前記仮想記憶領域である仮想ボリューム及び仮想ストレージポートを論理ユニットに関連付け、前記論理ユニットを前記namespaceに割り当てる、
請求項５に記載の計算機システム。
【請求項７】
前記プログラムは、SCSIリクエストを発行することを、前記サーバ計算機に実行させ、
前記インターフェースデバイスは更に、前記サーバ計算機により発行されたSCSIリクエストを解釈し前記サーバ計算機により発行されたSCSIリクエストに基づくSCSIリクエストを前記ストレージコントローラへ発行するロジックを含む、
請求項５に記載の計算機システム。
【請求項８】
前記不揮発メモリデバイスを含み、互いに特性が異なる複数の記憶デバイスを備え、
前記ストレージコントローラは、前記複数の記憶デバイスに接続され、前記アクセスに基づいて、前記仮想記憶領域へ書き込まれるデータを前記複数の記憶デバイスの何れかに配置する、
請求項１に記載の計算機システム。
【請求項９】
第１サーバ計算機と、
第２サーバ計算機と、
互いに特性が異なる複数の記憶デバイスと、
前記第１サーバ計算機及び前記第２サーバ計算機にPCI-Expressを介して接続され、前記複数の記憶デバイスに接続されるストレージコントローラと、
を含み、
前記複数の記憶デバイスの一つは不揮発メモリデバイスであり、
前記ストレージコントローラは、前記第１サーバ計算機及び前記第２サーバ計算機により共有される共有記憶領域を提供し、
前記第１サーバ計算機及び前記第２サーバ計算機の夫々であるサーバ計算機は、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを格納し、
前記プログラムは、前記共有記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することによりPCI-Expressを介して前記共有記憶領域にアクセスすることを、前記サーバ計算機に実行させ、
前記ストレージコントローラは、前記アクセスに基づいて、前記共有記憶領域へ書き込まれるデータを前記複数の記憶デバイスの何れかに配置する、
計算機システム。
【請求項１０】
第１サーバ計算機と、
第２サーバ計算機と、
互いに特性が異なる複数の記憶デバイスと、
前記第１サーバ計算機及び前記第２サーバ計算機にPCI-Expressを介して接続され、前記複数の記憶デバイスに接続されるストレージコントローラと、
を含み、
前記複数の記憶デバイスの一つは不揮発メモリデバイスであり、
前記ストレージコントローラは、前記第１サーバ計算機及び前記第２サーバ計算機により共有される第１共有記憶領域及び第２共有記憶領域を提供し、
前記第１サーバ計算機及び前記第２サーバ計算機の夫々であるサーバ計算機は、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行する第１プログラムと、前記NVM-Express規格と異なる特定規格に準拠するコマンドである特定規格コマンドを発行する第２プログラムとを格納し、
前記第１プログラムは、前記第１共有記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することによりPCI-Expressを介して前記第１共有記憶領域にアクセスすることを、前記サーバ計算機に実行させ、
前記第２プログラムは、前記第２共有記憶領域を指定する特定規格コマンドを発行することによりPCI-Expressを介して前記第２共有記憶領域にアクセスすることを、前記サーバ計算機に実行させ、
前記ストレージコントローラは、前記NVMeコマンドによるアクセスに基づいて、前記第１共有記憶領域へ書き込まれるデータを前記不揮発メモリデバイスへ配置し、
前記ストレージコントローラは、前記特定規格コマンドによるアクセスに基づいて、前記第２共有記憶領域へ書き込まれるデータを前記複数の記憶デバイスの何れかへ配置する、
計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発メモリデバイスを含む計算機システムに関する。
【背景技術】
【０００２】
フラッシュメモリデバイス（以下フラッシュと呼ぶ）はHDD（Hard  Disk  Drive）と比較して高いI/O（Input/Output）性能を有する。しかし、その性能を発揮させようとした場合、従来のSCSI（Small  Computer  System  Interface）は、サーバで実行されるOS（Operating  System）、デバイスドライバ等のプログラム処理の効率が悪いことから、フラッシュメモリデバイスのI/O性能を発揮させることは容易ではない。非特許文献１記載のNVM-Express（Non-Volatile  Memory  Express：以後NVMeと省略）はそのような問題を解決するための以下を規定した規格である。
This specification defines a streamlined set of registers whose functionality includes:
・ Indication of controller capabilities
・ Status for controller failures (command status is processed via CQ directly)
・ Admin Queue configuration (I/O Queue configuration processed via Admin commands)
・ Doorbell registers for scalable number of Submission and Completion Queues
【０００３】
NVMeは以下をキーポイントに持つ。
・ Does not require uncacheable / MMIO register reads in the command submission or completion path.
・ A maximum of one MMIO register write is necessary in the command submission path.
・ Support for up to 65,535 I/O queues, with each I/O queue supporting up to 64K outstanding commands.
・ Priority associated with each I/O queue with well-defined arbitration mechanism.
・ All information to complete a 4KB read request is included in the 64B command itself, ensuring efficient small I/O operation.
・ Efficient and streamlined command set.
・ Support for MSI/MSI-X and interrupt aggregation.
・ Support for multiple namespaces.
・ Efficient support for I/O virtualization architectures like SR-IOV.
・ Robust error reporting and management capabilities.
・ Support for multi-path I/O and namespace sharing.
【０００４】
また、非特許文献１には複数のホストからnamespace（以後、NSと省略）を共有する概念が開示されている。
【０００５】
非特許文献２にはこのようなNVMeに準拠したコマンド（以後、NVMeコマンドと省略）を解釈するPCI-ExpressフラッシュメモリSSD（Solid  State  Drive）を用いることにより、サーバのI/O性能が向上することが開示されている（以後、PCI-ExpressをPCIeと省略）。
【０００６】
ストレージの利用効率を向上させる技術として容量仮想化（シンプロビジョニング）が知られている。容量仮想化は、サーバに対し仮想記憶領域の容量を実記憶領域の容量より大きく見せかけ、格納データ量に応じて仮想記憶領域に実記憶領域を割り当てる。
【０００７】
また、ストレージの性能／コスト比を向上させる技術として階層制御仮想化が知られている。階層制御仮想化により、アクセス頻度の高いデータが高速なストレージ階層に自動的に格納され、アクセス頻度の低いデータが低ビットコストのストレージ階層に自動的に格納されることで、ストレージの管理者による階層管理の負担を軽減する。
【０００８】
NVMeはサーバからフラッシュメモリへのアクセスを低遅延化するインターフェースである。NVMeにおいて、主なアクセス対象は、サーバにおけるPCIeアドオンカード上のフラッシュメモリである。
【０００９】
非特許文献１には、記憶領域であるnamespaceに対するシンプロビジョニングが開示されている。サーバはNVMeで規定されたIdentifyコマンドをストレージへ発行することによりシンプロビジョニングの状況を取得することができる。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】"NVM Express 1.1a Specification," http://www.nvmexpress.org/wp-content/uploads/NVM-Express-1_1a.pdf
【非特許文献２】"NVM Express: Unlock Your Solid State Drives Potential," http://www.nvmexpress.org/wp-content/uploads/2013-FMS-NVMe-Track.pdf
【発明の概要】
【発明が解決しようとする課題】
【００１１】
非特許文献１に開示のNVMe規格ではNSの共有概念は開示されているものの、以下に開示の通りその実現形態は開示されておらず、高性能I/Oを実現する計算機システムを提供することは容易ではない。
"1.3 Outside of Scope
The register interface and command set are specified apart from any usage model for the NVM, but rather only specifies the communication interface to the NVM subsystem. Thus, this specification does not specify whether the non-volatile memory system is used as a solid state drive, a main memory, a cache memory, a backup memory, a redundant memory, etc. Specific usage models are outside the scope, optional, and not licensed."
【００１２】
また、NVMeの仕様書では、namespaceの仮想化の実装方法が開示されていないため、仮想化されたnamespaceを共有することは容易ではない。
【課題を解決するための手段】
【００１３】
以上の課題を解決するため、計算機システムは、第１サーバ計算機と、第２サーバ計算機と、不揮発メモリデバイスと、第１サーバ計算機及び第２サーバ計算機にPCI-Expressを介して接続され、不揮発メモリデバイスに接続されるストレージコントローラと、を含む。ストレージコントローラは、第１サーバ計算機及び第２サーバ計算機により共有される仮想記憶領域を提供し、第１サーバ計算機及び第２サーバ計算機の夫々であるサーバ計算機は、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを格納し、プログラムは、仮想記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することによりPCI-Expressを介して仮想記憶領域にアクセスすることを、サーバ計算機に実行させ、ストレージコントローラは、アクセスに基づいて、不揮発メモリデバイス内の記憶領域を仮想記憶領域に割り当てる。
【図面の簡単な説明】
【００１４】
【図１】実施例のサマリを示す。
【図２】CPFの物理構成及び論理構成を示す。
【図３】別なCPFの物理構成及び論理構成を示す。
【図４】NVMe解釈部位が候補（３）である場合のCPFの詳細を示す。
【図５】サーバ側PCIe  I/FデバイスにおけるPCIe空間を示す。
【図６】NVMeのNSとストレージコントローラの記憶領域との関係を示す。
【図７】NVMeコマンドに関連した処理を示すフローチャートである。
【図８】CPFの起動方法を示すフローチャートである。
【図９】NVMe解釈部位が候補（２）である場合のCPFの詳細を示す。
【図１０】CPFの適用形態の例を示す。
【図１１】ストレージコントローラ３におけるデータの構成を示す。
【図１２】LU管理テーブル３５１を示す。
【図１３】仮想ボリューム管理テーブル３５２を示す。
【図１４】プール管理テーブル３５３を示す。
【図１５】論理ボリューム管理テーブル３５４を示す。
【図１６】仮想ボリューム作成処理を示す。
【図１７】仮想ボリューム作成画面を示す。
【図１８】論理ボリューム登録処理を示す。
【図１９】仮想ボリュームに対するWrite処理を示す。
【図２０】NVMeコマンド応答処理を示す。
【図２１】Identifyコマンドの応答と記憶容量の関係を示す。
【図２２】Inquiry処理を示す。
【図２３】シンプロビジョニングを適用しティアリングを適用しない場合の仮想ボリューム管理テーブル３５２ｂを示す。
【図２４】シンプロビジョニングを適用しティアリングを適用しない場合のプール管理テーブル３５３ｂを示す。
【図２５】シンプロビジョニングを適用しティアリングを適用しない場合の論理ボリューム管理テーブル３５４ｂを示す。
【図２６】シンプロビジョニングを適用しティアリングを適用しない場合の仮想ボリューム作成画面を示す。
【図２７】シンプロビジョニングを適用しない場合のIdentifyコマンドの応答と記憶容量の関係を示す。
【図２８】シンプロビジョニングを適用せずティアリングを適用する場合のLU管理テーブル３５１ｃを示す。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら実施例を説明する。ただし、本実施例は、発明を実現するための一例に過ぎず、発明の技術的範囲を限定するものではない。また、各図において共通の構成については、同一の参照番号が付されている。
【００１６】
なお、以後の説明では「テーブル」という表現にて本実施例の情報を説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくてもよい。例えば、「リスト」、「ＤＢ（データベース）」、「キュー」等のデータ構造やそれ以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために、「テーブル」、「リスト」、「ＤＢ」、「キュー」等については、単に「情報」と呼ぶこともできる。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【００１７】
以後の説明では、「プログラム」を主語として説明を行うが、プログラムはCPU（Central  Processing  Unit）によって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、CPUを主語とした説明としてもよい。また、プログラムを主語として開示された処理は、サーバ計算機やストレージコントローラや管理計算機等の計算機、情報処理装置が行う処理としてもよい。プログラムの一部又は全ては、専用ハードウェアで実現してもよく、また、モジュール化されていてもよい。各種プログラムは、プログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
【００１８】
＜実施例のサマリ＞
【００１９】
図１に実施例のサマリを示す。なお、以後の説明は、今後登場するであろうNVMeの後継規格に対しても適用可能であり、同様にPCI-Express（Peripheral  Component  Interconnect  Express：以後、PCIeと省略）の後継規格に対しても適用可能である。NVMeやPCIeに関連する用語が用いられた場合、その後継規格の同等の用語も指し示すと考えるべきである。同様に実施例は現在のBlockアクセスをターゲットとしたNVMeを対象として説明しているが、仮にバイトやワード単位のアクセスがNVMe規格で規定された場合はそれらアクセスについても本実施例が適用できることは言うまでもない。同様に、実施例は、フラッシュメモリを用いる不揮発メモリデバイスを対象として説明しているが、フラッシュメモリ以外の不揮発メモリ、例えばＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、相変化メモリ（Ovonic  Unified  Memory）、ＲＲＡＭ（登録商標、Resistance  RAM）を用いる不揮発メモリデバイスに適用してもよい。
【００２０】
≪NVMeについて≫
【００２１】
非特許文献１及び２の通り、NVMeはフラッシュメモリSSDに対して高速アクセスを実現するためのI/F（Interface）規格である。NVMe規格に沿ってプログラム（例えばデバイスドライバ、及びその他、アプリケーション、OSも含む）を開発することで、フラッシュメモリSSDに対し、高IOPS（Input/Output  per  Second）や低レイテンシといった高速アクセスが可能となる。例えば非特許文献２の１８ページによれば、SCSI/SAS（Serial  Attached  SCSI）を採用したSSDで６．０μｓであったアクセスレイテンシが、NVMeを採用することで２．８μｓまで削減できると開示されている。そのキーポイントは既に説明した通りだが、マルチI/Oキュー化し、複数のコアで１つのI/Oキューを共有しなくてもよくしたことで、CPUコア間のメモリアクセス効率を改善できる。
【００２２】
NVMeは規格化されて、幅広いフラッシュメモリデバイスがNVMe規格に対応することが期待される。そのため、デバイスドライバ以外のプログラム（典型的にはアプリケーションプログラム）のベンダにとって、当該プログラムが直接NVMeコマンドを発行し、フラッシュメモリデバイスに高速にアクセスすることも期待される。
【００２３】
なお、本実施例における「フラッシュメモリデバイス」は少なくとも以下の特徴を持つデバイスであり、フラッシュメモリSSDはその１例である：
＊フラッシュメモリチップを含む。
＊以下の処理を行うフラッシュメモリコントローラを含む：
＃外部からのリードリクエストに応じて、フラッシュメモリチップに保存されたデータを外部に転送する。そして、外部から受信したライトリクエストと共に受信したデータをフラッシュメモリチップに保存する。
＃フラッシュメモリチップのイレース処理を行う。
【００２４】
≪計算機システム≫
【００２５】
計算機システムは、１以上のサーバ計算機と、１以上のストレージコントローラと、フラッシュメモリデバイス（図では「Flash」と省略する場合がある）、通信機構（Communication  Mechanism）とを少なくとも含む。なお、計算機システム内のこれらの含有物の夫々を計算機システムコンポーネントと呼ぶことがある。
【００２６】
なお、本計算機システムはConverged  Platformであることが好ましい。なお、Converged  PlatformはConverged  Infrastructure、Converged  Systemとも呼ばれ、日本語では「Converged」が「垂直統合」という用語に置き換わる場合がある。なお、本実施例では以後、これらをConverged  Platform（CPFと省略することもある）に統一して呼ぶ。CPFは以下の特徴を持つ：
＊サーバ計算機、ストレージシステム（ストレージコントローラと記憶デバイスを含む）、及びこれらを接続する通信機構を含む製品。企業の管理者が個別にサーバ計算機とストレージシステムを導入する場合、こうしたサーバ計算機とストレージシステムの接続確認に代表される動作検証は管理者側で行われていた。しかし、CPFを導入する場合、製品を販売するベンダが事前に動作検証を行うため、製品を設置して使用する顧客の管理者による動作検証が不要又は削減できる。
＊なお、一部のCPFは、サーバ計算機、ストレージシステム、及び通信機構の設定を一括して行う管理プログラムを実行する管理サブシステムを含む場合がある。この管理サブシステムは、管理者が希望する実行環境（仮想マシン、DBMS：Database  Management  System、Webサーバ等）を迅速に提供することができる。例えば、管理プログラムは、必要なリソース量の仮想マシンを提供するために、サーバ計算機及びストレージシステムに必要なリソースの割り当てをリクエストし、割り当てられたリソースを用いて仮想マシンを作成するようにハイパーバイザにリクエストする。
【００２７】
≪サーバ計算機≫
【００２８】
サーバ計算機（１）及び（２）は夫々、ストレージコントローラにアクセスするプログラム（１）及び（２）を格納し実行するユニットである。プログラム（１）及び（２）は、NVMeコマンドを発行することで、ストレージコントローラにより提供される共有データ領域に対してアクセスする。なお、共有データ領域をNVMeのNSとして提供する部位は後ほど説明する。
【００２９】
サーバ計算機は、少なくともCPU、メインメモリ（以後メモリと省略する）、RCを含む。サーバ計算機は例えば以下であってもよい：
＊ファイルサーバ
＊ブレードサーバシステム
＊ＰＣ（Personal  Computer）サーバ
＊ブレードサーバシステムに差し込まれるブレード
【００３０】
≪サーバ計算機のプログラム≫
【００３１】
なお、プログラム（１）及び（２）は例えば、業務アプリケーションプログラム（例えばWebサーバ、DBMS、分析プログラム、ミドルウェア）や、LPAR（Logical  Partitioning）や仮想マシンを作成可能なプログラムや、OS、デバイスドライバ、であることが考えられるが、他のプログラムであってもよい。
【００３２】
≪通信機構≫
【００３３】
通信機構は、サーバ計算機とストレージコントローラとをPCIeで接続する。なお、サーバ計算機とストレージコントローラとの間のPCIe接続は、従来のサーバ計算機とストレージシステムとの接続で採用されているFC（Fibre  Channel）、Ethernet（登録商標）を用いるSAN（Storage  Area  Network）のようなネットワークを介さない。理由は以下の通りである（いずれか１つ、又は両方）：
＊これら広域SANも構築可能なプロトコルでは変換処理のオーバーヘッドが高く、共有データ領域への高性能I/O提供の妨げとなるため。
＊EthernetやSANのデバイス（特にスイッチ）が高価であるため。
【００３４】
なお、NVMeはPCIeに基づいた通信機構を前提とする。そのため、サーバ計算機からのNVMeコマンドを解釈する部位はPCIeにおけるEndpoint（以後、EPと省略）である必要がある。また、PCIeのチップセットが、複数のRoot  Complex（以後、RCと省略）からEPを共有すること（以後、「複数RCの同居」と呼ぶ）を許容しない場合（例えばMR-IOV：Multi-Root  I/O  Virtualizationをサポートしない場合）はこの制限も考慮する必要がある。
【００３５】
本実施例では、以上を踏まえ、NVMeコマンドを解釈する部位の候補として３つの候補を開示する。計算機システムは、３つの候補の中の一種類を含む。３つの候補（１）、（２）、（３）（図ではNVMe  I/F候補（１）、（２）、（３）と記載）は以下の通りである：
＊候補（１）：フラッシュメモリデバイス。この場合はストレージコントローラとフラッシュメモリデバイスとはPCIeで接続され、フラッシュメモリデバイスはNVMeに準拠したFunctionを持つEPとなる。ストレージコントローラはサーバ計算機からのNVMeコマンドを当該フラッシュメモリデバイスにスルーする。
＊候補（２）：ストレージコントローラ。この場合はサーバ計算機からストレージコントローラまでがPCIeで接続される。なお、前述の複数RCの同居に関する制限がある場合、サーバ計算機（１）のRCとストレージコントローラのRCとのPCIe接続と、サーバ計算機（２）のRCとストレージコントローラのRCとのPCIe接続とは、分離される。そして、ストレージコントローラのRCはそれぞれのサーバ計算機のRCに対して個別なEPを提供する。
＊候補（３）：サーバ計算機からのPCIe接続とストレージコントローラからのPCIe接続を仲介する仲介デバイス。インテル（R）やAMD（R）等が提供するCPU及びPCIeチップセットはコモディティ化されているため、低価格で高性能である。こうしたものをストレージコントローラに採用する場合に課題となるのが、ストレージコントローラにもRCが存在してしまい、前述の複数RCの同居の制限がある場合は、そのままサーバ計算機と接続できないことである。当該仲介デバイスは、夫々のサーバ計算機のRCに対してはEPを提供するロジックと、ストレージコントローラのRCに対しては別なEPを提供するロジックと、サーバ計算機とストレージコントローラとの間のライトデータやリードデータの転送を仲介するロジックとを含むことにより、この課題を解決する。
【００３６】
なお、PCIeは元々サーバ計算機やストレージシステム内の通信路として用いられてきたため、FCやEthernetと比較するとPCIeの通信可能距離は短く、RCはFCやEthernetで通信できる通信ノード数よりも少ない数のEPとしか通信ができない。また、FCやEthernet上で動作する通信プロトコルと比較して、PCIeの障害処理は弱い。そのため、通信機構としてPCIeを採用する本計算機システムはCPFであることが好ましい。なぜならば、計算機システムをCPFにすることで顧客によるサーバ計算機とストレージユニット間の通信機構のケーブリングを不要とできることから、前述のPCIeの弱点によるトラブルが発生しにくく、結果として信頼性の高いNVMeアクセスを提供できる。
【００３７】
≪NVMeコマンド解釈部位毎のメリット≫
【００３８】
なお、前述のNVMeコマンドを解釈する部位の候補（１）から（３）には例えば以下のメリットがある。
＊候補（１）：ストレージコントローラによる処理のオーバーヘッドが無い、又は小さい。候補（１）は、フラッシュメモリデバイスの内部状態を考慮した、効率的なNVMeのキュー制御を実現しやすい。なぜなら、NVMeコマンドを解釈する部位と、フラッシュメモリデバイスのウェアレベリングやリクラメーション等を行うコントローラが同じ又は近いためである。例えば、NVMeではI/Oキューが複数存在するが、候補（１）は、複数のI/OキューからのNVMeコマンドの取り出し方を当該内部状態に基づいて変更する。
＊候補（２）：ストレージコントローラが提供する前述のエンタープライズ向け機能をNVMeのNSに対して適用できる。また、候補（２）は、ストレージコントローラの内部状態を考慮した効率的なNVMeのキュー制御を行うことができる。なぜなら、NVMeコマンドを解釈する部位と、ストレージコントローラとが同じ又は近いためである。例えば、候補（２）は、複数のI/OキューからのNVMeコマンドの取り出し方を当該内部状態に基づいて変更することができる他、I/OキューにあるNVMeコマンドの蓄積状態に応じて、ストレージコントローラの他の処理の制御を変更できる。
＊候補（３）：ストレージコントローラが提供するエンタープライズ向け機能をNVMeのNSに対して適用できる。また、候補（３）の仲介デバイスがNVMeコマンドをSCSIリクエスト（SCSIコマンド）に変換するのであれば、ストレージコントローラで実行されるストレージプログラムは、実行コード、中間コード、又はソースコードレベルで、従来のSANストレージサブシステムのストレージプログラムと互換性を保ちやすい。その結果として、計算機システムのストレージプログラムの品質向上、機能向上できる他、前述のリモートコピーのような計算機システムのストレージコントローラとSANストレージサブシステムとの間の連携処理の実装も容易になる。なぜなら、通常のSANストレージサブシステム同士の連携と同じ部分が殆どのためである。
【００３９】
≪ストレージコントローラ≫
【００４０】
ストレージコントローラはフラッシュメモリデバイスの記憶領域を用い、高性能I/O処理を提供する。また、ストレージコントローラは、これまでエンタープライズ向けのSANストレージサブシステムが提供してきたような信頼性、冗長性、高機能性、保守・管理容易性に関係する機能を有してもよい。以下がその例である：
＊ストレージコントローラは、フラッシュメモリデバイスを冗長化し、冗長化した記憶領域から共有データ領域を提供する。また、ストレージコントローラは、共有データ領域に格納したデータへのアクセスを禁止又は失敗させずに（いわゆる無停止に）、フラッシュメモリデバイスの交換、増設、抜き去りといったデバイス保守を可能とする。HDDとは異なり、フラッシュメモリデバイスには書き込み過多によるデバイス寿命の短期化という特性がある。そのため、こうした冗長化や無停止保守をストレージコントローラが提供することで本計算機システムとしての信頼性を向上させることができる。また、サーバ計算機にPCIeのフラッシュメモリデバイスが差し込まれる場合、フラッシュメモリデバイスの保守は個々のサーバ計算機に対して個別に行われなければならない。しかし、本計算機システムのようにストレージコントローラにフラッシュメモリデバイスが接続されることにより、フラッシュメモリデバイスの保守をストレージ側にまとめると、保守作業者はまとめてフラッシュメモリデバイスの保守作業を行うことができ、保守が容易になる。
＊ストレージコントローラは、NVMeによって格納したデータに対して、リモートコピーやスナップショットといったコピー機能を提供する。
＊ストレージコントローラは、フラッシュメモリデバイス以外に記憶デバイスとしてHDDに接続されることにより、これらの記憶デバイスを用いたティアリングを可能とする。なお、ストレージコントローラは、HDDが提供する記憶領域をNVMeのNSに対応させてもよい。
＊ストレージコントローラは、サーバ計算機（１）や（２）を介さずに、本計算機システムの外部の計算機システム（サーバ計算機やストレージシステムを含む）又はネットワーク装置（SANスイッチやEthernetスイッチを含む）からのネットワークを介したアクセスを提供する。これにより前述のリモートコピーが行えたり、本計算機システム外部の計算機システム又はネットワーク装置も含めたストレージコンソリデーションも提供できたりする等、柔軟性が向上する。
【００４１】
≪サーバ計算機とストレージコントローラの配置≫
【００４２】
前述の通り、PCIeは通信可能距離が短いことから、サーバ計算機とストレージコントローラとは物理的に近い位置に配置されていればよい。しかし、以下がより好ましい：
＊ストレージコントローラが、ブレードサーバシステムのシャーシに差し込まれる構成を有する。なお、サーバ計算機であるブレードとストレージコントローラとの間のPCIe接続にバックプレーン等の基板を用いることで、PCIe接続に伴うトラブルを削減できる。
＊ブレードサーバシステムのシャーシとは別なシャーシにストレージコントローラを入れ、両シャーシをPCIe接続用のケーブルで接続する。なお、ブレードサーバシステムのシャーシとストレージコントローラのシャーシとを１つのラックに入れたものを、CPFとして販売してもよい。このようにラックに両シャーシとPCIe接続用ケーブルとを入れることで、PCIe接続用ケーブルに伴うトラブルを削減でき、また単体販売しているブレードサーバシステムやストレージシステムのシャーシそのもの又は部品をCPFへ流用することが容易である。
【００４３】
≪管理サブシステム≫
【００４４】
管理サブシステムは以下の少なくとも１つの処理を行うサブシステムである：
＊管理者又は統合管理サブシステムからのリクエストを受信し、計算機システムコンポーネントに対してリクエストに応じた設定を行うこと。
＊計算機システムコンポーネントから情報を取得し、管理者に表示したり、又は統合管理サブシステムに送信したりすること。なお、取得する情報は例えば性能情報、障害情報、設定情報、構成情報等がある。例えば、構成情報は、コンポーネントの抜き差しをしない限り本計算機システムに固定な項目と、変更可能な項目とを含み、設定情報は特に構成情報のうち、設定により変更可能な項目である。なお、これら種類の情報をまとめてコンポーネント情報と呼ぶことがある。また、管理者に表示したり、別な計算機に送信したりする情報は、取得したコンポーネント情報そのままでもよく、又は何らかの基準で変換・加工した後に、当該情報の表示や送信を行ってもよい。
＊上記コンポーネント情報に基づいて、計算機システムコンポーネントへの設定を自動的・自律的に行う、いわゆる自動・自律管理。
【００４５】
管理サブシステムは例えば以下の形態（それらの形態の混在を含む）であることが考えられるが、上記処理を行う形態であればそれらの形態にこだわらない。関係する機能、計算機の集合が管理サブシステムである。
＊計算機システムコンポーネントとは別な計算機（１以上）。管理サブシステムが、ネットワークを介して計算機システムに接続されている複数の計算機である場合、例えば、サーバ計算機専用の計算機、ストレージコントローラ専用の計算機、表示処理専用の計算機、といった計算機が管理サブシステムに存在してもよい。
＊計算機システムコンポーネントの一部。例えばBMC（Baseboard  Management  Controller）やエージェントプログラムが管理サブシステムである。
【００４６】
≪統合管理サブシステム≫
【００４７】
統合管理サブシステムは、サーバ、ストレージシステム、ネットワーク装置（SANスイッチやEthernetスイッチを含む）、そして本計算機システム、等に代表される管理対象装置を統合管理するサブシステムである。統合管理サブシステムは、ネットワークを介して管理サブシステム及び他の管理対象装置に接続される。統合管理サブシステムは複数の管理対象装置を管理するために、ベンダプロプライエタリなプロトコルで管理対象装置と通信することもあるが、SNMP（Simple  Network  Management  Protocol）やSMI-S（Storage  Management  Initiative-Specification）といった標準化されたプロトコルで管理対象装置と通信することもある。
【００４８】
統合管理サブシステムは、ネットワークを介して計算機システムに接続されている１又は複数の計算機を含む。
【００４９】
なお、統合管理サブシステムの提供ベンダは、本計算機システムのベンダとは異なる場合があり、その場合、本計算機システムの通信機構がPCIeであることで、統合管理サブシステムは本計算機システムの管理ができなかったり、できたとしても通常より劣った管理しかできなかったりすることがある。その理由の一例としては、統合管理サブシステムがサーバ計算機とストレージコントローラとの接続経路としてFC又はEthernet接続のみ認識し、PCIe接続を前述の接続経路として認識しない場合である。この場合、統合管理サブシステムは、サーバ計算機とストレージコントローラが接続されていないとみなすため、このような接続情報があることを前提とする管理項目は本計算機システムに適用できないことになる。
【００５０】
そのような場合の対策のため、本計算機システムの管理サブシステムは、本計算機システムのPCIe接続にSAN接続をエミュレートさせることにより、PCIe接続の情報を仮想のSAN接続の情報に変換し、そのSAN接続の情報を統合管理サブシステムに送信することにより、そのSAN接続を統合管理サブシステムの管理対象としてもよい。なお、SAN接続のエミュレートとは例えば、接続情報を提供すること、又はSAN接続に関する設定を受け付けること（ストレージポートへのLogical  Unit割り当て）、等がある。なお、エミュレート先のSANはFC-SANであってもよく、IP（Internet  Protocol）-SAN、Ethernet-SANであってもよい。
【００５１】
≪本計算機システムの用途とLocalフラッシュメモリデバイスの併用≫
【００５２】
以上説明の通り、複数のサーバ計算機間でNVMeによるデータ共有を実現するために、本計算機システムが導入されることが考えられる他、データ共有をしなくても前述のストレージコントローラが提供するエンタープライズ向け機能を、NVMeで格納したデータに適用するために、本計算機システムが導入されることも考えられる。また、既に本計算機システムではない環境にて、NVMeコマンドを発行するプログラムを用いて業務システムが構築されていた場合は、当該プログラムに対して、ベンダプロプライエタリなフラッシュメモリデバイス向けのインターフェースを実装しなくても、本計算機システムにて業務システムが構築されることができる場合もある。
【００５３】
なお、NVMeによるデータ共有は例えば以下の用途がある：
＃複数のサーバ計算機間の高速フェイルオーバ。サーバ計算機（１）の障害等に応じて、サーバ計算機（２）はサーバ計算機（１）による処理を引き継ぐフェイルオーバを行うと判定する。複数のサーバ計算機の夫々にPCIe接続を介してLocalフラッシュメモリデバイス（図では「Local  Flash」と省略）が接続されており、そしてサーバ計算機のプログラムのNVMeコマンド発行先がLocalフラッシュメモリデバイスだけである場合、複数のサーバ計算機は、フェイルオーバ元と先のLocalフラッシュメモリデバイス間でデータコピーする必要があり、高速なフェイルオーバが難しい。本計算機システムの場合はそのようなデータコピーは不要である。
＃複数のサーバ計算機がNVMeで共有データ領域に並列アクセスすることで、並列処理を行う場合。あるサーバ計算機がデータをライトし、すぐに他のサーバ計算機が当該データをリードすることができる。
【００５４】
しかし、サーバ計算機の数が増加した場合は、ストレージコントローラのI/O処理能力がボトルネックとなってしまう場合もある。
【００５５】
こうした場合に対処するために、各サーバ計算機に対して、NVMeコマンドを解釈できるフラッシュメモリデバイス（Localフラッシュメモリデバイスと呼ぶ）がPCIeで接続され、接続されたサーバ計算機により占有されてもよい。こうした構成の場合、サーバ計算機で実行されるプログラムは、データ共有及びエンタープライズ向け機能の適用が不要なデータをLocalフラッシュメモリデバイスに格納し、データ共有又はエンタープライズ向け機能の適用を望むデータをストレージコントローラにより提供される記憶領域であるNVMeのNSに格納すればよい。例えば、サーバ計算機（１）の障害や負荷等により、サーバ計算機（１）のプログラムの処理がサーバ計算機（２）に引き継がれる構成において、サーバ計算機（１）は、引き継ぎに必要なデータを共有データ領域であるNSへ書き込み、NSから読み出すことにより、処理を実行し、引き継ぎに不要なデータをLocalフラッシュメモリデバイスへ書き込む。
【００５６】
なお、こうした設定は手動で行われてもよいが、前述の管理サブシステムや統合管理サブシステムにより自動で行われてもよい。例えば、これらのサブシステムは、各NSが複数のサーバ計算機による共有（又はエンタープライズ向け機能の適用）可か否かを判断し、サーバ計算機で実行されるプログラムの特性に基づいて共有（又はエンタープライズ向け機能の適用）が必須であるデータを把握し、サーバ計算機で実行されるプログラムに対し、データを格納する記憶領域を使い分けるように設定してもよい。当該プログラムの管理者は本計算機システムの構成・特徴を熟知しているとは限らないため、管理者による当該プログラムの設定作業負荷が軽減される。なお、NSが共有か否かの判断方法としては以下が考えられるが、他の方法であってもよい：
＊管理サブシステムがNSIDとストレージコントローラの記憶領域との関係を計算機システムに問い合わせる。
＊サーバ計算機のプログラムがNSIDを指定して情報収集を行うことにより得られる情報から共通のNSであることを判断する。
【００５７】
＜基本構成図＞
【００５８】
以下に計算機システムがCPFである場合を例により詳細な実施例を説明する。
【００５９】
≪NVMe制御でのCPF≫
【００６０】
図２はCPFの物理構成及び論理構成を示した図である。
【００６１】
本図でのCPF１は、サーバ計算機２、ストレージコントローラ３、記憶デバイスとしてフラッシュメモリデバイス５、管理サブシステムの一例として管理計算機７を含む。
【００６２】
サーバ計算機２は、管理計算機７と接続するための管理I/F２７２を含む。サーバ計算機２は、プログラムの一例としてアプリケーションプログラム２２８（単にアプリケーションと省略することがある）、OS２２７、NVMe制御プログラム２２２、サーバ管理I/F制御プログラム２２９を実行する。なお、管理計算機７とサーバ計算機２及びストレージコントローラ３との接続はEthernetであることが考えられえるが、他の物理的・仮想的な接続形態であってもよい。サーバ管理I/F制御プログラム２２９は、管理I/F２７２を制御することにより、管理計算機７との通信を行う。
【００６３】
NVMe制御プログラム２２２は、NVMeコマンドをPCIe  I/F２６２に発行するプログラムである。なお、プログラム２２２はサーバ計算機２に格納されている他のプログラムの一部であってもよく、サーバ計算機２に格納されている他のプログラムと別なプログラムであってもよい。例えば、アプリケーションプログラム２２８がNVMeコマンドを発行する構成や、OS２２７内のデバイスドライバがNVMeコマンドを発行する構成がある。
【００６４】
PCIe  I/F２６２は、NVMe制御プログラム２２２の動作に従ってNVMeコマンドをPCIe  I/F３６２へ送信した後、PCIe  I/F３６２から当該NVMeコマンドに対するレスポンスを受信し、そのレスポンスをNVMe制御プログラム２２２へ返す。
【００６５】
ストレージコントローラ３は、管理計算機７と接続するための管理I/F３８２と、フラッシュメモリデバイス５と接続するためのフラッシュI/F３７２と、を含む。なお、フラッシュI/F３７２とフラッシュメモリデバイス５との接続は、フラッシュメモリデバイス５がNVMeコマンドを解釈する場合はPCIe接続であることが好ましいが、そうでない場合はSASやSATA（Serial  Advanced  Technology  Attachment）やFCやEthernetであってもよく、他の通信機構を用いてもよい。
【００６６】
ストレージコントローラ３は、ストレージプログラム３２０を実行する。なお、ストレージプログラム３２０は例えば、各インターフェースとの通信を制御する、PCIe  I/F制御プログラム３２２と、フラッシュI/F制御プログラム３２３と、管理I/F制御プログラム３２４と、を含む。PCIe  I/F制御プログラム３２２は、PCIe  I/F３６２を制御することにより、サーバ計算機２との通信を行う。フラッシュI/F制御プログラム３２３は、フラッシュI/F３７２を制御することにより、フラッシュメモリデバイス５との通信を行う。管理I/F制御プログラム３２４は、管理I/F３８２を制御することにより、管理計算機７との通信を行う。
【００６７】
なお、PCIe  I/F２６２とPCIe  I/F３６２の実体は、例えば、図４に示すサーバ側PCIe  I/Fデバイス４や、図９に示すストレージ側PCIe  I/Fデバイス８である。
【００６８】
≪NVMe制御＋SCSI制御でのCPF≫
【００６９】
図３は別なCPFの物理構成及び論理構成を示した図である。
【００７０】
図２との差異は、サーバ計算機２からストレージコントローラ３へのI/Oリクエストとして、NVMeとSCSIを併用することである。
【００７１】
SCSI制御プログラム２２４は、他のプログラムからのリクエストに応じて、ストレージコントローラ３により提供されるLUNに対してSCSIリクエストをPCIe  I/F２６２のSCSIファンクション（図中のSCSI  Func.）宛に発行する。SCSI制御プログラム２２４は例えばSCSIデバイスドライバである。なお、本プログラムはサーバ計算機２に格納されている他のプログラムの一部であってもよく、サーバ計算機２に格納されている他のプログラムとは別なプログラムであってもよい。例えば、OS２２７内のデバイスドライバがSCSIリクエストを発行する場合がある。
【００７２】
PCIe  I/F２６２がNVMeコマンドとSCSIリクエストの両方を受け付ける場合、NVMeファンクション（図中のNVMe  Func.）とSCSIファンクションの２つを持つ必要がある。この内NVMeファンクションについては図２のPCIe  I/F２６２の説明として説明済みである。SCSIファンクションはSCSI制御プログラム２２４の動作に従ってSCSIコマンドをPCIe  I/F３６２へ送信した後、PCIe  I/F３６２から当該SCSIコマンドに対するレスポンスを受信し、そのレスポンスをSCSI制御プログラム２２４へ返す。なお、PCIe  I/F３６２をマルチファンクションにするか否かは、仲介デバイスでNVMeコマンドを解釈するか否かによって定まる。
【００７３】
このように、あるサーバ計算機２がNVMeコマンドとSCSIリクエストの両方を発行できるようにすることで、以下の少なくとも１つのメリットがある。
＊サーバ計算機２においてNVMe非対応のプログラムが、NVMeのNSに対応した記憶領域にアクセスできるようにするため。
＊サーバ計算機２においてNVMe非対応のプログラムが、NVMeのNSに対応した記憶領域とは別な記憶領域にアクセスできるようにするため。例えばストレージコントローラ３にHDDが接続している場合、サーバ計算機２が当該HDDの記憶領域に対してはSCSIでアクセスできるようにする。
＊本願出願時点ではNVMeのI/FがNSをサーバ計算機２のブートデバイスとして使用できるように規格化されていないため。そのため、ストレージコントローラ３が提供する記憶領域をサーバ計算機２のブートデバイスとする場合、サーバ計算機２がその記憶領域にSCSIリクエストでアクセスできる必要がある。なお、サーバ計算機２がブートするということは、サーバ計算機２のBIOS（Basic  Input/Output  System）プログラムが、ブートデバイスを持つEPをハンドリング可能なように実装されている必要があるということである。ここでのEPは、例えばSCSI  HBA（Host  Bus  Adapter）やPCIe  I/Fデバイス（NVMeファンクション又はSCSIファンクション）である。その具体的な実装方法は以下の通りである：
＃BIOSプログラムが、発見したEPからBIOSプログラム用のデバイスドライバプログラムを取得し、それを実行する。
＃BIOSプログラム自体がNVMe用のドライバプログラムを含む。
【００７４】
なお、サーバ計算機２には以下の３つのタイプがある。
（Ａ）NVMeコマンドを発行し、SCSIリクエストを発行しない。
（Ｂ）NVMeコマンドとSCSIリクエストを発行する。
（Ｃ）NVMeコマンドを発行せず、SCSIリクエストを発行する。
【００７５】
ここで、CPF１に含まれるサーバ計算機２は１つの場合もあれば複数の場合もある。複数の場合、CPF１に含まれるサーバ計算機２は、上記（Ａ）乃至（Ｃ）のいずれか１タイプだけの場合もあれば、（Ａ）乃至（Ｃ）のいずれか２タイプのコンビネーション、又は（Ａ）乃至（Ｃ）の３タイプのコンビネーションの場合もあってもよい。
【００７６】
＜候補（３）を用いるCPFのハードウェア全体構成＞
【００７７】
図４は、前述のNVMe解釈部位が候補（３）である場合のCPF１を詳細化した図である。なお、サーバ計算機２とストレージコントローラ３の間のPCIe接続はスイッチを介して行われるが、図では省略している。
【００７８】
サーバ計算機２は、CPU２１と、メインメモリ２２（図ではMemと省略し、以後の説明ではメモリ２２と呼ぶことがある）と、RC２４と、サーバ側PCIe  I/Fデバイス４とを含む。RC２４とサーバ側PCIe  I/Fデバイス４とはPCIeにて接続される。RC２４とCPU２１とはPCIeより高速なネットワークで接続される。メモリ２２は、図示しないメモリコントローラを介して、CPU２１及びRC２４と高速なネットワークで接続される。これまで説明したサーバ計算機２にて実行される各プログラムは、メモリ２２にロードされ、CPU２１によって実行される。CPU２１はCPUコアであってもよい。RC２４とCPU２１とメモリコントローラとは１つのLSIパッケージでまとめられてもよい。
【００７９】
サーバ側PCIe  I/Fデバイス４は、前述の仲介デバイスの一例である。サーバ側PCIe  I/Fデバイス４は、サーバ計算機２の外部に配置されてもよい。サーバ側PCIe  I/Fデバイス４は、以下の特徴を持つデバイスである：
＊CPU２１により実行されるプログラムによって発行されたNVMeコマンドを解釈する。
＊RC２４に対してEP４１を提供する。
＊ストレージコントローラ３に含まれるRC３３に対して別なEP４２を提供する。なお、ストレージコントローラ３に複数のRCが含まれ、本デバイス４がそれぞれと通信する必要がある場合は、本デバイス４は各RCに対して別なEP４２を提供する。ここでのサーバ側PCIe  I/Fデバイス４は、ストレージコントローラ３内の二つのRC３３に対して二つのEP４２を夫々提供する。
【００８０】
サーバ側PCIe  I/Fデバイス４は、これらの特徴を実現するために、複数のサーバ計算機２に夫々対応する複数のEP４２を提供するロジックと、EP４１を提供するロジックと、NVMeコマンドに基づくSCSIコマンドをストレージコントローラ３に発行するロジックとを含んでもよい。なお、EP４１は図２のPCIe  I/F２６２に対応し、EP４２はPCIe  I/F３６２に対応しているとも言える。更にサーバ側PCIe  I/Fデバイス４が図３のSCSIファンクションに相当するロジックとして、CPU２１により発行されたSCSIリクエストに基づくSCSIリクエストをストレージコントローラ３に発行するロジックを含んでもよい。これらのロジックの夫々は、専用回路などのハードウェアにより実現されてもよいし、ソフトウェアを実行するプロセッサにより実現されてもよい。
【００８１】
なお、サーバ側PCIe  I/Fデバイス４がNVMeファンクションとSCSIファンクションの両方を持つことで、別々なボードにこれらファンクションを実装する場合と比較して例えば以下の１つ以上のメリットがある：
＊低コスト化。
＊サーバ計算機２においてPCIe接続のデバイスを差し込むためのスペースの削減。
＊サーバ計算機２内の使用PCIeスロット数の削減。
特に本候補（３）で上記マルチファンクションを実現した場合は、サーバ側PCIe  I/Fデバイス４がSCSIリクエストをストレージコントローラ３へ送信するロジックをファンクション間で共通化できるため、デバイスの小型化又はコスト削減が可能である。
【００８２】
なお、サーバ計算機２は前述の通りLocalフラッシュメモリデバイス２３（図ではFlashと省略）を含んでもよい。Localフラッシュメモリデバイス２３はRC２４とPCIeで接続される。
【００８３】
なお、サーバ計算機２に含まれる各構成物は複数であってもよい。なお、図ではLocalフラッシュメモリデバイス２３とサーバ側PCIe  I/Fデバイス４とはRC２４を介して通信をするように記載されているが、RC２４を介さずに通信してもよく、また通信できなくてもよい。
【００８４】
ストレージコントローラ３は１つ以上の（図では２つの）コントロールユニット３６（図ではCTLユニットと省略）を含む。各コントロールユニット３６は、CPU３１と、メインメモリ３２（図ではMemと省略し、以後の説明ではメモリ３２と呼ぶことがある）と、RC３３と、フラッシュI/F３７２とを含む。RC３３と、サーバ側PCIe  I/Fデバイス４と、フラッシュI/F３７２とはPCIeにて接続される。RC３３とCPU３１とはPCIeより高速なネットワークで接続される。メインメモリ３２は、図示しないメモリコントローラを介して、CPU３１及びRC３３と高速なネットワークで接続される。これまで説明してきたストレージプログラム３２０等のストレージコントローラ３で実行される各プログラムは、メモリ３２にロードされ、CPU３１によって実行される。CPU３１はCPUコアであってもよい。RC３３とCPU３１とメモリコントローラとは１つのLSIパッケージでまとめられてもよい。
【００８５】
各コントロールユニット３６はHDD６に接続するためのディスクI/F３４を含んでもよい。なお、フラッシュI/F３７２とディスクI/F３４が同じインターフェースタイプである場合は、これら２つのI/Fを共通化してもよい。なお、ディスクI/F３４はSAS、SATA、FC、Ethernetであることが考えられるが、他の通信機構を用いてもよい。
【００８６】
なお、図ではフラッシュI/F３７２（又はディスクI/F３４）とサーバ側PCIe  I/Fデバイス４とはRC３３を介して通信をするように記載されているが、RC３３を介さずに通信してもよく、また通信できなくてもよい。この点はフラッシュI/F３７２とディスクI/F３４についても同様である。
【００８７】
なお、コントロールユニット３６に含まれる各構成物は複数であってもよい。
【００８８】
なお、コントロールユニット３６間は通信可能であることが望ましく、図ではその一例としてRC３３間をPCIeで接続するように記載している。なお、RC３３間をPCIeで接続する場合は、図示しないNTB（Non-transparent  Bridge）を介して通信する。なお、コントロールユニット３６間の通信は他の機構を用いてもよい。
【００８９】
＜候補（３）を用いるCPFのPCIe空間の範囲＞
【００９０】
図５は、図４のサーバ側PCIe  I/Fデバイス４を中心に拡大し、PCIeアドレスの空間であるPCIe空間を記載した図である。PCIe空間２４１は、サーバ計算機２内のRC２４がコントロールする空間であり、PCIe空間３３１は、ストレージコントローラ３内のRC３３がコントロールする空間である。なお、前述の「複数RCの同居」問題で示した通り、複数のRCが１つのPCIe空間に同居することができない。そのため、サーバ側PCIe  I/Fデバイス４はそれぞれのPCIe空間を分離させるために、RC２４向けのPCIeリンクと、RC３３向けのPCIeリンクを接続でき、それぞれのリンクにおいてEPとして動作する。
【００９１】
なお、ディスクI/F３４とフラッシュI/F３７２とはPCIe空間３３１とは別なPCIe空間に存在してもよい。
【００９２】
＜NVMeのNSとストレージコントローラの記憶領域の関係＞
【００９３】
図６は、NVMeのNSとストレージコントローラ３の記憶領域との関係を示した図である。ストレージコントローラ３は以下の記憶領域を管理している。
＊パリティグループ。それは複数の記憶デバイス（フラッシュメモリデバイス５やHDD６）を用いて定義される。これにより、RAID（Redundant  Arrays  of  Inexpensive  Disks）による高信頼化、高速化、大容量化が達成される。
＊論理ボリューム。それはパリティグループの記憶領域を分割した領域である。パリティグループの記憶領域はそのままサーバ計算機に提供されるには大容量過ぎる場合があるため、論理ボリュームが存在する。
＊プール。それはシンプロビジョニングやティアリングに用いる記憶領域が含まれるグループである。図では論理ボリュームがプールに割り当てられているが、パリティグループや記憶デバイス自体が直接プールに割り当てられてもよい。
＊仮想ボリューム。それはプールを用いて定義された、シンプロビジョニング又は／及びティアリングを適用した仮想記憶領域である。なお、以後の説明では論理ボリュームと仮想ボリュームを指し示す用語として「ボリューム」と呼ぶことがある。
＊Logical  Unit（論理ユニット、以後、LUと呼ぶことがある）。それは仮想ボリューム又は論理ボリュームのうち、サーバ計算機２からのアクセスを許す記憶領域である。Logical  UnitはSCSIのLUN（Logical  Unit  Number）を割り当てられる。
【００９４】
なお、ストレージコントローラ３は上記全種類の記憶領域を提供しなくてもよい。
【００９５】
NSはこれら記憶領域のいずれの種類に対して対応付けられてもよい。しかし、NSはLogical  Unitに対応付けられることがより好ましい。なぜならばストレージプログラム３２０はSANストレージシステムのストレージプログラム３２０と互換性を保ちやすくなり、また記憶領域の定義についてもSANストレージシステムとの互換性が高くなるからである。以後、NSに対応付けられたLogical  UnitのLUNと区別するために、NSに対応付けられていないLogical  UnitのLUNを、SCSI  LUNと呼ぶことがある。
【００９６】
＜ストレージプログラム＞
【００９７】
以上説明した項目も含め、ストレージプログラム３２０は以下の処理を行う（全部である必要はない）：
＊SCSIリクエストを受信し、解釈し、処理すること。例えば当該SCSIリクエストがリードリクエストであれば、ストレージプログラム３２０は、フラッシュメモリデバイス５やHDD６等の記憶デバイスからデータをリードし、サーバ計算機２に転送する。なお、その際、ストレージコントローラ３のメインメモリ３２をキャッシュメモリとして用いてもよい。例えば当該SCSIリクエストがライトリクエストであればキャッシュメモリにライトデータを格納し、その後記憶デバイスにライトデータをライトする。
＊パリティグループに対してRAID処理をすること。
＊ストレージコントローラ３により提供される上記記憶領域の定義を行うこと。なお、定義した結果はストレージコントローラ３のメインメモリ３２に記憶領域定義情報として格納し、前述のリクエスト処理の際に参照する。
＊その他シンプロビジョニング等のエンタープライズ向け機能の処理を行うこと。
【００９８】
＜候補（３）におけるリクエスト変換処理＞
【００９９】
前述の通り候補（３）では、サーバ側PCIe  I/Fデバイス４は、サーバ計算機２より受信したNVMeコマンドに基づいてSCSIコマンドを生成し、ストレージコントローラ３に送信する。
【０１００】
図７はサーバ計算機２と、サーバ側PCIe  I/Fデバイス４とコントロールユニット３６との間で行われるNVMeコマンドに関連したNVMeコマンド処理を示すフローチャートである。なお、下記処理は、NVMeコマンドがリード又は／及びライトの場合に適用されるが、他のNVMeコマンドに適用されてもよい。
【０１０１】
処理手順は以下の通りである。なお、下記ステップはストレージコントローラ３に複数のコントロールユニット３６が含まれ、各コントロールユニット３６に複数のCPU３１が含まれ、また、Logical  UnitをNSに対応させる場合を想定している：
（Ｓ８１１０）サーバ計算機２は、前述のプログラムの処理によりNVMeコマンドを送信する。なお、NVMeコマンドはNSIDを含むことで、対象となるNSを指定できる。NVMeコマンドはまた、NSID内のアクセス範囲と、サーバ計算機２のメモリ範囲とを含む。
（Ｓ８１１２）サーバ側PCIe  I/Fデバイス４は、NVMeコマンドを受信する。
（Ｓ８１１４）サーバ側PCIe  I/Fデバイス４は、受信したNVMeコマンドを解釈し、コマンドに含まれるNSIDを、対応するLUNに変換する。
（Ｓ８１１６）サーバ側PCIe  I/Fデバイス４は、変換したLUNを含むSCSIコマンドを生成する。
（Ｓ８１１８）サーバ側PCIe  I/Fデバイス４は、生成したSCSIコマンドの送信先となるコントロールユニット３６及びCPU３１を決定する。
（Ｓ８１２０）サーバ側PCIe  I/Fデバイス４は、生成したSCSIコマンドを決定した送信先に送信する。
（Ｓ８１２２、Ｓ８１２４）送信先のコントロールユニット３６のCPU３１は、SCSIコマンドを受信し、受信したSCSIコマンドを処理する。
【０１０２】
なお、Ｓ８１１０とＳ８１１２のNVMeコマンドの送信及び受信とは以下の処理である：
（Ａ）サーバ計算機２で実行中のプログラムは、サーバ計算機２のメモリ２２に準備したI/OキューにNVMeコマンドを登録し、
（Ｂ）サーバ計算機２で実行中のプログラムは、サーバ側PCIe  I/Fデバイス４のEP４１のNVMeレジスタ空間のI/Oキューのhead  pointerをインクリメントし、
（Ｃ）サーバ側PCIe  I/Fデバイス４は、I/Oキューのhead  pointerのインクリメントを検知し、サーバ計算機２のメモリ２２のI/OキューからNVMeコマンドをフェッチする。
【０１０３】
ところで（Ｃ）で複数のNVMeコマンドがフェッチされる場合があり、この場合、サーバ側PCIe  I/Fデバイス４は個々のNVMeコマンドに対してＳ８１１４以降のステップを行うが、その実行順序としては、NVMeコマンド毎にＳ８１１４からＳ８１２４をシリアルに繰り返し実行してもよく、パラレルに実行してもよい。
【０１０４】
なお、図示はしていないが、Ｓ８１２４の処理の結果、NVMeコマンドがライトであれば、サーバ側PCIe  I/Fデバイス４は、サーバ計算機２のメモリ２２に格納されたライトデータを、ストレージコントローラ３のメモリ３２に転送する。NVMeコマンドがリードであれば、サーバ側PCIe  I/Fデバイス４は、ストレージコントローラ３のメモリ３２に格納されたリードデータを、サーバ計算機２のメモリ２２に転送する。
【０１０５】
また、Ｓ８１１４でのNSIDからLUNへの変換は、例えば以下のいずれか又は併用で行うことが考えられる：
＊サーバ側PCIe  I/Fデバイス４は、所定の変換式（ビット演算を含んでもよい）でNSIDからLUNに変換する。なお、サーバ側PCIe  I/Fデバイス４は、所定の変換式とペアを成す逆変換式により、LUNからNSIDへも変換できる。所定の変換式のシンプルな例がNSID=LUNである。
＊サーバ側PCIe  I/Fデバイス４は、NSIDからLUNを得るための変換テーブルをサーバ側PCIe  I/Fデバイス４のメモリに格納し、変換の際に参照する。
【０１０６】
なお、図３で説明の通り、Ｓ８１１２にてサーバ側PCIe  I/Fデバイス４はサーバ計算機２から発行されたSCSIコマンドを受信してもよい。この場合、続くＳ８１１４、Ｓ８１１６は省略するが、そのために、サーバ側PCIe  I/Fデバイス４は、受信したコマンドがNVMeコマンドか、SCSIコマンドか判断する。
【０１０７】
なお、Ｓ８１１８での送信先の決定方法は以下の基準で決定することが考えられるが、他の基準で決定してもよい：
＊コントロールユニット３６、又はCPU３１の障害の有無。例えば、サーバ側PCIe  I/Fデバイス４は送信の結果として得られるコントロールユニット３６の状態を記憶し、記憶した状態に基づいて障害が発生していないコントロールユニット３６に送信する。
＊コントロールユニット３６、又はCPU３１の障害の負荷。実現形態としては、（Ａ）ストレージコントローラ３又は管理計算機７が、コントロールユニット３６又はCPU３１の負荷を取得し、各NS宛てのリクエストで生成されたSCSIコマンドの送信先となるコントロールユニット３６又はCPU３１を決定して各サーバ側PCIe  I/Fデバイス４に送信し、（Ｂ）決定結果を受信したサーバ側PCIe  I/Fデバイス４は決定結果に基づいてSCSIコマンドを送信する。
【０１０８】
≪SCSIコマンドを含むFCPコマンドを送信する場合≫
【０１０９】
なお、サーバ側PCIe  I/Fデバイス４は、Ｓ８１１６でSCSIコマンドの生成に加えて生成したSCSIコマンドを含むFCP（Fibre  Channel  Protocol）コマンドを生成し、Ｓ８１１８でFCPコマンドとして送信してもよい。これには以下のメリットがある：
＊ストレージプログラム３２０にてWWN（World  Wide  Name）又はWWNから生成されたPort  IDや、IPアドレスといったSAN上の通信識別子を用いた制御（アクセス制御や優先度制御等）を行うことができる。
＊SANストレージサブシステムとの互換性が維持できる。これはストレージプログラム視点と操作視点の両方の意味がある。
＊統合管理サブシステムがサーバ計算機２とストレージコントローラ３間の接続を取得できる。
【０１１０】
FCPコマンドを送信する場合、サーバ側PCIe  I/Fデバイス４は以下を持つ：
＊EP４１に対応する仮想サーバポート（仮想WWNが割り当てられる）。
＊EP４２に対応する仮想ストレージポート（仮想WWNが割り当てられる）。仮想ストレージポートは、ストレージプログラム３２０により通常のSANポートと同様に認識され、取り扱われる。
【０１１１】
管理サブシステムは上記仮想ストレージポートに対してLogical  Unitの定義を行うことで、どのボリュームをNVMeのNSとするか指定することができる。以下が管理サブシステムの処理フローである：
（Ｓ０１）管理サブシステムは、ストレージポートとボリュームを指定するLogical  Unit定義リクエストを受信する。
（Ｓ０２）指定されたストレージポートが仮想ストレージポートでない場合、管理サブシステムは、SANストレージサブシステムと同様の処理で指定されたストレージポートに対して、指定されたボリュームに対応するLogical  Unitを定義する指示を、ストレージコントローラ３に送信する。
（Ｓ０３）指定されたストレージポートが仮想ストレージポートである場合、管理サブシステムは、指定された仮想ストレージポートに対して、指定されたボリュームに対応するLogical  Unitを定義する指示を、ストレージコントローラ３に送信する。
【０１１２】
なお、Ｓ０３の指示を受けたストレージコントローラ３は以下の処理を行う：
（Ｓ０３−１）ストレージコントローラ３は、指定された仮想ストレージポートに対応するサーバ側PCIe  I/Fデバイス４を選択する。
（Ｓ０３−２）ストレージコントローラ３は、指定されたボリュームに対応するLogical  Unitを定義する（つまりLUNを、指定されたボリュームに割り当てる）。
（Ｓ０３−３）ストレージコントローラ３は、選択されたサーバ側PCIe  I/Fデバイス４に対して、割り当てられたLUNを通知する。なお、サーバ側PCIe  I/Fデバイス４は通知されたLUNに対してNSIDを割り当てることでNS化する。なお、この割り当ての処理においてサーバ側PCIe  I/Fデバイス４は、NSIDを生成し、NSIDとLUNの変換情報を用いている場合は当該情報の生成・登録を行う。
【０１１３】
以上が管理サブシステムの処理フローの説明である。これにより、管理者は仮想ストレージポートを指定することでどのサーバ計算機２に対してボリュームをNVMeとして提供するか指定することができる。これは、サーバ側PCIe  I/Fデバイス４毎に仮想ストレージポートを持ち、当該デバイス４は複数のサーバ計算機２でシェアされない形態であるためである。また、ストレージコントローラ３がLogical  Unitを対象とした性能モニタリング機能を持つ場合、当該Logical  Unitに負荷を与えるサーバ計算機２が１つに定まることから迅速に負荷の原因となるサーバ計算機２を特定することができる。なお、複数のサーバ計算機２が、あるボリュームを共有NSとしてアクセスする場合は、共有するサーバ計算機２の仮想ストレージポート各々に対して上記Logical  Unit定義を行う。
【０１１４】
なお、以上の説明ではFCPに特化して説明したが、FCPの代わりにiSCSI（Internet  Small  Computer  System  Interface）のPDU（Protocol  Data  Unit）やEthernetフレームを対象とする場合は上記説明のWWNをIPアドレスやMAC（Media  Access  Control）アドレスと読み替えればよく、一般化するとしたら上記説明のWWNを通信識別子（WWNやIPアドレスやMACアドレスを含む意味）と読み替えればよい。
【０１１５】
なお、管理サブシステムは、NVMeのNSとしたボリュームに対してSANポートに対するLogical  Unit定義をガードする設定モードを設けてもよい。NSに対して一時的なデータのみを格納する運用形態の場合、SANポートに対するLogical  Unitは意図しないデータ更新の元となるからである。また、ボリュームをNSとSANのLUNとの両方の経路でOSに認識させた場合、OSはそれぞれを別な記憶領域として認識してしまい、データ不整合を招く更新処理を実行する可能性がある。本ガードモードはそうしたデータ不整合を回避することもできる。
【０１１６】
＜CPFの起動方法＞
【０１１７】
図８はCPF１の起動方法を示すフローチャートである。
（Ｓ１５３１、Ｓ１５３２、Ｓ１５３３、Ｓ１５３４）ストレージコントローラ３は、電源ONを検知したらストレージプログラム３２０を起動し、後述する仮想ボリューム作成処理を行い、Logical  Unitへのアクセス受付開始状態となる。
（Ｓ１５３５）ストレージコントローラ３は、サーバ側PCIe  I/Fデバイス４へLogical  Unit情報（LUN等）を送信する。なお、ここでストレージコントローラ３は、サーバ側PCIe  I/Fデバイス４からのリクエストに応じて送信してもよく、主体的に送信してもよい。
（Ｓ１５２１）サーバ計算機２及びサーバ側PCIe  I/Fデバイス４は、電源ONを検知する。
（Ｓ１５４２、Ｓ１５４３）サーバ側PCIe  I/Fデバイス４は、起動し、ストレージコントローラ３から受信したLogical  Unit情報を受信することでLogical  Unitを認識する。
（Ｓ１５４４）サーバ側PCIe  I/Fデバイス４は、認識したLogical  Unitに対応するNS情報（NSID等）を生成し、サーバ計算機２で実行されるプログラムに送信する。なお、ここでサーバ側PCIe  I/Fデバイス４はサーバ計算機２のプログラムからのリクエストに応じて送信することが考えられるが、サーバ側PCIe  I/Fデバイス４が主体的に送信してもよい。なお、本ステップはデバイス４の起動の一環として行われてもよく、起動後に行われてもよい。
（Ｓ１５２２）サーバ計算機２は、OS２２７、アプリケーション２２８等のプログラムを起動し、NSの認識が必要なプログラムはNS情報（NSID等）の受信を待つ。
（Ｓ１５２３）サーバ計算機２においてNSの認識が必要なプログラムは、サーバ側PCIe  I/Fデバイス４から、NS情報を受信する。なお、本図が示す通り、Ｓ１５２３の受信を行った時点で、ストレージコントローラ３及びサーバ側PCIe  I/Fデバイス４の起動は完了している。なお、本ステップはＳ１５２２の起動の一環として行われてもよく、起動後に行われてもよい。
【０１１８】
以上の処理の後、図７にて説明したNVMeコマンドの処理が行われる。なお、本図ではストレージコントローラ３と、サーバ計算機２（及びサーバ側PCIe  I/Fデバイス４）との電源ONは独立して行われることとした。しかし、Ｓ１５３１乃至Ｓ１５３３のステップの一環として、ストレージコントローラ３が、サーバ計算機２（及びサーバ側PCIe  I/Fデバイス４）の電源ONを指示してもよい。
【０１１９】
＜NVMe解釈部位が候補（２）である場合＞
【０１２０】
図９は、前述のNVMe解釈部位が候補（２）である場合のCPF１を詳細化した図である。図４との相違点は以下である：
＊サーバ側PCIe  I/Fデバイス４は、PCIeスイッチ（ＳＷ）９に代替された。
＊ストレージコントローラ３にストレージ側PCIe  I/Fデバイス８が新設された。なお、本デバイス８はサーバ側PCIe  I/Fデバイス４と同様であるが、サーバ計算機２の各々に対してEP５１を提供することで前述の「複数RCの同居」問題を解決するため、本デバイス８においてサーバ計算機２に接続されるEP５１の数は、サーバ計算機２の数以上になる。更に本デバイス８は、ストレージコントローラ３内のRC３３に対してEP５２を提供する。
【０１２１】
なお、ストレージ側PCIe  I/Fデバイス８のNVMeコマンド処理は図７で説明したフローで処理してもよいが、図１で説明したようにストレージプログラム３２０と連携することで、ストレージコントローラ３の内部状態を考慮した効率的なNVMeのキュー制御を行ってもよい。例えばNVMeコマンド処理は、負荷集中や障害があるHDDが割り当てられているNSが関係しているNVMeのキューからのフェッチの優先度を下げる。また、ストレージ側PCIe  I/Fデバイス８は、NVMeコマンドをSCSI以外のコマンド形式に変換してもよく、またNVMeコマンドのままストレージプログラム３２０に送信してもよい。
【０１２２】
＜CPF１の適用形態＞
【０１２３】
これまで説明してきた、CPFの適用形態の例を図１０に示す。
【０１２４】
旧システムにより実行されているアプリケーションをCPFへ移行させるケースについて説明する。旧システムは、サーバ計算機（１）と、サーバ計算機（２）と、二つのローカルフラッシュメモリデバイス（図ではNVMe  Local  Flashと省略）と、ストレージコントローラと、記憶デバイスとを含む。二つのローカルフラッシュメモリデバイスは、サーバ計算機（１）及び（２）にPCIeで夫々接続されている。ストレージコントローラは、サーバ計算機（１）及び（２）にFCで接続されている。サーバ計算機（１）はアプリケーションを実行する。ストレージコントローラは、記憶デバイスを用いて、SCSIをサポートするLogical  Unit（図ではSCSI  Logical  Unitと記載）を提供する。
【０１２５】
旧システムにてアプリケーションが以下の設定で利用されていたとする：
＊アプリケーションは、一時的に生成するデータを、NVMeをサポートするローカルフラッシュメモリデバイスのNSに格納し、非一時的なデータを、ストレージコントローラにより提供されるLogical  Unitに格納する。これによってアプリケーションの高速処理を実現する。
＊仮にサーバ計算機（１）が停止した場合、サーバ計算機（２）がアプリケーションの処理を再開する。ただし、サーバ計算機（２）はサーバ計算機（１）によりローカルフラッシュメモリデバイスに格納されたデータを引き継げないため、サーバ計算機（２）はFC経由でLogical  Unitからデータを読み込み、処理を再開する。
【０１２６】
このようなアプリケーションを旧システムからCPFに移行させることができる。CPFは、サーバ計算機（１）と、サーバ計算機（２）と、ストレージコントローラと、フラッシュメモリデバイス（図ではFlashと省略）とを含む。CPFは、各サーバ計算機に接続されたローカルフラッシュメモリデバイスに代えて、ストレージコントローラに接続されたフラッシュメモリデバイスを用いる。ストレージコントローラは、フラッシュメモリデバイスを用いて、SCSIをサポートするLogical  Unitと、NVMeをサポートするnamespace（図ではNVMe  Namespaceと記載）とを提供する。サーバ計算機（１）のアプリケーションは、共有データ領域であるNSに一時データを書き込み、NSから一時データを読み出すことにより、処理を実行する。サーバ計算機（１）の障害等により、サーバ計算機（２）が、サーバ計算機（１）のアプリケーションの処理をサーバ計算機（２）へ引き継ぐことを判定した場合、サーバ計算機（２）は、NSから一時データを読み出し処理を引き継いで実行する。
このような構成によれば、以下のメリットが得られる：
＊フラッシュメモリデバイスの保守を集約できる。
＊フラッシュメモリデバイスに対してストレージコントローラのエンタープライズ向け機能を用いることにより、信頼性、冗長性、高機能性、保守・管理容易性が向上できる。
【０１２７】
更に、アプリケーション設定を変更し、NSに格納された一時データを、サーバ計算機間で引き継ぐようにすれば、障害等によるサーバ計算機（１）からサーバ計算機（２）への切り替え時間が短縮でき、アプリケーションのMTBF（Mean  Time  Between  Failure）が向上する他、サーバ計算機間の切り替えが容易となることから、保守・管理容易性が向上する。また、従来はSCSIのLogical  Unitに格納していた非一時的なデータをNVMeのNSに格納できるため、アプリケーション処理性能が更に向上する。
【０１２８】
＜LUにシンプロビジョニング及びティアリングを適用する場合＞
【０１２９】
以下、ストレージコントローラ３がシンプロビジョニング及びティアリングを適用するLUを提供し、サーバ側PCIe  I/Fデバイス４がそのLUをNSに関連付ける場合について説明する。シンプロビジョニングは、仮想ボリュームをサーバ計算機２へ提供し、サーバ計算機２から仮想ボリュームへのアクセスに基づいて、プール内の記憶領域を仮想ボリュームに割り当てる。シンプロビジョニングは、容量仮想化とも呼ばれる。ティアリングは、サーバ計算機２から書き込まれるデータを複数の種類の記憶媒体の何れかに配置する。ティアリングは、階層制御仮想化や自動階層化とも呼ばれる。
【０１３０】
≪ストレージコントローラ３におけるデータの構成≫
【０１３１】
図１１は、ストレージコントローラ３におけるデータの構成を示す。
【０１３２】
ストレージコントローラ３はメモリ３２に、LU管理テーブル３５１と、仮想ボリューム管理テーブル３５２と、プール管理テーブル３５３と、論理ボリューム管理テーブル３５４と、マッピング管理テーブル３５５とを格納する。
【０１３３】
図１２は、LU管理テーブル３５１を示す。
【０１３４】
LU管理テーブル３５１は、LU毎のエントリを含む。一つのLUに対応するエントリは、LUNと、ボリューム種別及びボリューム番号と、LU容量とを含む。LUNは、当該LUを示す識別子である。ボリューム種別は、当該LUに割り当てられたボリュームの種別であり、当該ボリュームが仮想ボリュームであるか論理ボリュームであるかを示す。ボリューム番号は、ボリューム種別に応じて当該ボリュームを示す仮想ボリューム番号又は論理ボリューム番号である。LU容量は、当該ボリュームの容量である。当該LUがサーバ計算機２によりNVMeでアクセスされる場合、NSの容量はLU容量である。シンプロビジョニングを用いるLUにおいて、ボリューム種別は仮想ボリュームを示し、ボリューム番号は仮想ボリューム番号を示す。シンプロビジョニングを用いないLUにおいて、ボリューム種別は論理ボリュームを示し、ボリューム番号は論理ボリューム番号を示す。なお、LUNは少なくともストレージポート（仮想ストレージポートを含む）毎に独立した番号空間を持つため、本テーブルは複数存在してもよく、より具体的にはストレージポート毎に存在してもよい。
【０１３５】
図１３は、仮想ボリューム管理テーブル３５２を示す。
【０１３６】
仮想ボリューム管理テーブル３５２は、仮想ボリューム毎のエントリを含む。一つの仮想ボリュームに対応するエントリは、仮想ボリューム番号と、仮想ボリューム属性と、仮想ボリューム容量と、使用プール番号（＃）と、使用Tier番号（＃）とを含む。仮想ボリューム番号は、当該仮想ボリュームのボリューム番号である。仮想ボリューム属性は、当該仮想ボリュームに対してアクセスするサーバ計算機２側のプロトコルであり、NVMeであるかSCSIであるかを示す。仮想ボリューム容量は、当該仮想ボリュームのボリューム容量であり、当該仮想ボリュームの作成時にストレージコントローラ３の管理者により設定される。使用プール番号は、当該仮想ボリュームに関連付けられるプールを示すプール番号である。使用Tier番号は、当該仮想ボリュームに関連付けられるTierを示すTier番号である。Tier番号が小さいほど記憶デバイスの性能が高い。例えば、Tier１の記憶デバイスとしてSSDが割り当てられ、Tier２の記憶デバイスとして、SSDよりアクセス性能が低くコストが低いSAS  HDDが割り当てられ、Tier３の記憶デバイスとして、SAS  HDDよりアクセス性能が低くコストが低いSCSI  HDDが割り当てられる。この例において、SCSIコマンドにより仮想ボリューム＃１を指定して書き込まれるデータは、Tier１〜３の何れかに格納される。SCSIコマンドにより仮想ボリューム＃２を指定して書き込まれるデータは、Tier１及び２の何れかに格納される。NVMeコマンドにより仮想ボリューム＃３を指定して書き込まれるデータは、Tier１及び２の何れかに格納される。仮想ボリューム＃３を用いて、アクセスが少ないデータをTier２に配置することで、記憶デバイスのコストを削減することができる。NVMeコマンドにより仮想ボリューム＃４を指定して書き込まれるデータは、必ずTier１に格納される。仮想ボリューム＃４を用いることにより、高性能な共有データ領域を提供することができる。SCSIによりアクセスされる二つの仮想ボリューム＃１、＃２は、一つのプール＃１を共有している。NVMeによりアクセスされる二つの仮想ボリューム＃３、＃４は、二つのプール＃２、＃３に夫々関連付けられている。
【０１３７】
このように、サーバ計算機２により用いられるプロトコルとTierの構成を関連付けることにより、サーバ計算機２は、アクセスに用いるプロトコルによってアクセス性能や記憶媒体のコストを使い分けることができる。また、NVMeコマンドによりアクセスするボリュームを、フラッシュメモリ等の最上位の階層に固定することで、フラッシュメモリによる高速アクセスを維持しつつ、プールやティア導入による管理容易化を達成できる。
【０１３８】
図１４は、プール管理テーブル３５３を示す。
【０１３９】
プール管理テーブル３５３は、プール毎のエントリを含む。一つのプールに対応するエントリは、プール番号（＃）と、プール属性と、プール容量と、割当済容量と、枯渇閾値と、登録論理ボリューム番号（＃）とを含む。プール番号は、当該プールを示す識別子である。プール属性は、当該プールに関連付けられたプロトコルであり、サーバ計算機２がアクセスにNVMe及びSCSIの何れを用いるかを示し、当該プールの作成時に管理者により設定される。プール容量は、当該プールの容量であり、当該プールに登録された論理ボリュームの容量の合計である。割当済容量は、当該プールから仮想ボリュームに割り当てられたページの容量の合計を示す。枯渇閾値は、プール容量に対する割当済容量の割合の閾値である。ストレージコントローラ３は、当該プールのプール容量に対する割当済容量の割合が枯渇閾値を超えると、当該プールに論理ボリュームを追加することを要求するアラートを管理計算機７に通知する。登録論理ボリューム番号は、当該プールに登録された論理ボリュームを示す論理ボリューム番号であり、Tier毎に設定される。論理ボリューム番号に予め「禁止」と設定されているTierには、論理ボリュームを追加することができないことを示す。
【０１４０】
このプール管理テーブル３５３によれば、ストレージコントローラ３は、プールにTier毎の論理ボリュームを割り当てることができる。また、ストレージコントローラ３は、プール容量と割当済容量を管理することにより、プール容量の不足を検出でき、管理者への通知を行うことができる。
【０１４１】
図１５は、論理ボリューム管理テーブル３５４を示す。
【０１４２】
論理ボリューム管理テーブル３５４は、論理ボリューム毎のエントリを含む。一つの論理ボリュームに対応するエントリは、論理ボリューム番号（＃）と、記憶媒体と、論理ボリューム容量と、登録先プール番号（＃）と、登録先LUNとを含む。論理ボリューム番号は、当該論理ボリュームの識別子である。記憶媒体は、当該論理ボリュームを構成する記憶媒体の種別を表す識別子であり、例えばSSD、SAS（HDD）、SATA（HDD）の何れかを示す。論理ボリューム容量は、当該論理ボリュームの容量である。登録先プール番号は、当該論理ボリュームの登録先のプールのプール番号である。登録先LUNは、当該論理ボリュームの登録先のLUのLUNである。シンプロビジョニングを用いる場合、論理ボリュームは、プールに関連付けられる。シンプロビジョニングを用いない場合、論理ボリュームは、LUに関連付けられる。プール及びLUの何れにも関連付けられていない論理ボリュームは、予備の論理ボリュームである。ストレージコントローラ３は、管理者により追加された論理ボリュームを、予備の論理ボリュームとして論理ボリューム管理テーブル３５４に登録する。予備の論理ボリュームは例えば、プール容量が枯渇した場合に当該プールへ追加される。複数のTierを持つプールには、互いに異なる複数の記憶媒体が割り当てられる。
【０１４３】
なお、SSDは、PCIeやSAS等のインターフェースを有していても良い。互いに異なるインターフェースを有する複数の種類のSSDがストレージコントローラ３に接続されている場合、それら複数の種類が複数のTierに夫々割り当てられても良い。
【０１４４】
この論理ボリューム管理テーブル３５４によれば、ストレージコントローラ３は、論理ボリュームに割り当てられる記憶媒体の種類を管理することができる。これにより、ストレージコントローラ３は、Tierに適した記憶媒体を論理ボリュームに割り当てることができる。
【０１４５】
マッピング管理テーブル３５５は、仮想ボリュームにおける仮想ページとプールに割り当てられた論理ボリューム内の論理ページとの第１の関係と、論理ボリュームのアドレス（論理ボリューム論理アドレスと呼ぶ）と記憶デバイスのアドレス（記憶デバイス論理アドレスと呼ぶ）との第２の関係を含む。なお、仮想ページとは、仮想ボリュームのアドレス空間を所定の長さ毎に分割した個々の空間を指す。論理ページとは、論理ボリュームのアドレス空間を所定の長さ（典型的には仮想ページの場合と同じ長さ）毎に分割した個々の空間を指す。
【０１４６】
第１の関係を表すエントリには、仮想ページを表す情報（例えば仮想ボリューム＃と仮想ボリューム論理アドレスの組み）と、当該仮想ページに割り当てられた論理ページを表す情報（例えば論理ボリューム＃と論理ボリューム論理アドレスの組み）との組みが登録される。これによって仮想ボリュームのアドレスを指定したアクセスをプールに割り当てられた論理ボリュームのアドレスに変換することができる。なお、シンプロビジョニングの場合は、仮想ページに論理ページが割り当てられていない場合もある。このような場合は前述の論理ページを表す情報には「割り当てられていない」ことを表す値が入る。なお、第１の関係を表す内容は、シンプロビジョニングを実現できるのであれば他の形態であってもよく、他の情報を含むことを排除するものでもない。例えば、仮想ページと論理ページそれぞれにページ番号を付与し、当該ページ番号で割り当て関係を表現してもよい。
【０１４７】
第２の関係を表す方法は、図６に示した論理ボリュームとパリティグループ、記憶デバイスの関係に依存するが、要は論理ボリューム論理アドレスから記憶デバイス論理アドレスに変換できればよい。仮に１つの論理ボリュームは１つのパリティグループにしか対応しない場合、第２の関係は、その論理ボリュームが対応するパリティグループの識別子と対応させたパリティグループ内のアドレス空間をエントリとする。また、仮に１つの記憶デバイスを複数のパリティグループに跨って割り当てない場合、パリティグループに含まれる記憶デバイスの識別子リストもエントリの一部となる。なお、第２の関係は他の形態で表現されてもよい。
【０１４８】
このマッピング管理テーブル３５５によれば、ストレージコントローラ３は、仮想ボリューム内のアドレスに対応する論理ボリューム内のアドレスを取得することができる。また、ストレージコントローラ３は、論理ボリューム内のアドレスに対応する記憶デバイス内のアドレスを取得することができる。
【０１４９】
≪仮想ボリューム作成処理≫
【０１５０】
図１６は、仮想ボリューム作成処理を示す。
【０１５１】
仮想ボリューム作成処理は、以下の処理を含む：
（Ｓ２１１０）管理者が管理計算機７に仮想ボリューム作成画面を表示させ、その画面上で仮想ボリュームの作成の指示を入力すると、管理計算機７は、その指示をストレージコントローラ３へ発行する。
（Ｓ２１２０）その後、ストレージコントローラ３は、指示に基づいて、当該仮想ボリュームの仮想ボリューム属性がNVMeであるか否かを判定する。仮想ボリューム属性がNVMeでない、即ち仮想ボリューム属性がSCSIであると判定された場合（SCSI）、ストレージコントローラ３は、処理をＳ２１５０へ移行させる。一方、仮想ボリューム属性がNVMeであると判定された場合（NVMe）、ストレージコントローラ３は、処理をＳ２１３０へ移行させる。
（Ｓ２１３０）ストレージコントローラ３は、プール管理テーブル３５３にNVMe用プールのエントリを追加し、指示に基づいてTier毎の論理ボリュームの登録の許可又は禁止を設定する。
（Ｓ２１４０）その後、ストレージコントローラ３は、当該プールを指定して論理ボリュームを登録する論理ボリューム登録処理を行う。
（Ｓ２１５０）その後、ストレージコントローラ３は、仮想ボリューム管理テーブル３５２に当該プールに関連付けられた仮想ボリュームのエントリを追加し、このフローを終了する。
【０１５２】
この仮想ボリューム作成処理によれば、ストレージコントローラ３は、サーバ計算機２がNVMeコマンドを用いてアクセスする仮想ボリュームを作成すると共に、その仮想ボリュームに割り当てるプールを作成することができる。これにより、ストレージコントローラ３は、作成されたプールを、一つの仮想ボリュームだけに割り当て、仮想ボリュームの容量を管理すると共に、仮想ボリュームに対応するプールの容量を管理することができる。なお、複数のNVMe向け仮想ボリュームがプールを共有する場合は、Ｓ２１３０及びＳ２１４０においてストレージコントローラ３は、SCSIの場合と同様に好適なプールを選択し（選択は管理者からプールの識別子を受信する方法や管理計算機が所定の基準で選択する方法がある）、Ｓ２１５０に進むことが考えられる。
【０１５３】
図１７は、仮想ボリューム作成画面を示す。
【０１５４】
仮想ボリューム作成画面は、仮想ボリューム番号と、アクセスプロトコルと、仮想ボリューム容量と、利用記憶階層と、次ボリュームボタンと、完了ボタンとを含む。仮想ボリューム番号には、作成される仮想ボリュームの仮想ボリューム番号が入力される。アクセスプロトコルには、当該仮想ボリュームの仮想ボリューム属性となるアクセスプロトコルとしてSCSI及びNVMeの何れかが入力される。仮想ボリューム容量には、当該仮想ボリュームの仮想ボリューム容量が入力される。利用記憶階層は、Tier毎のエントリを含む。一つのTierに対応するエントリには、当該Tierに対応する記憶媒体が表示され、当該Tierの利用の許可又は禁止（不許可）が入力される。次ボリュームボタンが押されると、管理計算機７は、次の仮想ボリュームの設定のための仮想ボリューム作成画面を表示する。完了ボタンが押されると、管理計算機７は、仮想ボリューム作成画面において入力された値を含む指示をストレージコントローラ３へ発行する。
【０１５５】
この例において、Tier１に割り当てられる記憶デバイスの記憶媒体の種類は、SSDである。SSDはFlash  I/F３７２に接続されている。Flash  I/F３７２はPCIeやSAS等である。Tier２に割り当てられる記憶デバイスの記憶媒体の種類は、SAS  HDDである。SAS  HDDは、Disk  I/F３４に接続されている。このDisk  I/F３４はSASである。Tier３に割り当てられる記憶デバイスの記憶媒体の種類は、SATA  HDDである。SATA  HDDは、Disk  I/F３４に接続されている。このDisk  I/F３４はSATAである。
【０１５６】
図１８は、論理ボリューム登録処理を示す。
【０１５７】
ストレージコントローラ３は、指定されたプールの利用記憶階層の情報に基づいて、当該プールへの登録が許可されているTier毎に論理ボリューム登録処理を行う。指定されたプール及びTierに対する論理ボリューム登録処理は、以下の処理を含む：
（Ｓ２２１０）ストレージコントローラ３は、論理ボリューム管理テーブル３５４を検索し、指定されたプールに適合する論理ボリュームがあるか否かを判定する。ここで適合する論理ボリュームは、予備の論理ボリュームで、且つ指定されたTierに対応する記憶媒体の論理ボリュームである。当該プールに適合する論理ボリュームがあると判定された場合（Yes）、ストレージコントローラ３は処理をＳ２２４０へ移行させる。一方、当該プールに適合する論理ボリュームがないと判定された場合（No）、ストレージコントローラ３は処理をＳ２２２０へ移行させる。
（Ｓ２２２０）ストレージコントローラ３は、アラートを管理計算機７へ報告することにより、管理者に対し新たな論理ボリュームの追加を促す。
（Ｓ２２３０）その後、ストレージコントローラ３は、当該プールに適合する論理ボリュームが追加されたか否かを判定する。当該プールに適合する論理ボリュームが追加されていないと判定された場合（No）、ストレージコントローラ３は、Ｓ２２３０を繰り返す。一方、当該プールに適合する論理ボリュームが追加されたと判定された場合（Yes）、ストレージコントローラ３は、処理をＳ２２４０へ移行させる。
（Ｓ２２４０）ストレージコントローラ３は、当該プールに適合すると判定された論理ボリュームの情報を、論理ボリューム管理テーブルとプール管理テーブルへ追加し、このフローを終了する。ここで、複数の論理ボリュームが当該プールに適合すると判定された場合、ストレージコントローラ３は、これらの複数の論理ボリュームの中から予め定められた番号順に論理ボリュームを選択してもよい。
【０１５８】
論理ボリューム登録処理によれば、ストレージコントローラ３は、指定されたプール及びTierに適した論理ボリュームを当該プールへ登録することができる。
【０１５９】
≪仮想ボリュームに対するWrite処理≫
【０１６０】
サーバ計算機２がサーバ側PCIe  I/Fデバイス４へNVMeのWriteコマンドを送信した場合、前述のNVMeコマンド処理によりサーバ側PCIe  I/Fデバイス４は、前述のNVMeコマンド処理によりサーバ側PCIe  I/Fデバイス４はNVMeのWriteコマンドをSCSIのWriteコマンドに変換してストレージコントローラ３へ送信する。ここで、NVMeのWriteコマンドは、NSを指定する。変換されたSCSIのWriteコマンドは、NSに関連付けられたLUを指定する。その後、ストレージコントローラ３は、仮想ボリュームへ書き込むWrite処理を行う。
【０１６１】
図１９は、仮想ボリュームに対するWrite処理を示す。
【０１６２】
Write処理は、以下の処理を含む：
（Ｓ８３１０）ストレージコントローラ３は、SCSIのWriteコマンドを受信すると、ライトデータの転送要求をサーバ側PCIe  I/Fデバイス４へ送信する。その後、サーバ側PCIe  I/Fデバイス４は、サーバ計算機２のメモリ２２に格納されたライトデータを、ストレージコントローラ３のメモリ３２（キャッシュメモリ）へ転送する。
（Ｓ８３２０）その後、ストレージコントローラ３は、LU管理テーブル３５１を参照し、サーバ側PCIe  I/Fデバイス４からのWriteコマンドにより指定されたLUに対応する仮想ボリュームを選択する。その後、ストレージコントローラ３は、マッピング管理テーブル３５５を参照し、当該仮想ボリューム内でWriteコマンドにより指定されたライト対象の仮想ボリューム論理アドレスにページが割り当てられているか否かを判定する。ライト対象の仮想ボリューム論理アドレスにページが割り当てられていると判定された場合、ストレージコントローラ３は、処理をＳ８３６０へ移行させる。一方、ライト対象の仮想ボリューム論理アドレスにページが割り当てられていないと判定された場合、ストレージコントローラ３は、処理をＳ８３３０へ移行させる。
（Ｓ８３３０、Ｓ８３４０、Ｓ８３５０）ストレージコントローラ３は、ライト対象の仮想ボリューム論理アドレスへ、当該仮想ボリュームに対応するプールから未使用（新規）ページを割り当てる。その後、ストレージコントローラ３は、割り当てられたページの情報をマッピング管理テーブル３５５に追加する。その後、ストレージコントローラ３は、プール管理テーブル３５３における当該プールの割当済容量を当該ページのサイズだけ増加させる。
（Ｓ８３６０）その後、ストレージコントローラ３は、非同期でメモリ３２内のライトデータを記憶デバイスへ書き込む非同期デステージを行う。ここで、ストレージコントローラ３は、マッピング管理テーブル３５５に基づいて、ライト対象に対応するページに対応する記憶デバイス論理アドレスを取得し、その記憶デバイス論理アドレスへ書き込む。
（Ｓ８３７０）その後、ストレージコントローラ３は、プール管理テーブル３５３に基づいて、当該プールのプール容量に対する割当済容量の割合が枯渇閾値を超えたか否かを判定する。当該割合が枯渇閾値を超えていないと判定された場合、ストレージコントローラ３は、このフローを終了する。一方、当該割合が枯渇閾値を超えたと判定された場合、ストレージコントローラ３は、処理をＳ８３８０へ移行させる。
（Ｓ８３８０）ストレージコントローラ３は、当該プールを指定して前述の論理ボリューム登録処理を行い、このフローを終了する。
【０１６３】
このWrite処理によれば、サーバ計算機２がNVMeのWriteコマンドを発行した場合でも、SCSIのWriteコマンドと同様にして、シンプロビジョニングの仮想ボリュームへデータを書き込むことができる。
【０１６４】
≪NVMeコマンド応答処理≫
【０１６５】
前述のNVMeコマンド処理において、サーバ計算機２がサーバ側PCIe  I/Fデバイス４へNVMeコマンドを送信した場合、サーバ側PCIe  I/Fデバイス４はNVMeコマンドをSCSIコマンドに変換してストレージコントローラ３へ送信する。その後、ストレージコントローラ３は、サーバ側PCIe  I/Fデバイス４を介してサーバ計算機２へ応答を送信するNVMeコマンド応答処理を行う。
【０１６６】
図２０は、NVMeコマンド応答処理を示す。
【０１６７】
NVMeコマンド応答処理は、サーバ計算機２と、サーバ側PCIe  I/Fデバイス４と、ストレージコントローラ３とにより行われる。NVMeコマンド応答処理は、以下の処理を含む：
（Ｓ８２１０、Ｓ８２２０）ストレージコントローラ３は、サーバ側PCIe  I/Fデバイス４からのSCSIコマンドに応じた処理を実行し、そのSCSIコマンドに対するSCSI形式の応答をサーバ側PCIe  I/Fデバイス４へ送信する。
（Ｓ８２３０、Ｓ８２４０、Ｓ８２５０）その後、サーバ側PCIe  I/Fデバイス４は、ストレージコントローラ３からのSCSI形式の応答を受信し、受信された応答をNVMe形式の応答に変換し、変換された応答をサーバ計算機２へ送信する。
（Ｓ８２６０）その後、サーバ計算機２は、サーバ側PCIe  I/Fデバイス４からのNVMe形式の応答を受信し、このフローを終了する。
【０１６８】
以上のNVMeコマンド応答処理によれば、ストレージコントローラ３は、SCSIに準拠したプログラムに従って、SCSIコマンドに対する応答をサーバ側PCIe  I/Fデバイス４へ送信することができ、サーバ計算機２は、NVMeに準拠したプログラムに従って、サーバ側PCIe  I/Fデバイス４からの応答を処理することができる。また、このNVMeコマンド応答処理によれば、サーバ計算機２は、Identifyコマンドをサーバ側PCIe  I/Fデバイス４へ発行することにより、応答パラメータを取得することができる。
【０１６９】
≪Identifyコマンドの応答≫
【０１７０】
図２１は、Identifyコマンドの応答と記憶容量の関係を示す。
【０１７１】
NVMeコマンドの一つであるIdentifyコマンドは、NSを指定し、当該NSのシンプロビジョニングの状況を取得する。非特許文献１に記載されているように、Identifyコマンドの応答は、複数のパラメータのフィールドを含む。複数のパラメータは、Namespace  Size（以後、NS  Sizeと省略）と、Namespace  Capacity（以後、NS  Capacityと省略）と、Namespace  Utilization（以後、NS  Utilizationと省略）と、Namespace  Features（以後、NS  Featuresと省略）とを含む。NS  Sizeは、当該NSの合計サイズを論理ブロック数で表す。一つの論理ブロックは、一つのLBAに対応する。論理ブロックのサイズであるLBAサイズは例えば５１２Bである。本実施例におけるNS  Sizeは、当該NSに関連付けられたLUのLU容量、又は当該LUに割り当てられた仮想ボリュームの仮想ボリューム容量に対応する。NS  Capacityは、当該NSに割り当てることができるプールのプール容量を論理ブロック数で表す。本実施例におけるNS  Capacityは、当該LUに関連付けられたプールのプール容量に対応する。NS  Utilizationは、当該NSに割り当てられた記憶領域の合計サイズを論理ブロック数で表す。本実施例におけるNS  Utilizationは、当該プールから当該仮想ボリュームに割り当てられたページの合計の容量である割当済容量に対応する。NS  Featuresは、当該NSがシンプロビジョニングをサポートしているか否かを示す。
【０１７２】
ストレージコントローラ３は例えば、プールから仮想ボリュームへ割り当てられる記憶領域をページ単位で管理する。ページのサイズは例えば４２MBである。
【０１７３】
サーバ計算機２のユーザから見ると、NS  CapacityからNS  Utilizationを減じた値が当該NSの空き領域の容量に相当する。もし複数のNSが一つのプールを共有すると、サーバ計算機２のユーザが使用するNSの空き領域が、別のサーバ計算機２のユーザが使用する別のNSにより消費される場合がある。したがって、一つのNSが一つのプールに対応することが望ましい。
【０１７４】
≪Inquiry処理≫
【０１７５】
サーバ計算機２がNSを指定するIdentifyコマンドを発行すると、前述のNVMeコマンド処理により、サーバ側PCIe  I/Fデバイス４は、NVMeのIdentifyコマンドをSCSIのInquiryコマンドに変換してストレージコントローラ３へ送信する。これにより、IdentifyコマンドにおけるNSは、InquiryコマンドにおいてLUに変換される。その後、ストレージコントローラ３は、前述のNVMeコマンド応答処理のＳ８１２０として、Inquiryコマンドに応じたInquiry処理を行う。
【０１７６】
図２２は、Inquiry処理を示す。
【０１７７】
Inquiry処理は以下の処理を含む：
（Ｓ８４１０）ストレージコントローラ３は、LU管理テーブル３５１に基づいて、Inquiryコマンドにより指定されたLUに対応する仮想ボリュームを特定し、仮想ボリューム管理テーブル３５２に基づいて、当該Inquiryコマンドにより指定されたLUに対応する仮想ボリューム属性がNVMeであるか否かを判定する。仮想ボリューム属性がNVMeでない、即ち仮想ボリューム属性がSCSIであると判定された場合、ストレージコントローラ３は、処理をＳ８４３０へ移行させる。一方、仮想ボリューム属性がNVMeであると判定された場合、ストレージコントローラ３は、処理をＳ８４３０へ移行させる。
（Ｓ８４２０）ストレージコントローラ３は、仮想ボリューム管理テーブル３５２から当該仮想ボリュームの仮想ボリューム容量を取得し、プール管理テーブル３５３から当該仮想ボリュームに対応するプールのプール容量及び割当済容量を取得し、取得された情報に基づいて、NVMe規格に示された次の応答パラメータを算出する。
NS  Size  ＝  仮想ボリューム容量÷LBAサイズ
NS  Capacity  ＝  プール容量÷LBAサイズ
NS  Utilization  ＝  割当済容量÷LBAサイズ
割当済容量が割当済ページ数で表されている場合、ストレージコントローラ３は、割当済ページ数にページサイズを乗じた値を割当済容量として算出する。更にストレージコントローラ３は、当該LUに仮想ボリュームが関連付けられている場合、即ち当該LUにシンプロビジョニングを用いる場合、NS  Featuresを１に設定し、当該LUに論理ボリュームが関連付けられている場合、即ち当該LUにシンプロビジョニングを用いない場合、NS  Featuresを０に設定する。NVMe規格では、NS  Size  ≧  NS  Capacity  ≧  NS  Utilizationの関係が定められている。ストレージコントローラ３は、プール容量が仮想ボリューム容量より大きい場合、応答パラメータにおけるNS  CapacityをNS  Sizeに一致させる。これにより、ストレージコントローラ３は、NVMe規格に準拠した応答パラメータを算出することができる。
（Ｓ８４３０）その後、ストレージコントローラ３は、応答パラメータを用いてSCSIのInquiryコマンドの応答パケットを作成してサーバ側PCIe  I/Fデバイス４へ送信し、このフローを終了する。例えば、ストレージコントローラ３は、Inquiryコマンドの応答パケットのフォーマットの空き領域に、NS  Size、NS  Capacity、NS  Utilization、NS  Featuresを含める。サーバ側PCIe  I/Fデバイス４は、Inquiryの応答パケットをIdentifyの応答パケットに変換してサーバ計算機２へ送信する。これにより、ストレージコントローラ３がNVMeを解釈しない場合であっても、サーバ計算機２はNVMe規格に準拠した応答パケットを受信することができる。
【０１７８】
以上に説明したように、LUにシンプロビジョニングを適用することにより、複数のサーバ計算機２は、容量仮想化されたNSを共有することができる。また、記憶容量の設計や初期の記憶デバイスのコストを低減することができる。更に、NUにティアリングを適用することにより、複数のサーバ計算機２は、自動階層化されたNSを共有することができる。また、例えば、アクセス頻度が高いデータを、高性能な階層に配置することでアクセス性能を向上させ、アクセス頻度が低いデータを低価格な階層に配置することで記憶容量に対するコストを低減することができる。
【０１７９】
＜LUにシンプロビジョニングを適用しティアリングを適用しない場合＞
【０１８０】
前述のようにLUにシンプロビジョニング及びティアリングを適用した場合と比較して、シンプロビジョニングを適用しティアリングを適用しない場合の差異について説明する。
【０１８１】
シンプロビジョニングを適用しティアリングを適用しない場合、ストレージコントローラは、仮想ボリューム管理テーブル３５２の代わりに仮想ボリューム管理テーブル３５２ｂを用い、プール管理テーブル３５３の代わりにプール管理テーブル３５３ｂを用い、論理ボリューム管理テーブル３５４の代わりに論理ボリューム管理テーブル３５４ｂを用いる。
【０１８２】
図２３は、シンプロビジョニングを適用しティアリングを適用しない場合の仮想ボリューム管理テーブル３５２ｂを示す。仮想ボリューム管理テーブル３５２と比較すると、仮想ボリューム管理テーブル３５２ｂは、使用Tier番号を含まない。
【０１８３】
図２４は、シンプロビジョニングを適用しティアリングを適用しない場合のプール管理テーブル３５３ｂを示す。プール管理テーブル３５３の登録論理ボリューム番号が、Tier毎の論理ボリューム番号を示すのに対し、プール管理テーブル３５３ｂの登録論理ボリューム番号は、当該プールに登録された論理ボリュームの論理ボリューム番号を示す。
【０１８４】
図２５は、シンプロビジョニングを適用しティアリングを適用しない場合の論理ボリューム管理テーブル３５４ｂを示す。論理ボリューム管理テーブル３５４と比較すると、論理ボリューム管理テーブル３５４ｂでは、一つのプールに対して、同一の記憶媒体に基づく論理ボリュームが割り当てられている。
【０１８５】
図２６は、シンプロビジョニングを適用しティアリングを適用しない場合の仮想ボリューム作成画面を示す。ティアリングを適用する場合と比較すると、この仮想ボリューム作成画面は、利用記憶階層の項目を必要としない。
【０１８６】
これにより、複数のサーバ計算機２は、容量仮想化されたNSを共有することができる。また、記憶容量の設計や初期の記憶デバイスのコストを低減することができる。
【０１８７】
＜LUにシンプロビジョニングを適用せずティアリングを適用する場合＞
【０１８８】
前述のようにLUにシンプロビジョニング及びティアリングを適用した場合と比較して、シンプロビジョニングを適用せずティアリングを適用する場合の差異について説明する。
【０１８９】
図２７は、シンプロビジョニングを適用しない場合のIdentifyコマンドの応答と記憶容量の関係を示す。
【０１９０】
シンプロビジョニングを適用しないLUに対するIdentifyコマンドに応じたInquiry処理において、ストレージコントローラ３は、NS  SizeをNS  Capacityに等しくする。
【０１９１】
シンプロビジョニングを適用しティアリングを適用しない場合、ストレージコントローラは、LU管理テーブル３５１の代わりにLU管理テーブル３５１ｃを用い、仮想ボリューム管理テーブル３５２及びプール管理テーブル３５３を用いない。
【０１９２】
図２８は、シンプロビジョニングを適用せずティアリングを適用する場合のLU管理テーブル３５１ｃを示す。
【０１９３】
シンプロビジョニングを適用せずティアリングを適用する場合、ストレージコントローラ３は、複数のTierに夫々対応する複数の論理ボリュームを一つのLUに割り当て、それら複数の論理ボリュームの容量の合計をLU容量として、LU管理テーブル３５１ｃに登録する。
【０１９４】
これにより、複数のサーバ計算機２は、自動階層化されたNSを共有することができる。また、例えば、アクセス頻度が高いデータを、高性能な階層に配置することでアクセス性能を向上させ、アクセス頻度が低いデータを低価格な階層に配置することで記憶容量に対するコストを低減することができる。
【０１９５】
計算機システムは、インターフェースデバイスとして、サーバ側PCIe  I/Fデバイス４やストレージ側PCIe  I/Fデバイス８等の仲介デバイスを含んでもよい。計算機システムは、通信機構としてバックプレーン等の基板を含んでもよいし、通信機構としてブレードサーバシステムのシャーシとストレージコントローラのシャーシとPCIe接続用ケーブル等を含んでもよい。計算機システムは、複数のサーバ計算機、ストレージコントローラ、及び通信機構を収容する筐体として、シャーシ、ラック等を含んでもよい。サーバ計算機は、サーバ側RCとしてRC２４等を含んでもよい。サーバ計算機は、ストレージ側RCとしてRC３３等を含んでもよい。インターフェースデバイスは、第１EPとしてEP４１等を提供し、第２EPとして第１EPと異なるEP４１等を提供してもよい。インターフェースデバイスは、第３EPとしてEP４２等を提供してもよい。サーバ計算機は、第１データとして一時データ又は引き継ぎに必要なデータ等を用いてもよく、第２データとして引き継ぎに不要なデータ等を用いてもよい。計算機システムは、ローカル不揮発メモリデバイスとして、Localフラッシュメモリデバイス等を含んでもよい。計算機システムは、仮想記憶領域として、仮想ボリューム等を用いてもよい。計算機システムは、共有記憶領域として、論理ボリューム等を用いてもよい。計算機システムは、特定規格として、SCSI等を用いてもよい。計算機システムは、複数の記憶デバイスとして、SSD、SAS  HDD、及びSATA  HDD等を夫々含んでもよい。サーバ計算機は、第１プログラムとして、NVM制御プログラム２２２等を用いても良い。サーバ計算機は、第２プログラムとして、SCSI制御プログラム２２４等を用いても良い。第１フィールドとして、NS  Sizeのフィールド等が用いられても良い。第２フィールドとして、NS  Capacityのフィールド等が用いられても良い。第３フィールドとして、NS  Utilizationのフィールド等が用いられても良い。
【０１９６】
なお、以上の説明では、サーバ計算機２からのNVMeコマンドにより指定されるNSと、サーバ計算機２からのSCSIリクエストにより指定されるSCSI  LUNとに、別々のプールが対応づけられている場合について説明した。これは例えばNSに対して高負荷なアクセスがなされた場合にSCSI  LUNに対して影響が及ばないようにリソースを分離する意味を持つ。しかし、容量利用効率を優先させてNSとSCSI  LUNとに、共通のプールが対応づけられてもよい。
【０１９７】
以上で説明を終える。なお、以上で説明したポイントのいくつかはNVMeコマンド以外のSCSIコマンドに対しても適用できる場合がある。
【符号の説明】
【０１９８】
１…CPF  ２…サーバ計算機  ３…ストレージコントローラ  ４…サーバ側PCIe  I/Fデバイス  ５…フラッシュメモリデバイス  ６…HDD  ７…管理計算機  ８…ストレージ側PCIe  I/Fデバイス  ９…PCIeスイッチ  ３６…コントロールユニット
【図１】
2018101440.tif 000003
【図２】
2018101440.tif 000004
【図３】
2018101440.tif 000005
【図４】
2018101440.tif 000006
【図５】
2018101440.tif 000007
【図６】
2018101440.tif 000008
【図７】
2018101440.tif 000009
【図８】
2018101440.tif 000010
【図９】
2018101440.tif 000011
【図１０】
2018101440.tif 000012
【図１１】
2018101440.tif 000013
【図１２】
2018101440.tif 000014
【図１３】
2018101440.tif 000015
【図１４】
2018101440.tif 000016
【図１５】
2018101440.tif 000017
【図１６】
2018101440.tif 000018
【図１７】
2018101440.tif 000019
【図１８】
2018101440.tif 000020
【図１９】
2018101440.tif 000021
【図２０】
2018101440.tif 000022
【図２１】
2018101440.tif 000023
【図２２】
2018101440.tif 000024
【図２３】
2018101440.tif 000025
【図２４】
2018101440.tif 000026
【図２５】
2018101440.tif 000027
【図２６】
2018101440.tif 000028
【図２７】
2018101440.tif 000029
【図２８】
2018101440.tif 000030
【手続補正書】
【提出日】平成30年3月8日(2018.3.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサと、
データを格納する不揮発メモリデバイスと、
前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、
を備えた計算機システムにおいて、
前記コントローラは、前記不揮発性メモリデバイスに基づく記憶領域を前記プロセッサに提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを実行し、
前記プログラムは、前記記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記不揮発メモリデバイスは複数の記憶デバイスを備え、
前記コントローラは、namespaceを指定するNVM-Expressコマンドによる前記アクセスに基づいて、前記記憶領域へ書き込まれるデータを前記複数の記憶デバイスの何れかに配置する、
計算機システム。
【請求項２】
前記プロセッサと前記コントローラとの間に設けられたNVM-Expressインタフェースまたは前記コントローラが、NVM-Expressコマンド解釈機能を有し、
前記NVM-Express解釈機能は、前記NVM-Expressコマンドに含まれるnamespaceをLUに変更し、
前記コントローラは、前記LUを用いて前記データを書き込む記憶デバイスを判断する
請求項１に記載の計算機システム。
【請求項３】
前記複数の記憶デバイスには、その特性が異なる記憶デバイスが含まれている
請求項２に記載の計算機システム。
【請求項４】
プロセッサと、
データを格納する不揮発メモリデバイスと、
前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、
を備えた計算機システムにおいて、
前記コントローラは、前記不揮発性メモリデバイスに基づく記憶領域を前記プロセッサに提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを実行し、
前記プログラムは、前記記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記記憶領域にアクセスすることを、前記プロセッサに実行させ、
NVM-Expressコマンドを解釈するNVM-Expressインタフェースが、NVM-Expressコマンドに含まれるnamespaceをLUに変換し、当該LUを含むコマンドを生成し、
前記コントローラまたは前記不揮発メモリデバイスは、前記変換されたLUを含むコマンドに基づいて、処理を行う
計算機システム。
【請求項５】
前記NVM-Expressインタフェースは、
ａ）前記コントローラと前記不揮発メモリデバイスとの間に配置される、
ｂ）前記コントローラである、
ｃ）前記プロセッサと前記コントローラの間に配置される、
のいずれかである
請求項４に記載の計算機システム。
【請求項６】
プロセッサと、
データを格納する不揮発メモリデバイスと、
前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、
を備えた計算機システムにおいて、
前記コントローラは、前記不揮発性メモリデバイスに基づく記憶領域を前記プロセッサに提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを実行し、
前記プログラムは、前記記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記プロセッサが前記namespaceを指定するIdentifyコマンドを発行した場合、前記コントローラは、前記namespaceにかかる記憶領域の容量にかかる値を含む応答を発行する、
計算機システム。
【請求項７】
前記プロセッサと前記コントローラとの間に設けられたNVM-Expressインタフェースまたは前記コントローラが、NVM-Expressコマンド解釈機能を有し、
前記NVM-Express解釈機能は、前記NVM-Expressコマンドに含まれるnamespaceをLUに変更し、
前記コントローラは、前記LUを用いて前記応答を生成する
請求項６に記載の計算機システム。
【請求項８】
前記namespaceにかかる記憶領域の容量には、前記不揮発性メモリデバイスの容量、その容量から前記プロセッサに割り当てている容量のいずれかをLBAサイズで除した値が含まれる
請求項６に記載の計算機システム
【請求項９】
プロセッサと、
データを格納する不揮発メモリデバイスと、
前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、
を備えた計算機システムにおいて、
前記コントローラは、複数のプロセッサで共有する前記不揮発性メモリデバイスに基づく第１共有記憶領域と第２共有記憶領域とを提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行する第１プログラムと、前記NVM-Express規格と異なる特定規格に準拠するコマンドである特定規格コマンドを発行する第２プログラムを実行し、
前記第１プログラムは、前記第１共有記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記第１共有記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記第２プログラムは、前記第２共有記憶領域を指定する特定規格コマンドを発行することにより前記第２共有記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記コントローラは、前記NVM-Expressコマンドによるアクセスに基づいて、データを前記第１共有記憶領域へ書き込み、前記特定規格コマンドによるアクセスに基づいて、データを前記第２共有記憶領域へ書き込む、
計算機システム。
【請求項１０】
プロセッサと、データを格納する不揮発メモリデバイスと、前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、を含む計算機システムによる処理方法であって、
前記コントローラは、前記不揮発性メモリデバイスに基づく記憶領域をプロセッサに提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを実行し、
前記プログラムは、前記記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記不揮発メモリデバイスは複数の記憶デバイスを備え、
前記コントローラは、namespaceを指定するNVM-Expressコマンドによる前記アクセスに基づいて、前記記憶領域へ書き込まれるデータを前記複数の記憶デバイスの何れかに配置する、
処理方法。
【請求項１１】
プロセッサと、データを格納する不揮発メモリデバイスと、前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、を含む計算機システムによる処理方法であって、
前記コントローラは、前記不揮発性メモリデバイスに基づく記憶領域をプロセッサに提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを実行し、
前記プログラムは、前記記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記記憶領域にアクセスすることを、前記プロセッサに実行させ、
NVM-Expressコマンドを解釈するNVM-Expressインタフェースが、NVM-Expressコマンドに含まれるnamespaceをLUに変換し、当該LUを含むコマンドを生成し、
前記コントローラまたは前記不揮発メモリデバイスは、前記変換されたLUを含むコマンドに基づいて、処理を行う、
処理方法。
【請求項１２】
プロセッサと、データを格納する不揮発メモリデバイスと、前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、を含む計算機システムによる処理方法であって、
前記コントローラは、前記不揮発性メモリデバイスに基づく記憶領域をプロセッサに提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行するプログラムを実行し、
前記プログラムは、前記記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記プロセッサが前記namespaceを指定するIdentifyコマンドを発行した場合、前記コントローラは、前記namespaceにかかる記憶領域の容量にかかる値を含む応答を発行する、
処理方法。
【請求項１３】
プロセッサと、データを格納する不揮発メモリデバイスと、前記プロセッサ及び前記不揮発性メモリデバイスに接続され、前記不揮発性メモリデバイスへのデータの入出力を管理するコントローラと、を含む計算機システムによる処理方法であって、
前記コントローラは、複数のプロセッサで共有する前記不揮発性メモリデバイスに基づく第１共有記憶領域と第２共有記憶領域とを提供し、
前記プロセッサは、NVM-Express規格に準拠するコマンドであるNVM-Expressコマンドを発行する第１プログラムと、前記NVM-Express規格と異なる特定規格に準拠するコマンドである特定規格コマンドを発行する第２プログラムを実行し、
前記第１プログラムは、前記第１共有記憶領域に関連付けられたnamespaceを指定するNVM-Expressコマンドを発行することにより前記第１共有記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記第２プログラムは、前記第２共有記憶領域を指定する特定規格コマンドを発行することにより前記第２共有記憶領域にアクセスすることを、前記プロセッサに実行させ、
前記コントローラは、前記NVM-Expressコマンドによるアクセスに基づいて、データを前記第１共有記憶領域へ書き込み、前記特定規格コマンドによるアクセスに基づいて、データを前記第２共有記憶領域へ書き込む、
処理方法。