JP6068676B2 - 計算機システム及び計算機システムの制御方法 - Google Patents
計算機システム及び計算機システムの制御方法 Download PDFInfo
- Publication number
- JP6068676B2 JP6068676B2 JP2015550262A JP2015550262A JP6068676B2 JP 6068676 B2 JP6068676 B2 JP 6068676B2 JP 2015550262 A JP2015550262 A JP 2015550262A JP 2015550262 A JP2015550262 A JP 2015550262A JP 6068676 B2 JP6068676 B2 JP 6068676B2
- Authority
- JP
- Japan
- Prior art keywords
- request
- processor
- information
- controller
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、ホスト計算機とストレージ装置で構成される計算機システムにおける、ホスト計算機のI/O要求の振分け方法に関する。
ITの進歩やインターネットの普及などにより、企業等における計算機システムが扱うデータ量は増加を続けており、データを格納するストレージ装置に対しても、高い性能が要求されている。そのため、中規模以上のストレージ装置(ストレージシステム)では、データアクセス要求を処理するストレージコントローラを複数搭載する構成をとるものが多い。
一般に、ストレージコントローラ(以下、「コントローラ」と略記)を複数搭載するストレージ装置の場合、ストレージ装置の有する各ボリュームに対するアクセス要求の処理を担当するコントローラは、あらかじめ一意に決定されている。以下、複数のコントローラ(コントローラ1、コントローラ2)を有するストレージ装置において、あるボリュームAに対するアクセス要求の処理を担当するコントローラが、コントローラ1であった場合、「コントローラ1はボリュームAのオーナ権を持つ」と表現する。ストレージ装置に接続されるホスト計算機からボリュームAに対するアクセス(たとえばリード要求)を、オーナ権を持たないコントローラが受信した場合、オーナ権を持たないコントローラは一旦、オーナ権を持つコントローラにアクセス要求を転送し、オーナ権を持つコントローラでアクセス要求の処理を行い、処理結果(たとえばリードデータ)を、オーナ権を持たないコントローラを経由してホスト計算機に返送するという処理が行われるため、オーバヘッドが大きい。性能低下の発生を回避するため、特許文献1ではオーナ権を有するコントローラに対してアクセス要求を割り振る専用ハードウェア(LR:ローカルルータ)を備えたストレージシステムについて開示している。特許文献1におけるストレージ装置では、ホストからボリュームアクセスコマンドを受領するホスト(チャネル)インタフェース(I/F)に備えられたLRは、オーナ権を有するコントローラを特定し、そのコントローラに対してコマンドを転送する。これにより複数のコントローラに適切に処理を割り振ることを可能としている。
特許文献1に開示されているストレージ装置では、ストレージ装置のホストインタフェースに設けられた専用ハードウェア(LR)を設けることによって、オーナ権を有するコントローラに適切に処理を割り振ることを可能としている。しかしながら、専用ハードウェアを設けるためには、装置内に専用ハードウェアを搭載するための実装スペースを確保する必要があり、また装置の製造コストを押し上げることになる。そのため、専用ハードウェアを設ける構成は、装置規模が比較的大きい、大規模ストレージ装置に限られる。
そのため、中小規模のストレージ装置で、上に挙げたような性能低下が発生する状況を回避するためには、ホスト計算機がストレージ装置にアクセス要求を発行する時点で、オーナ権を持つコントローラに対してアクセス要求を発行するようにしなければならないが、通常、どのコントローラがアクセス対象ボリュームのオーナ権を持つかは、ホスト計算機側は知ることができない。
上記課題を解決するために、本発明は、ホスト計算機とストレージ装置から構成される計算機システムにおいて、ホスト計算機がストレージ装置からオーナ権情報を取得し、ホスト計算機は取得したオーナ権情報に基づいてコマンド発行先のコントローラを決定する。
本発明の一実施形態では、ホスト計算機がストレージ装置にボリュームアクセスコマンドを発行する際に、ホスト計算機はストレージ装置に対し、アクセス対象ボリュームのオーナ権を有するコントローラの情報を取得する要求を発行し、ホスト計算機は当該要求に応じてストレージ装置から返却されたオーナ権情報に基づいて、オーナ権を持つコントローラに対してコマンドを送信する。また別の実施形態として、ホスト計算機は、アクセス対象ボリュームのオーナ権を有するコントローラの情報を取得する第1要求を発行した後、第1要求に対する応答をストレージ装置から受信する前に、アクセス対象ボリュームのオーナ権を有するコントローラの情報を取得する第2要求を発行することを可能とする。
本発明により、ホスト計算機がオーナ権を持たないストレージコントローラに対してI/O要求を発行することを防ぐことができ、アクセス性能を向上させることができる。
以下、図面を参照して、本発明の一実施形態に係る計算機システムを説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
図1は、本発明の実施例1に係る計算機システム1の構成を示す。計算機システム1は、ストレージ装置2、サーバ3、管理端末4から構成される。ストレージ装置2は、I/Oバス7を介してサーバ3と接続される。I/Oバスとしてはたとえば、PCI−Expressが用いられる。またストレージ装置2はLAN6を介して管理端末4と接続される。
ストレージ装置2は、複数のストレージコントローラ21a、21b(図中では「CTL」と略記されている。また、ストレージコントローラを「コントローラ」と略記することもある)、そしてデータを格納する記憶媒体である複数のHDD22から構成される(なお、ストレージコントローラ21a、21bを総称して、「コントローラ21」と呼ぶこともある)。コントローラ21aは、当該ストレージ装置2の制御を行うためのMPU23a、MPU23aで実行されるプログラムや制御情報を格納するメモリ24a、HDD22を接続するためのディスクインタフェース(ディスクI/F)25a、サーバ3とI/Oバスを介して接続するためのコネクタであるポート26aを備える(また、コントローラ21bもコントローラ21aと同様の構成要素を持つのでコントローラ21bについての説明は省略する)。なお、メモリ24a、24bの一部の領域は、ディスクキャッシュとしても用いられる。そしてコントローラ21a、21bは、コントローラ間接続パス(Iパス)27で相互接続される。また、図示していないが、コントローラ21a、21bは、ストレージ管理端末23を接続するためのNIC(Network Interface Controller)も有している。HDD22は、一例として磁気ディスクが用いられる。しかしそれ以外にSSD(Solid State Drive)等の半導体記憶デバイスを用いることも可能である。
なお、ストレージ装置2の構成は上で説明した構成に限定されるものではない。たとえばコントローラ21内の各要素(MPU23、ディスクI/F25等)は、図1に示した個数の構成に限定されるわけではなく、MPU23やディスクI/F25がコントローラ21内に複数存在する構成であっても、本発明は適用可能である。
サーバ3は、MPU31、メモリ32、振分モジュール33が、相互接続スイッチ34(図中では「SW」と略記している)に接続された構成をとる。またMPU31、メモリ32、振分モジュール33と相互接続スイッチ34との間は、PCI−ExpressのようなI/Oバスで接続されている。振分モジュール33は、MPU31からストレージ装置2に向けて送出されるコマンド(リード、ライト等のI/O要求)を、ストレージ装置2のコントローラ21a、21bのいずれかに、選択的に転送するための制御を行うハードウェアであって、振分部35、SW34に接続されるポート、ストレージ装置2に接続するためのポート37a、37bを備える。また、サーバ3上では、複数の仮想計算機が稼働する構成であってもよい。さらに、図1では、サーバ3が1台だけ存在しているが、サーバ3の台数は1台に限定されず、複数台存在してもよい。
管理端末4は、ストレージ装置2の管理操作を行うための端末である。図示していないが、管理端末4は周知のパーソナルコンピュータが備えている、MPU、メモリ、LAN6に接続するためのNIC、キーボードやディスプレイ等の入出力部234を有する。管理操作とは具体的には、サーバ33等に提供するボリュームを定義する等の操作である。
続いて、本発明の実施例1におけるI/O振分方法の説明に必要な、ストレージ装置2の機能について説明する。最初にストレージ装置2内に作成されるボリュームと、ボリュームを管理するためにストレージ装置2内で用いられる管理情報について説明する。
(論理ボリューム管理テーブル)
本発明の実施例1におけるストレージ装置2は、1または複数のHDD22から1つまたは複数の論理ボリューム(LDEVとも呼ばれる)を形成する。各論理ボリュームにはストレージ装置2内で一意な番号を付与して管理しており、それを論理ボリューム番号(LDEV#)と呼ぶ。また、サーバ3がI/Oコマンドの発行時などにアクセス対象のボリュームを指定する場合、計算機システム1内でサーバ3を一意に特定可能な情報(あるいはサーバ3内で仮想計算機が動作する環境の場合には、仮想計算機を一意に特定可能な情報)であるS_IDと、論理ユニット番号(LUN)とを用いる。つまりサーバ3は、I/OコマンドのコマンドパラメータにS_IDとLUNとを含めることによって、アクセス対象のボリュームを一意に特定するのであって、サーバ3はボリュームを指定する際に、ストレージ装置2で用いられるLDEV#を用いない。そのためストレージ装置2では、LDEV#とLUNとの対応関係を管理する情報(論理ボリューム管理テーブル200)を保持し、その情報を用いて、サーバ3からI/Oコマンドで指定されたS_IDとLUNの組の情報をLDEV#に変換している。図2に示す論理ボリューム管理テーブル200(または「LDEV管理テーブル200」とも呼ばれる)は、LDEV#とLUNの対応関係を管理するテーブルで、コントローラ21a、21b内のそれぞれのメモリ24a、24bに同じテーブルが格納されている。S_ID200−1とLUN200−2の欄には、LDEV#200−4で特定される論理ボリュームに対応付けられている、サーバ3のS_ID、LUNが格納される。MP#200−4は、オーナ権という情報を格納する欄で、オーナ権については以下で説明する。
本発明の実施例1におけるストレージ装置2は、1または複数のHDD22から1つまたは複数の論理ボリューム(LDEVとも呼ばれる)を形成する。各論理ボリュームにはストレージ装置2内で一意な番号を付与して管理しており、それを論理ボリューム番号(LDEV#)と呼ぶ。また、サーバ3がI/Oコマンドの発行時などにアクセス対象のボリュームを指定する場合、計算機システム1内でサーバ3を一意に特定可能な情報(あるいはサーバ3内で仮想計算機が動作する環境の場合には、仮想計算機を一意に特定可能な情報)であるS_IDと、論理ユニット番号(LUN)とを用いる。つまりサーバ3は、I/OコマンドのコマンドパラメータにS_IDとLUNとを含めることによって、アクセス対象のボリュームを一意に特定するのであって、サーバ3はボリュームを指定する際に、ストレージ装置2で用いられるLDEV#を用いない。そのためストレージ装置2では、LDEV#とLUNとの対応関係を管理する情報(論理ボリューム管理テーブル200)を保持し、その情報を用いて、サーバ3からI/Oコマンドで指定されたS_IDとLUNの組の情報をLDEV#に変換している。図2に示す論理ボリューム管理テーブル200(または「LDEV管理テーブル200」とも呼ばれる)は、LDEV#とLUNの対応関係を管理するテーブルで、コントローラ21a、21b内のそれぞれのメモリ24a、24bに同じテーブルが格納されている。S_ID200−1とLUN200−2の欄には、LDEV#200−4で特定される論理ボリュームに対応付けられている、サーバ3のS_ID、LUNが格納される。MP#200−4は、オーナ権という情報を格納する欄で、オーナ権については以下で説明する。
本発明の実施例1におけるストレージ装置2では、各論理ボリュームに対するアクセス要求の処理を担当するコントローラ(21a、21b)(またはプロセッサ23a、23b)が、論理ボリュームごとに一意に定められている。この、論理ボリュームに対する要求の処理を担当するコントローラ(21a、21b)(またはプロセッサ23a、23b)のことを、「オーナ権を持つコントローラ(またはプロセッサ)」と呼び、オーナ権を持つコントローラ(またはプロセッサ)の情報のことを、「オーナ権情報」と呼ぶ。MP#200−4はオーナ権情報を格納する欄で、本発明の実施例1において、MP#200−4の欄に0が格納されているエントリの論理ボリュームは、コントローラ21aのMPU23aがオーナ権を持つボリュームで、MP#200−4の欄に1が格納されているエントリの論理ボリュームは、コントローラ21bのMPU23bがオーナ権を持つボリュームであることを表している。たとえば図2の先頭の行(エントリ)201は、LDEV#が1番の論理ボリュームは、MP#200−4が0番のコントローラ(のプロセッサ)、つまりコントローラ21aのMPU23aがオーナ権を持つことを表している。なお、本発明の実施例1におけるストレージ装置2では、各コントローラ(21a、21b)はそれぞれ1つのプロセッサ(23a、23b)しか持たないので、「コントローラ21aがオーナ権を持つ」という表現と「プロセッサ(MPU)23aがオーナ権を持つ」という表現は、実質的に同義である。
ここで仮に、サーバ3からコントローラ21に対して、コントローラ21がオーナ権を持たないボリュームへのアクセスリクエストが到来した場合について説明する。図2の例では、LDEV#が1番の論理ボリュームは、コントローラ21aがオーナ権を持つが、コントローラ21bがサーバ3から、LDEV#が1番の論理ボリュームに対するリード要求を受信すると、コントローラ21bはオーナ権を持たないため、コントローラ21bのMPU23bは、コントローラ間接続パス(Iパス)27を介してコントローラ21aのMPU23aにリード要求を転送する。MPU23aはHDD22からリードデータを読み出して、自身のキャッシュメモリ(メモリ24b内)にリードデータを格納する。その後、リードデータは、コントローラ間接続パス(Iパス)27、コントローラ21aを経由してサーバ3に返送される。このように、ボリュームに対するオーナ権を持たないコントローラ21がI/O要求を受け付けると、I/O要求やI/O要求に付随するデータの転送がコントローラ21a、21b間で発生し、処理オーバヘッドが大きくなる。本発明では、このような処理オーバヘッドを発生させないために、ストレージ装置2がサーバ3に、各ボリュームのオーナ権情報を提供する仕組みを持つ。以下、サーバ3の機能について説明する。
(I/O処理の概要)
図3は、サーバ3がストレージ装置2に対してI/O要求を送信する際の処理の概要を示している。まずS1は、計算機システム1の起動後の初期設定時のみ行われる処理で、ストレージコントローラ21aまたは21bが振分テーブル241a、241bを生成し、そして振分テーブルのリード先情報と振分テーブルベースアドレス情報とをサーバ3の振分モジュール33に通知する。振分テーブル241は、オーナ権情報を格納したテーブルであり、その内容は後述する。また、S1での振分テーブル241a(または241b)の生成処理は、振分テーブル241を格納する記憶領域をメモリ上に確保し、内容を初期化(たとえばテーブル上全領域に0を書き込む等)する処理である。
図3は、サーバ3がストレージ装置2に対してI/O要求を送信する際の処理の概要を示している。まずS1は、計算機システム1の起動後の初期設定時のみ行われる処理で、ストレージコントローラ21aまたは21bが振分テーブル241a、241bを生成し、そして振分テーブルのリード先情報と振分テーブルベースアドレス情報とをサーバ3の振分モジュール33に通知する。振分テーブル241は、オーナ権情報を格納したテーブルであり、その内容は後述する。また、S1での振分テーブル241a(または241b)の生成処理は、振分テーブル241を格納する記憶領域をメモリ上に確保し、内容を初期化(たとえばテーブル上全領域に0を書き込む等)する処理である。
また本発明の実施例1では、振分テーブル241a、241bはコントローラ21a、21bのいずれか一方のメモリ24に格納されるが、振分テーブルのリード先情報は、振分モジュール33が振分テーブルにアクセスするにはいずれのコントローラのメモリ24にアクセスすべきかを示した情報である。そして振分テーブルベースアドレス情報は振分モジュール33が振分テーブル241にアクセスする際に必要な情報だが、これも詳細は後述する。振分モジュール33はリード先情報を受信すると、リード先情報と振分テーブルベースアドレス情報を振分モジュール33内に格納しておく(S2)。ただし、メモリ24a、24bの両方に同内容の振分テーブル241を格納する構成であっても、本発明は有効である。
S2の処理が終了した後、サーバ3がストレージ装置2のボリュームにアクセスする処理が発生した場合を想定する。その場合、S3でMPU31はI/Oコマンドを生成する。先に述べたとおりI/Oコマンドには、送信元サーバ3の情報であるS_IDとボリュームのLUNが含まれている。
振分モジュール33はMPU31からI/Oコマンドを受信すると、I/Oコマンド内のS_IDとLUNを抽出し、S_IDとLUNを用いて振分テーブル241のアクセスアドレス算出を行う(S4)。この処理の詳細は後述する。なお、振分モジュール33はストレージ装置2のメモリ241に対し、アドレスを指定したアクセス要求を発行することで、当該アドレスのデータを参照可能な構成になっており、S6では、S4にて算出したアドレスを用いて、コントローラ21の振分テーブル241にアクセスする。この時、S2で記憶したテーブルリード先情報に基づいて、コントローラ21a、21bのいずれかにアクセスする(図3では、振分テーブル241aにアクセスする場合について記述している)。振分テーブル241にアクセスすると、コントローラ21a、21bのいずれがアクセス対象ボリュームのオーナ権を持つか判明する。
S7では、S6で取得した情報に基づき、コントローラ21a、コントローラ21bのいずれかに、(S3で受信した)I/Oコマンドを転送する。なお、図3では、コントローラ21bがオーナ権を持っていた場合の例を記載している。I/Oコマンドを受信したコントローラ21(21b)は、コントローラ21内で処理を行って、その応答をサーバ3(のMPU31)に返却し(S8)、I/O処理が終了する。以降、I/OコマンドがMPU31から発行されるたびにS3〜S8の処理が行われる。
(振分テーブル、インデックステーブル)
続いて、図3のS4で振分モジュール33が算出する振分テーブル241のアクセスアドレス及び振分テーブル241の内容について図4、図5を用いて説明する。ストレージコントローラ21のメモリ24は、64ビットのアドレス空間を持つ記憶領域で、振分テーブル241はメモリ24内の連続領域に格納されている。図4は、振分モジュール33が算出する振分テーブル241内アドレス情報のフォーマットを示している。このアドレス情報は、42ビットの振分テーブルベースアドレス、8ビットのIndex、12ビットのLUN、そして2ビットの固定値(値は00)で構成される。振分テーブルベースアドレスは、図3のS2で振分モジュール33がコントローラ21から受信する情報である。
続いて、図3のS4で振分モジュール33が算出する振分テーブル241のアクセスアドレス及び振分テーブル241の内容について図4、図5を用いて説明する。ストレージコントローラ21のメモリ24は、64ビットのアドレス空間を持つ記憶領域で、振分テーブル241はメモリ24内の連続領域に格納されている。図4は、振分モジュール33が算出する振分テーブル241内アドレス情報のフォーマットを示している。このアドレス情報は、42ビットの振分テーブルベースアドレス、8ビットのIndex、12ビットのLUN、そして2ビットの固定値(値は00)で構成される。振分テーブルベースアドレスは、図3のS2で振分モジュール33がコントローラ21から受信する情報である。
Index402は、I/Oコマンドに含まれるサーバ3の情報(S_ID)をもとに、ストレージ装置2が導出する8ビットの情報であり、導出方法は後述する(なお、以下ではこのサーバ3のS_IDから導出される情報のことを、「Index番号」と呼ぶ)。また、コントローラ21a、21bは、S_IDとIndex番号の対応関係の情報を、図11に示すようなインデックステーブル600として維持管理している(この情報の生成契機、生成方法についても後述する)。LUN403はI/Oコマンドに含まれるアクセス対象LU(ボリューム)の論理ユニット番号(LUN)である。サーバ3の振分モジュール33は図3のS4の処理において、図4のフォーマットに従ったアドレスを生成する。たとえば振分テーブルベースアドレスが0で、Index番号が0のサーバ3がLUN=1のLUのオーナ権情報を取得したい場合、振分モジュール33はアドレス0x0000 0000 0000 0004を生成し、メモリ24のアドレス0x0000 0000 0000 0004の内容を読み出すことで、オーナ権情報を取得する。
次に振分テーブル241の内容について、図5を用いて説明する。振分テーブル241の各エントリ(行)は、サーバ3のアクセスする各LUのオーナ権情報及びLDEV#が格納された情報であり、各エントリは、イネーブルビット(図中では「En」と表記)501、オーナ権を持つコントローラ21の番号が格納されるMP#502、サーバ3のアクセスするLUのLDEV#が格納されるLDEV#503で構成されている。En501は1ビット、MP#502は7ビット、そしてLDEV#は24ビットの情報で、1エントリは合計32ビット(4バイト)の情報である。En501は、当該エントリが有効なエントリであるか否かを表す情報で、En501の値が1の場合には当該エントリが有効であることを表し、0の場合、当該エントリは無効(つまり当該エントリに対応するLUは、現時点でストレージ装置2内に定義されていない)であることを表し、その場合にMP#502、LDEV#503に格納されている情報は無効な(使用できない)情報である。
振分テーブル241の各エントリのアドレスについて説明する。なお、ここでは振分テーブルベースアドレスが0の場合について説明する。振分テーブル241のアドレス0(0x0000 0000 0000 0000)から始まる4バイトの領域には、図5から分かる通り、Index番号が0のサーバ3(あるいはサーバ3上で稼動する仮想計算機)がアクセスする、LUNが0番のLUについてのオーナ権情報(及びLDEV#)が格納される。以下、アドレス0x0000 0000 0000 0004〜0x0000 0000 0000 0007、0x0000 0000 0000 0008〜0x0000 0000 0000 000Fにはそれぞれ、LUNが1番のLU、LUNが2番のLUについてのオーナ権情報が格納される。そしてIndex番号が0のサーバ3がアクセスする全LUのオーナ権情報は、アドレス0x0000 0000 0000 0000から0x0000 0000 3FFF FFFFまでの範囲に格納されている。そしてアドレス0x0000 0000 4000 0000からは、Index番号が1のサーバ3がアクセスするLUのオーナ権情報が、LUN=0のLUから順に格納されるという構造を持つ。
(検索データテーブル)
次に、サーバ3の振分部35の行う処理(図3のS4、S6に相当する処理)の詳細を説明するが、その前に振分部35が自身のメモリ内に保持する情報について図6を用いて説明する。振分部35がI/O振分け処理を行うために必要な情報として、検索データテーブル3010、振分けテーブルベースアドレス情報3110、振分けテーブルリード先CTL#情報3120がある。検索データテーブル3010のIndex#3011には、S_ID3012の欄に格納されているS_IDに対応するIndex番号が格納されており、サーバ3からI/Oコマンドを受信すると、この検索データテーブル3010を用いてI/Oコマンド中のS_IDからIndex番号を導出する。ただし、図6の検索データテーブル3010の構成は一例であり、図6で示した構成以外に、たとえばS_ID3012の欄のみを有するテーブルで、Index番号が0番、1番、2番…のS_IDが、S_ID3012欄の先頭から順に格納されるテーブルなどを用いても、本発明は有効である。
次に、サーバ3の振分部35の行う処理(図3のS4、S6に相当する処理)の詳細を説明するが、その前に振分部35が自身のメモリ内に保持する情報について図6を用いて説明する。振分部35がI/O振分け処理を行うために必要な情報として、検索データテーブル3010、振分けテーブルベースアドレス情報3110、振分けテーブルリード先CTL#情報3120がある。検索データテーブル3010のIndex#3011には、S_ID3012の欄に格納されているS_IDに対応するIndex番号が格納されており、サーバ3からI/Oコマンドを受信すると、この検索データテーブル3010を用いてI/Oコマンド中のS_IDからIndex番号を導出する。ただし、図6の検索データテーブル3010の構成は一例であり、図6で示した構成以外に、たとえばS_ID3012の欄のみを有するテーブルで、Index番号が0番、1番、2番…のS_IDが、S_ID3012欄の先頭から順に格納されるテーブルなどを用いても、本発明は有効である。
なお、初期状態では検索データテーブル3010のS_ID3012の列には値が何も格納されておらず、サーバ3(あるいはサーバ3上で稼動する仮想計算機)がストレージ装置2に対して最初にI/Oコマンドを発行すると、そのときにストレージ装置2が検索データテーブル3010のS_ID3012に情報を格納する。この処理は後述する。
振分けテーブルベースアドレス情報3110は、先に説明した振分けテーブル241の格納アドレス算出時に用いる、振分けテーブルベースアドレスの情報である。計算機システム1の起動直後に、ストレージ装置2から振分部35に対してこの情報が送信されてくるので、それを受け取った振分部35が自身のメモリ内にこの情報を格納し、以降振分けテーブル241のアクセス先アドレスの算出の際にこの情報を用いる。振分けテーブルリード先CTL#情報3120は振分部35が振分けテーブル241にアクセスする際、コントローラ21a、21bのいずれにアクセスするべきかを特定する情報である。振分けテーブルリード先CTL#情報3120の内容が「0」の時には、振分部35はコントローラ21aのメモリ241aにアクセスし、振分けテーブルリード先CTL#情報3120の内容が「1」の時には、コントローラ21bのメモリ241bにアクセスする。振分けテーブルリード先CTL#情報3120も振分けテーブルベースアドレス情報3110と同様に、計算機システム1が起動直後に、ストレージ装置2から振分部35に対して送信されてくる情報である。
(振分処理)
図7を用いて、サーバ3の振分部35の行う処理(図3のS4、S6に相当する処理)の詳細を説明する。振分部35がポート36を介してMPU31からI/Oコマンドを受信すると、I/Oコマンドに含まれるサーバ3(あるいはサーバ3上の仮想計算機)のS_ID、アクセス対象LUのLUNを抽出する(S41)。振分部35は続いて、抽出されたS_IDをIndex番号に変換する処理を行う。この時、振分部35内で管理する検索データテーブル3010を用いる。振分部35は検索データテーブル3010のS_ID3012を参照して、S41で抽出したS_IDと一致する行(エントリ)を検索する。
図7を用いて、サーバ3の振分部35の行う処理(図3のS4、S6に相当する処理)の詳細を説明する。振分部35がポート36を介してMPU31からI/Oコマンドを受信すると、I/Oコマンドに含まれるサーバ3(あるいはサーバ3上の仮想計算機)のS_ID、アクセス対象LUのLUNを抽出する(S41)。振分部35は続いて、抽出されたS_IDをIndex番号に変換する処理を行う。この時、振分部35内で管理する検索データテーブル3010を用いる。振分部35は検索データテーブル3010のS_ID3012を参照して、S41で抽出したS_IDと一致する行(エントリ)を検索する。
S41で抽出したS_IDと一致する行のIndex#3011が見つかった場合(S43:Yes)、そのIndex#3011の内容を用いて振分テーブルアクセスアドレスを作成し(S44)、この作成されたアドレスを用いて振分テーブル241にアクセスして、I/O要求を送信すべきコントローラ21の情報(図5のMP#502に格納されている情報)を得る(S6)。そしてS6で得られた情報から特定されたコントローラ21に対して、I/Oコマンドを送信する(S7)。
ところで検索データテーブル3010のS_ID3012には、最初は何も値が格納されていない。サーバ3(あるいはサーバ3上で稼動する仮想計算機)が最初にストレージ装置2にアクセスした時、ストレージ装置2のMPU23がIndex番号を決定し、サーバ3(またはサーバ3上の仮想計算機)のS_IDを、検索データテーブル3010内の、決定されたIndex番号に対応する行に格納する。そのため、サーバ3(またはサーバ3上の仮想計算機)が最初にストレージ装置2にI/O要求を発行する時には、検索データテーブル3010のS_ID3012には、サーバ3(またはサーバ3上の仮想計算機)のS_IDの情報が格納されていないため、Index番号の検索は失敗する。
本発明の実施例1における計算機システム1では、Index番号の検索が失敗した場合、つまり検索データテーブル3010にサーバ3のS_IDの情報が格納されていなかった場合には、あらかじめ定められた特定のコントローラ21のMPU(以下、このMPUのことを「代表MP」と呼ぶ)に対してI/Oコマンドを送信することになっている。ただしIndex番号の検索が失敗した場合(S43の判定で、Noの場合)、振分部35はダミーアドレスを生成し(S45)、ダミーアドレスを指定してメモリ24にアクセス(たとえばリード)する(S6’)。ダミーアドレスとは、振分テーブル241の格納されているアドレスとは無関係のアドレスである。S6’の後、振分部35は代表MPにI/Oコマンドを送信する(S7’)。なお、ダミーアドレスを指定してメモリ24にアクセスする処理を行う理由は後述する。
(振分テーブルの更新)
続いて、Index番号の検索が失敗した場合に(S43の判定で、Noの場合)、代表MPに対して送信されたI/Oコマンドを受信した、ストレージ装置2での処理の流れを、図8を用いて説明する。代表MP(ここでは、コントローラ21aのMPU23aが代表MPだった場合を例にとって説明する)がI/Oコマンドを受信すると、コントローラ21aは、I/Oコマンドに含まれているS_IDとLUN、及びLDEV管理テーブル200を参照して、自身がアクセス対象のLUのオーナ権を持っているか判定する(S11)。オーナ権がある場合は、以降の処理をコントローラ21aで実施し、オーナ権がない場合には、コントローラ21bにI/Oコマンドを転送する。以降の処理はコントローラ21a、21bのいずれか一方で行われ、かつコントローラ21a、21bのいずれで処理が行われたとしても、処理に大きな違いはないため、「コントローラ21」が処理を行うこととして記載している。
続いて、Index番号の検索が失敗した場合に(S43の判定で、Noの場合)、代表MPに対して送信されたI/Oコマンドを受信した、ストレージ装置2での処理の流れを、図8を用いて説明する。代表MP(ここでは、コントローラ21aのMPU23aが代表MPだった場合を例にとって説明する)がI/Oコマンドを受信すると、コントローラ21aは、I/Oコマンドに含まれているS_IDとLUN、及びLDEV管理テーブル200を参照して、自身がアクセス対象のLUのオーナ権を持っているか判定する(S11)。オーナ権がある場合は、以降の処理をコントローラ21aで実施し、オーナ権がない場合には、コントローラ21bにI/Oコマンドを転送する。以降の処理はコントローラ21a、21bのいずれか一方で行われ、かつコントローラ21a、21bのいずれで処理が行われたとしても、処理に大きな違いはないため、「コントローラ21」が処理を行うこととして記載している。
S12では、コントローラ21は受信したI/O要求を処理し、処理結果をサーバ3に返送する。
S13では、コントローラ21はS12までで処理していたI/Oコマンドに含まれていたS_IDを、Index番号に対応付ける処理を行う。対応付けの際、コントローラ21はインデックステーブル600を参照し、まだどのS_IDにも対応付けられていないIndex番号を検索し、いずれか1つのIndex番号を選択する。そして選択されたインデックス番号(Index#602)に対応する行のS_ID601欄に、I/Oコマンドに含まれていたS_IDを登録する。
S14で、コントローラ21は振分けテーブル241の更新を行う。LDEV管理テーブル200内の情報のうち、S_ID(200−1)が今回のI/Oコマンドに含まれていたS_IDと一致するエントリを選択し、この選択されたエントリの情報を振分けテーブル241へと登録する。
振分けテーブル241への登録方法について、たとえば今回のI/Oコマンドに含まれていたS_IDがAAAで、LDEV管理テーブル200には図2に示されている情報が格納されていた場合を例にとって説明する。この場合、LDEV管理テーブル200から、LDEV#(200−3)が1、2、3のエントリ(図2中の行201〜203)を選択し、これら3エントリの情報を振分けテーブル241へと登録する。
振分けテーブル241には、図5の説明で述べたような規則で各情報が格納されているため、Index番号とLUNの情報があれば、オーナ権(MP#502に格納する情報)とLDEV#(LDEV#503に格納する情報)を、振分テーブル241内のどの位置(アドレス)に登録すればよいか判明する。今回のI/Oコマンドに含まれていたS_ID(AAA)がIndex番号01hに対応付けられたとすると、Index番号が1、そしてLUNが0のLDEVについての情報は、図5の振分テーブル241のアドレス0x0000 0000 4000 0000から開始される4バイトの領域に格納されることが分かる。そこで、振分テーブル241のアドレス0x0000 0000 4000 0000のエントリのMP#502、LDEV#503のそれぞれに、LDEV管理テーブル200の行201中のMP#200−4(図2の例では「0」)、LDEV#200−3(図2の例では「1」)を格納し、またEn501に「1」を格納する。図2の行202、203の情報についても同様に、振分テーブル241(のアドレス0x0000 0000 4000 0004、0x0000 0000 4000 0008)に格納することで、振分けテーブル241の更新が完了する。
最後にS15で、S13でS_IDに対して対応付けられたIndex番号の情報を振分モジュール33の検索データテーブル3010に書き込む。なお、S14、S15の処理は、図3のS1、S2の処理に相当する処理である。
(LU生成時の処理)
振分テーブル241は、オーナ権、LU、LDEVに関する情報を格納しているテーブルであるため、LUが生成された場合やオーナ権に変更が発生する場合にも、情報の登録・更新が発生する。ここではLUを生成した場合を例にとって、振分テーブル241への情報登録の流れを説明する。
振分テーブル241は、オーナ権、LU、LDEVに関する情報を格納しているテーブルであるため、LUが生成された場合やオーナ権に変更が発生する場合にも、情報の登録・更新が発生する。ここではLUを生成した場合を例にとって、振分テーブル241への情報登録の流れを説明する。
計算機システム1の管理者が管理端末4などを用いて、LUの定義を行う場合、サーバ3の情報(S_ID)、定義するLUに対応付けられるLDEVのLDEV#、そして定義するLUのLUNを指定する。管理端末4がこれらの情報の指定を受け付けると、ストレージコントローラ21(21aまたは21b)に対してLUの生成を指示する。コントローラ21は指示を受け付けると、メモリ24a及び24b内のLDEV管理テーブル200のS_ID200−1、LUN200−2、LDEV#200−3の欄に、指定された情報を登録する。その際、当該ボリュームのオーナ権情報をコントローラ21で自動決定して、MP#200−4に登録する。別の実施形態として、管理者がオーナ権を持つコントローラ21(MPU23)を指定できるようにしてもよい。
LU定義作業によりLDEV管理テーブル200への登録を行った後、コントローラ21は振分テーブル241の更新を行う。LUの定義で使用された情報(S_ID、LUN、LDEV#、オーナ権情報)のうち、インデックステーブル600を用いてS_IDをIndex番号に変換する。上で説明したとおり、Index番号とLUNの情報があれば、オーナ権(MP#502に格納する情報)とLDEV#(LDEV#503に格納する情報)を、振分テーブル241内のどの位置(アドレス)に登録すればよいか判明する。たとえばS_IDをIndex番号に変換した結果、Index番号が0、そして定義したLUのLUNが1だったとすると、図5の振分テーブル241のアドレス0x0000 0000 0000 0004の情報を更新すればよいことが分かる。そこで、振分テーブル241のアドレス0x0000 0000 0000 0004のエントリのMP#502、LDEV#503に、今回定義したLUに対応付けられたオーナ権情報、LDEV#を格納し、またEn501に「1」を格納する。なお、サーバ3(あるいはサーバ3上で稼動する仮想計算機)のS_IDに対応するIndex番号が決定していない場合には振分テーブル241への登録はできないため、その場合、コントローラ21は振分テーブル241の更新は行わない。
(コマンドの多重処理)
なお、本発明の実施例1の振分モジュール33は、同時に複数のI/Oコマンドを受信し、コントローラ21aまたは21bへと振り分ける処理を行うことが可能である。つまりMPU31から第1のコマンドを受信し、第1のコマンドの送信先の決定処理を行っている間に、MPU31から第2のコマンドを受信することが可能である。この場合の処理の流れについて、図9を用いて説明する。
なお、本発明の実施例1の振分モジュール33は、同時に複数のI/Oコマンドを受信し、コントローラ21aまたは21bへと振り分ける処理を行うことが可能である。つまりMPU31から第1のコマンドを受信し、第1のコマンドの送信先の決定処理を行っている間に、MPU31から第2のコマンドを受信することが可能である。この場合の処理の流れについて、図9を用いて説明する。
MPU31がI/Oコマンド(1)を生成し、振分モジュールに送信すると(図9:S3)、振分部35はI/Oコマンド(1)の送信先を決定するための処理、つまり図3のS4(あるいは図7のS41〜S45の処理)、S6の処理(振分テーブル241へのアクセス)を行う。ここでは、I/Oコマンド(1)の送信先を決定するための処理のことを「タスク(1)」と呼ぶ。このタスク(1)の処理中に、MPU31がI/Oコマンド(2)を生成し、振分モジュールに送信すると(図9:S3’)、振分部35は一旦タスク(1)を中断(タスク切替)し(図9:S5)、I/Oコマンド(2)の送信先を決定するための処理を開始する(この処理を「タスク(2)」)と呼ぶ)。タスク(2)もタスク(1)と同様、振分テーブル241へのアクセス処理を行う。図9に記載されている例では、タスク(1)による振分テーブル241へのアクセス要求の応答が振分モジュール33に戻ってくる前に、タスク(2)による振分テーブル241へのアクセス要求が発行されている。これは振分モジュール33が、サーバ3の外部(ストレージ装置2)にあるメモリ24にアクセスする場合、振分モジュール33内のメモリにアクセスする場合に比べて応答時間が長くなり、タスク(2)が、タスク(1)による振分テーブル241へのアクセス要求の完了を待っていると、システム性能が低下する。そのため、タスク(1)による振分テーブル241へのアクセス要求の完了を待たずに、タスク(2)による振分テーブル241へのアクセスを行えるようにしている。
そしてタスク(1)による、振分テーブル241へのアクセス要求の応答が、コントローラ21から振分モジュール33に戻ってくると、振分部35はまたタスク切り替えを行い(S5’)、タスク(1)の実行に戻り、I/Oコマンド(1)の送信処理(図9:S7)を行う。その後、タスク(2)による、振分テーブル241へのアクセス要求の応答が、コントローラ21から振分モジュール33に戻ってくると、振分部35はまたタスク切り替えを行い(図9:S5’’)、タスク(2)の実行に移り、I/Oコマンド(2)の送信処理(図9:S7’)を行う。
ここで、タスク(1)、タスク(2)で行われる振分テーブルアクセスアドレス算出(S4)は、図7で説明したとおり、Index番号の検索が失敗し、振分テーブル241へのアクセスアドレスの生成ができない場合もある。その場合には、図7で説明したとおりダミーアドレスを指定してメモリ24にアクセスする処理を行う。Index番号の検索が失敗した場合には、代表MPに対してI/Oコマンドを送信する以外の選択肢はないため、本来メモリ24にアクセスする必要がないが、以下の理由により、ダミーアドレスを指定してメモリ24にアクセスする。
たとえば図7のタスク(2)でIndex番号の検索が失敗した場合を想定する。その場合、Index番号の検索が失敗した時点で(メモリ24にアクセスせず)直接代表MPにI/Oコマンドを送信するようにすると、タスク(1)による、振分テーブル241へのアクセス要求に時間がかかり、その応答がコントローラ21から振分モジュール33に戻ってくる前に、タスク(2)はI/Oコマンドを代表MPに送信することができてしまうことがある。そうすると、I/Oコマンド(1)とI/Oコマンド(2)の処理の順序が入れ替わってしまうという好ましくない事態が発生するため、本発明の実施例1における振分部35では、Index番号の検索が失敗した場合でも、メモリ24にアクセスする処理を行うようにしている。なお、本発明の計算機システム1では、振分モジュール33がメモリ24に複数のアクセス要求を発行すると、アクセス要求の発行順に、各アクセス要求に対応した応答が戻ってくる(順序性が保証されている)ようになっている。
ただし、メモリ24上のダミーアドレスへのアクセス処理を行わせることは、I/Oコマンドの順序を保証するための一手法に過ぎず、その他の手法を採用することも可能である。たとえばタスク(2)によるI/Oコマンドの発行先(たとえば代表MPなど)が決定していても、タスク(1)のI/Oコマンド発行先が決定するまで、あるいはタスク(1)がI/Oコマンドをストレージ装置2に発行するまでは、振分モジュール33はタスク(2)によるI/Oコマンド発行を待たせる(図7のS6の実行を待たせる)等の制御を行う方法が考えられる。
(障害発生時の処理)
続いて、本発明の実施例1におけるストレージ装置2で障害が発生した場合、特に複数のコントローラ21のうちの1つが停止した場合の処理について説明する。1つのコントローラ21が停止した時、当該停止したコントローラ21が振分テーブル241を有していたとすると、サーバ3はそれ以降振分テーブル241にアクセスできなくなるため、振分テーブル241を別のコントローラ21に移動し(再作成し)、かつ振分モジュールが振分テーブル241にアクセスする際のアクセス先コントローラ21の情報を変更する必要がある。また停止したコントローラ21がオーナ権を有していたボリュームについてもオーナ権を変更する必要がある。
続いて、本発明の実施例1におけるストレージ装置2で障害が発生した場合、特に複数のコントローラ21のうちの1つが停止した場合の処理について説明する。1つのコントローラ21が停止した時、当該停止したコントローラ21が振分テーブル241を有していたとすると、サーバ3はそれ以降振分テーブル241にアクセスできなくなるため、振分テーブル241を別のコントローラ21に移動し(再作成し)、かつ振分モジュールが振分テーブル241にアクセスする際のアクセス先コントローラ21の情報を変更する必要がある。また停止したコントローラ21がオーナ権を有していたボリュームについてもオーナ権を変更する必要がある。
図10を用いて、複数のコントローラ21のうちの1つが停止した場合に、ストレージ装置2が行う処理について説明する。この処理は、ストレージ装置2内のいずれかのコントローラ21が、別のコントローラ21の停止を検知した時に、当該停止を検知したコントローラ21によって開始される。以下、コントローラ21aで障害が発生して停止し、コントローラ21bはコントローラ21aが停止したことを検知した場合について説明する。まず、障害により停止したコントローラ21(コントローラ21a)がオーナ権を持っていたボリュームについて、それらのボリュームのオーナ権を別のコントローラ21(コントローラ21b)に変更する(S110)。具体的にはLDEV管理テーブル200で管理されているオーナ権の情報を変更する。図2を用いて説明すると、LDEV管理テーブル200で管理されているボリュームのうち、MP#200−4が「0」(コントローラ21aを意味する)のボリュームのオーナ権を全て別のコントローラ(コントローラ21b)に変更する。つまりMP#200−4に「0」が格納されているエントリについて、MP#200−4の内容を「1」に変更する。
続いてS120では、停止したコントローラ21aが振分テーブル241を有していたか否かを判定する。当該判定がYesの場合には、コントローラ21bはLDEV管理テーブル200、インデックステーブル600を用いて振分テーブル241bを作成する(S130)、サーバ3(の振分モジュール33)に対して、振分テーブル241bの振分テーブルベースアドレスとテーブルリード先コントローラ(コントローラ21b)の情報を送信し(S140)、処理を終了する。S140の処理により、サーバ3に情報が送信されると、サーバ3では今後はコントローラ21b内の振分テーブル241bに対してアクセスを行うように設定が変更される。
一方S120における判定がNoの場合は、コントローラ21bが振分テーブル241bを管理していた場合であり、この場合はサーバ3で振分テーブル241のアクセス先を変更する必要がない。ただし振分テーブル241にはオーナ権の情報が含まれており、この情報は更新の必要があるので、LDEV管理テーブル200、インデックステーブル600の情報に基づいて振分テーブル241bの更新を行い(S150)、処理を終了する。
続いて、本発明の実施例2に係る計算機システム1000の構成を説明する。図12は、本発明の実施例2に係る計算機システム1000の主要構成要素と、それらの接続関係を示した図である。計算機システム1000の主要構成要素には、ストレージコントローラモジュール1001(「コントローラ1001」と略記されることもある)、サーバブレード(図中では「ブレード」と略記している)1002、ホストI/Fモジュール1003、ディスクI/Fモジュール1004、SCモジュール1005、HDD1007がある。なお、ホストI/Fモジュール1003とディスクI/Fモジュール1004とを総称して、「I/Oモジュール」と呼ぶこともある。
コントローラ1001とディスクI/Fモジュール1004の組は、実施例1におけるストレージ装置2のストレージコントローラ21と同様の機能を有するものである。またサーバブレード1002は、実施例1におけるサーバ3と同様の機能を有するものである。
また、ストレージコントローラモジュール1001、サーバブレード1002、ホストI/Fモジュール1003、ディスクI/Fモジュール1004、SCモジュール1005は、計算機システム1000内に複数存在してよい。以下では、ストレージコントローラモジュール1001が2つ存在する構成について説明するが、2つのストレージコントローラモジュール1001を区別して表記する必要がある場合、それぞれを「ストレージコントローラモジュール1001−1」(あるいは「コントローラ1001−1」)、「ストレージコントローラモジュール1001−2」(あるいは「コントローラ1001−2」)と表記する。またサーバブレード1002は8台存在する構成について説明するが、複数のサーバブレード1002を区別して表記する必要がある場合には、サーバブレード1002−1、1002−2、…1002−8、と表記する。
コントローラ1000とサーバブレード1002の間、及びコントローラ1000とI/Oモジュールとの間では、I/Oシリアルインタフェース(拡張バスの一種)であるPCI(Peripheral Component Interconnect) Express(以下、「PCIe」と略記)の規格に従う通信が行われる。コントローラ1000、サーバブレード1002、I/Oモジュールをバックプレーン1006に接続すると、コントローラ1000とサーバブレード1002の間、及びコントローラ1000とI/Oモジュール(1003、1004)との間が、PCIeの規格に従う通信線で接続される。
コントローラ1001は、サーバブレード1002に論理ユニット(LU)を提供し、サーバブレード1002からのI/O要求を処理する。コントローラ1001−1、1001−2はいずれも同一の構成であり、それぞれがMPU1011a、MPU1011b、ストレージメモリ1012a、1012bを有する。コントローラ1001内のMPU1011a、1011bは、Intel社のチップ間接続技術であるQPI(QuickPath Interconnect)リンクで相互接続されており、またコントローラ1001−1、1001−2のMPU1011a同士、そしてコントローラ1001−1、1001−2のMPU1011b同士は、NTB(Non−Transparent Bridge)を介して相互に接続されている。また、図では記載を省略しているが、各コントローラ1001は実施例1のストレージコントローラ21と同様に、LANに接続するためのNICを有し、LAN経由で管理端末(非図示)と通信可能な状態にされている。
ホストI/Fモジュール1003は、計算機システム1000の外部に存在するホスト1008をコントローラ1001に接続するためのインタフェースを有するモジュールで、ホスト1008の有するHBA(Host Bus Adapter)に接続するためのTBA(Target Bus Adapter)を有する。
ディスクI/Fモジュール1004は、複数のハードディスク(HDD)1007をコントローラ1001に接続するためのSASコントローラ10041を有するモジュールで、コントローラ1001は、サーバブレード1002あるいはホスト1008からのライトデータを、ディスクI/Fモジュール1004に接続された複数のHDD1007へと格納する。つまりコントローラ1001、ホストI/Fモジュール1003、ディスクI/Fモジュール1004、複数のHDD1007の組は、実施例1におけるストレージ装置2に相当するものである。なお、HDD1007は、ハードディスクのような磁気ディスク以外に、SSD等の半導体記憶デバイスを用いることも可能である。
サーバブレード1002は、1以上のMPU1021、メモリ1022を有するとともに、ASIC1024の搭載されたメザニンカード1023を有する。ASIC1024は、実施例1におけるサーバ3に搭載されている振分モジュール33に相当するもので、詳細は後述する。またMPU1021は、複数のプロセッサコアを有する、いわゆるマルチコアプロセッサであってもよい。
SCモジュール1005は、伝送信号のリピーターであるSignal Conditioner(SC)を搭載したモジュールで、コントローラ1001とサーバブレード1002間を流れる信号の劣化を防ぐために設けられている。
続いて図18〜20を用いて、図12で説明した各構成要素の実装形態の一例を説明する。図18は計算機システム1000を19インチラック等のラックに実装した場合の前面図の一例を示したものである。実施例2に係る計算機システム1000の各構成要素のうち、HDD1007を除く構成要素は、CPFシャーシ1009と呼ばれる単一の筐体に格納される。そしてHDD1007は、HDD Box1010と呼ばれる筐体に格納される。CPFシャーシ1009やHDD Box1010は、たとえば19インチラック等のラックに搭載されるが、計算機システム1000で扱うデータ量の増加にあわせて、HDD1007(及びHDD Box1010)は増設されていくので、図18に示す通り、ラックの下段にCPFシャーシ1009を設置し、CPFシャーシ1009の上にHDD Box1010を設置する規則にしている。
また、CPFシャーシ1009内に搭載される構成要素はそれぞれ、CPFシャーシ1009内のバックプレーン1006に接続されることにより、相互接続される。図20に、図18に記載の線A−A’に沿った断面図を示す。図20に記載の通り、コントローラ1001、SCモジュール1005、サーバブレード1002は、CPFシャーシ1009の前面に搭載され、コントローラ1001及びサーバブレード1002の背面についているコネクタが、バックプレーン1006に接続されている。またI/Oモジュール(ディスクI/Fモジュール)1004は、CPFシャーシ1009の背面に搭載され、これもコントローラ1001と同じく、バックプレーン1006に接続されている。バックプレーン1006は、サーバブレード1002やコントローラ1001等の、計算機システム1000の各構成要素を相互接続するためのコネクタを備えた回路基板で、コントローラ1001、サーバブレード1002、I/Oモジュール1003、1004、SCモジュール1005のコネクタ(図20において、コントローラ1001やサーバブレード1002等とバックプレーン1006の間に存在するボックス1025がコネクタである)をバックプレーン1006のコネクタに接続することにより、各構成要素が相互接続される。
また図20には示されていないが、I/Oモジュール(ホストI/Fモジュール)1003もディスクI/Fモジュール1004と同じく、CPFシャーシ1009の背面に搭載され、バックプレーン1006に接続されている。図19に、計算機システム1000の背面図の一例を示すが、ここから分かるように、ホストI/Fモジュール1003とディスクI/Fモジュール1004はいずれもCPFシャーシ1009の背面に搭載されている。また、I/Oモジュール1003、1004の下の空間部分には、ファンやLANのコネクタ等が搭載されているが、これらは本発明の説明上、必須の構成要素ではないため、説明を省略する。
これにより、サーバブレード1002とコントローラ1001は、SCモジュール1005を挟んでPCIeの規格に従う通信線で接続され、I/Oモジュール1003、1004とコントローラ1001の間もPCIeの規格に従う通信線で接続される。またコントローラ1001−1、1001−2同士も、NTBを介して相互接続される。
また,CPFシャーシ1009の上に配置されるHDD Box1010は、I/Oモジュール1004と接続されるが、その接続は、筐体の背面に配線されるSASケーブルによって接続される。
先に述べたとおり、HDD Box1010はCPFシャーシ1009の上に配置される。保守性を考慮すると、HDD Boxとコントローラ1001及びI/Oモジュール1004は近接した位置に配置することが望ましいため、コントローラ1001はCPFシャーシ1009内の上部に搭載され、サーバブレード1002はCPFシャーシ1009内の下部に搭載される。そうすると、特に最下部のサーバブレード1002と最上部のコントローラ1001との通信線の長さが長くなってしまうので、両者の間を流れる信号の劣化を防ぐためのSCモジュール1005を、サーバブレード1002とコントローラ1001の間に挿入している。
続いて、コントローラ1001、サーバブレード1002の内部構成について、図13を用いてやや詳細に説明する。
サーバブレード1002は、コントローラ1001−1、1001−2のいずれかにI/O要求(リード、ライトコマンド)を振り分けるためのデバイスであるASIC1024を備えている。サーバブレード1002のMPU1021とASIC1024との間の通信では、コントローラ1000とサーバブレード1002の間の通信方式と同様、PCIeが用いられる。サーバブレード1002のMPU1021には、MPU1021と外部デバイスを接続するためのルートコンプレックス(Root Complex。図中では「RC」と略記している)10211が内蔵され、ASIC1024には、ルートコンプレックス10211に接続される、PCIeツリーの終端デバイスであるエンドポイント(Endpoint。図中では「EP」と略記している)10241が内蔵されている。
コントローラ1001もサーバブレード1002と同様、コントローラ1001内のMPU1011と、I/Oモジュール等のデバイスとの間の通信規格にPCIeが用いられている。MPU1011はルートコンプレックス10112を有し、各I/Oモジュール(1003、1004)にはルートコンプレックス10112に接続されるエンドポイントが内蔵されている。また、ASIC1024には、先に説明したエンドポイント10241の他、2つのエンドポイント(10242、10243)が存在する。これらの2つのエンドポイント(10242、10243)は先に説明したエンドポイント10241とは異なり、ストレージコントローラ1011内のMPU1011のルートコンプレックス10112に接続されるエンドポイントである。
図13の構成例に記載の通り、2つのエンドポイント(10242、10243)のうち、一方のエンドポイント(たとえばエンドポイント10242)は、ストレージコントローラ1011−1内のMPU1011のルートコンプレックス10112に接続され、もう一方のエンドポイント(たとえばエンドポイント10243)は、ストレージコントローラ1011−2内のMPU1011のルートコンプレックス10112に接続されるように構成される。つまり、ルートコンプレックス10211とエンドポイント10241を含むPCIeドメインと、コントローラ1001−1内ルートコンプレックス10112とエンドポイント10242を含むPCIeドメインとは、異なるドメインである。またコントローラ1001−2内ルートコンプレックス10112とエンドポイント10243を含むドメインも、他のドメインとは異なるPCIeドメインである。
ASIC1024には、先に説明したエンドポイント10241、10242、10243と、後述する振り分け処理を実行するプロセッサであるLRP10244、サーバブレード1002とストレージコントローラ1001間のデータ転送処理を実行するDMAコントローラ(DMAC)10245、内部RAM10246が含まれる。なお、サーバブレード1002とコントローラ1001間でのデータ転送(リード、ライト処理)の際、LRP10244、DMAC10245、内部RAM10246で構成される機能ブロック10240はPCIeのマスタデバイスとして動作するため、この機能ブロック10240をPCIeマスタブロック10240と呼ぶ。また各エンドポイント10241、10242、10243は、それぞれ異なるPCIeドメインに属するため、サーバブレード1021のMPU1021が直接コントローラ1001(のストレージメモリ1012等)にアクセスすることはできない。逆にコントローラ1001のMPU1011が、サーバブレード1021のサーバメモリ1022にアクセスすることもできない。一方、PCIeマスタブロック10240の構成要素(LRP10244やDMAC10245)は、コントローラ1001のストレージメモリ1012とサーバブレード1021のサーバメモリ1022のいずれに対してもアクセス(リード、ライト)可能である。
また、PCIeでは、I/Oデバイスのレジスタ等をメモリ空間にマップすることができ、レジスタ等がマップされたメモリ空間のことをMMIO(Memory Mapped Input/Output)空間と呼ぶ。ASIC1024には、サーバブレード1002のMPU1021がアクセス可能なMMIO空間であるサーバMMIO空間10247、コントローラ1001−1(CTL1)のMPU1011(プロセッサコア10111)がアクセス可能なMMIO空間であるCTL1用MMIO空間10248、そしてコントローラ1001−2(CTL2)のMPU1011(プロセッサコア10111)がアクセス可能なMMIO空間であるCTL2用MMIO空間10249が設けられている。これにより、MPU1011(プロセッサコア10111)やMPU1021は、このMMIO空間に対して制御情報の読み書きを行うことで、LRP10244やDMAC1024等に対してデータ転送等の指示を行うことができるように構成されている。
また、コントローラ1001−1内ルートコンプレックス10112及びエンドポイント10242を含むPCIeドメインと、コントローラ1001−2内ルートコンプレックス10112及びエンドポイント10243を含むドメインとは、それぞれ異なるPCIeドメインであるが、そしてコントコントローラ1001−1、1001−2のMPU1011a同士、そしてコントローラ1001−1、1001−2のMPU1011b同士は、NTBを介して相互に接続されているので、コントローラ1001−1(のMPU1011など)からコントローラ1001−2のストレージメモリ(1012a、1012b)に対してデータを書き込む(転送する)ことが可能になっている。逆にコントローラ1001−2(のMPU1011など)からコントローラ1001−1のストレージメモリ(1012a、1012b)に対してデータを書き込む(転送する)ことも可能である。
図12に記載されているように、各コントローラ1001には2つのMPU1011(MPU1011a、1011b)が存在し、MPU1011a、1011bはそれぞれ、一例として4つのプロセッサコア10111を有する。それぞれのプロセッサコア10111は、サーバブレード1002から到来する、ボリュームに対するリード、ライトコマンド要求を処理する。また、MPU1011a、1011bにはそれぞれ、ストレージメモリ1012a、1012bが接続されている。ストレージメモリ1012a、1012bはそれぞれ物理的に独立しているが、先に述べたとおり、MPU1011a、1011b同士はQPIリンクで相互接続されているので、MPU1011a、1011b(そしてMPU1011a、1011b内のプロセッサコア10111)からは、ストレージメモリ1012a、1012bのいずれにもアクセス可能になっている(単一のメモリ空間としてアクセス可能になっている)。
そのため、図13に示すように、コントローラ1001−1には、実質的に1つのMPU1011−1、1つのストレージメモリ1012−1が存在する構成とみなすことができる。同様に、コントローラ1001−2には、実質的に1つのMPU1011−2、1つのストレージメモリ1012−2が存在する構成とみなすことができる。また、ASIC1024上のエンドポイント10242は、コントローラ1001−1上の2つのMPU(1011a、1011b)のうちのいずれのMPU(1011a、1011b)の有するルートコンプレックス10112に接続されていてもよく、同様にエンドポイント10243は、コントローラ1001−2上のいずれのMPU(1011a、1011b)の有するルートコンプレックス10112に接続されていてもよい。
以下では、コントローラ1001−1内の複数のMPU1011a、1011b、そしてストレージメモリ1012a、1012bを区別せず、コントローラ1001−1内のMPUを「MPU1011−1」と表記し、ストレージメモリを「ストレージメモリ1012−1」と表記する。同様に、コントローラ1001−2内のMPUを「MPU1011−2」と表記し、ストレージメモリを「ストレージメモリ1012−2」と表記する。また、先に述べたとおり、MPU1011a、1011bはそれぞれ4つのプロセッサコア10111を有しているので、MPU1011−1、1011−2はそれぞれ、8つのプロセッサコアを備えるMPUとみなすことができる。
(LDEV管理テーブル)
続いて、本発明の実施例2におけるストレージコントローラ1001が有する管理情報について説明していく。まずストレージコントローラ1001がサーバブレード1002やホスト1008に提供する論理ボリューム(LU)についての管理情報について説明する。
続いて、本発明の実施例2におけるストレージコントローラ1001が有する管理情報について説明していく。まずストレージコントローラ1001がサーバブレード1002やホスト1008に提供する論理ボリューム(LU)についての管理情報について説明する。
実施例2におけるコントローラ1001も、実施例1のコントローラ21が有するLDEV管理テーブル200と同じLDEV管理テーブル200を有する。ただし実施例2におけるLDEV管理テーブル200では、MP#200−4に格納される内容が実施例1のLDEV管理テーブル200と若干異なる。
実施例2におけるコントローラ1001では、プロセッサコアが1つのコントローラ1001について8つ存在する、つまりコントローラ1001−1とコントローラ1001−2に存在するプロセッサコアの数の合計は16個である。以下、実施例2における各プロセッサコアはそれぞれ、0x00〜0x0Fのいずれか識別番号を持つものとし、コントローラ1001−1には、識別番号が0x00〜0x07のプロセッサコアが存在し、コントローラ1001−2には、識別番号が0x08〜0x0Fのプロセッサコアが存在するものとする。また、識別番号がN番(Nは0x00〜0x0Fまでの値)のプロセッサコアのことを、「コアN」と表記することもある。
実施例1におけるコントローラ21aまたは21bには、それぞれ1つのMPUが搭載されているだけであったため、LDEV管理テーブル200のMP#200−4の欄(LUのオーナ権を持つプロセッサの情報を格納する欄)には、0または1のいずれかの値が格納されていた。一方実施例2におけるコントローラ1001は、16個のプロセッサコアのいずれかが各LUのオーナ権を持つ。そのため、実施例2におけるLDEV管理テーブル200のMP#200−4の欄には、オーナ権を持つプロセッサコアの識別番号(0x00〜0x0Fの値)が格納される。
(コマンドキュー)
ストレージメモリ1012−1、1012−2には、サーバブレード1002がコントローラ1001に対して発行するI/Oコマンドを格納する、FIFO型の領域が設けられており、実施例2ではそれをコマンドキューと呼ぶ。図14に、ストレージメモリ1012−1に設けられているコマンドキューの一例を示す。図14に示されているように、コマンドキューはサーバブレード1002ごと、及びコントローラ1001のプロセッサコアごとに設けられている。たとえばサーバブレード1002−1が、識別番号0x01のプロセッサコア(コア0x01)がオーナ権を持つLUに対するI/Oコマンドを発行すると、サーバブレード1002−1は、サーバブレード1002−1用のコマンドキューの集合10131−1の中の、コア0x01用キューにコマンドを格納する。なお、ストレージメモリ1012−2にも同様に、サーバブレードごとのコマンドキューが設けられているが、ストレージメモリ1012−2に設けられるコマンドキューは、MPU1011−2の持つプロセッサコア、つまり識別番号0x08〜0x0Fのプロセッサコアに対するコマンドを格納するキューである点が、ストレージメモリ1012−1に設けられているコマンドキューと異なる。
ストレージメモリ1012−1、1012−2には、サーバブレード1002がコントローラ1001に対して発行するI/Oコマンドを格納する、FIFO型の領域が設けられており、実施例2ではそれをコマンドキューと呼ぶ。図14に、ストレージメモリ1012−1に設けられているコマンドキューの一例を示す。図14に示されているように、コマンドキューはサーバブレード1002ごと、及びコントローラ1001のプロセッサコアごとに設けられている。たとえばサーバブレード1002−1が、識別番号0x01のプロセッサコア(コア0x01)がオーナ権を持つLUに対するI/Oコマンドを発行すると、サーバブレード1002−1は、サーバブレード1002−1用のコマンドキューの集合10131−1の中の、コア0x01用キューにコマンドを格納する。なお、ストレージメモリ1012−2にも同様に、サーバブレードごとのコマンドキューが設けられているが、ストレージメモリ1012−2に設けられるコマンドキューは、MPU1011−2の持つプロセッサコア、つまり識別番号0x08〜0x0Fのプロセッサコアに対するコマンドを格納するキューである点が、ストレージメモリ1012−1に設けられているコマンドキューと異なる。
(振分テーブル)
実施例2におけるコントローラ1001も実施例1のコントローラ21と同様、振分テーブル241を有する。振分テーブル241の内容は実施例1で説明したもの(図5)と同様である。相違点は、実施例2の振分テーブル241では、MPU#502にプロセッサコアの識別番号(つまり0x00〜0x0F)が格納される点であり、それ以外の点は実施例1における振分テーブルと同じである。
実施例2におけるコントローラ1001も実施例1のコントローラ21と同様、振分テーブル241を有する。振分テーブル241の内容は実施例1で説明したもの(図5)と同様である。相違点は、実施例2の振分テーブル241では、MPU#502にプロセッサコアの識別番号(つまり0x00〜0x0F)が格納される点であり、それ以外の点は実施例1における振分テーブルと同じである。
また実施例1ではコントローラ21内に1つの振分テーブル241が存在したが、実施例2におけるコントローラ1001では、サーバブレード1002の台数と同数の振分テーブルが格納される(たとえばサーバブレード1002−1、1002−2の、2台のサーバブレードが存在する場合、コントローラ1001には、サーバブレード1002−1用の振分テーブルと、サーバブレード1002−2用の振分テーブルの、合計2つの振分テーブルが格納される)。実施例1と同様、計算機システム1000の起動時に、コントローラ1001は振分テーブル241を作成(振分テーブル241を格納する記憶領域をストレージメモリ1012上に確保し、内容を初期化)し、サーバブレード1002(仮にサーバブレード1002−1とする)に対して振分テーブルのベースアドレスを通知する(図3:S1の処理)。その際に、コントローラは、複数存在する振分テーブルのうち、サーバブレード1002−1がアクセスすべき振分テーブルの格納されているストレージメモリ1012上の先頭アドレスをもとにベースアドレスを生成し、生成したベースアドレスを通知する。これによりサーバブレード1002−1〜1002−8は、I/Oコマンドの発行先を決定する際、コントローラ1001内の8つの振分テーブルのうち、自身がアクセスすべき振分テーブルにアクセスすることができる。なお、振分テーブル241のストレージメモリ1012上の格納位置は、あらかじめ固定的に定められていても良いし、振分テーブル生成時にコントローラ1001が動的に決定するようにしてもよい。
(インデックステーブル)
実施例1のストレージコントローラ21は、I/Oコマンドに含まれるサーバ3(あるいはサーバ3上で動作する仮想計算機)の情報(S_ID)をもとに、8ビットのIndex番号を導出し、サーバ3はIndex番号を用いて振分テーブル内アクセス先を決定していた。そしてコントローラ21は、S_IDとIndex番号の対応関係の情報をインデックステーブル600に管理していた。実施例2におけるコントローラ1001も同様に、インデックステーブル600を保持し、S_IDとIndex番号の対応関係の情報を管理している。
実施例1のストレージコントローラ21は、I/Oコマンドに含まれるサーバ3(あるいはサーバ3上で動作する仮想計算機)の情報(S_ID)をもとに、8ビットのIndex番号を導出し、サーバ3はIndex番号を用いて振分テーブル内アクセス先を決定していた。そしてコントローラ21は、S_IDとIndex番号の対応関係の情報をインデックステーブル600に管理していた。実施例2におけるコントローラ1001も同様に、インデックステーブル600を保持し、S_IDとIndex番号の対応関係の情報を管理している。
また、振分テーブルと同様に、実施例2におけるコントローラ1001は、コントローラ1001に接続されるサーバブレード1002ごとにインデックステーブル600を管理している。そのため、サーバブレード1002の台数と同数のインデックステーブル600を有する。
(ブレードサーバ側管理情報)
本発明の実施例2のブレードサーバ1002がI/O振分処理を行うために、ブレードサーバ1002で維持管理する情報は、実施例1のサーバ3(の振分部35)が有する情報(検索データテーブル3010、振分けテーブルベースアドレス情報3110、振分けテーブルリード先CTL#情報3120)と同じである。実施例2のブレードサーバ1002では、これらの情報はASIC1024の内部RAM10246に格納される。
本発明の実施例2のブレードサーバ1002がI/O振分処理を行うために、ブレードサーバ1002で維持管理する情報は、実施例1のサーバ3(の振分部35)が有する情報(検索データテーブル3010、振分けテーブルベースアドレス情報3110、振分けテーブルリード先CTL#情報3120)と同じである。実施例2のブレードサーバ1002では、これらの情報はASIC1024の内部RAM10246に格納される。
(I/O処理の流れ)
続いて、図15、16を用いて、サーバブレード1002がストレージコントローラモジュール1001に対してI/O要求(リード要求を例にとる)を送信する際の処理の概要を説明する。この処理の流れは実施例1の図3に記載の流れと同様である。なお、実施例2における計算機システム1000でも、初期設定時には、図3のS1、S2の処理(振分テーブルの生成と、振分テーブルのリード先、振分テーブルベースアドレス情報の送信)は行われるが、図15、16ではその処理は省略している。
続いて、図15、16を用いて、サーバブレード1002がストレージコントローラモジュール1001に対してI/O要求(リード要求を例にとる)を送信する際の処理の概要を説明する。この処理の流れは実施例1の図3に記載の流れと同様である。なお、実施例2における計算機システム1000でも、初期設定時には、図3のS1、S2の処理(振分テーブルの生成と、振分テーブルのリード先、振分テーブルベースアドレス情報の送信)は行われるが、図15、16ではその処理は省略している。
最初にサーバブレード1002のMPU1021が、I/Oコマンドの生成を行う(S1001)。実施例1と同様に、I/Oコマンドのパラメータには送信元サーバブレード1002を特定可能な情報であるS_ID、そしてアクセス対象LUのLUNが含まれている。またリード要求の場合、I/Oコマンドのパラメータにはリードデータを格納するべきメモリ1022上のアドレスが含まれる。MPU1021は生成したI/Oコマンドのパラメータをメモリ1022に格納する。I/Oコマンドのパラメータをメモリ1022に格納した後、MPU1021はI/Oコマンドの格納が完了したことをASIC1024に通知する(S1002)。この時、MPU1021はサーバ用MMIO空間10247の所定のアドレスへと情報を書き込むことで、ASIC1024への通知を行う。
MPU1021からコマンド格納完了の通知を受け取ったASIC1024のプロセッサ(LRP10244)は、メモリ1022からI/Oコマンドのパラメータを読み出し、ASIC1024の内部RAM10246に格納し(S1004)、パラメータの加工(S1005)を行う。サーバブレード1002側とストレージコントローラモジュール1001側ではコマンドのパラメータのフォーマットが異なる(たとえばサーバブレード1002で作成されるコマンドパラメータには、リードデータ格納先メモリアドレスが含まれているが、それはストレージコントローラモジュール1001では不要のパラメータである)ため、ストレージコントローラモジュール1001に不要な情報を取り除くなどの処理を行う。
S1006では、ASIC1024のLRP10244は、振分テーブル241のアクセスアドレスを算出する。この処理は実施例1の図3、図7で説明したS4(S41〜S45)と同じ処理で、LRP10244が検索データテーブル3010からI/Oコマンドに含まれていたS_IDに対応するIndex番号を得て、それをもとにアクセスアドレスを算出する。さらに、Index番号の検索が失敗しアクセスアドレスの算出に失敗することもある点も実施例1と同様で、その場合、LRP10244は実施例1と同様にダミーアドレスを生成する。
S1007では、図3のS6と同様の処理を行う。LRP10244はテーブルリード先CTL#3120で特定されるコントローラ1001(1001−1または1001−2)の振分テーブル241の所定アドレス(S1006で算出した振分テーブル241のアクセスアドレス)の情報を読み出す。これにより、アクセス対象LUのオーナ権を持つプロセッサ(プロセッサコア)が判明する。
S1008は、実施例1のS7(図3)と同様の処理である。LRP10244はS1005で加工したコマンドパラメータを、ストレージメモリ1012に書き込む。なお、図15では、S1007の処理における、振分テーブルのリード先となるコントローラ1001と、S1008の処理における、コマンドパラメータのライト先コントローラ1001とが同じ場合の例のみを記載している。ただし実施例1と同様に、S1007において判明した、アクセス対象LUのオーナ権を持つプロセッサコアの属するコントローラ1001が、振分テーブルのリード先となるコントローラ1001と異なるケースも発生し、その場合にはコマンドパラメータの書き込み先は当然、アクセス対象LUのオーナ権を持つプロセッサコアの属するコントローラ1001上のストレージメモリ1012である。
また、実施例2のコントローラ1001では複数のプロセッサコア10111が存在するため、S1007で判明した、アクセス対象LUのオーナ権を持つプロセッサコアの識別番号が、0x00〜0x07の範囲であるか、あるいは0x08〜0x0Fの範囲であるかを判定し、識別番号が0x00〜0x07の範囲である場合には、コントローラ1001−1のストレージメモリ1012−1上に設けられているコマンドキューにコマンドパラメータを書き込み、0x08〜0x0Fの範囲である場合には、コントローラ1001−2のストレージメモリ1012−2上に設けられているコマンドキューにコマンドパラメータを書き込む。
たとえばS1007で判明した、アクセス対象LUのオーナ権を持つプロセッサコアの識別番号が0x01で、コマンドを発行するサーバブレードがサーバブレード1002−1とすると、LRP10244は、ストレージメモリ1012上に設けられているサーバブレード1002−1用の8つのコマンドキューのうち、コア0x01用のコマンドキューにコマンドパラメータを格納する。コマンドパラメータの格納後、LRP10244はコマンドパラメータの格納が完了したことを、ストレージコントローラモジュール1001のプロセッサコア10111(アクセス対象LUのオーナ権を持つプロセッサコア)に通知する。
なお、S1007の処理で、ASIC1024上の検索データテーブルにサーバブレード1002(またはサーバブレード1002上で稼働する仮想計算機)のS_IDが登録されていないためにIndex番号の検索が失敗し、結果としてアクセス対象LUのオーナ権を持つプロセッサコアが判明しないこともある点は実施例1と同様である。この場合LRP10244は、実施例1と同様に、あらかじめ定められた特定のプロセッサコア(このプロセッサコアのことを、実施例1と同様に「代表MP」と呼ぶ)にI/Oコマンドを送信する。つまり、代表MP用のコマンドキューに、コマンドパラメータを格納し、コマンドパラメータの格納後、代表MPにコマンドパラメータの格納完了を通知する。
S1009で、ストレージコントローラモジュール1001のプロセッサコア10111は、コマンドキューからI/Oコマンドパラメータを取得し、取得したI/Oコマンドパラメータをもとに、リードデータの準備を行う。具体的にはHDD1007からデータを読み出し、ストレージメモリ1012のキャッシュ領域に格納する等である。S1010では、プロセッサコア10111は、キャッシュ領域に格納されたリードデータを転送するための、DMA転送用パラメータを生成して、自身のストレージメモリ1012に格納する。DMA転送用パラメータの格納が完了すると、プロセッサコア10111は格納が完了した旨をASIC1024のLRP10244に通知する(S1010)。この通知は具体的には、コントローラ1001用のMMIO空間(10248あるいは10249)の所定アドレスに情報の書き込みを行うことで実現される。
S1011では、LRP10244は、ストレージメモリ1012からDMA転送パラメータを読み出す。続いてS1012では、S1004で保存しておいたサーバブレード1002からのI/Oコマンドパラメータを読み出す。S1011で読み出されたDMA転送パラメータには、リードデータの格納されている転送元メモリアドレス(ストレージメモリ1012上アドレス)が含まれており、サーバブレード1002からのI/Oコマンドパラメータにはリードデータの転送先メモリアドレス(サーバブレード1002のメモリ1022上アドレス)が含まれているので、S1013ではLRP10244はこれらの情報を用いて、ストレージメモリ1012上のリードデータをサーバブレード1002のメモリ1022に転送するためのDMA転送リストを生成し、内部RAM10246に格納する。その後S1014で、LRP10244がDMAコントローラ10245に対してDMA転送の開始(起動)を指示すると、DMAコントローラ10245は、S1013で内部RAM10246に格納されたDMA転送リストに基づいて、ストレージメモリ1012からサーバブレード1002のメモリ1022へとデータ転送を実施する(S1015)。
S1015でのデータ転送が完了すると、DMAコントローラ10245はLRP10244にデータ転送が完了したことを通知する(S1016)。LRP10244はデータ転送完了の通知を受け取ると、I/Oコマンド完了のステータス情報を作成し、サーバブレード1002のメモリ1022、ストレージコントローラモジュール1001のストレージメモリ1012へとステータス情報を書き込む(S1017)。また処理が完了した旨をサーバブレード1002のMPU1021及びストレージコントローラモジュール1001のプロセッサコア10111へと通知し、リード処理が完了する。
(Index番号の検索が失敗した場合の処理)
続いて、Index番号の検索が失敗した場合の処理(たとえばサーバブレード1002(またはサーバブレード1002上で稼働する仮想計算機)が最初にコントローラ1002にI/O要求を発行した時など)について、図17を用いて説明する。この処理は、実施例1における図8の処理と同様である。
続いて、Index番号の検索が失敗した場合の処理(たとえばサーバブレード1002(またはサーバブレード1002上で稼働する仮想計算機)が最初にコントローラ1002にI/O要求を発行した時など)について、図17を用いて説明する。この処理は、実施例1における図8の処理と同様である。
代表MPがI/Oコマンドを受信すると(図15:S1008に相当する)、I/Oコマンドに含まれているS_IDとLUN、及びLDEV管理テーブル200を参照して、自身がアクセス対象のLUのオーナ権を持っているか判定する(S11)。オーナ権がある場合は、次のS12の処理を自身で実施し、オーナ権がない場合には、代表MPはオーナ権を有するプロセッサコアにI/Oコマンドを転送し、オーナ権を有するプロセッサコアは、代表MPからI/Oコマンドを受信する(S11’)。また、代表MPがI/Oコマンドを送信する時、あわせて当該I/Oコマンドの発行元のサーバブレード1002の情報(サーバブレード1002−1〜1002−8のうち、どのサーバブレードであるか、を示す情報)を送信する。
S12では、プロセッサコアは受信したI/O要求を処理し、処理結果をサーバ3に返送する。S12では、I/Oコマンドを受信したプロセッサコアがオーナ権を持っている場合は、図15、16に記載のS1009〜S1017の処理が行われる。I/Oコマンドを受信したプロセッサコアがオーナ権を持っていなかった場合、I/Oコマンドを転送されたプロセッサコア(オーナ権を持っているプロセッサコア)がS1009の処理を実施するとともに、代表MPの存在するコントローラ1001にデータを転送し、S1010以降の処理は代表MPが実施する。
S13’以降の処理は、実施例1のS13(図8)以降の処理と同様の処理が行われる。なお実施例2のコントローラ1001では、S1008で受信したI/Oコマンドで指定されたボリュームのオーナ権を持つプロセッサコアが、I/Oコマンドを受信したプロセッサコアとは異なっていた場合、オーナ権を持つプロセッサコアがS13’以降の処理を行う。図17には、その場合の処理の流れについて記載されている。ただし別の実施形態として、I/Oコマンドを受信したプロセッサコアがS13’以降の処理を行う形態もあり得る。
S12までで処理していたI/Oコマンドに含まれていたS_IDを、Index番号に対応付ける際、プロセッサコアは、コマンド発行元のサーバブレード1002用のインデックステーブル600を参照し、まだどのS_IDにも対応付けられていないIndex番号を検索し、いずれか1つのIndex番号を選択する。コマンド発行元のサーバブレード1002用のインデックステーブル600を特定できるようにするため、S13’の処理を実施するプロセッサコアは、S11’で、I/Oコマンドを受信したプロセッサコア(代表MP)から、コマンド発行元のサーバブレード1002を特定する情報を受信している。そして選択されたインデックス番号(Index#602)に対応する行のS_ID601欄に、I/Oコマンドに含まれていたS_IDを登録する。
S14’の処理は、実施例1のS14(図8)と同様であるが、振分けテーブル241がサーバブレード1002毎に存在するため、コマンド発行元のサーバブレード1002用の振分けテーブル241の更新を行う点が、実施例1と異なる点である。
最後にS15で、プロセッサコアはS13でS_IDに対して対応付けられたIndex番号の情報を、コマンド発行元のサーバブレード1002のASIC1024内の検索データテーブル3010に書き込む。なお、先に述べたとおり、コントローラ1001のMPU1011(及びプロセッサコア10111)は内部RAM10246上の検索データテーブル3010に直接データ書き込みを行えないので、プロセッサコアはCTL1用MMIO空間10248(またはCTL2用MMIO空間10249)の所定アドレスに書き込みを行うことで、検索データテーブル3010にS_IDの情報が反映されるようになっている。
(コマンドの多重処理)
実施例1において、振分モジュール33がサーバ3のMPU31から第1のコマンドを受信し、第1のコマンドの送信先の決定処理を行っている間に、MPU31から第2のコマンドを受信して処理することが可能であることを説明した。実施例2のASIC1024も同様に、複数のコマンドを同時期に処理することが可能で、この処理は実施例1の図9の処理と同じである。
実施例1において、振分モジュール33がサーバ3のMPU31から第1のコマンドを受信し、第1のコマンドの送信先の決定処理を行っている間に、MPU31から第2のコマンドを受信して処理することが可能であることを説明した。実施例2のASIC1024も同様に、複数のコマンドを同時期に処理することが可能で、この処理は実施例1の図9の処理と同じである。
(LU生成時の処理、障害発生時の処理)
また実施例2の計算機システムでも、実施例1で説明したLU生成時の処理や障害発生時の処理は、同様に実施される。処理の流れは実施例1で説明したものと同じであるため詳細な説明は省略する。なお、これらの処理の過程でオーナ権情報を決定する処理が行われるが、実施例2の計算機システムではLUのオーナ権をプロセッサコアが持つため、オーナ権の決定の際には、コントローラ1001はMPU1011ではなく、コントローラ1001内のいずれかのプロセッサコア10111を選択する点が、実施例1における処理と異なる。
また実施例2の計算機システムでも、実施例1で説明したLU生成時の処理や障害発生時の処理は、同様に実施される。処理の流れは実施例1で説明したものと同じであるため詳細な説明は省略する。なお、これらの処理の過程でオーナ権情報を決定する処理が行われるが、実施例2の計算機システムではLUのオーナ権をプロセッサコアが持つため、オーナ権の決定の際には、コントローラ1001はMPU1011ではなく、コントローラ1001内のいずれかのプロセッサコア10111を選択する点が、実施例1における処理と異なる。
特に障害発生時の場合、実施例1における処理では、たとえばコントローラ21aが障害により停止した場合、ストレージ装置2内では、処理を担当できるコントローラは、コントローラ21b以外存在しないため、コントローラ21a(のMPU23a)がオーナ権を持っていた各ボリュームのオーナ権情報を、全てコントローラ21bに変更した。一方実施例2における計算機システム1000では、一方のコントローラ(たとえばコントローラ1001−1)が停止した場合、各ボリュームの処理を担当可能なプロセッサコアは複数存在する(コントローラ1001−2にある8つのプロセッサコア10111が処理を担当可能である)。そのため、実施例2における障害発生時の処理では、一方のコントローラ(たとえばコントローラ1001−1)が停止した場合、残りのコントローラ(コントローラ1001−2)は、各ボリュームのオーナ権情報を、自身の持つ8つのプロセッサコア10111のいずれかに変更する。それ以外の処理は、実施例1において説明した処理と同じである。
以上、本発明の実施例を説明してきたが、これは本発明の説明のための例示であって、本発明を上で説明した実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施可能である。たとえば実施例1に記載のストレージ装置2において、ストレージ装置2内のコントローラ21、ポート26、ディスクI/F215の数は、図1に記載された個数に限定されるものではなく、2つ以上のコントローラ21、ディスクI/F215を有する構成、3つ以上のホストI/Fを有する構成であっても良い。またHDD22を、SSDなどの記憶媒体に置換した構成でも本発明は有効である。
また、本発明の実施例では、振分けテーブル241をストレージ装置2のメモリ内に格納した構成をとるが、振分けテーブルを振分モジュール33(あるいはASIC1024)内に設ける構成をとっても良い。その場合、振分けテーブルの更新が発生する場合(上の実施例で説明したように、サーバからストレージ装置に初回のI/Oアクセスが発行された場合、ストレージ装置にLUが定義された場合、コントローラの障害が発生した場合等)には、ストレージ装置において更新された振分けテーブルを作成し、ストレージ装置から振分モジュール33(あるいはASIC1024)内に更新結果を反映させるようにすれば良い。
また実施例1における振分モジュール33は、ASIC(Application Specific Integrated Circuit)やFPGA (Field Programmable Gate Array)として実装する構成であってもよいし、あるいは振分モジュール33内に汎用プロセッサを搭載し、振分モジュール33で行われる多くの処理を、汎用プロセッサが実行するプログラムによりで実現する形態をとっても良い。
1: 計算機システム
2: ストレージ装置
3: サーバ
4: 管理端末
6: LAN
7: I/Oバス
21: ストレージコントローラ
22: HDD
23: MPU
24: メモリ
25: ディスクインタフェース
26: ポート
27: コントローラ間接続パス
31: MPU
32: メモリ
33: 振分モジュール
34: 相互接続スイッチ
35: 振分部
36,37: ポート
2: ストレージ装置
3: サーバ
4: 管理端末
6: LAN
7: I/Oバス
21: ストレージコントローラ
22: HDD
23: MPU
24: メモリ
25: ディスクインタフェース
26: ポート
27: コントローラ間接続パス
31: MPU
32: メモリ
33: 振分モジュール
34: 相互接続スイッチ
35: 振分部
36,37: ポート
Claims (14)
- 1以上のサーバと、ストレージ装置とを有する計算機システムであって、
前記ストレージ装置は、1以上の記憶媒体と、第1プロセッサ及び第1メモリを有する第1コントローラと、第2プロセッサ及び第2メモリを有する第2コントローラとを有し、第1コントローラと第2コントローラはいずれも前記サーバに接続されており、
前記サーバは、第3プロセッサと第3メモリと、前記第3プロセッサが発行する前記ストレージ装置に対するI/O要求を前記第1プロセッサまたは第2プロセッサのいずれかに送信する振分モジュールを有し、
前記振分モジュールは、
前記第3プロセッサが第1のI/O要求を発行すると、前記ストレージ装置が提供する振分情報に基づいて、前記第1プロセッサまたは前記第2プロセッサのいずれを前記第1のI/O要求の送信先にするか決定する処理を開始し、
前記第1のI/O要求の送信先が決定する前に、前記第3プロセッサから第2のI/O要求を受信すると、前記ストレージ装置が提供する振分情報に基づいて、前記第1プロセッサまたは前記第2プロセッサのいずれを前記第2のI/O要求の送信先にするか決定する処理を開始し、
前記第1のI/O要求の送信先が決定すると、前記決定された送信先に対して前記第1のI/O要求を送信し、
前記第1のI/O要求の送信先が決定するまでは、前記第2のI/O要求を前記送信先に送信しない、
ことを特徴とする、計算機システム。 - 前記ストレージ装置は、前記第1メモリまたは前記第2メモリに、前記サーバのI/O要求の送信先についての情報を格納した振分テーブルを有し、
前記振分モジュールは、前記第3プロセッサからI/O要求を受信すると、前記振分テーブルに格納された前記情報を取得し、前記情報に基づいて前記第1プロセッサ、前記第2プロセッサのいずれを前記I/O要求の送信先にするか決定することを特徴とする、請求項1に記載の計算機システム。 - 前記ストレージ装置は、前記1以上の記憶媒体で構成される複数のボリュームを前記サーバに提供し、
前記第3プロセッサから発行されるI/O要求には少なくとも、前記サーバに与えられた固有の識別子と、前記ストレージ装置が提供するボリュームの論理ユニット番号(LUN)が含まれており、
前記振分テーブルには、前記ボリュームごとに、前記I/O要求の送信先についての情報が格納されている計算機システムであって、
前記振分モジュールは、
前記識別子及び前記識別子に対応付けられたインデックス番号との対応関係についての情報を格納した検索データテーブルを有し、
前記第3プロセッサから前記第1のI/O要求を受信すると、前記検索データテーブルを参照し、前記識別子が前記検索データテーブルに存在する場合には、前記識別子に基づいて前記インデックス番号を特定し、
前記特定したインデックス番号と前記第1のI/O要求に含まれるLUNとに基づいて前記振分テーブル内の参照先アドレスを決定し、前記参照先アドレスで特定される前記第1メモリまたは第2メモリ上の領域に格納された情報を読み出すことによって、前記第1のI/O要求の送信先についての情報を取得し、
前記取得した情報に基づいて、前記第1プロセッサ、前記第2プロセッサのいずれを前記第1のI/O要求の送信先にするか決定することを特徴とする、
請求項2に記載の計算機システム。 - 前記計算機システムでは、前記サーバの識別子に対応付けられたインデックス番号が前記検索データテーブルに存在しない場合の前記I/O要求の送信先の情報である、代表プロセッサ情報があらかじめ定義されており、
前記振分モジュールは、前記第3プロセッサから前記第2のI/O要求を受信すると、前記検索データテーブルを参照し、前記第2のI/O要求に含まれている前記識別子が前記検索データテーブルに存在しなかった場合、前記第1メモリまたは第2メモリ上の所定領域のデータの読み出しを実行した後、前記代表プロセッサ情報で特定される送信先に対して前記第2のI/O要求を送信することを特徴とする、
請求項3に記載の計算機システム。 - 前記ストレージ装置は、前記第2のI/O要求に対する応答を前記サーバに返却した後、
前記識別子に対応付けられるべきインデックス番号を決定し、前記決定したインデックス番号を前記検索データテーブルに、前記識別子と対応付けて格納する
ことを特徴とする、請求項4に記載の計算機システム。 - 前記ストレージ装置では、前記ボリュームに対するI/O要求の処理を担当するプロセッサが、前記ボリュームごとにあらかじめ定められており、
前記振分テーブルに格納されている、前記ボリュームごとの前記I/O要求の送信先についての情報は、前記各ボリュームに対するI/O要求を担当するプロセッサの情報である
ことを特徴とする、請求項3に記載の計算機システム。 - 前記第1プロセッサ及び前記第2プロセッサは、それぞれ複数のプロセッサコアを有し、
前記振分モジュールは、前記第3プロセッサからI/O要求を受信すると、前記振分テーブルに格納された前記情報を取得し、前記情報に基づいて前記第1プロセッサまたは前記第2プロセッサの有する複数のプロセッサコアのうち、いずれのプロセッサコアを前記I/O要求の送信先にするか決定することを特徴とする、請求項2に記載の計算機システム。 - 1以上のサーバと、ストレージ装置とを有する計算機システムの制御方法であって、
前記ストレージ装置は、1以上の記憶媒体と、第1プロセッサ及び第1メモリを有する第1コントローラと、第2プロセッサ及び第2メモリを有する第2コントローラとを有し、第1コントローラと第2コントローラはいずれも前記サーバに接続されており、
前記サーバは、第3プロセッサと第3メモリと、前記第3プロセッサが発行する前記ストレージ装置に対するI/O要求を前記第1プロセッサまたは第2プロセッサのいずれかに送信する振分モジュールを有し、
前記振分モジュールは、
前記第3プロセッサが第1のI/O要求を発行すると、前記ストレージ装置が提供する振分情報に基づいて、前記第1プロセッサまたは前記第2プロセッサのいずれを前記第1のI/O要求の送信先にするか決定する処理を開始し、
前記第1のI/O要求の送信先が決定する前に、前記第3プロセッサから第2のI/O要求を受信すると、前記ストレージ装置が提供する振分情報に基づいて、前記第1プロセッサまたは前記第2プロセッサのいずれを前記第2のI/O要求の送信先にするか決定する処理を開始し、
前記第1のI/O要求の送信先が決定すると、前記決定された送信先に対して前記第1のI/O要求を送信し、
前記第1のI/O要求の送信先が決定するまでは、前記第2のI/O要求を前記送信先に送信しない、
ことを特徴とする、計算機システムの制御方法。 - 前記ストレージ装置は、前記第1メモリまたは前記第2メモリに、前記サーバのI/O要求の送信先についての情報を格納した振分テーブルを有し、
前記振分モジュールは、前記第3プロセッサからI/O要求を受信すると、前記振分テーブルに格納された前記情報を取得し、前記情報に基づいて前記第1プロセッサ、前記第2プロセッサのいずれを前記I/O要求の送信先にするか決定することを特徴とする、請求項8に記載の計算機システムの制御方法。 - 前記ストレージ装置は、前記1以上の記憶媒体で構成される複数のボリュームを前記サーバに提供するストレージ装置であって、
前記第3プロセッサから発行されるI/O要求には少なくとも、前記サーバに与えられた固有の識別子と、前記ストレージ装置が提供するボリュームの論理ユニット番号(LUN)が含まれており、
前記振分テーブルには、前記ボリュームごとに、前記I/O要求の送信先についての情報が格納されており、
前記振分モジュールは、前記識別子及び前記識別子に対応付けられたインデックス番号との対応関係についての情報を格納した検索データテーブルを有しており、
前記振分モジュールは、
前記第3プロセッサから前記第1のI/O要求を受信すると、前記検索データテーブルを参照し、前記識別子が前記検索データテーブルに存在する場合には、前記識別子に基づいて前記インデックス番号を特定し、
前記特定したインデックス番号と前記第1のI/O要求に含まれるLUNとに基づいて前記振分テーブル内の参照先アドレスを決定し、前記参照先アドレスで特定される前記第1メモリまたは第2メモリ上の領域に格納された情報を読み出すことによって、前記第1のI/O要求の送信先についての情報を取得し、
前記取得した情報に基づいて、前記第1プロセッサ、前記第2プロセッサのいずれを前記第1のI/O要求の送信先にするか決定する、
ことを特徴とする、請求項9に記載の計算機システムの制御方法。 - 前記計算機システムでは、前記サーバの識別子に対応付けられたインデックス番号が前記検索データテーブルに存在しない場合の前記I/O要求の送信先の情報である、代表プロセッサ情報があらかじめ定義されており、
前記振分モジュールは、前記第3プロセッサから前記第2のI/O要求を受信すると、前記検索データテーブルを参照し、前記第2のI/O要求に含まれている前記識別子が前記検索データテーブルに存在しなかった場合、前記第1メモリまたは第2メモリ上の所定領域のデータの読み出しを実行した後、前記代表プロセッサ情報で特定される送信先に対して前記第2のI/O要求を送信する、
ことを特徴とする、請求項10に記載の計算機システムの制御方法。 - 前記ストレージ装置は、前記第2のI/O要求に対する応答を前記サーバに返却した後、
前記識別子に対応付けられるべきインデックス番号を決定し、前記決定したインデックス番号を前記検索データテーブルに、前記識別子と対応付けて格納する
ことを特徴とする、請求項11に記載の計算機システムの制御方法。 - 前記ストレージ装置では、前記ボリュームに対するI/O要求の処理を担当するプロセッサが、前記ボリュームごとにあらかじめ定められており、
前記振分テーブルに格納されている、前記ボリュームごとの前記I/O要求の送信先についての情報は、前記各ボリュームに対するI/O要求を担当するプロセッサの情報である
ことを特徴とする、請求項10に記載の計算機システムの制御方法。 - 前記第1プロセッサ及び前記第2プロセッサは、それぞれ複数のプロセッサコアを有し、
前記振分モジュールは、前記第3プロセッサからI/O要求を受信すると、前記振分テーブルに格納された前記情報を取得し、前記情報に基づいて前記第1プロセッサまたは前記第2プロセッサの有する複数のプロセッサコアのうち、いずれのプロセッサコアを前記I/O要求の送信先にするか決定することを特徴とする、請求項9に記載の計算機システムの制御方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2013/082006 WO2015079528A1 (ja) | 2013-11-28 | 2013-11-28 | 計算機システム及び計算機システムの制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6068676B2 true JP6068676B2 (ja) | 2017-01-25 |
JPWO2015079528A1 JPWO2015079528A1 (ja) | 2017-03-16 |
Family
ID=53198517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015550262A Expired - Fee Related JP6068676B2 (ja) | 2013-11-28 | 2013-11-28 | 計算機システム及び計算機システムの制御方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20160224479A1 (ja) |
JP (1) | JP6068676B2 (ja) |
CN (1) | CN105009100A (ja) |
DE (1) | DE112013006634T5 (ja) |
GB (1) | GB2536515A (ja) |
WO (1) | WO2015079528A1 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104811473B (zh) * | 2015-03-18 | 2018-03-02 | 华为技术有限公司 | 一种创建虚拟非易失性存储介质的方法、系统及管理系统 |
US10592274B2 (en) | 2015-10-26 | 2020-03-17 | Hitachi, Ltd. | Computer system and access control method |
US10277677B2 (en) * | 2016-09-12 | 2019-04-30 | Intel Corporation | Mechanism for disaggregated storage class memory over fabric |
CN106648851A (zh) * | 2016-11-07 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种多控存储中io管理的方法和装置 |
KR102367359B1 (ko) * | 2017-04-17 | 2022-02-25 | 에스케이하이닉스 주식회사 | 직렬 시스템 버스 인터페이스 및 직접메모리액세스 컨트롤러를 갖는 전자 시스템 및 그 동작 방법 |
KR20210046348A (ko) * | 2019-10-18 | 2021-04-28 | 삼성전자주식회사 | 복수의 프로세서들에 유연하게 메모리를 할당하기 위한 메모리 시스템 및 그것의 동작 방법 |
US20230112764A1 (en) * | 2020-02-28 | 2023-04-13 | Nebulon, Inc. | Cloud defined storage |
CN113297112B (zh) * | 2021-04-15 | 2022-05-17 | 上海安路信息科技股份有限公司 | PCIe总线的数据传输方法、系统及电子设备 |
CN114442955B (zh) * | 2022-01-29 | 2023-08-04 | 苏州浪潮智能科技有限公司 | 全闪存储阵列的数据存储空间管理方法及装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11338648A (ja) * | 1998-02-26 | 1999-12-10 | Nec Corp | ディスクアレイ装置、そのエラ―制御方法、ならびにその制御プログラムを記録した記録媒体 |
JP2002063126A (ja) * | 2000-08-18 | 2002-02-28 | Fujitsu Ltd | マルチパス計算機システム |
JP2004240949A (ja) * | 2002-11-26 | 2004-08-26 | Hitachi Ltd | クラスタ型ストレージシステム及びその管理方法 |
WO2011083522A1 (ja) * | 2010-01-05 | 2011-07-14 | 株式会社日立製作所 | 計算機システム及びその可用化方法 |
JP2012053795A (ja) * | 2010-09-03 | 2012-03-15 | Nec Corp | 情報処理システム |
JP2013025321A (ja) * | 2011-07-14 | 2013-02-04 | Mitsubishi Electric Corp | データ処理システム及びデータ処理方法及びプログラム |
JP2013517537A (ja) * | 2010-04-21 | 2013-05-16 | 株式会社日立製作所 | ストレージシステム及びストレージシステムにおけるオーナ権制御方法 |
JP2013524334A (ja) * | 2010-09-09 | 2013-06-17 | 株式会社日立製作所 | コマンドの起動を制御するストレージ装置及びその方法 |
JP2013196176A (ja) * | 2012-03-16 | 2013-09-30 | Nec Corp | 排他制御システム、排他制御方法および排他制御プログラム |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100375080C (zh) * | 2005-04-15 | 2008-03-12 | 中国人民解放军国防科学技术大学 | 大规模分布共享系统中的输入输出分组节流方法 |
US7624262B2 (en) * | 2006-12-20 | 2009-11-24 | International Business Machines Corporation | Apparatus, system, and method for booting using an external disk through a virtual SCSI connection |
JP5072692B2 (ja) * | 2008-04-07 | 2012-11-14 | 株式会社日立製作所 | 複数のストレージシステムモジュールを備えたストレージシステム |
EP2323036A4 (en) * | 2008-08-04 | 2011-11-23 | Fujitsu Ltd | MULTIPROCESSOR SYSTEM, ADMINISTRATION DEVICE FOR A MULTIPROCESSOR SYSTEM AND COMPUTER READABLE RECORDING MEDIUM IN WHICH AN ADMINISTRATIVE PROGRAM FOR A MULTIPROCESSOR SYSTEM IS RECORDED |
-
2013
- 2013-11-28 DE DE112013006634.3T patent/DE112013006634T5/de not_active Withdrawn
- 2013-11-28 GB GB1515783.7A patent/GB2536515A/en not_active Withdrawn
- 2013-11-28 WO PCT/JP2013/082006 patent/WO2015079528A1/ja active Application Filing
- 2013-11-28 JP JP2015550262A patent/JP6068676B2/ja not_active Expired - Fee Related
- 2013-11-28 CN CN201380073594.2A patent/CN105009100A/zh active Pending
- 2013-11-28 US US14/773,886 patent/US20160224479A1/en not_active Abandoned
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11338648A (ja) * | 1998-02-26 | 1999-12-10 | Nec Corp | ディスクアレイ装置、そのエラ―制御方法、ならびにその制御プログラムを記録した記録媒体 |
JP2002063126A (ja) * | 2000-08-18 | 2002-02-28 | Fujitsu Ltd | マルチパス計算機システム |
JP2004240949A (ja) * | 2002-11-26 | 2004-08-26 | Hitachi Ltd | クラスタ型ストレージシステム及びその管理方法 |
WO2011083522A1 (ja) * | 2010-01-05 | 2011-07-14 | 株式会社日立製作所 | 計算機システム及びその可用化方法 |
JP2013517537A (ja) * | 2010-04-21 | 2013-05-16 | 株式会社日立製作所 | ストレージシステム及びストレージシステムにおけるオーナ権制御方法 |
JP2012053795A (ja) * | 2010-09-03 | 2012-03-15 | Nec Corp | 情報処理システム |
JP2013524334A (ja) * | 2010-09-09 | 2013-06-17 | 株式会社日立製作所 | コマンドの起動を制御するストレージ装置及びその方法 |
JP2013025321A (ja) * | 2011-07-14 | 2013-02-04 | Mitsubishi Electric Corp | データ処理システム及びデータ処理方法及びプログラム |
JP2013196176A (ja) * | 2012-03-16 | 2013-09-30 | Nec Corp | 排他制御システム、排他制御方法および排他制御プログラム |
Also Published As
Publication number | Publication date |
---|---|
CN105009100A (zh) | 2015-10-28 |
DE112013006634T5 (de) | 2015-10-29 |
GB2536515A (en) | 2016-09-21 |
GB201515783D0 (en) | 2015-10-21 |
WO2015079528A1 (ja) | 2015-06-04 |
US20160224479A1 (en) | 2016-08-04 |
JPWO2015079528A1 (ja) | 2017-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6068676B2 (ja) | 計算機システム及び計算機システムの制御方法 | |
JP6074056B2 (ja) | 計算機システムおよびデータ制御方法 | |
JP6329318B2 (ja) | 情報処理装置 | |
JP7116381B2 (ja) | クラウド・ベースのランクを使用するデータの動的再配置 | |
US20170102874A1 (en) | Computer system | |
US20080301385A1 (en) | Storage controller and control method for the same | |
US20050144173A1 (en) | Method for coupling storage devices of cluster storage | |
US20130111221A1 (en) | Storage system and its management method | |
JP2007207007A (ja) | ストレージシステム、ストレージコントローラ及び計算機システム | |
JP2009043030A (ja) | ストレージシステム | |
JP2021128802A (ja) | 情報処理システム、ストレージシステム及びデータ転送方法 | |
JP6703600B2 (ja) | 計算機システム及びサーバ | |
JP2004227558A (ja) | 仮想化制御装置およびデータ移行制御方法 | |
US9003087B2 (en) | Compound storage system and storage control method | |
US10503440B2 (en) | Computer system, and data migration method in computer system | |
US8799573B2 (en) | Storage system and its logical unit management method | |
US9239681B2 (en) | Storage subsystem and method for controlling the storage subsystem | |
US11080192B2 (en) | Storage system and storage control method | |
US11989455B2 (en) | Storage system, path management method, and recording medium | |
US11016698B2 (en) | Storage system that copies write data to another storage system | |
US11201788B2 (en) | Distributed computing system and resource allocation method | |
US9529721B2 (en) | Control device, and storage system | |
JP2018113075A (ja) | 情報処理装置 | |
JP6200100B2 (ja) | 計算機システム | |
JP7118108B2 (ja) | クラウドサーバ、ストレージシステム、及び計算機システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20161206 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20161222 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6068676 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |