JP6842480B2 - 分散ストレージシステム - Google Patents

分散ストレージシステム Download PDF

Info

Publication number
JP6842480B2
JP6842480B2 JP2019024936A JP2019024936A JP6842480B2 JP 6842480 B2 JP6842480 B2 JP 6842480B2 JP 2019024936 A JP2019024936 A JP 2019024936A JP 2019024936 A JP2019024936 A JP 2019024936A JP 6842480 B2 JP6842480 B2 JP 6842480B2
Authority
JP
Japan
Prior art keywords
drive
controller
upper limit
virtual
queue
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.)
Active
Application number
JP2019024936A
Other languages
English (en)
Other versions
JP2020135155A (ja
Inventor
江梨奈 野木
江梨奈 野木
純 宮下
純 宮下
晶滉 鹿野
晶滉 鹿野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2019024936A priority Critical patent/JP6842480B2/ja
Priority to US16/577,569 priority patent/US11144242B2/en
Publication of JP2020135155A publication Critical patent/JP2020135155A/ja
Application granted granted Critical
Publication of JP6842480B2 publication Critical patent/JP6842480B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

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)
  • Hardware Redundancy (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、概して、複数のストレージノードを有する分散ストレージシステムに関する。
ストレージシステムでは、I/O(Input/Output)コマンドの管理にキューが使用される。ストレージシステムにおけるキューの使用に関する技術として、例えば特許文献1がある。特許文献1には、「外部装置1とデータ入出力要求コマンドを受信する論理デバイスとを組合せたコマンド授受対に対応させて、コマンド処理資源の割当個数を管理する割当個数管理部13と、コマンド授受対に関して、割当個数管理部13によって管理されている割当個数を上限値とする数のコマンド処理資源に、データ入出力要求コマンドを割り当てる割当制御部14とをそなえて構成する。」が記載されている。
特開2010−20694号公報
複数のドライブが関連付けられた複数のストレージノードを有する分散ストレージシステムが知られている。分散ストレージシステムは、ホストシステムからVOL(論理ボリューム)のアドレスを指定したI/Oコマンド(以下、Host−IO)を受け付け、当該Host−IOを基に、一つ以上のドライブに対する一つ以上(典型的には複数)のI/Oコマンド(以下、Drive−IO)を発行する。Drive−IOでは、発行先のドライブのアドレスが指定される。
I/Oコマンドが蓄積されるキューを管理する分散ストレージシステムでは、各ストレージノードは、ドライブについて発行されたDrive−IOが蓄積されるキュー(以下、実キュー)を管理する。一つのドライブにつき実キュー群(一つ以上の実キュー)が管理される。
一般に、ドライブ毎に、当該ドライブのハード仕様に基づきIO上限値(Drive−IOの数の上限値)が決まっている。各ドライブについて、IO上限値を超える数のDrive−IOを実キュー群に蓄積することはできない。
また、各ストレージノードは、一つ以上のコントローラ(以下、CTL)を有する。各CTLは、Host−IOの受け付けもDrive−IOの発行も行うことができる。各CTLにとって、接続ドライブと非接続ドライブのうち少なくとも接続ドライブがある。各CTLについて、接続ドライブは、当該CTLに物理的に接続されているドライブ(言い換えれば、別のCTL非経由にアクセス可能なドライブ)であり、非接続ドライブは、当該CTLに物理的に接続されていないドライブ(言い換えれば、別のCTL経由にアクセス可能なドライブ)である。
分散ストレージシステムでは、下記の第1及び第2の問題のうちの少なくとも一つがある。
第1の問題は、次の通りである。各CTLに、当該CTLの接続ドライブ毎に、当該CTL用のIO上限値が設定され、且つ、二つ以上のCTLについて同一の接続ドライブが存在する場合、それら二つ以上のCTLの各々に設定されるCTL用のIO上限値は、当該接続ドライブのIO上限値よりも小さい。例えば、CTL用のIO上限値は、接続ドライブのIO上限値を、当該接続ドライブを共有するCTLの数で割った値である。接続ドライブのIO上限値がいずれのCTLにも設置されてしまうと、当該接続ドライブのIO上限値を超えるDrive−IOが当該接続ドライブに送信され得るからである。このため、各CTLでは、発行されたDrive−IOの数がCTL用のIO上限値に達してしまったが故に接続ドライブには余裕があってもDrive−IOを発行できない(又は、発行されてもエラーとなる)ことが起こり得る。これは、接続ドライブを共有するCTLの数が多い程、起こる可能性が高い。結果として、CTLの性能が十分に発揮されない。
第2の問題は、Host−IOを受け付けたCTLが当該Host−IOに基づくDrive−IOを発行しても、当該Drive−IOの発行先のドライブが、当該CTLの非接続ドライブの場合、当該Drive−IOのCTL間での転送が必要になるが、転送先のCTLにおいて、当該ドライブに対応した実キュー群がフルの場合(転送先のCTL用のIO上限値にIO数が達している場合)、Drive−IOの転送不可となる。この場合、CTL間の転送のリトライといったオーバーヘッドが生じ得る。
以上の第1及び第2の問題のうちの少なくとも一つにより、分散ストレージシステムのIO性能が低下し得る。
特許文献1には、このような課題やその課題を解決する手段は開示も示唆もされていない。具体的には、特許文献1には、分散ストレージシステムの開示は無く、且つ、Drive−IOのキュー管理に関する開示も無い。
ホストシステムに論理ボリュームを提供する分散ストレージシステムが、複数のドライブが関連付けられた複数のストレージノードを有する。複数のストレージノードの各々は、一つ以上のコントローラを有する。各コントローラにとって、複数のドライブには、当該コントローラに物理的に接続されているドライブである接続ドライブがある。各コントローラは、ホストシステムから送信され論理ボリュームのアドレスを指定したI/O(Input/Output)コマンドであるHost−IOをホストシステム又は別のコントローラから受け付けた場合、当該受け付けたHost−IOに基づきドライブのアドレスを指定したI/OコマンドであるDrive−IOを発行するようになっている。各コントローラは、当該コントローラの接続ドライブ毎に一つ以上の実キューである実キュー群を有することに加えて、複数のドライブの各々について一つ以上の仮想キューである仮想キュー群を有する。各実キューは、取得されドライブに送信されるDrive−IOが蓄積されるキューである。各仮想キューは、発行され受け付けられたDrive−IOが蓄積されるキューである。いずれかのコントローラにより発行され受け付けられたDrive−IOである対象Drive−IOは、当該対象Drive−IOの発行先ドライブに対応した実キュー群に蓄積される前に、当該発行先ドライブに対応した仮想キュー群に蓄積される。
Drive−IOのキュー管理が改善され、結果として、分散ストレージシステムのI/O性能の向上に寄与することができる。
本発明の一実施形態に係るシステム全体の構成例を示す。 CTL6が有する機能及びテーブルの一例を示す。 構成テーブルの構成例を示す。 オーナー権テーブルの構成例を示す。 請負フラグテーブルの構成例を示す。 仮想キュー管理テーブルの構成例を示す。 実キュー管理テーブルの構成例を示す。 受付CTLと実行CTLが同じ場合についての処理流れの一例の概要を示す。 受付CTLと実行CTLが異なる場合についての処理流れの一例の概要を示す。 受付CTLと実行CTLが異なるが故にDrive−IOのCTL間転送が生じた場合に行われる仮想上限値の制限とその解除の一例を示す。 請負フラグと周期的に行われる調整処理との関係の一例を示す。 調整処理のフローの一例を示す。
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
また、以下の説明では、「ドライブ」は、不揮発性の記憶デバイス(例えば補助記憶デバイス)であり、具体的には、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)である。複数のドライブは、一つ以上のRAID(Redundant Array of Independent (or Inexpensive) Disks)グループを構成してもよい。RAIDグループは、二つ以上のドライブで構成されており、パリティグループと呼ばれてもよい。
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスである。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスであるが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
また、以下の説明では、「kkk部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜にメモリ及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
また、以下の説明では、「VOL」は、論理ボリュームの略であり、論理的な記憶デバイスでよい。VOLは、実体的なVOL(RVOL)であってもよいし、仮想的なVOL(VVOL)であってもよい。「RVOL」は、そのRVOLを提供するストレージシステムが有する永続記憶装置に基づくVOLでよい。「VVOL」は、複数の仮想領域(仮想的な記憶領域)で構成されており容量仮想化技術(典型的にはThin Provisioning)に従うVOLでよい。「プール」は、複数の実領域(実体的な記憶領域)で構成された記憶領域(例えば複数のVOLの集合)でよい。ストレージシステムが、ホストシステムから受信したライト要求が指定するアドレスが属する仮想領域に実領域が割り当てられていない場合、その仮想領域にプールから実領域を割り当ててよい。
また、以下の説明では、「ホストシステム」は、一つ以上の物理的なホスト計算機でよいし、物理的な計算資源(例えばプロセッサ及びメモリ)に基づき実現された一つ以上の仮想的なホスト計算機でもよい。以下、ホストシステムを「ホスト」と略記する。
また、以下の説明では、ID(識別情報)として、識別番号が採用されるが、番号に代えて又は加えて他種の符号が採用されてもよい。
以下、一実施形態を図面に基づいて説明する。
図1は、本実施形態に係るシステム全体の構成例を示す。なお、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、要素の参照符号を使用することがある。例えば、ホストを区別しない場合には、「ホスト1」と言い、ホストを区別する場合には、「ホスト1A」、「ホスト1B」のように言うことがある。
複数(又は一つ)のホスト1が、複数のストレージモジュール(以下、モジュール)11を含んだ分散ストレージシステム100に接続される。各モジュール11は、一つ以上のストレージノード(以下、ノード)10と、一つ以上のドライブボックス9とを有する。各ノード10は、汎用計算機でもよいが、本実施形態では、冗長化された構成を有するストレージ装置である。ドライブボックス9は、一つ以上のドライブを含む。ドライブボックス9が、一つ以上のRAIDグループを含んでもよい。また、二つ以上のドライブボックス9における二つ以上のドライブから一つのRAIDグループが構成されてもよい。
各ホスト1は、分散ストレージシステム100における複数のノード10のうちの少なくとも一つのノード10にネットワーク49経由で通信可能に接続される。
ネットワーク49とは異なる(又は同一の)ネットワーク50に、分散ストレージシステム100と、ストレージ管理サーバ201とが接続される。ネットワーク50(及び49)は、ファイバチャネル(Fibre Channel)、イーサネット(登録商標)、InfiniBand又はLAN(Local Area Network)などから構成される一つ以上のネットワークでよい。
分散ストレージシステム100は、一つ又は複数のSN(Service and Network box)4を有する。一つ又は複数のSN4は、管理サーバ201にネットワーク50経由で接続され、且つ、複数のノード10の各々に接続される。SN4は、スイッチ装置の一例である。SN4は、専用線48(又はネットワーク50)を介して、別のSN4に接続される。
各SN4に関しては、SN4Aを例に取れば、例えば次の通りである。すなわち、SN4Aは、管理端末2Aと、ISW(Interconnect-Switch)群とを有する。管理端末2Aは、プロセッサ及びメモリを有する計算機である。管理端末2Aは、ネットワーク50を介して管理サーバ201と通信可能に接続される。ISW群は、一つ以上のISW3、本実施形態では、冗長化されたISW3A0及び3A1である。各ISW3は、後述の冗長化されているコントローラ6A0及び6A1間を、後述の冗長化されているIE5A0及び5A1をそれぞれ介して接続するスイッチ装置である。
各ノード10に関しては、ノード10Aを例に取れば、例えば次の通りである。ノード10Aは、複数(又は一つ)のFE−IF(Front End Interface)群、一つ(又は複数)のCTLユニット群、及び、複数(又は一つ)のIE(Interconnect-Edge)群を有する。
各FE−IF群は、冗長化されたFE−IF7である(例えば、FE−IF7A0及び7A1が、冗長化されたFE−IF7である)。各FE−IF7は、ホスト1からHost−IOを受け付けるインターフェースデバイスである。
CTLユニット群は、冗長化されたCTLユニット8A0及び8A1である。例えばCTLユニット8A0は、CTL(コントローラ)6A0と、CTL6A0に接続されたBE−IF(Back End Interface)12A0とを有する。CTL6A0は、例えばプロセッサ及びメモリを計算機である。CTL6A0(及び6A1)に、管理端末2Aが例えばLAN経由で接続されている。BE−IF12A0は、ドライブボックス9A及び9E内のドライブと通信するインターフェースデバイスである。
各IE群は、冗長化されたIE5である。例えば、IE5A0及び5A1が、冗長化されたIEである。IE5は、いずれかのSN4内のいずれかのISW3に例えばLAN(Local Area Network)経由で接続される。また、IE5は、いずれかのCTL6に接続される。つまり、IE5は、ISW3とCTL6を接続するためのインターフェースデバイスである。例えば、IE5A0は、ISW3A0とCTL6A0を接続するためのインターフェースデバイスである。
本実施形態では、分散ストレージシステム100は、ホスト1からのHOST−IOに従うデータがいずれのノード10を介していずれのドライブボックス9にも入出力可能に構成されている。例えば、モジュール11も冗長化されている。モジュール11A内のノード10A及び10Bのいずれも、モジュール11A内のドライブボックス9A〜9Dのいずれにもアクセス可能であり、且つ、モジュール11B内のドライブボックス9E〜9Hのいずれにもアクセス可能である。同様に、モジュール11B内のノード10C及び10Dのいずれも、モジュール11B内のドライブボックス9E〜9Hのいずれにもアクセス可能であり、且つ、モジュール11A内のドライブボックス9A〜9Dのいずれにもアクセス可能である。ホスト1からのHOST−IOは、ノード10A〜10Dが有するFE−IF7A〜7Dのうちのいずれによって受け付けられてもよいし、ノード10A〜10Dが有するCTL6A〜6Dのいずれによって処理されてもよい。具体的には、例えば、HOST−IOがノード10Aにより受け付けられたが当該HOST−IOの処理担当はノード10Dである場合(例えば、当該HOST−IOで指定されたボリュームの担当がノード10Dである場合)、FE−IE7A0〜7A7のいずれかを経由してCTL6A0又は6A1に受け付けられた当該HOST−IOは、下記の(P)又は(Q)経由でCTL6D0又は6D1に転送され、CTL6D0又は6D1が、当該HOST−IOに基づく一つ以上のDrive−IOを、BE−IF12D0又は12D1を経由して、ドライブボックス9A〜9Hのいずれかにおけるドライブに送信する。
(P)IE5A0又は5A1、ISW3A0、SN4A、専用線48A、SN4C、ISW3C1、及び、IE5D0又は5D1。
(Q)IE5A2又は5A3、ISW3B0、SN4B、専用線48B、SN4D、ISW3D1、及び、IE5D2又は5D3。
また、分散ストレージシステム100は、管理サーバ201がネットワーク50経由でいずれのノード10とも通信可能に構成されている。具体的には、例えば、管理サーバ201は、SN4A〜4Dにおける管理端末2A〜2Dを介してノード10A〜10Dからそれぞれ構成情報を取得することができる。
図1の例によれば、各ノード10において、インターフェース装置の一例が、複数のFE−IE7、複数のIE5、及び複数のBE−IF12であり、メモリの一例が、複数のCTL6内の複数のメモリであり、プロセッサの一例が、複数のCTL内の複数のCPUである。また、複数のノード10に関連付けられる複数のドライブの一例が、複数のドライブボックス9である。
また、図1によれば、例えば、CTL6A0にとって、接続ドライブ(物理的に接続されているドライブ)は、ドライブボックス9A及び9C内の各ドライブであり、非接続ドライブ(物理的に接続されていないドライブ)は、ドライブボックス9B、9D及び9E〜9H内の各ドライブである。
図2は、CTL6が有する機能及びテーブルの一例を示す。
CTL6は、メモリ251と、メモリ251に接続されているプロセッサ252とを有する。プロセッサ252は、複数のCPUを有し、各CPUが、複数のプロセッサコア260を有する。プロセッサコア260は、例えばマイクロプロセッサでよい。
メモリ251には、プロセッサ252に実行されることでHost−IO処理部201、Drive−IO受付部202、仮想キュー管理部203、Drive−IO依頼部204、Drive−IO請負部205、実キュー管理部206、及びDrive−IO実行部207を実現するための一つ以上のコンピュータプログラムが格納される。Host−IO処理部201は、ホスト1又は別CTL6からのHost−IOを処理する、例えば、当該Host−IOに基づくDrive−IOを発行する。Drive−IO受付部202は、発行されたDrive−IOを受け付ける。仮想キュー管理部203は、後述の仮想キュー群211を管理する。Drive−IO依頼部204は、Drive−IOを別CTL6に転送する。Drive−IO請負部205は、別CTL6のDrive−IO依頼部204により転送されたDrive−IOを受け付ける。実キュー管理部206は、後述の実キュー群212を管理する。及びDrive−IO実行部207は、Drive−IO受付部202又はDrive−IO請負部205により受け付けられたDrive−IO(つまり接続ドライブに対するDrive−IO)を実行する(当該Drive−IOをドライブに送信する)。
メモリ251には、分散ストレージシステム100における全ドライブのうち当該CTL6の各接続ドライブについて、当該接続ドライブに対応した実キュー群212(一つ以上の実キュー)が設けられる。これに加えて、メモリ251には、分散ストレージシステム100における全ドライブの各々について、当該ドライブに対応した仮想キュー群211(一つ以上の仮想キュー)が設けられる。
各実キューは、ドライブに送信されるDrive−IOが蓄積されるキューである。各仮想キューは、発行され受け付けられたDrive−IOが蓄積されるキューである。いずれかのCTL6により発行され受け付けられたDrive−IOは、当該Drive−IOの発行先ドライブに対応した実キュー群212に蓄積される前に、当該発行先ドライブに対応した仮想キュー群211に蓄積される。
メモリ251は、構成テーブル221、オーナー権テーブル222、請負フラグテーブル223、仮想キュー管理テーブル224及び実キュー管理テーブル225といった複数のテーブルを含む管理情報を格納する。
図3〜図7を参照して、テーブル221〜225を説明する。
図3は、構成テーブル221の構成例を示す。
構成テーブル221は、ドライブ、VOL及びCTLの関係を示す。具体的には、例えば、構成テーブル221は、ドライブ毎にエントリを有する。各エントリは、ドライブ#301、ドライブアドレス302、VOLアドレス303及びCTL#304といった情報を保持する。一つのドライブを例に取る(図3の説明において「注目ドライブ」)。
ドライブ#301は、注目ドライブの識別番号を示す。ドライブアドレス302は、注目ドライブが提供する記憶空間に属するアドレス(例えばLBA(Logical Block Address))を示す。VOLアドレス303が、注目ドライブに基づくVOLの識別番号と当該VOLに属するアドレス(例えばLBA)との組合せを示し注目ドライブのアドレスに対応した情報である。CTL#が、注目ドライブが接続ドライブであるCTL6の識別番号を示す。
Host−IOに記述されているVOLアドレスと、構成テーブル221とを基に、Host−IO処理部201は、当該Host−IOに対応した一つ以上のDrive−IOを発行(生成)できる。
図4は、オーナー権テーブル222の構成例を示す。
オーナー権テーブル222は、ホスト1に提供されるVOLとVOLのオーナーCTLとの関係を示す。具体的には、例えば、オーナー権テーブル222は、VOL毎にエントリを有する。各エントリは、VOL#401及びCTL#402といった情報を保持する。一つのVOLを例に取る(図4の説明において「注目VOL」)。
VOL#401は、注目VOLの識別番号を示す。CTL#402は、注目VOLのオーナー権を有するCTL6の識別番号を示す。注目VOLのオーナー権を有するCTL6が、注目VOLを指定したHost−IOに基づくDrive−IOを発行する。
図5は、請負フラグテーブル223の構成例を示す。
請負フラグテーブル223は、当該テーブル223を有するCTL6(図5の説明において「自CTL6」)の接続ドライブに対するDrive−IOが受け付けられたCTL6が自CTL6か否かを示すテーブルである。具体的には、例えば、請負フラグテーブル223は、接続ドライブ毎にエントリを有する。各エントリは、接続ドライブ#501及び請負フラグ#502といった情報を保持する。一つの接続ドライブを例に取る(図5の説明において「注目接続ドライブ」)。
接続ドライブ#501は、注目接続ドライブの識別番号を示す。請負フラグ#502は、注目接続ドライブについて自CTL6以外のCTL6からDrive−IOを受け付けた(“ON”)か否か(“OFF”)を示す。
図6は、仮想キュー管理テーブル224の構成例を示す。
仮想キュー管理テーブル224は、仮想キュー群211毎に仮想上限値と使用状況とを示す。具体的には、例えば、仮想キュー管理テーブル224は、分散ストレージシステム100における全ドライブの各々についてエントリを有する。各エントリは、ドライブ#601、仮想上限値602及びIO数603といった情報を保持する。一つのドライブを例に取る(図6の説明において「注目ドライブ」)。
ドライブ#601は、注目ドライブの識別番号を示す。仮想上限値602は、注目ドライブに対応した仮想上限値(当該ドライブに対応した仮想キュー群211に蓄積可能なDrive−IOの数の上限)を示す。IO数603は、当該テーブル224を有するCTL6に存在するプロセッサコア毎のIO数(当該コアに対応した仮想キューに蓄積されているDrive−IOの数)を示す。注目ドライブについて、当該CTL6が有する一つ以上のプロセッサコアの各々に対応した仮想キューに蓄積されているDrive−IOの数の合計が、注目ドライブに対応した仮想キュー群211に蓄積されているDrive−IOの数である。注目ドライブについて、当該合計は、仮想キュー管理部203により、注目ドライブに対応した仮想上限値以下に制限される。
注目ドライブに対応した仮想上限値602は、例えば、注目ドライブのハード仕様に従う上限値に基づく値(例えば、ハード仕様に従う上限値それ自体、又は、当該上限値から保守に関して定義された値を引いた値)でよい。
図7は、実キュー管理テーブル225の構成例を示す。
実キュー管理テーブル225は、実キュー群212毎に実上限値と使用状況とを示す。具体的には、例えば、実キュー管理テーブル225は、当該テーブル225の接続ドライブ毎にエントリを有する。各エントリは、接続ドライブ#701、実上限値702及びIO数703といった情報を保持する。一つの接続ドライブを例に取る(図7の説明において「注目接続ドライブ」)。
接続ドライブ#701は、注目接続ドライブの識別番号を示す。実上限値702は、注目接続ドライブに対応した実上限値(当該接続ドライブに対応した実キュー群212に蓄積可能なDrive−IOの数の上限)を示す。IO数703は、当該テーブル225を有するCTL6に存在するプロセッサコア毎のIO数(当該コアに対応した実キューに蓄積されているDrive−IOの数)を示す。注目接続ドライブについて、当該CTL6が有する一つ以上のプロセッサコアの各々に対応した実キューに蓄積されているDrive−IOの数の合計が、注目接続ドライブに対応した実キュー群212に蓄積されているDrive−IOの数である。注目接続ドライブについて、当該合計は、実キュー管理部206により、注目接続ドライブに対応した実上限値以下に制限される。
注目ドライブに対応した実上限値702は、例えば、注目ドライブに対応した仮想上限値702を、注目ドライブが接続ドライブであるCTL6の数で割った値(例えば、小数点以下は切り捨て)でよい。実上限値702は、当該テーブル225を有するCTL6用の上限値である。
本実施形態において、発行されたDrive−IOを受け付けたCTLを「受付CTL」と言う。ドライブにDrive−IOを送信するCTLを「実行CTL」と言う。以下、受付CTLと実行CTLが同じ場合と異なる場合の各々について処理概要を説明する。
図8は、受付CTLと実行CTLが同じ場合についての処理流れの一例の概要を示す。なお、図8の例では、受付CTLと実行CTLもCTL6A0である。また、図8の説明では、CTL6A0が有する要素の参照符号の末尾に適宜“A0”が追加されている。
S801で、Host−IO処理部201A0は、ホスト1からHost−IOを受け付ける。オーナーCTL判断が行われる。具体的には、Host−IO処理部201A0は、オーナー権テーブル222A0を参照し、当該Host−IOで指定されているVOL(図8の説明において「注目VOL」)のオーナー権をCTL6A0が有しているか否かを判断する。当該判断の結果が偽の場合、Host−IO処理部201A0は、当該Host−IOを、注目VOLのオーナー権を有するCTLに転送する。当該判断の結果が真の場合、Host−IO処理部201A0は、S802を行う。
S802で、Host−IO処理部201A0は、当該Host−IOに基づくDrive−IOを発行する。説明を簡単にするため、図8について以下の説明では一つのDrive−IOに注目する。この一つのDrive−IOを、図8の説明において「注目Drive−IO」と言い、注目Drive−IOの発行先ドライブを「注目ドライブ」と言う。発行された注目Drive−IOを、Drive−IO受付部202A0が受け付ける。
S803で、Drive−IO受付部202A0は、注目ドライブに対応した仮想キュー群211に空きがあるか否かを仮想キュー管理部203A0に問い合わせる。仮想キュー管理部203A0は、仮想キュー管理テーブル224A0を参照し、注目ドライブに対応した仮想キュー群211に空きがあるか否かをDrive−IO受付部202Aに回答する。注目ドライブに対応したIO数603から得られるDrive−IO数合計が、注目ドライブに対応した仮想上限値602未満であれば、空きがあるということである。
空きがある場合、S804で、Drive−IO受付部202A0は、仮想キュー管理部203A0に、注目ドライブに対応した仮想キュー群211A0からキュー資源を確保させ、確保されたキュー資源に注目Drive−IOを蓄積させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した仮想キューのIO数が1増える(IO数603A0のうち、当該コアに対応したIO数が1増える)。
ここで、判断Xが実行される。具体的には、Drive−IO受付部202A0は、構成テーブル221A0を参照し、注目ドライブがCTL6A0の接続ドライブか否かを判断する。ここでは当該判断の結果が真である。つまり、受付CTLも実行CTLもCTL6A0である。故に、S805が実行される。
S805で、Drive−IO受付部202A0は、注目ドライブに対応した実キュー群212に空きがあるか否かを実キュー管理部206A0に問い合わせる。実キュー管理部206A0は、実キュー管理テーブル225A0を参照し、注目ドライブに対応した実キュー群212A0に空きがあるか否かをDrive−IO受付部202A0に回答する。注目ドライブに対応したIO数703A0から得られるDrive−IO数合計が、注目ドライブに対応した実上限値702A0未満であれば、空きがあるということである。
空きがある場合、S806で、Drive−IO受付部202A0は、実キュー管理部206A0に、注目ドライブに対応した実キュー群212A0からキュー資源を確保させ、確保されたキュー資源に例えば仮想キュー群211A0から注目Drive−IOを蓄積させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した実キューのIO数が1増える(IO数703A0のうち、当該コアに対応したIO数が1増える)。
S807で、Drive−IO受付部202A0は、Drive−IO実行部207A0に、注目ドライブに対応した実キュー群212A0に蓄積された注目Drive−IOを実行させる。これにより、S808で、Drive−IO実行部207A0により、注目ドライブに対するI/Oが実行される。
S809で、Drive−IO受付部202A0が、注目Drive−IOの実行結果をDrive−IO実行部207A0より受ける。
S810で、Drive−IO受付部202A0が、注目Drive−IOのキュー資源を実キュー群212A0から解放することを実キュー管理部206A0に実行させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した実キューのIO数が1減る(IO数703A0のうち、当該コアに対応したIO数が1減る)。
S811で、Drive−IO受付部202A0が、注目Drive−IOのキュー資源を仮想キュー群211A0から解放することを仮想キュー管理部203A0に実行させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した仮想キューのIO数が1減る(IO数603A0のうち、当該コアに対応したIO数が1減る)。
S812で、Drive−IO受付部202A0が、注目Drive−IOの実行結果をHost−IO処理部201A0に返す。
S813で、Host−IO処理部201A0が、S801で受け付けたHost−IOの応答を返す。
図9は、受付CTLと実行CTLが異なる場合についての処理流れの一例の概要を示す。なお、図9の例では、受付CTLがCTL6A0であり実行CTLはCTL6B0である。また、図9の説明では、CTL6A0が有する要素の参照符号の末尾に適宜“A0”が追加され、CTL6B0が有する要素の参照符号の末尾に適宜“B0”が追加されている。
S901で、Host−IO処理部201A0は、ホスト1からHost−IOを受け付ける。オーナーCTL判断が行われる(詳細は説明済みのため省略する)。受け付けられたHost−IOで指定されているVOLを、図9の説明において「注目VOL」と言う。ここでは、注目VOLのオーナー権をCTL6A0が有しているため、Host−IO処理部201A0は、S902を行う。
S902で、Host−IO処理部201A0は、当該Host−IOに基づくDrive−IOを発行する。説明を簡単にするため、図9について以下の説明では一つのDrive−IOに注目する。この一つのDrive−IOを、図9の説明において「注目Drive−IO」と言い、注目Drive−IOの発行先ドライブを「注目ドライブ」と言う。発行された注目Drive−IOを、Drive−IO受付部202A0が受け付ける。
S903、S904及び判断Yが行われる。S903、S904及び判断Yは、上述したS803、S804及び判断Xと同じである。このため、S905が実行される。
S905で、Drive−IO受付部202A0は、注目ドライブが接続ドライブであるCTL6B0に注目Drive−IOを転送することをDrive−IO依頼部204A0に指示する。
S906で、Drive−IO依頼部204は、注目Drive−IOをCTL6B0に転送する。転送された注目Drive−IOを、CTL6B0におけるDrive−IO請負部205B0が受け付ける。
S907で、Drive−IO請負部205B0が、注目ドライブに対応した実キュー群212に空きがあるか否かを実キュー管理部206B0に問い合わせる。実キュー管理部206B0は、実キュー管理テーブル225B0を参照し、注目ドライブに対応した実キュー群212B0に空きがあるか否かをDrive−IO請負部205B0に回答する。注目ドライブに対応したIO数703B0から得られるDrive−IO数合計が、注目ドライブに対応した実上限値702B0未満であれば、空きがあるということである。
空きがある場合、S908で、Drive−IO請負部205B0が、請負フラグテーブル223B0を参照し、注目ドライブに対応した請負フラグ502B0を“ON”にする。S909で、Drive−IO請負部205B0は、実キュー管理部206B0に、注目ドライブに対応した実キュー群212A0からキュー資源を確保させ、確保されたキュー資源に注目Drive−IOを蓄積させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した実キューのIO数が1増える(IO数703B0のうち、当該コアに対応したIO数が1増える)。
S910で、Drive−IO請負部205B0は、Drive−IO実行部207B0に、注目ドライブに対応した実キュー群212B0に蓄積された注目Drive−IOを実行させる。これにより、S911で、Drive−IO実行部207B0により、注目ドライブに対するI/Oが実行される。
S912で、Drive−IO請負部205B0が、注目Drive−IOの実行結果をDrive−IO実行部207B0より受ける。
S913で、Drive−IO請負部205B0が、注目Drive−IOのキュー資源を実キュー群212B0から解放することを実キュー管理部206B0に実行させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した実キューのIO数が1減る(IO数703B0のうち、当該コアに対応したIO数が1減る)。
S914で、Drive−IO請負部205B0が、注目Drive−IOの実行結果をDrive−IO依頼部204A0に返す。S915で、Drive−IO依頼部204A0が、当該実行結果をDrive−IO受付部202A0に返す。
S916で、Drive−IO受付部202A0が、注目Drive−IOのキュー資源を仮想キュー群211A0から解放することを仮想キュー管理部203A0に実行させる。これにより、注目Drive−IOの実行に関わるプロセッサコアに対応した仮想キューのIO数が1減る(IO数603A0のうち、当該コアに対応したIO数が1減る)。
S917で、Drive−IO受付部202A0が、注目Drive−IOの実行結果をHost−IO処理部201A0に返す。
S918で、Host−IO処理部201A0が、S901で受け付けたHost−IOの応答を返す。
図9の例によれば、実行CTL6B0では、注目Drive−IOが仮想キュー群211B0に蓄積されること無しに実キュー群212B0に蓄積されるが、それに代えて、注目Drive−IOが仮想キュー群211B0に蓄積され、その後に、仮想キュー群211B0から実キュー群212B0に注目Drive−IOが蓄積されてもよい。
図10は、受付CTLと実行CTLが異なるが故にDrive−IOのCTL間転送が生じた場合に行われる仮想上限値の制限とその解除の一例を示す。図10では、一つのドライブに注目する。このドライブを、図10の説明において「注目ドライブ」と言う。また、注目ドライブに対するDrive−IOを、図10の説明において「注目Drive−IO」と言う。
注目ドライブ1000の仮想上限値502のデフォルト値は、いずれのCTL6においても、注目ドライブ1000のハード仕様に従う上限値であるとする。言い換えれば、注目ドライブ1000の仮想上限値502は、注目ドライブ1000が接続ドライブである全てのCTL6における全ての実上限値602の合計であるとする。
受付CTL6A0に注目ドライブ1000が物理的に接続されておらず、注目ドライブ1000に物理的に接続されているCTLがCTL6B0であるが故に、一点鎖線で示すように、受付CTL6A0から注目Drive−IOが実行CTL6Bに転送されたとする。
この場合、矢印1010で示すように、Drive−IO請負部205B0が、注目ドライブ1000に対応した請負フラグ502B0を“ON”にする。仮想キュー管理部203B0が、請負フラグ502B0“ON”の注目ドライブ1000に対応した仮想上限値602B0を下げる。例えば、仮想キュー管理部203B0は、仮想上限値602B0をデフォルト値から、CTL6B0が有するプロセッサコアの数に下げる。CTL6B0内の各プロセッサコアについて少なくとも一つの要求を蓄積することができるようにするためである。
各CTL6において仮想キュー管理部203により調整処理が周期的に走る。「調整処理」とは、仮想上限値602を調整する処理、具体的には、例えば、仮想上限値602をデフォルト値に戻す(リセットする)処理である。例えばCLT6B0において調整処理が走ると、仮想キュー管理部203B0が、矢印1020で示すように、請負フラグ502B0“ON”の注目ドライブ1000に対応した仮想上限値602B0をデフォルト値に戻し、且つ、当該請負フラグ502B0を“OFF”にする。
図11は、請負フラグと周期的に行われる調整処理との関係の一例を示す。
周期Tで調整処理が走る。或る期間T内で一旦“ON”にされた請負フラグ502は、次の期間Tの開始まで(次に調整処理が走るまで)、“ON”のままである。次の期間Tの開始において、請負フラグ502は“ON”から“OFF”に戻される。
図12は、調整処理のフローの一例を示す。一つのCTL6での調整処理を例に取る(図12の説明において「注目CTL6」)。
S1201で、仮想キュー管理部203は、調整処理は、注目CTL6に物理的に接続されている全てのドライブボックス9のうち調整処理が未だされていないドライブボックス9(未処理ボックス9)があるか否かを判断する。ドライブボックス9とドライブの関係は、構成テーブル221に記述されていて、構成テーブル221を基に、S1201の判断が実行されてよい。ここでは、例えば、処理対象として設定されているボックス#(ドライブボックス9の識別番号)が末尾のボックス#に達していなければ、未処理ボックス9は少なくとも一つ存在する。処理対象として設定されているボックス#のドライブボックス9が、対象の未処理ボックス9である。S1201の判断結果が偽の場合、調整処理が終了する。
S1201の判断結果が真の場合、S1202で、仮想キュー管理部203は、現時点が周期の開始から終了までの期間内か否かを判断する。S1202の判断結果が偽の場合、調整処理が終了する。
S1202の判断結果が真の場合、S1203で、仮想キュー管理部203は、対象の未処理ボックス9のうち調整処理が未だされていないドライブ(未処理ドライブ)があるか否かを判断する。ここでは、例えば、処理対象として設定されているドライブ#が対象の未処理ボックス9について末尾のドライブ#に達していなければ、未処理ドライブは少なくとも一つ存在する。処理対象として設定されているドライブ#のドライブが、対象の未処理ドライブである。S1203の判断結果が偽の場合、S1209で、仮想キュー管理部203は、ボックス#を1インクリメントする。
S1203の判断結果が真の場合、S1204で、仮想キュー管理部203は、対象の未処理ドライブに対応した請負フラグ502が“ON”か否かを判断する。
S1204の判断結果が真の場合、S1205で、仮想キュー管理部203は、対象の未処理ドライブに対応した仮想上限値602を制限する(具体的には下げる)。S1206で、仮想キュー管理部203は、対象の未処理ドライブに対応した請負フラグ502を“OFF”に戻す。
一方、S1204の判断結果が偽の場合、S1207で、仮想キュー管理部203は、対象の未処理ドライブに対応した仮想上限値602の制限を解除する(具体的にはデフォルト値に戻す)。
S1206又はS1207の後、S1208で、仮想キュー管理部203は、処理対象として設定されているドライブ#を1インクリメントする。その後、S1203が行われる。
以上が、本実施形態の説明である。以上の説明を、例えば下記のように総括することができる。
ホスト1に論理ボリュームを提供する分散ストレージシステム100が、複数のドライブが関連付けられた複数のノード10を有する。各ノード10は、一つ以上のCTL6を有する。各CTL6にとって、当該CTL6に物理的に接続されているドライブである接続ドライブがある。各CTL6は、ホスト1から送信されたHost−IOを当該ホスト1又は別のCTL6から受け付けた場合、当該受け付けたHost−IOに基づくDrive−IOを発行するようになっている。各CTL6は、当該CTL6の接続ドライブ毎に実キュー群212を有することに加えて、分散ストレージシステム100における各ドライブについて仮想キュー群211を有する。各実キューは、ドライブに送信されるDrive−IOが蓄積されるキューである。各仮想キューは、受け付けられたDrive−IOが蓄積されるキューである。いずれかのCTL6により受け付けられたDrive−IOである対象Drive−IOは、当該対象Drive−IOの発行先ドライブに対応した実キュー群212に蓄積される前に、発行先ドライブに対応した仮想キュー群211に蓄積される。結果として、分散ストレージシステム100のI/O性能の向上が期待される。当該実キュー群212に対応した後述の実上限値が小さいとしてもまず発行先ドライブに対応した仮想キュー群211に蓄積がされるからであり、故に、上述した第1及び第2の問題のいずれの問題の解決も期待されるからである。
各CTL6には、各ドライブについて、当該ドライブに対応した仮想キュー群211に蓄積可能なDrive−IOの数の上限である仮想上限値602と、当該CTL6の各接続ドライブについて、当該接続ドライブに対応した実キュー群212に蓄積可能なDrive−IOの数の上限である実上限値702とが設定されている。仮想キュー群211と実キュー群212とでDrive−IOの数の上限値が独立している。このため、ドライブに対応した実上限値702が小さくても当該ドライブに対応した仮想キュー群211にDrive−IOを蓄積することが期待できる。
各CTL6において、各ドライブに関し、当該ドライブに対応した仮想上限値602は、当該ドライブが接続ドライブであるCTL6に設定される実上限値702と同じ又はそれよりも大きい値である。このため、ドライブに対応した実上限値702が小さくても当該ドライブに対応した仮想キュー群211にDrive−IOを蓄積することが期待できる。
各CTL6において、各ドライブに関し、当該ドライブに対応した仮想上限値602は、当該ドライブのハード仕様に従う上限値に基づく値であり、当該ドライブを接続ドライブとしたCTL6に設定される実上限値702は、当該ドライブのハード仕様に従う上限値に基づく値を、当該ドライブが接続ドライブであるCTL6の数で割った値である。このように、各CTL6に、当該CTL6に適した実上限値702と、分散ストレージシステム100全体において適切か仮想上限値602の設定が可能である。
複数のノード10における複数のCTL6の少なくとも一つには、当該CTL6に物理的に接続されていないドライブである非接続ドライブがある。上記対象Drive−IOが受け付けられた受付CTL6と、発行先ドライブが接続ドライブである実行CTL6とが異なっている場合、対象Drive−IOは、受付CTL6における複数の仮想キュー群211のうち発行先ドライブに対応した仮想キュー群211から受付CTL6により取得され、受付CTL6から実行CTL6に転送され、実行CTL6における複数の実キュー群212のうち発行先ドライブに対応した実キュー群212に、実行CTL6により蓄積される。なお、発行先ドライブに対応した実キュー群212が実行CTL6において満杯の場合、実行CTL6が受付CTL6に所定の応答(例えば、リトライを要求した応答)を返し、受付CTL6が、当該所定の応答を受けた場合に対象Drive−IOを実行CTL6に再度転送してよい。
実行CTL6は、対象Drive−IOを受付CTL6から受け付けた場合、実行CTL6における複数の仮想上限値のうち、発行先ドライブに対応した仮想上限値を下げる。これにより、実行CTL6において仮想キュー群211から実キュー群212にDrive−IOを蓄積できくなる可能性を低減できる。
各CTL6は、複数のプロセッサコアを有する。各CTL6において、当該CTL6におけるプロセッサコア毎に仮想キュー及び実キューの各々が備えられる。実行CTL6において発行先ドライブに対応した仮想上限値602のデフォルト値は、発行先ドライブのハード仕様に従う上限値に基づく値である。受付CTL6と実行CTL6とが異なっている場合、実行CTL6において発行先ドライブに対応した仮想上限値602は、実行CTL6が有するプロセッサコア数と同じ値に下げられる。
実行CTL6は、周期的に、当該実行CTL6においてデフォルト値と異なる値になっている仮想上限値があれば当該仮想上限値をデフォルト値に戻す。
複数のノード10の各々が、二つ以上のCTL6を有する。例えば、複数のノード10は、複数のノード群を有する。複数のノード群の各々は、冗長化されたノード10である。各ノード10において、二つ以上のCTL6は、冗長化されたCTL6である。
各CTL6は、当該CTL6に設定されている複数の仮想上限値の各々を動的に調整する。例えば、各CTL6は、当該CTL6に設定されている複数の仮想上限値602の各々を、当該仮想上限値602に対応したドライブに対するDrive−IOの実行状況に応じて調整する。
各CTL6は、当該CTL6に設定されている複数の仮想上限値602の各々を周期的に調整する。例えば、各CTL6は、周期的に、当該CTL6においてデフォルト値と異なる値になっている仮想上限値があれば当該仮想上限値をデフォルト値に戻す。
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
100:分散ストレージシステム

Claims (15)

  1. ホストシステムに論理ボリュームを提供する分散ストレージシステムであって、
    複数のドライブが関連付けられた複数のストレージノードを有し、
    前記複数のストレージノードの各々は、一つ以上のコントローラを有し、
    各コントローラにとって、前記複数のドライブには、当該コントローラに物理的に接続されているドライブである接続ドライブがあり、
    前記各コントローラは、ホストシステムから送信され論理ボリュームのアドレスを指定したI/O(Input/Output)コマンドであるHost−IOを前記ホストシステム又は別のコントローラから受け付けた場合、当該受け付けたHost−IOに基づきドライブのアドレスを指定したI/OコマンドであるDrive−IOを発行するようになっており、
    前記各コントローラは、当該コントローラの接続ドライブ毎に一つ以上の実キューである実キュー群を有することに加えて、前記複数のドライブの各々について一つ以上の仮想キューである仮想キュー群を有し、
    各実キューは、ドライブに送信されるDrive−IOが蓄積されるキューであり、
    各仮想キューは、受け付けられたDrive−IOが蓄積されるキューであり、
    いずれかのコントローラにより受け付けられたDrive−IOである対象Drive−IOは、当該対象Drive−IOの発行先ドライブに対応した実キュー群に蓄積される前に、当該発行先ドライブに対応した仮想キュー群に蓄積される、
    分散ストレージシステム。
  2. 前記各コントローラには、
    各ドライブについて、当該ドライブに対応した仮想キュー群に蓄積可能なDrive−IOの数の上限である仮想上限値と、
    当該コントローラの各接続ドライブについて、当該接続ドライブに対応した実キュー群に蓄積可能なDrive−IOの数の上限である実上限値と
    が設定されている、
    請求項1に記載の分散ストレージシステム。
  3. 前記各コントローラにおいて、前記各ドライブに関し、当該ドライブに対応した仮想上限値は、当該ドライブが接続ドライブであるコントローラに設定される実上限値と同じ又はそれよりも大きい値である、
    請求項2に記載の分散ストレージシステム。
  4. 前記各コントローラにおいて、前記各ドライブに関し、
    当該ドライブに対応した仮想上限値は、当該ドライブのハード仕様に従う上限値に基づく値であり、
    当該ドライブを接続ドライブとしたコントローラに設定される実上限値は、当該ドライブのハード仕様に従う上限値に基づく値を、当該ドライブが接続ドライブであるコントローラの数で割った値である、
    請求項3に記載の分散ストレージシステム。
  5. 前記複数のストレージノードにおける複数のコントローラの少なくとも一つには、当該コントローラに物理的に接続されていないドライブである非接続ドライブがあり、
    前記対象Drive−IOが受け付けられた受付コントローラと、前記発行先ドライブが接続ドライブである実行コントローラとが異なっている場合、前記対象Drive−IOは、
    前記受付コントローラにおける複数の仮想キュー群のうち前記発行先ドライブに対応した仮想キュー群から前記受付コントローラにより取得され、
    前記受付コントローラから前記実行コントローラに転送され、
    前記実行コントローラにおける複数の実キュー群のうち前記発行先ドライブに対応した実キュー群に、前記実行コントローラにより蓄積される、
    請求項3に記載の分散ストレージシステム。
  6. 前記実行コントローラは、前記対象Drive−IOを前記受付コントローラから受け付けた場合、前記実行コントローラにおける複数の仮想上限値のうち、前記発行先ドライブに対応した仮想上限値を下げる、
    請求項5に記載の分散ストレージシステム。
  7. 前記各コントローラは、複数のプロセッサコアを有し、
    前記各コントローラにおいて、当該コントローラにおけるプロセッサコア毎に仮想キュー及び実キューの各々が備えられ、
    前記実行コントローラにおいて前記発行先ドライブに対応した仮想上限値のデフォルト値は、前記発行先ドライブのハード仕様に従う上限値に基づく値であり、
    前記受付コントローラと前記実行コントローラとが異なっている場合、前記実行コントローラにおいて前記発行先ドライブに対応した仮想上限値は、前記実行コントローラが有するプロセッサコア数と同じ値に下げられる、
    請求項6に記載の分散ストレージシステム。
  8. 前記実行コントローラは、周期的に、当該実行コントローラにおいてデフォルト値と異なる値になっている仮想上限値があれば当該仮想上限値をデフォルト値に戻す、
    請求項6に記載の分散ストレージシステム。
  9. 前記複数のストレージノードの各々が、二つ以上のコントローラを有する、
    請求項1に記載の分散ストレージシステム。
  10. 前記複数のストレージノードは、複数のノード群を有し、
    前記複数のノード群の各々は、冗長化されたストレージノードであり、
    各ストレージノードにおいて、前記二つ以上のコントローラは、冗長化されたコントローラである、
    請求項に記載の分散ストレージシステム。
  11. 前記各コントローラは、当該コントローラに設定されている複数の仮想上限値の各々を動的に調整する、
    請求項2に記載の分散ストレージシステム。
  12. 前記各コントローラは、当該コントローラに設定されている複数の仮想上限値の各々を、当該仮想上限値に対応したドライブに対するDrive−IOの実行状況に応じて調整する、
    請求項11に記載の分散ストレージシステム。
  13. 前記各コントローラは、当該コントローラに設定されている複数の仮想上限値の各々を周期的に調整する、
    請求項に記載の分散ストレージシステム。
  14. 前記各コントローラは、周期的に、当該コントローラにおいてデフォルト値と異なる値になっている仮想上限値があれば当該仮想上限値をデフォルト値に戻す、
    請求項13に記載の分散ストレージシステム。
  15. ホストシステムに論理ボリュームを提供する分散ストレージシステムで実現される記憶制御方法であって、
    前記分散ストレージシステムは、複数のドライブが関連付けられた複数のストレージノードを有し、
    前記複数のストレージノードの各々は、一つ以上のコントローラを有し、
    各コントローラにとって、前記複数のドライブには、当該コントローラに物理的に接続されているドライブである接続ドライブがあり、
    前記各コントローラは、ホストシステムから送信され論理ボリュームのアドレスを指定したI/O(Input/Output)コマンドであるHost−IOを前記ホストシステム又は別のコントローラから受け付けた場合、当該受け付けたHost−IOに基づきドライブのアドレスを指定したI/OコマンドであるDrive−IOを発行するようになっており、
    前記記憶制御方法は、
    前記各コントローラに、当該コントローラの接続ドライブ毎に一つ以上の実キューである実キュー群と、前記複数のドライブの各々について一つ以上の仮想キューである仮想キュー群とを設定し、
    各実キューは、ドライブに送信されるDrive−IOが蓄積されるキューであり、
    各仮想キューは、受け付けられたDrive−IOが蓄積されるキューであり、
    いずれかのコントローラにより発行されたDrive−IOである対象Drive−IOを、当該対象Drive−IOの発行先ドライブに対応した実キュー群に蓄積される前に、当該対象Drive−IOを受け付けたコントローラにより、当該発行先ドライブに対応した仮想キュー群に蓄積する、
    記憶制御方法。
JP2019024936A 2019-02-14 2019-02-14 分散ストレージシステム Active JP6842480B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2019024936A JP6842480B2 (ja) 2019-02-14 2019-02-14 分散ストレージシステム
US16/577,569 US11144242B2 (en) 2019-02-14 2019-09-20 Distributed storage system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019024936A JP6842480B2 (ja) 2019-02-14 2019-02-14 分散ストレージシステム

Publications (2)

Publication Number Publication Date
JP2020135155A JP2020135155A (ja) 2020-08-31
JP6842480B2 true JP6842480B2 (ja) 2021-03-17

Family

ID=72042053

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019024936A Active JP6842480B2 (ja) 2019-02-14 2019-02-14 分散ストレージシステム

Country Status (2)

Country Link
US (1) US11144242B2 (ja)
JP (1) JP6842480B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6942163B2 (ja) * 2019-08-06 2021-09-29 株式会社日立製作所 ドライブボックス、ストレージシステム及びデータ転送方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001001262A1 (fr) * 1999-06-24 2001-01-04 Fujitsu Limited Controleur de peripherique et systeme d'entree/sortie
JP4654273B2 (ja) 2008-07-14 2011-03-16 富士通株式会社 ストレージ装置および制御装置
JP2010211428A (ja) * 2009-03-10 2010-09-24 Fujitsu Ltd ストレージ装置、中継装置、及びコマンド発行制御方法
WO2017158799A1 (ja) * 2016-03-17 2017-09-21 株式会社日立製作所 ストレージ装置および情報処理方法
JP2019175292A (ja) * 2018-03-29 2019-10-10 東芝メモリ株式会社 電子機器、コンピュータシステム、および制御方法

Also Published As

Publication number Publication date
US20200264806A1 (en) 2020-08-20
JP2020135155A (ja) 2020-08-31
US11144242B2 (en) 2021-10-12

Similar Documents

Publication Publication Date Title
CN107430528B (zh) 机会性资源迁移以优化资源放置
CN110324264B (zh) 分配系统资源的方法与系统
JP4775846B2 (ja) 物理リンクの割当てを制御するコンピュータシステム及び方法
JP6074056B2 (ja) 計算機システムおよびデータ制御方法
JP5981563B2 (ja) 情報記憶システム及び情報記憶システムの制御方法
US8751741B2 (en) Methods and structure for implementing logical device consistency in a clustered storage system
US20110167189A1 (en) Storage apparatus and its data transfer method
US8489845B2 (en) Storage system comprising multiple storage control apparatus
US20190339905A1 (en) Storage apparatus and information processing method
US10616134B1 (en) Prioritizing resource hosts for resource placement
JP2022517890A (ja) コンポーザブルインフラストラクチャにおける記憶装置の故障耐性を維持するための方法とシステム
CN105739930A (zh) 一种存储架构及其初始化方法和数据存储方法及管理装置
JP6617461B2 (ja) 制御装置、制御プログラム、及び制御方法
JP2009015843A (ja) ロング・サイド入出力コマンド処理
JP6842480B2 (ja) 分散ストレージシステム
WO2016203629A1 (ja) ストレージシステム及びキャッシュ制御方法
WO2014184943A1 (ja) ストレージ装置及びraidグループ構成方法
US10776173B1 (en) Local placement of resource instances in a distributed system
US8312234B2 (en) Storage system configured from plurality of storage modules and method for switching coupling configuration of storage modules
CN114442910A (zh) 管理存储系统的方法、电子设备和计算机程序产品
US8924683B2 (en) Storage apparatus and data control method using a relay unit and an interface for communication and storage management
US9569373B2 (en) Sharing message-signaled interrupts between peripheral component interconnect (PCI) I/O devices
CN111124253A (zh) 管理存储设备的方法、装置和计算机程序产品
US11513861B2 (en) Queue management in solid state memory
JP6836536B2 (ja) ストレージシステム及びio処理の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190724

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200915

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201105

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: 20210216

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210219

R150 Certificate of patent or registration of utility model

Ref document number: 6842480

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150