(57)【要約】  ホスト計算機の起動とNVMeによる高速なデータ転送とを両立する。ホスト計算機の起動時、OSの読み出しを、特定プロトコルに従って指示するコマンドが、ホスト計算機からホスト側バスを介して複数のファンクションの中の特定ファンクションへ発行された場合、インタフェースデバイスは、OSの読み出しを指示するリクエストをコントローラへ発行し、コントローラにより読み出されたOSをホスト計算機へ転送する。ホスト計算機の起動後、コントローラに対するI/Oを、NVMeプロトコルに従って指示するNVMeコマンドが、ホスト計算機からホスト側バスを介して複数のファンクションの中のNVMeファンクションへ発行された場合、インタフェースデバイスは、NVMeコマンドに基づくI/Oリクエストをコントローラへ発行する。
2015194005.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスと、
前記記憶デバイスに接続されるコントローラと、
PCI  Express規格に基づくストレージ側バスを介して前記コントローラに接続され、PCI  Express規格に基づくホスト側バスを介してホスト計算機に接続されるインタフェースデバイスと、
を備え、
前記インタフェースデバイスは、PCI  Express規格に基づく複数のファンクションを前記ホスト計算機へ提供し、
前記ホスト計算機の起動時、前記記憶デバイスに格納されたOSの読み出しを、特定プロトコルに従って指示するコマンドが、前記ホスト計算機から前記複数のファンクションの中の特定ファンクションへ発行された場合、前記インタフェースデバイスは、前記OSの読み出しを指示するリクエストを前記コントローラへ発行し、前記コントローラにより読み出されたOSを前記ホスト計算機へ転送し、
前記ホスト計算機の起動後、前記コントローラに対するI/Oを、NVMeプロトコルに従って指示するNVMeコマンドが、前記ホスト計算機から前記複数のファンクションの中のNVMeファンクションへ発行された場合、前記インタフェースデバイスは、前記NVMeコマンドに基づくI/Oリクエストを前記コントローラへ発行する、
ストレージ装置。
【請求項２】
前記NVMeコマンドが前記ホスト計算機から前記ホスト側バスを介して発行された場合、前記インタフェースデバイスは、前記I/Oリクエストを前記コントローラへ発行し、前記NVMeコマンドに基づくデータを、前記ホスト側バスを介して転送し、
前記コントローラに対するI/Oを、前記特定プロトコルに従って指示する特定コマンドが、前記ホスト計算機から前記ホスト側バスを介して前記特定ファンクションへ発行された場合、前記インタフェースデバイスは、前記特定コマンドに基づく特定リクエストを前記コントローラへ発行し、前記特定コマンドに基づくデータを、前記ホスト側バスを介して転送する、
請求項１に記載のストレージ装置。
【請求項３】
前記インタフェースデバイスは、前記ホスト計算機により生成され前記ホスト計算機内のホストメモリの記憶領域を示すホストメモリ情報と、前記I/Oリクエスト及び前記特定リクエストの何れかに応じて前記コントローラにより生成され前記コントローラ内のストレージメモリの記憶領域を示すストレージメモリ情報とを取得し、前記ホストメモリ情報及び前記ストレージメモリ情報に基づいて、前記ホストメモリ及び前記ストレージメモリの間のDMAを行う、
請求項２に記載のストレージ装置。
【請求項４】
前記インタフェースデバイスは、前記特定コマンドに基づいて前記ストレージ側バスを介するDMAを行い、前記NVMeコマンドに基づいて前記ストレージ側バスを介するDMAを行う、
請求項３に記載のストレージ装置。
【請求項５】
前記コントローラを含む複数のコントローラを備え、
前記インタフェースデバイスは、前記ストレージ側バスを含む複数のストレージ側バスを介して、前記複数のコントローラに夫々接続される、
請求項４に記載のストレージ装置。
【請求項６】
前記インタフェースデバイスは、前記ホスト計算機へ提供されPCI  Express規格に基づく拡張ROM空間に、前記ホスト計算機を起動させるための起動プログラムを格納する不揮発性メモリを含み、
前記ホスト計算機の起動時、前記起動プログラムは、前記ホスト計算機により読み出され、
前記起動プログラムは、前記コマンドを発行することを前記ホスト計算機に実行させる、
請求項５に記載のストレージ装置。
【請求項７】
前記インタフェースデバイスは、複数のプロセッサコアを含み、
前記複数のプロセッサコアの夫々は、前記複数のファンクションの何れかに割り当てられ、前記割り当てられたファンクションを実行する、
請求項６に記載のストレージ装置。
【請求項８】
前記ホスト計算機に格納される特定ドライバは、前記特定コマンドを特定ファンクションへ発行することと、前記複数のファンクションの夫々へ割り当てられるプロセッサコアの数を変更することとを、前記ホスト計算機に実行させる、
請求項７に記載のストレージ装置。
【請求項９】
前記インタフェースデバイスは、前記複数のプロセッサコアの夫々の負荷を計測し、前記負荷を示す負荷情報を記憶し、
前記特定ドライバは、前記負荷情報を読み出し前記負荷情報に基づいて前記変更を行うことを、前記ホスト計算機に実行させる、
請求項８に記載のストレージ装置。
【請求項１０】
前記複数のファンクションは、複数の特定ファンクションと、複数のNVMeファンクションとの何れかを含む、
請求項９に記載のストレージ装置。
【請求項１１】
前記インタフェースデバイスは、前記NVMeコマンドを、前記コントローラのプロトコルに従う前記I/Oリクエストに変換し、
前記インタフェースデバイスは、前記特定コマンドを、前記コントローラのプロトコルに従う前記特定リクエストに変換する、
請求項２に記載のストレージ装置。
【請求項１２】
メモリと、
PCI  Express規格に基づくホスト側バスを介してホスト計算機に接続され、PCI  Express規格に基づくストレージ側バスを介してストレージ装置に接続され、前記メモリに接続されるプロセッサと、
を備え、
前記プロセッサは、PCI  Express規格に基づく複数のファンクションを前記ホスト計算機へ提供し、
前記ホスト計算機の起動時、前記ストレージ装置に格納されたOSの読み出しを、特定プロトコルに従って指示するコマンドが、前記ホスト計算機から前記複数のファンクションの中の特定ファンクションへ発行された場合、前記プロセッサは、前記OSの読み出しを指示するリクエストを前記ストレージ装置へ発行し、前記ストレージ装置により読み出されたOSを前記ホスト計算機へ転送し、
前記ホスト計算機の起動後、前記ストレージ装置に対するI/Oを、NVMeプロトコルに従って指示するNVMeコマンドが、前記ホスト計算機から前記複数のファンクションの中のNVMeファンクションへ発行された場合、前記プロセッサは、前記NVMeコマンドに基づくI/Oリクエストを前記ストレージ装置へ発行する、
インタフェース装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置およびインタフェース装置に関する。
【背景技術】
【０００２】
Storage  Area  Network（SAN）に用いられるプロトコルとして、Fibre  Channel  Protocol（FCP）が知られている。また、不揮発性メモリをターゲットデバイスとしてインタフェースレジスタを最適化したプロトコルであるNVM  Express（NVMe）が知られている。NVMeは、FCPに比べて低負荷で高速なInput/Output（I/O）を可能にする。非特許文献１には、NVMeプロトコルをサポートするSolid  State  Drive（SSD）が開示されている。ここでは、従来のHard  Disk  Drive（HDD）で使用されていたSerial  Advanced  Technology  Attachment（SATA）等のプロトコルを用いるSSDと比較して、NVMeを用いるSSDが低レイテンシのI/Oを可能にすることが述べられている。
【先行技術文献】
【特許文献】
【０００３】
【非特許文献１】"NVM Express: Unlock Your Solid State Drives Potential," http://www.nvmexpress.org/wp-content/uploads/2013-FMS-NVMe-Track.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００４】
サーバ装置のOperating  System（OS）をネットワークからブートする場合、NVMeはOSのブートをサポートしていないため、サーバ装置は他のプロトコルを用いてOSを読み出す必要がある。例えば、OSをブート可能なプロトコルをサポートしたPCI  Express（PCIe）バス・カードと、NVMeをサポートしたPCIeバス・カードとを、サーバ装置に搭載する。この構成は、サーバ装置のバス・スロットを２スロット使用する。サーバ装置は、OSブートに使用するプロトコルのためにバス・スロットを１本占有してしまうため、そのバス・スロットが持つ帯域をNVMeプロトコルでのI/Oに使用できない。【０００５】
また、NVMe規格に準拠したハードウェアは、OSベンダより提供される標準ドライバにより制御することができる。NVMe規格に準拠したハードウェアを作成すれば、デバイスドライバソフトウェアの作成は不要であるが、NVMe規格に規定されていない機能の拡張が困難である。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の一態様であるストレージ装置は、記憶デバイスと、記憶デバイスに接続されるコントローラと、PCI  Express規格に基づくストレージ側バスを介してコントローラに接続され、PCI  Express規格に基づくホスト側バスを介してホスト計算機に接続されるインタフェースデバイスと、を備える。インタフェースデバイスは、PCI  Express規格に基づく複数のファンクションをホスト計算機へ提供する。ホスト計算機の起動時、記憶デバイスに格納されたOSの読み出しを、特定プロトコルに従って指示するコマンドが、ホスト計算機からホスト側バスを介して複数のファンクションの中の特定ファンクションへ発行された場合、インタフェースデバイスは、OSの読み出しを指示するリクエストをコントローラへ発行し、コントローラにより読み出されたOSをホスト計算機へ転送する。ホスト計算機の起動後、コントローラに対するI/Oを、NVMeプロトコルに従って指示するNVMeコマンドが、ホスト計算機からホスト側バスを介して複数のファンクションの中のNVMeファンクションへ発行された場合、インタフェースデバイスは、NVMeコマンドに基づくI/Oリクエストをコントローラへ発行する。
【図面の簡単な説明】
【０００７】
【図１】実施例１の計算機システムの構成を示す。
【図２】実施例１のインタフェースデバイス２００の構成を示す。
【図３】インタフェースデバイス２００のデバイスモードを示す。
【図４】I/O処理の第一処理を示す。
【図５】I/O処理の第一処理に続く第二処理を示す。
【図６】実施例２のインタフェースデバイス２００ｃの構成を示す。
【図７】プロセッサコア割当変更処理を示す。
【発明を実施するための形態】
【０００８】
以下、図面を参照しながら実施例を説明する。ただし、本実施例は、発明を実現するための一例に過ぎず、発明の技術的範囲を限定するものではない。また、各図において共通の構成については、同一の参照番号が付されている。
【０００９】
なお、以後の説明では「レジスタ」や「キュー」という表現にて本実施例の情報を説明するが、これら情報は必ずしも「レジスタ」や「キュー」によるデータ構造で表現されていなくてもよい。例えば、「テーブル」、「リスト」、「DB（データベース）」等のデータ構造やそれ以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために、「テーブル」、「リスト」、「DB」、「レジスタ」、「キュー」等については、単に「情報」と呼ぶこともできる。また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【００１０】
以後の説明では、「プログラム」を主語として説明を行うが、プログラムはCPU（Central  Processing  Unit）によって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、CPUを主語とした説明としてもよい。また、プログラムを主語として開示された処理は、サーバ計算機やストレージコントローラや管理計算機等の計算機、情報処理装置が行う処理としてもよい。プログラムの一部又は全ては、専用ハードウェアで実現してもよく、また、モジュール化されていてもよい。各種プログラムは、プログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
【００１１】
なお、以後の説明は、今後登場するであろうNVMeの後継規格に対しても適用可能であり、同様にPCI-Express（Peripheral  Component  Interconnect  Express：以後、PCIeと省略）の後継規格に対しても適用可能である。NVMeやPCIeに関連する用語が用いられた場合、その後継規格の同等の用語も指し示すと考えるべきである。同様に実施例は現在のBlockアクセスをターゲットとしたNVMeを対象として説明しているが、仮にバイトやワード単位のアクセスがNVMe規格で規定された場合はそれらアクセスについても本実施例が適用できることは言うまでもない。同様に、実施例は、フラッシュメモリを用いる不揮発メモリデバイスを対象として説明しているが、フラッシュメモリ以外の不揮発メモリ、例えばFeRAM（Ferroelectric  Random  Access  Memory）、MRAM（Magnetoresistive  Random  Access  Memory）、相変化メモリ（Ovonic  Unified  Memory）、RRAM（登録商標、Resistance  RAM）を用いる不揮発メモリデバイスに適用してもよい。
【実施例１】
【００１２】
以下、本実施例の計算機システムの構成について説明する。【００１３】
図１は、実施例１の計算機システムの構成を示す。【００１４】
符号のアルファベットによって要素を区別する必要がない場合、符号のアルファベットを省略することがある。計算機システムは、サーバ装置１００と、ストレージ装置３００とを含む。サーバ装置１００は、メモリ１１０と、CPU１２０と、インタフェースデバイス２００とを含む。ストレージ装置３００は、複数のコントローラ（CTL）４００と、複数の記憶デバイス３２０とを含む。複数の記憶デバイス３２０は、フラッシュメモリを含む。なお、複数の記憶デバイスは、HDDを含んでもよい。本実施例のストレージ装置３００には、２個のコントローラ４００が含まれ、夫々コントローラ＃０、＃１と呼ばれる。【００１５】
なお、本計算機システムはConverged  Platformであることが好ましい。なお、Converged  PlatformはConverged  Infrastructure、Converged  Systemとも呼ばれ、日本語では「Converged」が「垂直統合」という用語に置き換わる場合がある。なお、本実施例では以後、これらをConverged  Platform（CPFと省略することもある）に統一して呼ぶ。CPFは以下の特徴を持つ：
＊サーバ装置、ストレージ装置（コントローラと記憶デバイスを含む）、及びこれらを接続するインタフェースデバイスを含む製品。企業の管理者が個別にサーバ装置とストレージ装置を導入する場合、こうしたサーバ装置とストレージ装置の接続確認に代表される動作検証は管理者側で行われていた。しかし、CPFを導入する場合、製品を販売するベンダが事前に動作検証を行うため、製品を設置して使用する顧客の管理者による動作検証が不要又は削減できる。
＊なお、一部のCPFは、サーバ装置、ストレージ装置、及びインタフェースデバイスの設定を一括して行う管理プログラムを実行する管理サブシステムを含む場合がある。この管理サブシステムは、管理者が希望する実行環境（仮想マシン、DBMS：Database  Management  System、Webサーバ等）を迅速に提供することができる。例えば、管理プログラムは、必要なリソース量の仮想マシンを提供するために、サーバ計算機及びストレージシステムに必要なリソースの割り当てをリクエストし、割り当てられたリソースを用いて仮想マシンを作成するようにハイパーバイザにリクエストする。【００１６】
サーバ装置１００において、メモリ１１０は、サーバ装置１００の処理のためのプログラム及びデータを格納する。CPU１２０は、内部バスを介してメモリ１１０に接続され、メモリ１１０に格納されたプログラムに従ってサーバ装置１００の処理を実行する。【００１７】
ストレージ装置３００において、コントローラ４００は、インタフェースデバイス２００に接続され、インタフェースデバイス２００からのI/O要求に応じて処理を行う。コントローラ４００は、メモリ４１０と、CPU４２０と、ドライブインタフェース４３０とを含む。メモリ４１０は、コントローラ４００の処理のためのプログラム及びデータを格納する。CPU４２０は、内部バスを介してメモリ４１０に接続され、メモリ４１０に格納されたプログラムに従ってコントローラ４００の処理を実行する。ドライブインタフェース４３０は、CPU４２０及び記憶デバイス３２０に接続され、コントローラ４００と記憶デバイス３２０の間の通信を制御する。記憶デバイス３２０は、データを格納し、コントローラ４００に接続され、コントローラ４００からアクセスされる。また、本実施例のストレージ装置３００には、２個の記憶デバイス３２０が含まれ、夫々ブートデバイス（BOOT）及びデータデバイス（DATA）と呼ばれる。ブートデバイスは、サーバ装置１００のためのプログラムを格納する。データデバイスは、コントローラ４００からのデータを格納する。【００１８】
インタフェースデバイス２００は、サーバ側バスを介してCPU１２０に接続され、ストレージ側バスを介してストレージ装置３００に接続され、サーバ装置１００及びストレージ装置３００の間の通信を制御する。本実施例におけるサーバ側バス及びストレージ側バスは、PCIeバスである。本実施例におけるインタフェースデバイス２００は、２本のストレージ側バスを介して２個のコントローラ４００に夫々接続されている。例えば、インタフェースデバイス２００は、サーバ装置１００のPCIeバス・スロットへ挿入される基板（アドオンカード）である。ストレージ側バスは、PCIeバス・ケーブルであってもよいし、基板であってもよい。また、インタフェースデバイス２００は、サーバ装置１００の外部に位置し、サーバ装置１００のPCIeバス・スロットに接続されたPCIeバス・ケーブルを介して接続されてもよい。【００１９】
メモリ１１０は、ブートドライバ１１１と、OS１１２と、アプリケーション１１３と、ドライバ１１４（デバイスドライバ）を格納する。ブートドライバ１１１は例えば、Basic  Input/Output  System（BIOS）又はExtensible  Firmware  Interface（EFI）に基づくプログラム等である。ブートドライバ１１１は、サーバ装置１００の電源投入時にメモリ１１０へ読み出され、CPU１２０により実行される。OS１１２は、ストレージ装置３００内のブートデバイスに格納され、ブートドライバ１１１によりサーバ装置１００内のメモリ１１０へ読み出され、CPU１２０により実行される。ブートドライバ１１１は、FCPに従って、ブートデバイス内のOS１１２の読み出しを指示するI/Oコマンドをインタフェースデバイス２００へ発行する。【００２０】
複数のドライバ１１４は、FCPを用いるドライバ１１４ａと、NVMeを用いるドライバ１１４ｂとを含む。例えば、ドライバ１１４ａとして、OS１１２に含まれないベンダ・プロプライエタリ・ソフトウェアを用い、インタフェースデバイス２００を制御する機能を含める。これにより、ドライバ１１４ｂとして、OS１１２に含まれる標準ドライバを用いることができる。なお、FCPの代わりにTCP-IP（Transmission  Control  Protocol−Internet  Protocol）等、サーバ装置１００がブートに用いることができる他のプロトコルが用いられてもよい。【００２１】
アプリケーション１１３は、ストレージ装置３００内のデータデバイスに格納され、サーバ装置１００のユーザ又はOS１１２により、サーバ装置１００内のメモリ１１０へ読み出され、CPU１２０により実行される。アプリケーション１１３は、データに関する要求をドライバ１１４へ発行する。ドライバ１１４は、アプリケーション１１３からの要求を格納するキュー１１５を含む。ドライバ１１４は、アプリケーション１１３からの要求に基づいて、対応するプロトコルを用いるI/Oコマンドをインタフェースデバイス２００へ発行する。【００２２】
なお、インタフェースデバイス２００は、サーバ装置１００のPCIeバス・スロットへ挿入される、いわゆるアドオンカードとして実現することで、障害発生率が低下することが考えられる。なぜならばCPU１２０とインタフェースデバイス２００との間のPCIeバス（サーバ側バス）は冗長化されていないため、インタフェースデバイス２００をアドオンカードとしてサーバ側バスの距離を短くすることで、サーバ側バスの切断の恐れを少なくすることができる。さらに、インタフェースデバイス２００とストレージ装置３００との接続（ストレージ側バス）がブレードサーバのバックプレーンのような基板配線ではなくてケーブル配線の場合は、ケーブル配線区間を保守員が誤って切断する恐れがあるため、サーバ側バスがケーブル配線区間に入らずに済む。【００２３】
なお、サーバ装置１００は複数存在し、ストレージ装置３００の記憶デバイス３２０を共有してもよい。また、ストレージ装置３００のコントローラ４００は１つでもよく、３つ以上でもよい。【００２４】
図２は、実施例１のインタフェースデバイス２００の構成を示す。【００２５】
インタフェースデバイス２００は、通信プロセッサ２３０と、DMAコントローラ２４０と、バス制御回路２５０と、複数のバス制御回路２６０と、メモリ２７０と、フラッシュメモリ２８０とを含む。これらの要素は、内部バスを介して接続されている。通信プロセッサ２３０は、複数のプロセッサコア（LRP）を含む。なお、プロセッサコアは、プロセッサであってもよい。DMAコントローラ２４０は、複数のDMAコア（XDMA）を含む。メモリ２７０は、複数のI/Oコマンド起動キュー２２０を含む。フラッシュメモリ２８０は、サーバ装置１００へ提供されるPCIeの拡張ROM空間に対応する記憶領域を含み、その記憶領域に前述のブートドライバ１１１を格納する。サーバ装置１００は、起動時に、拡張ROM空間を指定することにより、フラッシュメモリ２８０からサーバ装置１００のメモリ１１０へブートドライバ１１１を読み出し、ブートドライバ１１１を実行する。なお、ブートドライバ１１１は、サーバ装置１００又はストレージ装置３００内の不揮発性メモリに格納されていてもよい。【００２６】
バス制御回路２５０は、サーバ側バスを介してサーバ装置１００のCPU１２０に接続される。バス制御回路２５０は、制御回路２５１と、サーバ装置１００のドライバ１１４ａによりアクセスされるサーバ用レジスタ２１０ａと、サーバ装置１００のドライバ１１４ｂによりアクセスされるサーバ用レジスタ２１０ｂとを含む。制御回路２５１は、サーバ用レジスタ２１０ａ、２１０ｂ及びメモリ２７０を制御する。サーバ用レジスタ２１０ａ、２１０ｂは、CPU１２０により用いられるアドレス空間におけるMemory  Mapped  Input/Output（MMIO）空間に割り当てられている。サーバ用レジスタ２１０ａは、プロセッサコア（LRP＃０〜＃３）毎のI/Oコマンド起動レジスタ２１１ａを含む。サーバ用レジスタ２１０ｂは、ドライバ１１４ｂ（Ｄ＃２、＃３）毎のI/Oコマンド起動レジスタ２１１ｂを含む。【００２７】
メモリ２７０は、通信プロセッサ２３０により用いられるプログラム及びデータを格納する。メモリ２７０は更に、I/Oコマンド起動レジスタ２１１ａに対応するI/Oコマンド起動キュー２２０ａと、I/Oコマンド起動レジスタ２１１ｂに対応するI/Oコマンド起動キュー２２０ｂとを含む。制御回路２５１は、I/Oコマンド起動レジスタ２１１ａに書き込まれたI/Oコマンドの識別情報を、対応するI/Oコマンド起動キュー２２０ａに入れ、I/Oコマンド起動レジスタ２１１ｂに書き込まれたI/Oコマンドの識別情報を、対応するI/Oコマンド起動キュー２２０ｂに入れる。FCPに割り当てられた各プロセッサコアは、対応するI/Oコマンド起動キュー２２０ａ内の識別情報を取り出す。NVMeを処理するプロセッサコアは、定期的にI/Oコマンド起動キュー２２０ｂを監視し、識別情報を検出した場合にその識別情報を取り出す。【００２８】
バス制御回路２６０は、ストレージ側バス毎に設けられる。バス制御回路２６０は、ストレージ側バスを介してストレージ装置３００のコントローラ４００のＭＰ４２０に接続される。バス制御回路２６０は、制御回路と、コントローラ４００によりアクセスされるストレージ用レジスタとを含む。制御回路は、ストレージ用レジスタ及びメモリ２７０を制御する。【００２９】
サーバ側バスにおいて、サーバ装置１００がRoot  Complexとなり、インタフェースデバイス２００がEndpointとなる。ストレージ側バスにおいて、コントローラ４００がRoot  Complexとなり、インタフェースデバイス２００がEndpointとなる。【００３０】
通信プロセッサ２３０は、I/Oコマンド起動キュー２２０から取り出した識別情報に基づいてI/Oコマンドを取得し、そのI/Oコマンドに基づくI/Oリクエストをストレージ装置３００へ発行する。更に通信プロセッサ２３０は、サーバ装置１００及びストレージ装置３００からDMAのための情報を取得し、取得した情報に基づいてDMAの指示をDMAコントローラ２４０へ発行する。DMAコントローラ２４０は、通信プロセッサ２３０からの指示に基づいて、サーバ装置１００内のメモリ１１０とストレージ装置３００内のメモリ４１０との間でバースト転送を行う。【００３１】
本実施例におけるインタフェースデバイス２００は、４個のプロセッサコアを含み、４個のDMAコアを含み、２個のターゲットポートを含む。ターゲットポートは、インタフェースデバイス２００において、ストレージ側バスが接続されるポートであり、コントローラ４００毎に設けられる。インタフェースデバイス２００に対して１個、２個、又は４個のファンクションが設定される。ファンクションは、PCIeデバイスの機能を示す。一つのPCIeデバイスは、複数のファンクションを持つことにより、複数のPCIeデバイスとして機能することができる。本実施例のファンクションは、FCPに従うI/Oコマンドを処理するFCPファンクションと、NVMeに従うI/Oコマンドを処理するNVMeファンクションとの何れかである。４個のプロセッサコアの夫々は、何れかのファンクションに割り当てられる。【００３２】
この構成によれば、サーバ装置１００は、複数のプロトコルを用いてストレージ装置３００内のデータにアクセスすることができる。また、サーバ装置１００のOSの読み出しが不可能なNVMeに加えて、OSの読み出しが可能な特定プロトコルを用いることができる。また、インタフェースデバイス２００が拡張ROM領域に割り当てられた不揮発性メモリにブートドライバ１１１を格納することにより、サーバ装置１００は、PCIeバスを介してブートドライバ１１１を読み出すことができる。また、プロトコル毎のバスを用いる場合に比べ、複数のプロトコルでサーバ側バスを共用することにより、サーバ装置１００のバス・スロットの消費を削減できる。プロトコル毎のインタフェースデバイスを用いる場合に比べ、インタフェースデバイス２００を複数のプロトコルで共用することにより、メモリ２７０、通信プロセッサ２３０、シリアルパラレル変換回路（SerDes）等を、複数のプロトコルで共用することができ、開発費や減価を低減することができる。また、サーバ装置１００が特定プロトコルによりサーバ側バスを介してOSを読み出してブートし、ブート後に、NVMeプロトコルによりサーバ側バスを介してデータ転送を行うことにより、特定プロトコルにより使用されたサーバ側バスの帯域をNVMeプロトコルに使用することができ、サーバ側バスの帯域を有効に利用することができる。【００３３】
ファンクションは、デバイスモードにより決定される。計算機システムの管理者は、インタフェースデバイス２００に対し、複数のデバイスモードの何れか一つを設定することができる。例えば、バス制御回路２５０は、予めフラッシュメモリ２８０に格納されたデバイスモードの情報を、起動時に読み出し、PCIeのLink  Up時までにデバイスモードを設定する。また、サーバ装置１００、計算機システムに接続される管理サブシステム、インタフェースデバイス２００に設けられる外部ピン等から、インタフェースデバイス２００のデバイスモードを設定してもよい。【００３４】
以下、インタフェースデバイス２００のファンクションを設定するデバイスモードについて説明する。【００３５】
図３は、インタフェースデバイス２００のデバイスモードを示す。【００３６】
本実施例において、インタフェースデバイス２００は、デバイスモード＃１〜＃４の何れか一つに設定される。デバイスモード＃１は、１FCPモードと呼ぶことができる。このデバイスモードにおいてインタフェースデバイス２００は、１個のFCPファンクションであるファンクション＃０を持ち、その１個のファンクションに４個のプロセッサコアを割り当てる。デバイスモード＃２は、２FCPモードと呼ぶことができる。このデバイスモードにおいてインタフェースデバイス２００は、２個のFCPファンクションであるファンクション＃０、＃１を持ち、各ファンクションに２個のプロセッサコアを割り当てる。デバイスモード＃３は、１FCP/１NVMeモードと呼ぶことができる。このデバイスモードにおいてインタフェースデバイス２００は、１個のFCPファンクションであるファンクション＃０と、１個のNVMeファンクションであるファンクション＃２とを持ち、各ファンクションに４個のプロセッサコアを割り当てる。デバイスモード＃４は、２FCP/２NVMeモードと呼ぶことができる。このデバイスモードにおいてインタフェースデバイス２００は、２個のFCPファンクションであるファンクション＃０、＃１と、２個のNVMeファンクションであるファンクション＃２、＃３とを持ち、各ファンクションに２個のプロセッサコアを割り当てる。デバイスモード＃３、＃４において、FCPとNVMeの両方がビジーとなる可能性は低いため、FCPファンクションとNVMeファンクションは同じプロセッサコアを時分割でシェアできる。【００３７】
サーバ側バスは、マルチパスであってもよい。この場合、デバイスモード＃２、＃４のように、インタフェースデバイス２００が、２個のパスに夫々対応する同一プロトコルの２個のファンクションを含み、サーバ装置１００が、それら２個のファンクションを夫々制御する２個のドライバ１１４ｂを実行し、それら２個のドライバ１１４ｂを選択するパスマネージャプログラムを実行することにより、I/Oコマンドを複数のパスに振り分けることができる。これらのデバイスモードにおいては、ファンクション当たりの通信プロセッサ数が２個になるため、サーバ側バスのパス当たりの最大性能は、２個のプロセッサコアの性能が上限となる。【００３８】
なお、通信プロセッサ２３０が、複数のコントローラ４００へI/Oリクエストを振り分けてもよい。この場合、２個のNVMeファンクションの夫々が２個のプロセッサコアを使う必要はなく、１個のNVMeファンクションが４個のプロセッサコアを使うことができる。また、インタフェースデバイス２００が２個のFCPファンクション＃０、＃１をサーバ装置１００へ提供し、FCPファンクション＃０がI/Oを起動した場合にI/OリクエストをCTL＃０へ発行し、FCPファンクション＃１がI/Oを起動した場合にI/OリクエストをCTL＃１へ発行するように設定されてもよい。また、インタフェースデバイス２００が１個のプロトコルに対して１個のファンクションをサーバ装置１００へ提供する場合、通信プロセッサ２３０が各コントローラ４００の帯域の使用状況や、アクセス先のストレージ装置３００内のアドレス等に基づいて、CTL＃０、＃１のいずれにI/Oリクエストを発行するかを決定してもよい。例えば、通信プロセッサ２３０は、帯域の使用状況として、各コントローラ４００から現在転送中（ビジー）であるか否かを示す情報を取得し、一方のコントローラ４００がビジーであると判定された場合、I/Oリクエストを他方のコントローラ４００へ発行する。また、通信プロセッサ３００は、同一のデータのライトリクエストを複数のコントローラ４００へ発行することにより、そのデータを冗長化して書き込み、そのデータの信頼性を高めてもよい。【００３９】
ストレージ装置３００が複数のコントローラ４００を含むことにより、或るコントローラ４００に障害が発生しても、他のコントローラ４００へI/Oリクエストを発行することにより、計算機システムの信頼性を向上させることができる。また、通信プロセッサ２３０が複数のターゲットポートに接続され、複数のターゲットポートが複数のコントローラ４００に夫々接続されることにより、通信プロセッサ２３０は、複数のコントローラ４００の状況に応じてI/Oリクエストの発行先のコントローラ４００を選択することができ、計算機システムの性能を向上させることができる。デバイスモード＃２、＃４のように、インタフェースデバイス２００が複数のパスに夫々対応する同一プロトコルの複数のファンクションを提供することにより、サーバ装置１００がパスを選択してI/Oコマンドを発行することができる。【００４０】
以後、インタフェースデバイス２００がデバイスモード＃３に設定された場合について説明する。この場合、OS１１２は、FCPを用いるドライバ＃０と、NVMeを用いるドライバ＃２とを含む。【００４１】
以下、計算機システムの動作について説明する。【００４２】
図４は、I/O処理の第一処理を示し、図５は、I/O処理の第一処理に続く第二処理を示す。【００４３】
このシーケンスは、サーバ装置１００と、インタフェースデバイス２００内のバス制御回路２５０と、インタフェースデバイス２００内の通信プロセッサ（LRP）２３０と、インタフェースデバイス２００内のDMAコントローラ（XDMA）２４０と、インタフェースデバイス２００内のバス制御回路２６０と、ストレージ装置３００内のコントローラ（CTL）４００との動作を示す。【００４４】
Ｓ１１０においてサーバ装置１００のアプリケーション１１３からの要求に応じてドライバ１４４がメモリ１１０上にI/Oコマンドを書き込むことにより、I/O処理が開始される。ここでドライバ１４４は、データ転送に必要なメモリ１１０内の記憶領域をサーバ側記憶領域として確保し、サーバ側記憶領域のアドレスを示すScatter/Gather  List（SGL）を作成し、そのSGLをメモリ１１０へ書き込む。I/Oコマンドがライトを要求する場合、ドライバ１４４は、サーバ側記憶領域にライトデータを書き込む。【００４５】
アプリケーション１１３がドライバ＃０に対するI/Oコマンド（FCPコマンド、特定コマンド）を書き込んだ場合、ドライバ＃０は、Ｓ２１０〜Ｓ２５０の処理を行う。【００４６】
Ｓ２１０においてドライバ＃０は、I/Oコマンドの識別情報をI/Oコマンド起動レジスタ２１１ａへ書き込み、バス制御回路２５０は、そのI/Oコマンド起動レジスタ２１１ａに対応するI/Oコマンド起動キュー２２０ａに、その識別情報を入れる。Ｓ２２０においてバス制御回路２５０は、そのI/Oコマンド起動キュー２２０ａに対応するプロセッサコアへ、その識別情報を通知する。Ｓ２３０においてプロセッサコアは、その識別情報に基づいて、コマンド読み出し要求をバス制御回路２５０へ発行する。Ｓ２４０においてバス制御回路２５０は、その読み出し要求に基づいて、サーバ装置１００内のメモリ１１０に格納されたI/Oコマンドを読み出し、そのI/Oコマンドをメモリ２７０へ書き込む。Ｓ２５０においてバス制御回路２５０は、I/Oコマンドを読み出したことをプロセッサコアへ通知する。【００４７】
アプリケーション１１３がドライバ＃２に対するI/Oコマンド（NVMeコマンド）を書き込んだ場合、ドライバ＃２は、Ｓ３１０〜Ｓ３６０の処理を行う。【００４８】
Ｓ３１０においてNVMeファンクションを割り当てられたプロセッサコアは、ポーリングによりI/Oコマンド起動キュー２２０ｂを参照し、I/Oコマンドの識別情報が書き込まれたか否かを判定している。I/Oコマンドの識別情報が書き込まれていないと判定された場合、プロセッサコアは、待機する。【００４９】
Ｓ３２０においてドライバ＃２は、I/Oコマンドの書き込みの通知をI/Oコマンド起動レジスタ２１１ｂへ書き込み、バス制御回路２５０は、その識別情報をI/Oコマンド起動キュー２２０ｂに入れる。Ｓ３３０においてバス制御回路２５０は、サーバ装置１００内のメモリ１１０に格納されたI/Oコマンドを読み出し、そのI/Oコマンドをメモリ２７０へ書き込む。【００５０】
Ｓ３４０においてプロセッサコアは、ポーリングにより再びI/Oコマンド起動キュー２２０を参照し、I/Oコマンドの識別情報が書き込まれたか否かを判定する。I/Oコマンドの識別情報が書き込まれたと判定された場合、Ｓ３５０においてプロセッサコアは、コマンド読み出し要求をバス制御回路２５０へ発行する。NVMeファンクションに複数のプロセッサコアが割り当てられている場合、ポーリングによりI/Oコマンドの識別情報を検出したプロセッサコアが、以後の処理を担当する。Ｓ３６０においてバス制御回路２５０は、I/Oコマンドを読み出したことをプロセッサコアへ通知する。なお、Ｓ３４０のポーリングの代替としてＳ２２０のような通知を行ってもよく、併用してもよい。【００５１】
Ｓ２５０又はＳ３６０の後、Ｓ４１０においてプロセッサコアは、読み出されたI/Oコマンドを、ストレージ装置３００のプロトコルを用いたI/Oリクエストに変換し、そのI/Oリクエストをメモリ２７０へ書き込む。ストレージ装置３００のプロトコルは、規格化された所定のプロトコルであってもよいし、ベンダ・プロプライエタリのプロトコルであってもよい。Ｓ４２０においてバス制御回路２６０は、そのI/Oリクエストをコントローラ４００内のメモリ４１０へ書き込む。【００５２】
Ｓ５１０においてコントローラ４００は、メモリ４１０内のI/Oリクエストを読み出して解析し、データ転送に必要なメモリ４１０内の記憶領域をストレージ側記憶領域として確保する。ここでコントローラ４００は、ストレージ側記憶領域のアドレスを示すSGLを作成し、そのSGLをメモリ４１０へ書き込む。I/Oリクエストがリードを要求する場合、コントローラ４００は、記憶デバイス３２０からリードデータを読み出し、ストレージ側記憶領域へリードデータを書き込む。【００５３】
Ｓ５２０においてコントローラ４００は、サーバ装置１００内のメモリ１１０とコントローラ４００内のメモリ４１０との間のデータ転送を要求するDMAリクエストを生成し、そのDMAリクエストをメモリ４１０へ書き込む。Ｓ５３０においてコントローラ４００は、そのDMAリクエストの識別情報を、インタフェースデバイス２００内のバス制御回路２６０内のストレージ用レジスタへ書き込む。Ｓ５４０においてバス制御回路２６０は、その識別情報に基づいて、コントローラ４００内のメモリ４１０に格納されたDMAリクエストを読み出し、そのDMAリクエストをメモリ２７０へ書き込む。Ｓ５５０においてバス制御回路２６０は、そのDMAリクエストをプロセッサコアへ通知する。【００５４】
Ｓ６１０においてプロセッサコアは、サーバ装置１００のメモリ１１０内のSGLを読み出すことを要求するSGLリード要求をメモリ２７０へ書き込む。Ｓ６２０においてプロセッサコアは、コントローラ４００のメモリ４１０内のSGLを読み出すことを要求するSGLリード要求をメモリ２７０へ書き込む。【００５５】
Ｓ６３０においてバス制御回路２５０は、サーバ装置１００のメモリ１１０に格納されたSGLを読み出し、読み出されたSGLをメモリ２７０へ書き込む。Ｓ６４０においてバス制御回路２５０は、サーバ装置１００からSGLを読み出したことをプロセッサコアへ通知する。Ｓ６５０においてバス制御回路２６０は、コントローラ４００のメモリ４１０に格納されたSGLを読み出し、読み出されたSGLをメモリ２７０へ書き込む。Ｓ６６０においてバス制御回路２６０は、コントローラ４００からSGLを読み出したことをプロセッサコアへ通知する。【００５６】
Ｓ６７０においてプロセッサコアは、サーバ装置１００から読み出されたSGLと、コントローラ４００から読み出されたSGLとに基づいて、サーバ側記憶領域とストレージ側記憶領域の間のDMAを要求する要求パラメータを生成する。Ｓ６８０においてプロセッサコアは、生成された要求パラメータを用いてDMAコントローラ２４０へDMAを指示する。【００５７】
Ｓ７１０においてDMAコントローラ２４０は、要求パラメータに基づいてDMAを実行する。I/Oコマンドがライトを要求する場合、DMAコントローラ２４０は、サーバ側記憶領域に格納されたライトデータを、ストレージ側記憶領域へ転送する。I/Oコマンドがリードを要求する場合、DMAコントローラ２４０は、ストレージ側記憶領域に格納されたリードデータを、サーバ側記憶領域へ転送する。【００５８】
Ｓ７２０においてDMAコントローラ２４０は、DMAを完了すると、DMAの完了をプロセッサコアへ通知する。Ｓ７３０においてプロセッサコアは、DMAリクエストの応答としてDMAの完了の通知をメモリ２７０へ書き込む。Ｓ７４０においてバス制御回路２６０は、その通知をコントローラ４００内のメモリ４１０へ書き込む。Ｓ７５０においてコントローラ４００は、メモリ４１０に格納された通知を読み出し、完了を示す情報をI/Oリクエストに対する応答としてメモリ４１０へ書き込み、その応答の識別情報を、インタフェースデバイス２００内のストレージ用レジスタへ書き込む。Ｓ７６０においてバス制御回路２６０は、その識別情報に基づいて、コントローラ４００内のメモリ４１０に格納された応答を読み出し、その応答をメモリ２７０へ書き込む。Ｓ７７０においてバス制御回路２６０は、その応答をプロセッサコアへ通知する。【００５９】
Ｓ８１０においてプロセッサコアは、サーバ装置１００及びストレージ装置３００への応答パラメータを作成し、応答パラメータをメモリ２７０へ書き込む。【００６０】
Ｓ８２０においてプロセッサコアは、応答パラメータの作成の完了の通知をバス制御回路２５０へ要求する。Ｓ８３０においてバス制御回路２５０は、メモリ２７０に格納された応答パラメータをサーバ装置１００内のメモリ１１０へ書き込む。Ｓ８４０においてバス制御回路２５０は、サーバ装置１００へPCIeの割込みを発行する。Ｓ８５０においてサーバ装置１００内のドライバ１１４は、その割込みに応じて、メモリ１１０に格納された応答パラメータを読み出し、応答パラメータの受信の通知をI/Oコマンド起動レジスタ２１１へ書き込む。【００６１】
Ｓ９２０においてプロセッサコアは、応答パラメータの作成の完了の通知をバス制御回路２６０へ要求する。Ｓ９３０においてバス制御回路２６０は、メモリ２７０に格納された応答パラメータをコントローラ４００内のメモリ４１０へ書き込む。Ｓ９４０においてバス制御回路２６０は、コントローラ４００内のメモリ４１０へ応答パラメータの通知を書き込む。Ｓ９５０においてコントローラ４００は、その通知に応じて、メモリ４１０に格納された応答パラメータを読み出し、応答パラメータの受信をストレージ用レジスタへ書き込み、このシーケンスを終了する。【００６２】
以上のI/O処理によれば、インタフェースデバイス２００がサーバ装置１００からのI/Oコマンドをストレージ装置３００のプロトコルのI/Oリクエストに変換し、そのI/Oリクエストをストレージ装置３００へ発行することにより、サーバ装置１００のプロトコルに合わせて、ストレージ装置３００のプロトコルを変更する必要がない。また、サーバ装置１００及びストレージ装置３００が、DMAの転送元及び転送先の記憶領域を示すSGLを作成することにより、インタフェースデバイス２００は、サーバ装置１００内のメモリ１１０とストレージ装置３００内のメモリ４１０との間でDMAを行うことができる。インタフェースデバイス２００がDMAを行うことにより、サーバ装置１００がストレージ装置３００のプロトコルを用いることなく、ストレージ装置３００がサーバ装置１００のプロトコルを用いることなくデータを転送することができる。FCPファンクションとNVMeファンクションが同時にビジーになることが少ない場合、FCPファンクションとNVMeファンクションがストレージ側バスを共用することにより、ストレージ側バスの帯域を有効に利用することができる。
【実施例２】
【００６３】
本実施例においては、実施例１との相違点を中心に説明する。【００６４】
以下、本実施例の計算機システムの構成について説明する。【００６５】
図６は、実施例２のインタフェースデバイス２００ｃの構成を示す。【００６６】
実施例１と比較すると、本実施例では、インタフェースデバイス２００の代わりにインタフェースデバイス２００ｃが用いられ、バス制御回路２５０の代わりにバス制御回路２５０ｃが用いられ、サーバ用レジスタ２１０ａの代わりにサーバ用レジスタ２１０ｃが用いられる。サーバ用レジスタ２１０ｃは、サーバ用レジスタ２１０ａの構成に加え、QoSカウンタレジスタ２１２と、Modeレジスタ２１３とを含む。実施例１と同様、サーバ用レジスタ２１０ｃは、CPU１２０により用いられるMMIO空間に割り当てられ、FCPファンクションを用いるドライバ１１４ａにより書き込まれる。【００６７】
前述のデバイスモード＃３、＃４のように、複数のプロトコルがプロセッサコアをシェアする場合、本実施例のインタフェースデバイス２００ｃは、各ファンクションが必要とする帯域に応じて、各ファンクションが使用するプロセッサコア数を増減させ、インタフェースデバイス２００ｃの帯域を効率的に使用することができる。【００６８】
Modeレジスタ２１３は、プロセッサコアに割り当てるファンクションを切り替えるために、プロセッサコア毎にFCPモードとNVMeモードの何れかを示す。これにより、ドライバ１１４ａは、NVMeファンクションの帯域を制御することができる。ドライバ１１４ａは、Modeレジスタ２１３へのライトを発行することで、プロセッサコア＃０〜＃３の動作を示すプロセッサモードを、FCPモードとNVMeモードの何れかに動的に切り替えることができる。【００６９】
プロセッサコアは、ドライバ１１４ａからの指示に応じて、プロセッサコア毎のI/Oコマンド発行数（Input/Output  Per  Second：IOPS）及びデータ転送量（スループット）等のQoS（Quality  of  Service）を示す統計情報を計測し、QoSカウンタレジスタ２１２へ書き込む。ドライバ１１４ａは、QoS機能を含む。QoS機能は、QoSカウンタレジスタ２１２から統計情報を取得する。ドライバ１１４は、この統計情報に基づいてプロセッサモードの切り替えを判定する。【００７０】
図７は、プロセッサコア割当変更処理を示す。【００７１】
Ｓ１１１０においてドライバ１１４ａは、QoS機能を有効化し、統計情報の計測を開始する。Ｓ１１２０においてドライバ１１４ａは、所定の計測時間が経過するまで待機する。Ｓ１１３０においてドライバ１１４ａは、統計情報の計測を停止する。Ｓ１１４０においてドライバ１１４ａは、QoSカウンタレジスタ２１２から統計情報を読み出す。Ｓ１１５０においてドライバ１１４ａは、統計情報に基づいて、複数のプロセッサコアの負荷が変更条件を満たすか否かを判定する。変更条件は例えば、FCPモードのプロセッサコアの負荷が、予め設定された負荷閾値未満であり、且つNVMeモードのプロセッサコアの負荷が、予め設定された負荷閾値以上であることである。負荷は、IOPSであってもよいし、スループットであってもよいし、それらの組み合わせに基づく値であってもよい。負荷閾値は、例えばプロセッサコアの負荷の最大値の８０％である。なお、ドライバ１１４ａは、ユーザからの指示や、管理サブシステムからの指示に基づいて、変更条件を設定することができる。FCPのプロセッサコアとNVMeのプロセッサコアとに対し、互いに異なる負荷閾値が設定されてもよい。【００７２】
複数のプロセッサコアの負荷が変更条件を満たさないと判定された場合（Ｓ１１５０：Ｎｏ）、ドライバ１１４ａは、処理をＳ１１１０へ移行させる。複数のプロセッサコアの負荷が変更条件を満たすと判定された場合（Ｓ１１５０：Ｙｅｓ）、Ｓ１１６０においてドライバ１１４ａは、FCPモードのプロセッサコアの一つを対象プロセッサコアとして選択し、対象プロセッサコアへのI/Oコマンドの発行を停止する。Ｓ１１７０においてドライバ１１４ａは、対象プロセッサコアのプロセッサモードをNVMeモードに変更してModeレジスタ１２３へ書き込み、対象プロセッサコアによるNVMeのI/Oコマンドの受信を有効化し、このフローを終了する。【００７３】
なお、ドライバ１１４ａは、このフローと同様にして、NVMeモードのプロセッサコアをFCPモードに変更する処理を行ってもよい。管理者は、サーバ装置１００又は管理サブシステムにより、ドライバ１１４ａのパラメータとして、変更条件や負荷閾値を設定してもよい。【００７４】
例えば、４個のプロセッサコアのうち、２個のプロセッサコアがFCPファンクションに割り当てられ、残り２個のプロセッサコアがNVMeファンクションに割り当てられ、負荷閾値が４０％であるとする。FCPファンクションのプロセッサコアの負荷が１０％、NVMeファンクションのプロセッサコアの負荷が５０％になった場合、ドライバ１１４ａは、FCPファンクションの１個のプロセッサコアを、NVMeファンクションへ割り当てる。【００７５】
以上のプロセッサコア割当変更処理によれば、或るプロトコルに割り当てられたプロセッサコアを、他のプロトコルに割り当てることにより、インタフェースデバイス２００ｃの性能を有効に利用することができる。インタフェースデバイス２００ｃがプロセッサコア毎の負荷情報を計測してレジスタに記憶することにより、サーバ装置１００が負荷情報を取得し、負荷が高いプロセッサコアを認識することができる。これにより、ドライバ１１４ａは、負荷に応じて、プロセッサコアの割当を変更することができる。【００７６】
サーバ装置１００がFCPファンクションのドライバとNVMeファンクションのドライバを実行することにより、プロセッサコア割当変更処理のように、NVMeの標準ドライバに含まれない機能を、FCPファンクションのドライバに含めることができる。このようなFCPファンクションのドライバを用いることにより、サーバ装置１００のソフトウェアがプロセッサコアの割当を変更し、プロトコル毎の帯域を制御することができる。また、ドライバ１１ａが、負荷が高いファンクションに多くのプロセッサコアを割り当てることにより、インタフェースデバイス２００ｃの性能を有効に利用することができる。【００７７】
また、ドライバ１１４ａが、記憶デバイス３２０のうち、ブートデバイスをFCPファンクションにマップし、データデバイスをNVMeファンクションにマップし、FCPファンクションでOSブートを行った後、通信プロセッサ２３０内の全てのプロセッサコアをNVMeファンクションに割り当てることにより、I/O処理において物理的に確保可能な全ての帯域をNVMeファンクションに使用させることができる。【００７８】
ストレージ装置として、インタフェースデバイス２００、２００ｃ及びストレージ装置３００等が用いられてもよい。インタフェース装置として、インタフェースデバイス２００、２００ｃ等が用いられてもよい。ホスト計算機として、サーバ装置１００等が用いられてもよい。プロセッサとして、通信プロセッサ２３０等が用いられてもよい。メモリとして、メモリ２７０等が用いられてもよい。DMAコントローラとして、DMAコントローラ２４０等が用いられてもよい。ホスト側バスとして、サーバ側バス等が用いられてもよい。不揮発性メモリとして、フラッシュメモリ２８０等が用いられてもよい。OSとして、OS１１２が用いられてもよい。起動プログラムとして、ブートドライバ１１１等が用いられてもよい。ホストメモリとして、メモリ１１０等が用いられてもよい。ストレージメモリとして、メモリ４１０等が用いられてもよい。【００７９】
本発明は、以上の実施例に限定されるものでなく、その趣旨から逸脱しない範囲で、他の様々な形に変更することができる。例えば、インタフェースデバイス２００はこれまで説明してきたサーバ装置１００に含まれる形態ではなく、ストレージ装置３００に含まれる形態でもよく、サーバ装置１００とストレージ装置３００いずれにも含まれない形態であってもよい。
【符号の説明】
【００８０】
１００…サーバ装置  １１０…メモリ  １２０…CPU  ２００、２００ｃ…インタフェースデバイス  ２３０…通信プロセッサ  ２４０…DMAコントローラ  ２５０、２５０ｃ…バス制御回路  ２６０…バス制御回路  ２７０…メモリ  ２８０…フラッシュメモリ  ３００…ストレージ装置  ３２０…記憶デバイス  ４００…コントローラ  ４１０…メモリ  ４３０…ドライブインタフェース
【図１】
2015194005.tif 000003
【図２】
2015194005.tif 000004
【図３】
2015194005.tif 000005
【図４】
2015194005.tif 000006
【図５】
2015194005.tif 000007
【図６】
2015194005.tif 000008
【図７】
2015194005.tif 000009
【手続補正書】
【提出日】平成28年8月9日(2016.8.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶デバイスと、
前記記憶デバイスに接続されるコントローラと、
ストレージ側バスを介して前記コントローラに接続され、PCI  Express規格に基づくホスト側バスを介してホスト計算機に接続されるインタフェースデバイスと、
を備え、
前記インタフェースデバイスは、PCI  Express規格に基づく複数のファンクションを前記ホスト計算機へ提供し、
前記ホスト計算機の起動時、前記記憶デバイスに格納されたOSの読み出しを、特定プロトコルに従って指示するコマンドが、前記ホスト計算機から前記複数のファンクションの中の特定ファンクションへ発行された場合、前記インタフェースデバイスは、前記OSの読み出しを指示するリクエストを前記コントローラへ発行し、前記コントローラにより読み出されたOSを前記ホスト計算機へ転送し、
前記ホスト計算機の起動後、前記コントローラに対するI/Oを、NVMeプロトコルに従って指示するNVMeコマンドが、前記ホスト計算機から前記複数のファンクションの中のNVMeファンクションへ発行された場合、前記インタフェースデバイスは、前記NVMeコマンドに基づくI/Oリクエストを前記コントローラへ発行する、
ストレージ装置。
【請求項２】
前記NVMeコマンドが前記ホスト計算機から前記ホスト側バスを介して発行された場合、前記インタフェースデバイスは、前記I/Oリクエストを前記コントローラへ発行し、前記NVMeコマンドに基づくデータを、前記ホスト側バスを介して転送し、
前記コントローラに対するI/Oを、前記特定プロトコルに従って指示する特定コマンドが、前記ホスト計算機から前記ホスト側バスを介して前記特定ファンクションへ発行された場合、前記インタフェースデバイスは、前記特定コマンドに基づく特定リクエストを前記コントローラへ発行し、前記特定コマンドに基づくデータを、前記ホスト側バスを介して転送する、
請求項１に記載のストレージ装置。
【請求項３】
前記インタフェースデバイスは、前記ホスト計算機により生成され前記ホスト計算機内のホストメモリの記憶領域を示すホストメモリ情報と、前記I/Oリクエスト及び前記特定リクエストの何れかに応じて前記コントローラにより生成され前記コントローラ内のストレージメモリの記憶領域を示すストレージメモリ情報とを取得し、前記ホストメモリ情報及び前記ストレージメモリ情報に基づいて、前記ホストメモリ及び前記ストレージメモリの間のDMAを行う、
請求項２に記載のストレージ装置。
【請求項４】
前記インタフェースデバイスは、前記特定コマンドに基づいて前記ストレージ側バスを介するDMAを行い、前記NVMeコマンドに基づいて前記ストレージ側バスを介するDMAを行う、
請求項３に記載のストレージ装置。
【請求項５】
前記コントローラを含む複数のコントローラを備え、
前記インタフェースデバイスは、前記ストレージ側バスを含む複数のストレージ側バスを介して、前記複数のコントローラに夫々接続される、
請求項４に記載のストレージ装置。
【請求項６】
前記インタフェースデバイスは、前記ホスト計算機へ提供されPCI  Express規格に基づく拡張ROM空間に、前記ホスト計算機を起動させるための起動プログラムを格納する不揮発性メモリを含み、
前記ホスト計算機の起動時、前記起動プログラムは、前記ホスト計算機により読み出され、
前記起動プログラムは、前記コマンドを発行することを前記ホスト計算機に実行させる、
請求項５に記載のストレージ装置。
【請求項７】
前記インタフェースデバイスは、複数のプロセッサコアを含み、
前記複数のプロセッサコアの夫々は、前記複数のファンクションの何れかに割り当てられ、前記割り当てられたファンクションを実行する、
請求項６に記載のストレージ装置。
【請求項８】
前記ホスト計算機に格納される特定ドライバは、前記特定コマンドを特定ファンクションへ発行することと、前記複数のファンクションの夫々へ割り当てられるプロセッサコアの数を変更することとを、前記ホスト計算機に実行させる、
請求項７に記載のストレージ装置。
【請求項９】
前記インタフェースデバイスは、前記複数のプロセッサコアの夫々の負荷を計測し、前記負荷を示す負荷情報を記憶し、
前記特定ドライバは、前記負荷情報を読み出し前記負荷情報に基づいて前記変更を行うことを、前記ホスト計算機に実行させる、
請求項８に記載のストレージ装置。
【請求項１０】
前記複数のファンクションは、複数の特定ファンクションと、複数のNVMeファンクションとの何れかを含む、
請求項９に記載のストレージ装置。
【請求項１１】
前記インタフェースデバイスは、前記NVMeコマンドを、前記コントローラのプロトコルに従う前記I/Oリクエストに変換し、
前記インタフェースデバイスは、前記特定コマンドを、前記コントローラのプロトコルに従う前記特定リクエストに変換する、
請求項２に記載のストレージ装置。
【請求項１２】
メモリと、
PCI  Express規格に基づくホスト側バスを介してホスト計算機に接続され、ストレージ側バスを介してストレージ装置に接続され、前記メモリに接続されるプロセッサと、
を備え、
前記プロセッサは、PCI  Express規格に基づく複数のファンクションを前記ホスト計算機へ提供し、
前記ホスト計算機の起動時、前記ストレージ装置に格納されたOSの読み出しを、特定プロトコルに従って指示するコマンドが、前記ホスト計算機から前記複数のファンクションの中の特定ファンクションへ発行された場合、前記プロセッサは、前記OSの読み出しを指示するリクエストを前記ストレージ装置へ発行し、前記ストレージ装置により読み出されたOSを前記ホスト計算機へ転送し、
前記ホスト計算機の起動後、前記ストレージ装置に対するI/Oを、NVMeプロトコルに従って指示するNVMeコマンドが、前記ホスト計算機から前記複数のファンクションの中のNVMeファンクションへ発行された場合、前記プロセッサは、前記NVMeコマンドに基づくI/Oリクエストを前記ストレージ装置へ発行する、
インタフェース装置。
【国際調査報告】
2015194005.tif 000010
2015194005.tif 000011