JP5902137B2 - ストレージシステム - Google Patents

ストレージシステム Download PDF

Info

Publication number
JP5902137B2
JP5902137B2 JP2013196935A JP2013196935A JP5902137B2 JP 5902137 B2 JP5902137 B2 JP 5902137B2 JP 2013196935 A JP2013196935 A JP 2013196935A JP 2013196935 A JP2013196935 A JP 2013196935A JP 5902137 B2 JP5902137 B2 JP 5902137B2
Authority
JP
Japan
Prior art keywords
pmn
data
command
memory node
address
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
Application number
JP2013196935A
Other languages
English (en)
Other versions
JP2015064653A (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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2013196935A priority Critical patent/JP5902137B2/ja
Priority to TW103105909A priority patent/TWI540589B/zh
Priority to KR1020140022939A priority patent/KR101536070B1/ko
Priority to CN201410065889.1A priority patent/CN104461376B/zh
Priority to US14/205,858 priority patent/US9658802B2/en
Publication of JP2015064653A publication Critical patent/JP2015064653A/ja
Application granted granted Critical
Publication of JP5902137B2 publication Critical patent/JP5902137B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • 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]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • 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
    • G06F2003/0697Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers device management, e.g. handlers, drivers, I/O schedulers

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)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)

Description

本発明の実施形態は、ストレージシステムに関する。
近年、ストレージシステムを備えた複数台の情報処理装置を、相互にネットワークで接続して、一つの情報処理システムとして動作させる場合(例えばクラウドコンピューティング)が増加している。また、ストレージシステムとしても、従来型のHDDを使用したものと比較してより高速な、DRAMチップやNANDフラッシュチップなどを多数並べてチップ間配線によって接続し、一つのストレージシステムとして用いられるものが存在する。
このような、複数の情報処理装置を接続して成る単一の情報システムでは、システムを構成する情報処理装置の台数を増やすことで性能向上が図られている。しかしながら、台数が増加した大規模な情報処理システムにおいては、管理などのために必要となる外部リソースが増大する、などの問題があった。
特表2012−518843号公報 特表2008−537265号公報
本発明の一つの実施形態は、必要な外部リソースを可及的に少なくすることができるストレージシステムを提供することを目的とする。
本発明の一つの実施形態によれば、ストレージシステムは、夫々2以上の異なる方向に相互に接続される複数の物理メモリノードと、外部からの要求に応じてコマンドを発行するコントロールユニットと、を備える。各物理メモリノードは、他の物理メモリノードとともに複数の論理メモリノードのうちの一を構成する。各論理メモリノードは、外部からライトされる第1データを第1の物理メモリノードに記憶し、前記第1データの冗長データである第2データを前記第1の物理メモリノードと異なる第2の物理メモリノードに記憶する。前記コマンドは、前記複数の論理メモリノードのうちの一を指定する第1アドレスと、論理メモリノード毎に割り当てられたメモリ空間内の前記第1データの記憶位置を指定する第2アドレスと、を備える。各論理メモリノードは、前記第1アドレスが自論理メモリノードを指定しない場合、前記コマンドを他の論理メモリノードに転送する。各論理メモリノードは、前記第1アドレスが自論理メモリノードを指定する場合、前記第2アドレスに基づいて前記第1の物理メモリノード内の前記第1データの第1の記憶位置を演算するとともに前記第1の記憶位置に記憶される第1データに対応する第2データの前記第2の物理メモリノード内の第2の記憶位置を演算し、演算された各記憶位置に前記コマンドに応じたアクセスを行う。
図1は、第1の実施形態に係るストレージシステムの構成例を示す図である。 図2は、LMNの構成の一例を示す図である。 図3は、PMNの物理的な配置の一例を示す図である。 図4は、CUの構成の一例を示す図である。 図5は、PMNの構成の一例を示す図である。 図6は、PMNのパッケージ構成の一例を示す図である。 図7は、メモリ構成に着目したPMNの構成の一例を示す図である。 図8は、LMN_LBAから物理アドレスを正引き変換する処理を示す図である。 図9は、変換アルゴリズムの一例を説明する図である。 図10は、CUからのパケットの受信時のコントローラの動作を示すフローチャートである。 図11は、CUからのライトコマンドの処理例(第1のライト処理)を示すシーケンス図である。 図12は、CUからのライトコマンドの別の処理例(第2のライト処理)を示すシーケンス図である。 図13は、CUからのライトコマンドの別の処理例(第3のライト処理)を示すシーケンス図である。 図14は、CUからのライトコマンドの別の処理例(第4のライト処理)を示すシーケンス図である。 図15は、CUからのリードコマンドの処理例(第1のリード処理)を示すシーケンス図である。 図16は、CUからのリードコマンドの別の処理例(第2のリード処理)を示すシーケンス図である。 図17は、CUからのリードコマンドの別の処理例(第3のリード処理)を示すシーケンス図である。 図18は、第2の実施形態に係るストレージシステムの構成例を示す図である。 図19は、変換テーブルの構成例を示す図である。 図20は、変換テーブルの構成例を示す図である。 図21は、変換テーブルが記憶されるMNを示す図である。 図22は、メモリ構成に着目した第2の実施形態のMNの構成の一例を示す図である。 図23は、CUからのリードコマンドの第2の実施形態の処理例を示すシーケンス図である。 図24は、CUからのライトコマンドの第2の実施形態の処理例を示すシーケンス図である。 図25は、変換テーブルのエントリ数が所定値に達した場合の処理例を示すシーケンス図である。 図26は、リード処理の実行時におけるリードコマンドの転送経路を示す図である。 図27は、リード処理の実行時におけるデータの転送経路を示す図である。 図28は、ライト処理の実行時におけるACKの転送経路を示す図である。 図29は、第3の実施形態の変換テーブルの構成例を示す図である。 図30は、Root K2Kのエントリ数が所定値に達した場合の処理例を示すシーケンス図である。
以下に添付図面を参照して、実施形態にかかるストレージシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態に係るストレージシステムの構成例を示す図である。ストレージシステム1は、ネットワーク2を介して1以上のサーバ3に接続される。
サーバ3は、所定の処理を実行するコンピュータである。サーバ3は、典型的には、プロセッサ、メインメモリ、通信インターフェース、およびローカル入出力装置を備えて構成される。プロセッサは、各種プログラム(例えばデバイスドライバ、オペレーティングシステム(OS)、またはアプリケーションプログラム)をメインメモリに展開する。そしてプロセッサは、メインメモリに展開された各種プログラムを実行することによって、所定の処理を実現する。また、サーバ3は、所定の処理の一環として、データをストレージシステム1にライトしたりデータをストレージシステム1からリードしたりすることができる。即ち、サーバ3は、ストレージシステム1に対してホストとして機能する。なお、任意のコンピュータがストレージシステム1のホストとして機能することができる。
サーバ3によるストレージシステム1へのI/Oアクセスは、ネットワーク2を介して実行される。ネットワーク2の規格は任意である。ネットワーク2としては、例えばファイバーチャネル、イーサネット、SAN(Storage Area Network)、またはNAS(Network Attached Storage)が適用可能である。ネットワーク2は、ネットワークスイッチ、ハブ、またはロードバランサを含む。
ストレージシステム1は、複数の論理メモリノード(LMN)11と、1以上のコントロールユニット(CU)14と、を備える。ストレージシステム1は、複数のLMN11にデータを分散して記憶することができる。図1の例においては、各LMN11は、矩形格子の格子点に配置される。各CU14は、LMN11の配列の外周部に配置される。格子点の座標を座標(x、y)で示し、格子点に配置されるLMN11の位置情報は、当該格子点の座標と対応して論理メモリノードアドレス(x、y)で示されるものとする。また、図1の例においては、左上隅に位置するLMN11が原点の論理メモリノードアドレス(0、0)を有し、各LMN11を横方向(X方向)および縦方向(Y方向)に移動することで、論理メモリノードアドレスが整数値で増減する。以降、論理メモリノードアドレスをLMNAと表記する。なお、各CU14もLMNAを有していてもよい。例えば、原点のLMN11に接続される2つのCU14のうち、X方向に接続されるCU14はLMNA(−1、0)を有し、Y方向に接続されるCU14はLMNA(0、−1)を有してもよい。
各LMN11は、2以上の入出力ポート16を備える。各LMN11は、2以上の異なる方向に隣接するLMN11と、入出力ポート16を介して接続される。図1において左上隅のLMNA(0、0)で示されるLMN11は、X方向に隣接するLMNA(1、0)で表されるLMN11と、X方向とは異なる方向であるY方向に隣接するLMNA(0、1)で表されるLMN11と、それぞれ接続される。また、図1においてLMNA(1、1)で表されるLMN11は、互いに異なる4の方向に隣接する、LMNA(1、0)、(0、1)、(2、1)および(1、2)でそれぞれ示される4のLMN11に接続される。
図1では、各LMN11が矩形格子の格子点に配置されるように示したが、各LMN11の配置の様態は、この例に限定されない。すなわち、格子の形状は、格子点に配置される各LMN11が2以上の異なる方向に隣接するLMN11と接続されればよく、例えば三角形、六角形などでもよい。また、図1では各LMN11が2次元状に配置されているが、各LMN11を3次元的に配置しても構わない。3次元的にLMN11を配置した場合は、(x、y、z)の3つの値で各LMN11を指定することができる。また、LMN11が2次元的に配置される場合には、対辺に位置するLMN11同士を接続することによって、LMN11をトーラス状に接続するようにしてもよい。
図2は、LMN11の構成の一例を示す図である。LMN11は、3つの物理メモリノード(PMN)21−0〜21−2を含んで構成される。同一のLMN11を構成するPMN21−0、PMN21−1、およびPMN21−2は、アドレスIPMNAを用いて夫々識別される。ここでは、PMN21−0にはIPMNA=0が割り当てられ、PMN21−1にはIPMNA=1が割り当てられ、PMN21−2にはIPMNA=2が割り当てられているものとする。以降、PMN21−0〜PMN21−2を総称してPMN21と表記することがある。
PMN21−0、PMN21−1、およびPMN21−2は、X方向にこの順番で配置される。X方向に隣接する任意の2つのPMN21は、同一のLMN11に属するか互いに異なるLMN11に属するかを問わず、入出力ポート16を介して接続される。X方向に隣接する2つのLMN11の夫々に属する3つのPMN21は、入出力ポート16を介して一対一で接続される。具体的には、X方向に隣接する2つのLMN11の夫々に属するPMN21−0は、入出力ポート16を介して相互に接続される。X方向に隣接する2つのLMN11の夫々に属するPMN21−1は、入出力ポート16を介して相互に接続される。X方向に隣接する2つのLMN11の夫々に属するPMN21−2は、入出力ポート16を介して相互に接続される。このように、各PMN21は、夫々2以上の異なる方向に相互に接続され、他のPMN21とともに複数のLMN11のうちの1つを構成する。
なお、図1に示すLMN11の配置は論理的なものであってよく、物理的な配置が必ずしもそのとおりになっていなくてもよい。また、図2に示すPMN21の配置は、論理的なものであってもよく、物理的な配置が必ずしもそのとおりになっていなくてもよい。また、PMN21−0〜PMN21−2は、X方向でなくY方向に配置されてもよい。また、X方向に隣接する3つのPMN21が1つのLMN11を構成するとして説明するが、互いに隣接しない3つまたは3以外の複数のPMN21が1つのLMN11を構成するようにしてもよい。
また、LMN11は、冗長データを記憶することができる。具体的には、LMN11は、PMN21−0〜PMN21−2のうちの一部(第1の物理メモリノード)に外部からライトされるデータ(第1データ)を記憶し、PMN21−0〜PMN21−2のうちの第1の物理メモリノードと異なる第2の物理メモリノードに第1データの冗長データである第2データを記憶する。ここでは、冗長データの記憶方式として、PMN21−0〜PMN21−2はRAID5を構成するとして説明するが、PMN21−0〜PMN21−2はRAID5以外の記憶方式(例えばRAID0、RAID2、RAID6、RAID−Z、またはReed Solomon符号)を構成してもよい。
図3は、PMN21の物理的な配置の一例を示す図である。PMN21はメモリノード基盤(ブレード基盤)22の上に実装されており、ブレード基盤22は着脱可能な様態で基盤23上に実装されている。1つのブレード基盤22には、3つのPMN21がY方向に配置されて実装されている。そして、同一のLMN11に属する3つのPMN21は夫々異なる複数のブレード基盤22に属する。PMN21間は、基盤配線24、25、26を介して互いに電気的に接続される。なお、基盤配線24、25、26は、入出力ポート16を備える。同一のブレード基盤22に実装された3つのPMN21のうちの隣接する任意の2つのPMN21は、ブレード基盤22上の基盤配線24を介して相互に接続される。異なるブレード基盤22に属するX方向に隣接する任意の2つのPMN21は、基盤配線25を介して相互に接続される。なお、図示しないが、Y方向にも複数のブレード基盤22が配置される。異なるブレード基盤22に属するY方向に隣接する任意の2つのPMN21は、基盤配線26を介して相互に接続される。基盤配線25、26は、着脱可能なコネクタを備えており、ブレード基盤22が基盤23からの着脱がコネクタの作用によって可能となっている。
同一のLMN11に属するPMN21は、それぞれ異なるブレード基盤22に配置されるとともにRAID5を構成する。このため、ブレード基盤22の交換が行われた場合であっても、旧ブレード基盤22に実装されたPMN21に記憶されるデータは、RAID5を構成する他のPMN21に記憶されるデータに基づいて復元され、新ブレード基盤22に実装されたPMN21に記憶させることが可能となる。したがって、1つのPMN21が故障した場合、故障したPMN21が実装されているブレード基盤22を交換することで、ストレージシステム1に記憶されたデータを失うことなくデータの引き継ぎが可能となる。本実施形態においてはRAID5が採用されているため、同一のLMN11あたり同時に1台までのPMN21の故障に対応することができる。なお、RAID6が採用される場合、同一のLMN11あたり同時に2台までのPMN21の故障に対応することが可能となる。
図1に示すように、各CU14は、入出力ポート16を介してLMN11(より詳しくはLMN11を構成するPMN21)に接続される。このとき、LMN11同士の通信規格とCU14の通信規格とが異なる場合は、両者の間にアダプタを設けてもよい。図1の例では、CU14は、各LMN11が配置される2次元の正方格子のX方向およびY方向それぞれの一方向の各端に、それぞれ接続されている。なお、X方向に接続されるCU14は、LMN11を構成する3つのPMN21に接続されてもよいし、LMN11を構成する3つのPMN21のうちの1に接続されてもよい。
CU14は、サーバ3からの要求に応じて、PMN21が転送したり実行したりすることが可能なパケット形式のコマンドを生成する。そして、CU14は、生成したコマンドを発行する。具体的には、CU14は、生成したコマンドを、自CU14に接続されているPMN21に送信する。例えば、CU14は、サーバ3からアクセス要求(リード要求またはライト要求)を受信したとき、要求されたアクセスを実行するためのコマンドを生成する。CU14が生成するコマンドについては後述する。なお、CU14が発行するコマンドと同じ形式のコマンドをサーバ3が発行し、CU14はサーバ3が発行したコマンドを自CU14に接続されているPMN21に転送してもよい。
コマンドは、そのコマンドを受信したPMN21が、自PMN21に隣接するPMN21のうちから所定の転送アルゴリズム(後述する)に基づいて転送先のPMN21を決定することで、PMN21間を転送されて、宛先のPMN21に到達する。また、PMN21は、転送アルゴリズムに基づいて、故障または混雑しているPMN21を迂回するようにルーティング先を決定することができる。
図4は、CU14の構成の一例を示す図である。CU14は、マイクロプロセッサ(MPU)110、主記憶となるランダムアクセスメモリ(RAM)120、第1のインターフェース装置140、第2のインターフェース装置150を備える。第1のインターフェース装置140は、ネットワーク2と通信するためのものである。第2のインターフェース装置150は、PMN21と通信をするためのものである。MPU110、RAM120、第1のインターフェース装置140および第2のインターフェース装置150は、互いにBUS130によって接続されている。CU14は、パケット形式のコマンドを発行する。CU14が発行するコマンドは、LMN11のうちの1つを指定するLMNAと、LMN11毎に割り当てられた、外部から指定可能なメモリ空間内における位置を指定するLMN_LBAと、をアクセス先を示す情報として少なくとも含む。
なお、たとえばCU14は、PMN21の座標をLMN11毎に管理するテーブルを記憶することでLMN11を構成するPMN21の動的な変更を実行してもよい。物理的に故障してアクセス不能となったPMN21がある場合、CU14が、故障したPMN21とストレージシステム1内の空のPMN21とでLMN11の割り当てを論理的に組み替えることによって、ブレード基盤22の交換を行うことなくストレージシステム1が運用を継続することが可能となる。
図5は、PMN21の構成の一例を示す図である。PMN21は、コントローラ200と、ストレージメモリとしてのNANDメモリ300とを備える。なお、ストレージメモリとしては、NANDメモリ300のほかに、ビットコストスケーラブルメモリ(BiCS)、磁気抵抗メモリ(MRAM)、相変化メモリ(PcRAM)、または、抵抗変化型メモリ(RRAM(登録商標))等が適用可能である。
NANDメモリ300は、4つのNANDメモリチップ(ダイ)301を含んで構成される。各NANDメモリチップ301は、記憶領域を提供するメモリセルアレイを備える。コントローラ200とNANDメモリチップ301とは、1乃至複数のIOチャネルと、1乃至複数のチップイネーブル信号とで電気的に接続される。本実施形態においては、PMN21は、2対のIOチャネル(ch0、ch1)と、2対のチップイネーブル信号(CE0、CE1)とを備えることで、コントローラ200は4つのNANDメモリチップ301を夫々独立して選択することが可能となっている。なお、NANDメモリチップ301は、たとえばLUNなどのようなアドレス信号で選択されるようにしてもよい。コントローラ200は、複数のIOチャネルおよび複数のチップイネーブル信号を制御することによって、複数のNANDメモリチップ301に対して並列にアクセスすることができる。
コントローラ200は、4つの入出力ポート16が接続される。コントローラ200は、CU14または他のPMN21から入出力ポート16を介してパケットを受信したり、CU14または他のPMN21に入出力ポート16を介してパケットを送信したりする。コントローラ200は、受信したパケットの宛先が自PMN21である場合には、そのパケット(そのパケットに記録されるコマンド)に応じた処理を実行する。例えば、コマンドがアクセスコマンド(リードコマンドまたはライトコマンド)である場合には、コントローラ200はNANDメモリ300に対するアクセスを実行する。
図6は、PMN21のパッケージ構成の一例を示す図である。コントローラ200は、1つのダイで構成される。そして、コントローラ200と、各NANDメモリ300とは、スタックされるとともに、樹脂を用いて1つのパッケージに封止される。つまり、各PMN21は夫々個別のパッケージとして構成される。
図7は、メモリ構成に着目したPMN21の構成の一例を示す図である。コントローラ200は、CPU210およびランダムアクセスメモリ(RAM)220を備える。NANDメモリ300は、FW領域310、管理領域320、およびデータ領域330を備える。なお、各領域310〜330は、何れのNANDメモリチップ301の記憶領域に確保されるかは任意である。FW領域310は、ファームウェアプログラム311を予め記憶する。管理領域320は、自PMN21が属するLMN11のLMNA321と、自PMN21に割り当てられたIPMNA322と、メタデータ323と、変換アルゴリズム324とを記憶する。
CPU210は、ファームウェアプログラム311を実行することによって、コントローラ200の機能を実現する。コントローラ200の機能とは、例えば、パケットの送受信、コマンドの実行、NANDメモリ300にライトするデータのECC符号化、NANDメモリ300からリードしたデータのECC復号化、ウェアレベリング、およびコンパクションを含む。なお、ECC符号の方式は任意である。例えば、Cyclic Redundancy Check(CRC)符号、Bose-Chaudhuri-Hocquenghem (BCH)符号、Reed-Solomon (RS)符号、またはLow-Density Parity-Check (LDPC)符号が採用可能である。また、本実施形態においては、CPU210は、RAID5を利用したエラー訂正を実現することができる。
RAM220は、NANDメモリ300にリード/ライトされるデータのバッファ、送受信されるパケットのバッファ、ファームウェアプログラム311の展開領域、または各種管理情報(LMNA321、IPMNA322、メタデータ323、および変換アルゴリズム324)の展開領域として使用される。なお、RAM220は、コントローラ200の外部メモリとしてPMN21内に具備されてもよい。
LMNAは、各LMN11を全てのLMN11のうちから一意に特定するための識別情報である。また、IPMNAは、各PMN21を同一のLMN11に属する全てのPMN21のうちから一意に特定するための識別情報である。即ち、ストレージシステム1に具備される各PMN21は、LMNAとIPMNAとの対によって一意に特定される。管理領域320には、例えばストレージシステム1の初期化時、またはブレード基盤22の新規挿入時などのタイミングで、CU14などによってLMNA321およびIPMNA322が格納される。
変換アルゴリズム324は、パケットに記述されるLMN_LBAからIPMNAとPMN_LBAとに変換するための演算方法を記述した情報である。変換アルゴリズム324は、少なくとも同一のLMN11に属する全てのPMN21間で共通化されている。変換アルゴリズム324は、ストレージシステム1に具備される全てのPMN21間で共通化されてもよい。LMN_LBAは、1つのLMN11が構成する記憶領域内の位置を論理的に示す情報である。PMN_LBAは、1つのPMN21が構成する記憶領域内の位置を論理的に示す情報である。メタデータ323は、PMN_LBAとNANDメモリ300内の位置を物理的に示す情報(物理アドレス)との対応関係を記録した情報である。PMN_LBAと物理アドレスとの関係は、ライト、イレース、およびウェアレベリングによって刻々と変化する。CPU210は、PMN_LBAと物理アドレスとの関係が変化する毎にメタデータ323を更新する。
図8は、LMN_LBAから物理アドレスを正引き変換する処理を示す図である。CPU210が変換アルゴリズム324に従ってLMN_LBAをIPMNAとPMN_LBAとに変換する。IPMNAとPMN_LBAとが演算した後、CPU210は、メタデータ323を参照してPMN_LBAを物理アドレスに変換することができる。
図9は、変換アルゴリズム324の一例を説明する図である。この例においては、LMN_LBAが右方向に1ビットだけシフト演算され、シフト演算によって得られた値がPMN_LBAとされる。また、LMN_LBAの値と、PMN_LBAと、の関係から、IPMNAが演算される。図9の表のカラムは、PMN_LBAの値を示し、ロウは、IPMNAの値を示し、各マスは、LMN_LBAの値を示す。なお、P(a、b)は、LMN_LBA=aの位置に記憶されるデータと、LMN_LBA=bの位置に記憶されるデータと、から演算されるパリティである。以降、LMN_LBA=a(またはLMN_LBA=aの位置に記憶されるデータ)と、LMN_LBA=b(またはLMN_LBA=bの位置に記憶されるデータ)と、P(a、b)が記憶される位置(またはP(a、b))と、からなるグループを、パリティグループと表記する。
例えば、図9に示す例によれば、IPMNA=1およびPMN_LBA=2の対によって特定される位置には、LMN_LBA=4がマッピングされる。IPMNA=2およびPMN_LBA=2の対によって特定される位置には、LMN_LBA=5がマッピングされる。そして、PMN_LBA=2およびIPMNA=0の対によって特定される位置には、LMN_LBA=4の位置に記憶されるデータとLMN_LBA=5の位置に記憶されるデータとから演算されるパリティが記憶される。このように、PMN21は、変換アルゴリズム324を用いることによって、LMN_LBAによって指定される位置だけでなく、その位置に格納されるデータと同一のパリティグループに属する、他のデータおよびパリティが格納される夫々の位置を、特定することができる。
なお、変換アルゴリズム324は、LMN_LBAから、外部からライトされた第1データが記憶される第1の物理メモリノード内における記憶位置と、当該第1データの冗長データである第2データが記憶される第2の物理メモリノード内における記憶位置と、の両方が演算可能であれば、上記の例だけに限定されない。
次に、第1の実施形態のストレージシステム1の動作を説明する。
図10は、CU14からのパケットの受信時のコントローラ200の動作を示すフローチャートである。図10に示すコントローラ200の動作は、CPU210がファームウェアプログラム311を実行することによって実現される。簡単のために、コントローラ200を動作の主体として説明する。
コントローラ200は、パケットを受信すると(S1)、パケットの宛て先は自PMN21が属するLMN11であるか否かを判定する(S2)。具体的には、コントローラ200は、パケットに記録されているLMNAと管理領域320に記憶されているLMNA321とが一致する場合には、S2、Yesと判定し、両者が一致しない場合には、S2、Noと判定することができる。
パケットの宛て先は自PMN21が属するLMN11ではない場合(S2、No)、コントローラ200は、自PMN21に隣接するPMN21のうちの転送先のPMN21を、予め定められた転送アルゴリズムに基づいて決定する(S3)。コントローラ200は、例えば、宛先のLMN11または宛先のPMN21と自PMN21が属するLMN11または自PMN21との位置関係に基づいて決定する。コントローラ200は、例えば、自PMN21から宛先のLMN11または宛先のPMN21までの転送回数が最小となる経路上に位置するPMN21を転送先のPMN21に決定する。また、自PMN21に隣接するPMN21のうちの転送回数が最小となる経路上に位置するPMN21が故障していたりビジーであったりする場合には、コントローラ200は、他のPMN21を転送先に決定するようにしてもよい。S3の処理の後、コントローラ200は、決定した転送先のPMN21にパケットを転送し(S4)、動作を終了する。
パケットの宛て先は自PMN21が属するLMN11である場合(S2、Yes)、コントローラ200は、変換アルゴリズム324に基づいてLMN_LBAからIPMNAおよびPMN_LBAを演算する(S5)。コントローラ200は、演算されたIPMNAと管理領域320に記憶されているIPMNA322とを比較することによって、パケットの宛て先は自PMN21であるか否かを判定する(S6)。コントローラ200は、両者が一致する場合には、S6、Yesと判定し、両者が一致しない場合には、S6、Noと判定することができる。
パケットの宛て先は自PMN21ではない場合(S6、No)、コントローラ200は、S3の処理を実行する。パケットの宛て先は自PMN21である場合(S6、Yes)、コントローラ200は、パケットに記録されているコマンドに応じた処理を実行し(S7)、動作を終了する。
図11は、CU14から発行されたライトコマンドの処理例(第1のライト処理)を示すシーケンス図である。なお、個々のPMN21は、コントローラ200によって実現される。簡単のために、PMN21−0〜PMN21−2を動作の主体として説明する。
まず、PMN21−0は、自PMN21−0宛てのライトコマンドを受信する(S11)。S11にて受信されるライトコマンドは、PMN21−0が属するLMN11を特定するLMNAと、LMN_LBA0と、Data0とを少なくとも含む。LMN_LBA0は、変換アルゴリズム324によってIPMNA=0とPMN_LBA0とに変換されるものである。
続いて、PMN21−0は、LMN_LBA0をIPMNA=0とPMN_LBA0とに変換する(S12)。なお、S12は、S5において実行済みであるが、説明のために本図に加えられている。
続いて、PMN21−0は、Data0と同一のパリティグループに属するData1をリードさせるとともにData1をPMN21−2に送信させる、リードコマンドを生成してPMN21−1に送信する(S13)。また、PMN21−0は、パリティを更新せしめるパリティ更新コマンドを生成してPMN21−2に送信する(S14)。
なお、PMN21が生成するコマンドは、CU14が生成するコマンドとアクセス先の表現方式が異なっていてもよい。ここでは一例として、PMN21が送信するパケットは、LMNAとIPMNAとPMN_LBAとを用いてアクセス先を表現するものとする。図9の例に従えば、同一のパリティグループを構成する各位置のPMN_LBAは共通である。よって、S13において生成されるリードコマンドは、アクセス先を指定する情報として、IPMNA=1とPMN_LBA0とを少なくとも含む。また、S14にて生成されるパリティ更新コマンドは、アクセス先を指定する情報として、IPMNA=2とPMN_LBA0とを少なくとも含む。なお、同一のパリティグループを構成するData0、Data1、およびパリティPの記憶位置を示すPMN_LBAが夫々異なる場合には、PMN21−0は、S13、S14の処理の前に、変換アルゴリズム324に基づいてLMN_LBAからData1およびパリティPの記憶位置を示すPMN_LBAを演算する。なお、S14にて生成されるパリティ更新コマンドは、Data0を含む。Data0は、パリティPの演算に必要となるからである。
PMN21−0は、S13およびS14の後、PMN_LBA0が示す位置にData0をライトする(S15)。
PMN21−1は、PMN21−0からリードコマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S16)。そして、PMN21−1は、Data1をPMN21−2に送信する(S17)。
PMN21−2は、PMN21−0からパリティ更新コマンドを受信し、PMN21−1からData1を受信すると、Data0およびData1からパリティPを演算し(S18)、演算したパリティPをPMN_LBA0が示す位置に上書き形式でライトする(S19)。
図12は、CU14からのライトコマンドの別の処理例(第2のライト処理)を示すシーケンス図である。S21〜S22の処理は、S11〜S12の処理と夫々同じである。S22の処理の後、PMN21−0は、パリティ更新コマンドを生成してPMN21−2に送信する(S23)。そして、PMN21−0は、PMN_LBA0が示す位置にData0をライトする(S24)。
PMN21−2は、PMN21−0からパリティ更新コマンドを受信すると、Data1をリードさせてPMN21−2に送信させる、リードコマンドを生成してPMN21−1に送信する(S25)。
PMN21−1は、PMN21−2からリードコマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S26)。そして、PMN21−1は、Data1をPMN21−2に送信する(S27)。
PMN21−2は、PMN21−1からData1を受信すると、Data0およびData1からパリティPを演算し(S28)、演算したパリティPをPMN_LBA0が示す位置にライトする(S29)。
なお、PMN21−2は、PMN21−0からパリティ更新コマンドを受信した後、PMN21−1からのパリティ更新コマンドの受信を一定時間だけ待ち受けるようにしてもよい。PMN21−2は、待ち受け中にPMN21−1からパリティ更新コマンドを受信した場合には、PMN21−1からData1をリードする処理を行うことなくパリティPを演算することができる。
図13は、CU14からのライトコマンドの別の処理例(第3のライト処理)を示すシーケンス図である。S31〜S32の処理は、S11〜S12の処理と夫々同じである。S32の処理の後、PMN21−0は、パリティ更新コマンドを生成してPMN21−1に送信する(S33)。なお、S33において生成されるパリティ更新コマンドは、IPMNA=1とPMN_LBA0とがアクセス先を指定する情報として記録され、Data0が記録される。そして、PMN21−0は、PMN_LBA0が示す位置にData0をライトする(S34)。
PMN21−1は、PMN21−0からパリティ更新コマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S35)。そして、PMN21−1は、Data0およびData1からパリティPを演算する(S36)。そして、PMN21−1は、パリティ更新コマンドを生成してPMN21−2に送信する(S37)。S37において生成されるパリティ更新コマンドは、IPMNA=2とPMN_LBA0とをアクセス先を指定する情報として含み、パリティPを含む。即ち、S37において生成されるパリティ更新コマンドは、PMN_LBA0が示す位置にパリティPをライトさせるライトコマンドに等しい。
PMN21−2は、PMN21−1からパリティ更新コマンドを受信すると、パリティPをPMN_LBA0が示す位置にライトする(S38)。
なお、PMN21−1は、PMN21−0からのパリティ更新コマンドを受信した後、Data1をライトさせるCU14からライトコマンドの受信を一定時間だけ待ち受けるようにしてもよい。PMN21−1は、待ち受け中にCU14からライトコマンドを受信した場合には、Data1をリードする処理を行うことなくパリティPを演算することができる。また、PMN21−1は、パリティPを演算しないで、Data0およびData1をPMN21−2に送信し、PMN21−2がパリティPを演算してもよい。
図14は、CU14からのライトコマンドの別の処理例(第4のライト処理)を示すシーケンス図である。S41〜S42の処理は、S11〜S12の処理と夫々同じである。S42の処理の後、PMN21−0は、Data1をリードさせてPMN21−0に送信させる、リードコマンドを生成してPMN21−1に送信する(S43)。そして、PMN21−0は、PMN_LBA0が示す位置にData0をライトする(S44)。
PMN21−1は、PMN21−0からリードコマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S45)。そして、PMN21−1は、Data1をPMN21−0に送信する(S46)。
PMN21−0は、PMN21−1からData1を受信すると、Data0およびData1からパリティPを演算する(S47)。そして、PMN21−0は、パリティ更新コマンドを生成してPMN21−2に送信する(S48)。S48において生成されるパリティ更新コマンドは、S37において生成されるパリティ更新コマンドと同様の構成を備える。
PMN21−2は、PMN21−0からパリティ更新コマンドを受信すると、パリティPをPMN_LBA0が示す位置に上書き形式でライトする(S49)。
なお、PMN21−0は、パリティPを演算しないで、Data0およびData1をPMN21−2に送信し、PMN21−2がパリティPを演算してもよい。
第1〜第4のライト処理に示すように、各LMN11は、PMN_LBA0が示す位置に既にData0が記憶される場合には、既に記憶されるData0はライトコマンドが含むData0に更新され、対応するパリティPがData0の更新に応じて更新される。また、第1〜第4のライト処理に示すように、同一のLMN11内のPMN21のうちの任意のPMN21がパリティPを演算することができる。
なお、ストレージシステム1は、サーバ3からTRIM(削除通知)コマンドを受け付けることができるようにしてもよい。具体的には、ストレージシステム1がTRIMコマンドを受信すると、CU14はそのTRIMコマンドを発行する。CU14が発行するTRIMコマンドは、LMNAと、削除先を指定するLMN_LBAとを少なくとも備えている。TRIMコマンドの宛て先のPMN21は、メタデータ342に記録されているLMN_LBAから変換されるPMN_LBAと物理アドレスとの対応関係を無効化する。なお、TRIMコマンドの宛て先のPMN21がPMN_LBAと物理アドレスとの対応関係を無効化した場合には、その旨を同一のパリティグループを構成する他のPMN21に送信して、パリティPが格納されるPMN_LBAとパリティPが格納される物理アドレスとの対応関係を無効化させるようにしてもよい。
図15は、CU14からのリードコマンドの処理例(第1のリード処理)を示すシーケンス図である。なお、PMN21−0は、リードコマンドの処理に成功した場合には、リードデータをCU14に送信する。ここでは、リードコマンドの処理に失敗した場合の処理を説明する。リードコマンドの処理に失敗する事例は、例えばリードデータの誤り訂正に失敗する事例を含む。
まず、PMN21−0は、自PMN21−0宛てのリードコマンドを受信する(S51)。S51にて受信されるリードコマンドは、PMN21−0が属するLMN11を特定するLMNAと、LMN_LBA0と、を少なくとも含む。LMN_LBA0は、変換アルゴリズム324によってIPMNA=0とPMN_LBA0とに変換されるものである。
続いて、PMN21−0は、LMN_LBA0をIPMNA=0とPMN_LBA0とに変換する(S52)。なお、S52は、S5において実行済みであるが、説明のために本図に加えられている。
PMN21−0は、リードコマンドの処理に失敗すると(S53)、Data1をリードさせてPMN21−0に送信させる、リードコマンドを生成してPMN21−1に送信する(S54)。また、PMN21−0は、パリティPをリードさせてPMN21−0に送信させる、リードコマンドを生成してPMN21−2に送信する(S55)。
PMN21−1は、PMN21−0からリードコマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S56)。そして、PMN21−1は、Data1をPMN21−0に送信する(S58)。また、PMN21−2は、PMN21−0からリードコマンドを受信すると、PMN_LBA0が示す位置からパリティPをリードする(S57)。そして、PMN21−2は、パリティPをPMN21−0に送信する(S59)。
PMN21−0は、PMN21−1からData1を受信し、PMN21−2からパリティPを受信すると、Data1およびパリティPからData0を演算する(S60)。そして、PMN21−0は、演算したData0をCU14に送信する(S61)。また、PMN21−0は、演算したData0をPMN_LBA0が示す位置に上書き形式でライトする(S62)。
図16は、CU14からのリードコマンドの別の処理例(第2のリード処理)を示すシーケンス図である。S71〜S73の処理は、S51〜S53の処理と夫々同じである。S73の後、PMN21−0は、データを復元せしめるためのデータ復元コマンドを生成しPMN21−2に送信する(S74)。S74にて生成されるデータ復元コマンドは、パリティグループを指定するとともにデータ復元コマンドの宛て先を示す情報として、IPMNA=2とPMN_LBA0とを少なくとも含む。また、S74にて生成されるデータ復元コマンドは、復元対象がPMN21−0に記憶されるData0である旨を示す情報を含んでいてもよい。
PMN21−2は、データ復元コマンドを受信すると、Data1をリードさせてPMN21−2に送信させる、リードコマンドを生成してPMN21−1に送信する(S75)。そして、PMN21−2は、PMN_LBA0が示す位置からパリティPをリードする(S76)。
PMN21−1は、PMN21−2からリードコマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S77)。そして、PMN21−1は、Data1をPMN21−2に送信する(S78)。
PMN21−2は、PMN21−1からData1を受信すると、Data1およびパリティPからData0を演算し(S79)、演算したData0をCU14に送信する(S80)。また、PMN21−2は、演算されたData0をPMN21−0に送信する(S81)。
PMN21−0は、PMN21−2からData0を受信すると、PMN_LBA0が示す位置にData0を上書き形式でライトする(S82)。
なお、演算されたData0をPMN21−0がCU14に送信してもよい。
図17は、CU14からのリードコマンドの別の処理例(第3のリード処理)を示すシーケンス図である。S91〜S93の処理は、S51〜S53の処理と夫々同じである。S93の後、PMN21−0は、データ復元コマンドを生成しPMN21−1に送信する(S94)。S94にて生成されるデータ復元コマンドは、パリティグループを指定するとともにデータ復元コマンドの宛て先を示す情報として、IPMNA=1とPMN_LBA0とを少なくとも含む。
PMN21−1は、PMN21−0からデータ復元コマンドを受信すると、PMN_LBA0が示す位置からData1をリードする(S95)。そして、PMN21−1は、データ復元コマンドを生成しPMN21−2に送信する(S96)。S96にて生成されるデータ復元コマンドは、パリティグループを指定するとともにデータ復元コマンドの宛て先を示す情報として、IPMNA=2とPMN_LBA0とを少なくとも含む。また、S96にて生成されるデータ復元コマンドは、Data1を含む。また、S96にて生成されるデータ復元コマンドは、復元対象がPMN21−0に記憶されるData0である旨を含んで構成されてもよい。
PMN21−2は、PMN21−1からデータ復元コマンドを受信すると、PMN_LBA0が示す位置からパリティPをリードする(S97)。そして、PMN21−2は、Data1およびパリティPからData0を演算し(S98)、演算したData0をCU14に送信する(S99)。また、PMN21−2は、演算されたData0をPMN21−0に送信する(S100)。
PMN21−0は、PMN21−2からData0を受信すると、PMN_LBA0が示す位置にData0を上書き形式でライトする(S101)。
なお、演算されたData0をPMN21−0がCU14に送信してもよい。また、第1〜第3のリード処理に示すように、各LMN11は、Data0のリードに失敗した場合には、Data0に対応するパリティPに基づいてData0を復元する。Data0の復元は、同一のLMN11内のPMN21のうちの任意のPMN21が実行することができる。
以上述べたように、第1の実施形態によれば、各PMN21は、他のPMN21とともに複数のLMN11のうちの一を構成する。各PMN21は、サーバ3からライトされるData0を第1のPMN21に記憶し、Data0の冗長データであるパリティPを第1のPMN21と異なる第2のPMN21に記憶する。また、CU14からのコマンドは、1つのLMN11を指定するLMNAと、LMN11毎に割り当てられたメモリ空間内の位置を示すLMN_LBAとを含む。各LMN11は、LMNAが自LMN11を指定しない場合、コマンドを他のLMN11に転送し、LMNAが自LMN11を指定する場合、LMN_LBAに基づいて第1のPMN21内のData0の記憶位置を演算するとともにData0に対応するパリティPの第2のPMN11内の記憶位置を演算し、演算された各記憶位置にコマンドに応じたアクセスを行う。ストレージシステム1は、損失したデータをサーバ3による冗長データの管理を必要とすることなく復元することができるので、第1の実施形態によれば、冗長データの管理を外部が実行する場合に比べて、必要な外部リソースを少なくすることができる。また、各LMN11が冗長データの管理を行うので、冗長データの管理がストレージシステム1内で分散される。これにより、冗長データの管理が集中して実行される場合に比べてスケールアウトによる性能向上が期待できる。
なお、冗長データの記憶方式がRAID1である場合には、サーバ3からライトされるデータの複製が冗長データとして用いられる。
また、各LMN11は、コマンドがリードコマンドである場合、第1のPMN21からData0をリードし、リードに失敗した場合、第2のPMN21からパリティPをリードして、当該パリティPを用いてData0を復元する。これにより、ストレージシステム1は、サーバ3による冗長データの管理にかかる処理を必要とすることなく、サーバ3からライトされたデータの復元を実行することが可能となる。
また、各LMN11は、コマンドがライトコマンドである場合、第1のPMN21に記憶されるData0を更新し、第2のPMN21に記憶されるパリティPをData0の更新に応じて更新する。これにより、ストレージシステム1は、サーバ3による冗長データの管理にかかる処理を必要とすることなく、冗長データの管理を実行することが可能となる。
また、各PMN21は、LMN_LBAに基づいてIPMNAとPMN_LBAとを演算し、LMNAとIPMNAとの対が自PMN21を示す場合には、自PMN21が備えるNANDメモリ300に対してコマンドに応じたアクセスを行う。各PMN21は、LMNAとIPMNAとの対が自PMN21を示さない場合には、自PMN21に隣接した他のPMN21にコマンドを転送する。これにより、コマンドは、所望のデータが記憶されるPMN21に到達するように自動的に転送される。
また、各PMN21は、リードに失敗した場合またはライトを実行する場合には、第2のPMN21内におけるパリティPが記憶される記憶位置を演算することができる。図9の例に従えば、第2のPMN21内におけるパリティPの記憶位置は、第1のPMN21内におけるData0の記憶位置と同一である。このように、各PMN21は、冗長データの記憶位置を演算する機能を備えているので、サーバ3による冗長データの管理を不要とすることができる。
また、各LMN11を構成する第1のPMN21と第2のPMN21とは、夫々異なるブレード基盤22に実装されてもよい。これにより、1つのPMN21が故障した場合、故障したPMN21が実装されているブレード基盤22を交換することで、ストレージシステム1に記憶されたデータを失うことなくデータの引き継ぎが可能となる。
(第2の実施形態)
図18は、第2の実施形態に係るストレージシステムの構成例を示す図である。以降、第1の実施形態と同じ構成要素には、第1の実施形態と同一の符号を付して、重複する説明を省略する。
ストレージシステム4は、ネットワーク2を介して1以上のサーバ3に接続される。サーバ3は、データをストレージシステム4にライトしたりデータをストレージシステム4からリードしたりすることができる。即ち、サーバ3は、ストレージシステム4に対してホストとして機能する。なお、任意のコンピュータがストレージシステム4のホストとして機能することができる。サーバ3によるストレージシステム4へのI/Oアクセスは、ネットワーク2を介して実行される。
ストレージシステム4は、複数のメモリノード(MN)31と、1以上のコントロールユニット(CU)14と、を備える。ストレージシステム4は、複数のMN31にデータを分散して記憶することができる。図18の例においては、各MN31は、矩形格子の格子点に配置される。各CU14は、MN31の配列の外周部に配置される。格子点の座標を座標(x、y)で示し、格子点に配置されるMN31の位置情報は、当該格子点の座標と対応してノードアドレス(x、y)で示されるものとする。また、図18の例においては、左上隅に位置するMN31が原点のノードアドレス(0、0)を有し、各MN31を横方向(X方向)および縦方向(Y方向)に移動することで、ノードアドレス(NA)が整数値で増減する。なお、各CU14もNAを有していてもよい。例えば、原点のMN31に接続される2つのCU14のうち、X方向に接続されるCU14はNA(−1、0)を有し、Y方向に接続されるCU14はNA(0、−1)を有してもよい。以降、NA(xD、yD)で表されるMN31を、MN(xD、yD)と表記することがある。
なお、各MN31の配置の様態は、第1の実施形態における各LMN11の配置の様態と同様に、2次元の矩形格子の格子点に配置される様態だけに限定されない。また、簡単のために、MN31はLMN11を構成しないものとして説明する。なお、ノードアドレスをLMNAに、後述のデータアドレスをLMNAとLMN_LBAとの組合せに、夫々置き換えることによって、第1の実施形態のようにLMN11が構成される場合であっても第2の実施形態は適用可能である。
各MN31は、2以上の入出力ポート16を備える。各MN31は、2以上の異なる方向に隣接するMN31またはCU14と、入出力ポート16を介して接続される。図18においてMN(0、0)は、MN(1、0)、MN(0、1)、および2つのCU14と接続される。
第2の実施形態においては、サーバ3は、任意の文字列(キー)を用いてデータを指定することができる。サーバ3がストレージシステム4に対してストレージシステム4の内部で使用されるアドレス体系(後述のデータアドレスの表記方法)とは異なる独自のアドレス体系を用いてデータを指定する場合には、サーバ3が使用するアドレスをキーとして用いることもできる。キーは、CU14においてハッシュ化され、ハッシュ化されたキーは、MN31とそのMN31が備える記憶領域内の位置とを特定することができるアドレス(以降、データアドレス)に変換される。なお、ハッシュ化されたキーを単にキーと表記する。キーは、変換テーブルを用いてデータアドレスに変換される。
図19および図20は、変換テーブルの構成例を示す図である。変換テーブル343は、複数に分割されている。複数に分割された変換テーブル343は、木構造のリンク関係を構成する。最も下位の変換テーブル343(葉ノードの変換テーブル343)は、キーとデータアドレスとの対応関係が記録される。最も下位の変換テーブル343を除く変換テーブル343は、抽象化されたキーと子ノードの変換テーブル343を記憶するMN31のノードアドレスとの対応関係が記録される。上位側の変換テーブル343は、下位側の変換テーブル343よりもより抽象化されたキーが記録されている。上位側の変換テーブル343は、抽象化されたキー毎にエントリを備えることで、少ないエントリ数で多くのキーを管理することができる。下位側の変換テーブル343は、複数に分割されていることで、変換テーブル343毎のエントリ数が所定値以下に低減される。
図19および図20の例によれば、各変換テーブル343は、3階層の木構造のリンク関係で互いにリンクされている。根ノードの変換テーブル343を0階層目の変換テーブルとし、下位側に向かって階層値が整数値で増加するものとする。0階層目の変換テーブルは、最も抽象化されたキーと1階層の変換テーブルが記憶されるノードアドレスとの対応関係が記録される。抽象化とは、ここでは、キーを右にシフト演算することである。シフト演算によるシフト量が多いほどより抽象化される。1階層目の変換テーブルは、中程度に抽象化されたキーと2階層の変換テーブルが記憶されるノードアドレスとの対応関係が記録される。2階層目の変換テーブルは、まったく抽象化されていないキーとデータアドレスとの対応関係が記録される。以降、0階層目の変換テーブルをRoot K2K、0階層目の変換テーブルに記録されるキーを、ルートキー(Root key)と夫々表記することがある。また、1階層目の変換テーブルを2nd K2K、1階層目の変換テーブルに記録されるキーを、セカンドキー(2nd key)と夫々表記することがある。また、2階層目の変換テーブルをK2Aと表記することがある。
なお、データアドレスは、ストレージシステム4内のMN31のうちの各MN31と、MN31毎のメモリ空間内の位置と、の両方が特定可能な情報であれば任意である。例えば、データアドレスは、ノードアドレスと、MN31毎のNANDメモリ300内の位置を論理的または物理的に示すノード内アドレスと、を含んで構成される。ここでは、ノード内アドレスはMN31毎のNANDメモリ300内の位置を論理的に示すアドレスであって、MN31においてメタデータ323に基づいてNANDメモリ300内の物理的な位置に変換されるものとする。
図21は、変換テーブルが記憶されるMN31を示す図である。上述のように変換テーブルが階層化される場合には、Root K2Kを記憶するMN31にアクセスが集中することになる。第2の実施形態においては、Root K2Kを記憶するMN31に対するアクセスを分散させるために、Root K2Kが多重化され、各Root K2Kは夫々異なるMN31に記憶される。Root K2Kを記憶する複数のMN31は、夫々特定のMN31に予め定められているとともに固定されている。多重化された各Root K2Kは、互いに同期される。なお、同期の方式は任意である。所定のタイミングで全てのRoot K2KがロックされてRoot K2K間の同期処理がなされてもよいし、何れのRoot K2KもロックされないでRoot K2K間で同期処理がなされてもよい。本図の例によれば、MN(0、0)、MN(4、0)およびMN(0、2)に同一のRoot K2Kが記憶されている。
図22は、メモリ構成に着目した第2の実施形態のMN31の構成の一例を示す図である。MN31は、コントローラ200と、ストレージメモリとしてのNANDメモリ300とを備えている。コントローラ200は、CPU210およびRAM220を備える。
NANDメモリ300は、FW領域310、管理領域340、およびデータ領域330を備える。FW領域310は、CPU210に実行されるファームウェアプログラム311が予め記憶される。管理領域340は、自ノードアドレス341と、上位ノードアドレス342と、変換テーブル343と、メタデータ323と、を記憶する。自ノードアドレス341は、自MN31に割り当てられたノードアドレスである。上位ノードアドレス342は、自MN31が記憶する変換テーブル343の親ノードの変換テーブル343を記憶するMN31を示すノードアドレスである。
なお、本図は、2nd K2KまたはK2Aを記憶するMN31の構成を示している。Root K2Kを記憶するMN31は、Root K2Kは根ノードの変換テーブル343であるため、管理領域340に上位ノードアドレス342を記憶しない。また、変換テーブル343を記憶しないMN31は、管理領域340に上位ノードアドレス342を記憶しない。
図23は、CU14からのリードコマンドの第2の実施形態の処理例を示すシーケンス図である。ここでは、Root K2Kを記憶するMN31に符号31−0を付し、2nd K2Kを記憶するMN31に符号31−1を付し、K2Aを記憶するMN31に符号31−2を付すことによって、階層が異なる変換テーブルを記憶する複数のMN31を互いに区別する。
まず、CU14は、MN31−0を宛て先としてリードコマンドを送信する(S201)。なお、S201にて送信されるリードコマンドは、宛て先を示す情報としてのノードアドレスNA1と、keyとを含む。ノードアドレスNA1は、複数のMN31−0のうちの1つに割り当てられたノードアドレスである。また、S201にて送信されるリードコマンドは、送り元を示す情報としてノードアドレスNA0を含むが、ここでは省略する。ノードアドレスNA0はそのリードコマンドの送り元のCU14に割り当てられたノードアドレスである。なお、CU14が複数のMN31−0のうちの宛て先のMN31−0を1つ決定する方式は任意である。
なお、各MN31は、コマンドを受信した場合、宛て先のノードアドレスまたはデータアドレスと、自ノードアドレス341と、を比較することによって、自MN31がコマンドの宛て先であるか否かを判定する。宛て先がデータアドレスで示される場合には、各MN31は、宛て先のデータアドレスからノードアドレスを演算して、演算されたノードアドレスと自ノードアドレス341とを比較する。各MN31は、自身が宛て先ではない場合は、自身に隣接するMN31にそのコマンドを転送する。転送先のMN31は、ノードアドレスが物理的な配置位置を示す場合には、宛て先のノードアドレスと自ノードアドレス341との間の位置関係に応じて決定される。例えば、各MN31は、自身から宛て先のMN31までのコマンドの転送回数が最小となるように転送先のMN31を決定する。また、各MN31は、自身から宛て先のMN31までのコマンドの転送回数が最小となるMN31が故障していたりビジーであったりする場合、当該MN31を迂回するように転送先のMN31を決定する。
ノードアドレスNA1が割り当てられたMN31−0は、CU14から送信されたリードコマンドを受信すると、keyを用いてRoot K2Kを検索することによって、ノードアドレスNA2を取得する(S202)。そして、MN31−0は、宛て先をノードアドレスNA2に書き換えて、リードコマンドを送信する(S203)。
ノードアドレスNA2が割り当てられたMN31−1は、MN31−0から送信されたリードコマンドを受信すると、keyを用いて2nd K2Kを検索することによって、ノードアドレスNA3を取得する(S204)。そして、MN31−1は、宛て先をノードアドレスNA3に書き換えて、リードコマンドを送信する(S205)。
ノードアドレスNA3が割り当てられたMN31−2は、MN31−1から送信されたリードコマンドを受信すると、keyを用いてK2Aを検索することによって、データアドレスDAを取得する(S206)。そして、MN31−2は、宛て先をデータアドレスDAに書き換えて、リードコマンドを送信する(S207)。
データアドレスDAによって特定されるMN31は、MN31−2からリードコマンドを受信すると、データアドレスDAが示す位置からData0をリードする(S208)。そして、データアドレスDAによって特定されるMN31は、Data0をCU14を宛て先として送信する(S209)。
図24は、CU14からのライトコマンドの第2の実施形態の処理例を示すシーケンス図である。まず、CU14は、1つのMN31−0を宛て先としてライトコマンドを送信する(S211)。なお、S211にて送信されるライトコマンドは、宛て先を示す情報としてのノードアドレスNA1と、keyと、ライトデータData0とを含む。
ノードアドレスNA1が割り当てられたMN31−0は、CU14から送信されたライトコマンドを受信すると、keyを用いてRoot K2Kを検索することによって、ノードアドレスNA2を取得する(S212)。そして、MN31−0は、宛て先をノードアドレスNA2に書き換えて、ライトコマンドを送信する(S213)。
ノードアドレスNA2が割り当てられたMN31−1は、MN31−0から送信されたライトコマンドを受信すると、keyを用いて2nd K2Kを検索することによって、ノードアドレスNA3を取得する(S214)。そして、MN31−1は、宛て先をノードアドレスNA3に書き換えて、ライトコマンドを送信する(S215)。
ノードアドレスNA3が割り当てられたMN31−2は、MN31−1から送信されたライトコマンドを受信すると、keyを用いてK2Aを検索することによって、データアドレスDAを取得する(S216)。そして、MN31−2は、宛て先をデータアドレスDAに書き換えて、ライトコマンドを送信する(S217)。なお、S217にて送信されるライトコマンドは、送り元を示す情報としてのノードアドレスNA3を含んでいてもよい。
データアドレスDAによって特定されるMN31は、MN31−2から送信されたライトコマンドを受信すると、データアドレスDAが示す位置にData0をライトする(S218)。そして、データアドレスDAによって特定されるMN31は、Data0を正しく受け取った旨を示す情報であるACKを、S217のライトコマンドを送信したMN31−2を宛て先として送信する(S219)。
なお、データアドレスDAによって特定されるMN31は、書き込み先のノード内アドレスが変化したり、記憶容量が足りなくなったりした場合には、その旨の通知をS217のライトコマンドを送信したMN31−2を宛て先として送信することができる。通知を受信したMN31−2は、Data0を分割して、分割されたData0の一部をデータアドレスDAによって特定されるMN31に送り、他の部分を別のMN31に送るようにしてもよい。また、通知を受信したMN31−2は、Data0を別のMN31に送るようにしてもよい。通知を受信したMN31−2は、Data0の書き込み先のデータアドレスを変更した場合には、データアドレスの変更に応じてK2Aを更新する。また、MN31−2は、Data0を分割したり、新規のkeyが指定されたりした場合には、K2Aのエントリを新規作成することができる。エントリが新規作成された場合には、K2Aのエントリ数が増加することとなる。
図25は、変換テーブルのエントリ数が所定値に達した場合の処理を示すシーケンス図である。ここでは、K2Aのエントリが所定値に達した場合の処理を説明するが、2nd K2Kのエントリが所定値に達した場合においても同様の処理が実行される。
MN31−2は、K2Aのエントリ数が所定値に達すると(S221)、entry0を選択する(S222)。entry0は、K2Aを構成するエントリのうちの分割対象のエントリである。なお、分割対象のエントリは複数選択されてもよい。
続いて、MN31−2は、上位ノードアドレス342を参照することによって、ノードアドレスNA2を取得する(S223)。MN31−2は、分割依頼コマンドを生成しノードアドレスNA2を宛て先として送信する(S224)。S224において生成される分割依頼コマンドは、entry0を含む。
ノードアドレスNA2が割り当てられたMN31−1は、分割依頼コマンドを受信すると、新たにK2Aを記憶させるMN31を決定する(S225)。なお、新たにK2Aを記憶させるMN31を決定する方式は任意である。例えば、変換テーブルを記憶しないMN31のうちから新たにK2Aを記憶させるMN31を決定する。決定されたMN31のノードアドレスをNA5とする。
続いて、MN31−1は、entry0からなるK2Aを新規に生成する(S226)。そして、MN31−1は、ノードアドレスNA5が割り当てられたMN31の管理領域340に、上位ノードアドレス342としてノードアドレスNA2を、変換テーブル343としてS226において生成されたK2Aを、夫々記憶させる、登録コマンドを生成し送信する(S227)。
続いて、MN31−1は、2nd K2Kを更新する(S228)。そして、ノードアドレスNA5が割り当てられたMN31は、ノードアドレスNA5を上位ノードアドレス342として、送信されてきたK2Aを変換テーブル343として、自身が備える管理領域340に夫々格納する(S229)。以降、ノードアドレスNA5が割り当てられたMN31は、K2Aを記憶するMN31として機能する。
このように、変換テーブル343のエントリが溢れた場合には、溢れた変換テーブル343のうちの一部が分割されて夫々異なるMN31に記憶される。なお、溢れた変換テーブル343の分割は、溢れた変換テーブル343の親ノードの変換テーブル343が実行してもよい。なお、2nd K2Kは、S228においてエントリがさらに追加される。
また、内部ノードの変換テーブル343(ここでは2nd K2K)が溢れた場合においても、K2Aが溢れた場合と同様に、溢れた2nd K2Kが分割されて夫々異なるMN31に記憶される。内部ノードの変換テーブル343が分割されると、当該分割された変換テーブル343の子ノードの変換テーブル343を記憶するMN31に設定された上位ノードアドレス342が変更される必要がある。上位ノードアドレス342の変更は、例えば、分割された変換テーブル343を記憶するMN31が、分割された変換テーブル343の子ノードの変換テーブル343に、管理領域340内の情報を更新させる登録更新コマンドを送信することによって実行される。また、上位ノードアドレス342の変更は、分割された変換テーブル343の親ノードの変換テーブル343を記憶するMN31が、分割された変換テーブル343の子ノードの変換テーブル343に、登録更新コマンドを送信することによって実行されてもよい。
図26は、リード処理の実行時におけるリードコマンドの転送経路を示す図である。サーバ3からデータリードのリクエストが入力されると、CU14はMN(4、0)を宛て先とするリードコマンドを生成してMN(3、0)に転送する。MN(3、0)が受信したリードコマンドは、MN(4、0)に転送される。MN(4、0)は、リードコマンドに含まれるキーに基づいて2nd K2Kを記憶するMN(2、1)を特定する。そして、MN(4、0)は、リードコマンドの宛て先をMN(2、1)に書き換えてMN(3、0)に転送する。MN(3、0)が再び受信したリードコマンドは、MN(2、0)を経由してMN(2、1)に転送される。MN(2、1)は、リードコマンドに含まれるキーに基づいてK2Aを記憶するMN(3、2)を特定する。そして、MN(2、1)は、リードコマンドの宛て先をMN(3、2)に書き換えてMN(2、2)に転送する。MN(2、2)が受信したリードコマンドは、MN(3、2)に転送される。MN(3、2)は、リードコマンドに含まれるキーに基づいてデータアドレスを特定する。そして、MN(3、2)は、リードコマンドの宛て先を、特定したデータアドレスに書き換えてMN(4、2)に転送する。MN(4、2)が受信したリードコマンドは、MN(5、2)に転送される。MN(5、2)は、データアドレスが示す位置からデータをリードする。
図27は、リード処理の実行時におけるデータの転送経路を示す図である。MN(5、2)は、リードしたデータをリードコマンドの送り元のCU14を宛て先としてMN(4、2)に転送する。MN(4、2)が受信したデータは、MN(3、2)、MN(3、1)、およびMN(3、0)をこの順番で経由して、リードコマンドの送り元のCU14に転送される。CU14は、受信したデータをサーバ3に送信する。リードしたデータの転送経路は、リードコマンドの転送経路をたどらなくてもよく、また、MN(4、0)や2nd K2Kを記憶するMN(2、1)やK2Aを記憶するMN(3、2)を経由しなくてもよい。また、MN(5、2)は、リードコマンドの送り元ではないCU14を宛先としてリードしたデータを送信してもよい。
ライト処理の実行時におけるライトコマンドの転送経路は、リードコマンドの転送経路と同様であるので、説明を省略する。
図28は、ライト処理の実行時におけるACKの転送経路を示す図である。図示するように、MN(5、2)は、データアドレスが示す位置にデータをライトした後、MN(3、2)を宛て先とするACKを生成してMN(4、2)に転送する。MN(4、2)が受信したACKは、MN(3、2)に転送される。あるいは、MN(5、2)は、CU14を宛先としてACKを送信してもよく、このときにはACKはMN(3、2)を経由しなくてもよい。
以上述べたように、第2の実施形態によれば、キーとデータアドレスとの対応関係が記録される変換テーブル343が、木構造のリンク関係を構成する複数の変換テーブル343に分割され、分割された複数の変換テーブル343は、夫々異なるMN31に記憶される。変換テーブル343を記憶する各MN31は、自MN31を宛て先とするコマンドを受信すると、コマンドに含まれるキーを用いて変換テーブル343を検索し、検索されたアドレスを宛て先としてコマンドを転送する。ここで、根ノードの変換テーブル343は、複数に複製されて、夫々異なるMN31に記憶される。CU14は、根ノードの変換テーブル343を記憶するMN31−0のうちの1つを最初の宛て先としてコマンドを送信する。これにより、サーバ3はキーを指定する一回のI/Oアクセスでストレージシステム4に記憶されるデータにアクセスすることができる。即ち、サーバ3がストレージシステム4に対し、キーをデータアドレスに変換するためのI/Oアクセスを行った後に変換されたデータアドレスにI/Oアクセスする場合に比べて、サーバ3とストレージシステム4との間のI/Oアクセスの回数を低減することができる。即ち、第2の実施形態によれば、ネットワーク2の負荷が低減されるので、必要な外部リソースを少なくすることができる。また、キーからデータアドレスへの変換が分散されて実行されるので、変換が集中して実行される場合に比べてスケールアウトによる性能向上が期待できる。
また、第2の実施形態によれば、根ノードの変換テーブル343が多重化されて夫々異なるMN31に記憶されるので、根ノードの変換テーブル343が多重化されていない場合に比べて根ノードの変換テーブル343を記憶するMN31−0に対するアクセスを分散させることができる。したがって、根ノードの変換テーブル343を記憶するMN31−0にアクセスが集中することによる性能低下を抑制することができる。また、木構造のリンク関係を有する複数の変換テーブル343が夫々異なるMN31に分散して記憶されるため、データアドレスを検索する処理が複数のMN31によって分散して実行される。このため、データアドレスの検索能力が向上する。
(第3の実施形態)
例えばB木のように、階層の深さが変化する木構造が知られている。木構造の根ノードのオーダー(オーダーはエントリ数に等しい)が所定値に達した場合には、根ノードが分割されて階層の深さが一段分だけ増加する。第3の実施形態によれば、変換テーブルが複数に階層化されるとともに、変換テーブルの階層の深さが可変に構成されている。なお、第3の実施形態のストレージシステムが備える構成要素は、検索テーブルの構成を除いて第2の実施形態と同様である。ここでは、第2の実施形態の構成要素と同一の名称および符号を用いて説明する。
図29は、第3の実施形態の変換テーブルの構成例を示す図である。第3の実施形態によれば、特定のMN31に、Root K2Kを記憶するMN31−0のノードアドレスを示すルートポインタ(Root pointer)のリストが記憶される。ルートポインタのリストは、複数に複製され、夫々異なるMN31に記憶される。ルートポインタを記憶する複数のMN31は、夫々特定のMN31に予め定められているとともに固定されている。なお、Root K2Kは多重化され、各Root K2Kは夫々異なるMN31(MN31−0)に記憶される。また、第3の実施形態においては、MN31−0は、ルートポインタを記憶するMN31のうちの少なくとも1つのノードアドレスである上位ノードアドレス342を管理領域340に記憶する。
図30は、Root K2Kのエントリ数が所定値に達した場合の処理を示すシーケンス図である。ここでは、ルートポインタを記憶するMN31に符号31−3を付すことによって、変換テーブルを記憶するMN31および変換テーブルを記憶しないMN31と区別する。
まず、MN31−0は、Root K2Kのエントリ数が所定値を越えると(S301)、上位ノードアドレス342を参照することによって、ノードアドレスNA6を取得する(S302)。MN31−0は、ノードアドレスNA6を宛て先を示す情報とする分割依頼コマンドを生成し送信する(S303)。S303において生成される分割依頼コマンドは、Root K2Kを含む。ノードアドレスNA6は、MN31−3のうちの1つに割り当てられたノードアドレスである。なお、ノードアドレスNA6が割り当てられたMN31−3が記憶するルートポインタは、この時点においてはノードアドレスNA1を示している。
ノードアドレスNA6が割り当てられたMN31−3は、分割依頼コマンドを受信すると、新規にRoot K2Kを記憶させるMN31と新規に2nd K2Kを記憶させるMN31とを夫々決定する(S304)。新規にRoot K2Kを記憶させるMN31のノードアドレスをNA7、新規に2nd K2Kを記憶させるMN31のノードアドレスをNA8とする。
続いて、MN31−3は、Root K2Kを2つの2nd K2Kに分割し(S305)、当該分割を反映したRoot K2Kを新規に生成する(S306)。そして、MN31−3は、ノードアドレスNA7が割り当てられたMN31およびノードアドレスNA8が割り当てられたMN31を宛て先として、夫々登録コマンドを送信する(S307、S308)。また、MN31−3は、MN31−0を宛て先として登録更新コマンドを送信する(S309)。ノードアドレスNA7が割り当てられたMN31に送信される登録コマンドは、上位ノードアドレス342としてノードアドレスNA6を、変換テーブル343としてS306において新規に生成されたRoot K2Kを、夫々記憶させるコマンドである。ノードアドレスNA88が割り当てられたMN31に送信される登録コマンドは、上位ノードアドレス342としてノードアドレスNA7を、変換テーブル343としてS305において生成された2つの2nd K2Kのうちの一方を、夫々記憶させるコマンドである。S309にて生成される登録更新コマンドは、上位ノードアドレス342をノードアドレスNA7に、変換テーブル343をS305において生成された2つの2nd K2Kのうちの他方に、夫々更新させるコマンドである。
続いて、MN31−3は、Root pointerをノードアドレスNA1からノードアドレスNA7に更新する(S310)。
ノードアドレスNA7が割り当てられたMN31は、登録コマンドを受信すると、ノードアドレスNA6を上位ノードアドレス342として、送信されてきたRoot K2Kを変換テーブル343として、自身が備える管理領域340に夫々格納する(S311)。以降、ノードアドレスNA7が割り当てられたMN31は、Root K2Kを記憶するMN31として機能する。
ノードアドレスNA8が割り当てられたMN31は、登録コマンドを受信すると、ノードアドレスNA7を上位ノードアドレス342として、送信されてきた2nd K2Kを変換テーブル343として、自身が備える管理領域340に夫々格納する(S312)。以降、ノードアドレスNA8が割り当てられたMN31は、2nd K2Kを記憶するMN31として機能する。
MN31−0は、登録更新コマンドを受信すると、上位ノードアドレス342をノードアドレスNA6からノードアドレスNA7に、変換テーブル343をRoot K2Kから2nd K2Kに、夫々更新する(S313)。MN31−0は、以降、2nd K2Kを記憶するMN31として機能する。
このように、第3の実施形態によれば、根ノードの変換テーブル343を記憶するMN31−0を示すRoot pointerが多重化されて夫々異なるMN31−3に記憶される。これにより、ストレージシステム4は、B木のように階層数が変化する木構造のリンク関係を有する複数の変換テーブル343を用いてデータアドレスの検索を行うことができるようになる。また、Root pointerは多重化されて夫々異なるMN31−3に記憶されるので、Root pointerを記憶するMN31−3に対するアクセスを分散させることができるので、MN31−3に対してアクセスが集中することによる性能低下を抑制することができる。
また、MN31−3は、Root K2Kのエントリ数が所定数に達したとき、Root K2Kを複数の2nd K2Kに分割するとともに新たなRoot K2Kを生成し、分割された夫々の2nd K2Kと新たに生成されたRoot K2Kとを夫々異なるMN31に記憶させる。これにより、ストレージシステム4は、複数の変換テーブル343が構成する木構造の階層数を変更することが可能となる。
なお、第2の実施形態または第3の実施形態のストレージシステム4は、同一階層の変換テーブル343間でエントリの受け渡しが可能に構成されてもよい。例えば、i階層目の変換テーブル343を記憶するMN21は、親ノードの変換テーブル343を記憶するMN21にエントリを送信する。エントリを受信したMN21は、自MN21が記憶する変換テーブル343の子ノードの変換テーブル343を記憶する複数のMN21のうちから1つを選択して、選択したMN21に登録更新コマンドを送信してエントリを追加させる。また、i階層目の変換テーブル343を記憶するMN21は、子ノードの複数の変換テーブル343を監視して、1つの子ノードの変換テーブル343からエントリを削除して、他の子ノードの変換テーブル343に前記削除したエントリを追加してもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1,4 ストレージシステム、2 ネットワーク、3 サーバ、11 論理メモリノード、16 入出力ポート、21 物理メモリノード、22 ブレード基盤、31 メモリノード、324 変換アルゴリズム、342 上位ノードアドレス、343 変換テーブル。

Claims (7)

  1. 夫々2以上の異なる方向に相互に接続される複数の物理メモリノードと、
    外部からの要求に応じてコマンドを発行するコントロールユニットと、
    を備え、
    各物理メモリノードは、他の物理メモリノードとともに複数の論理メモリノードのうちの一を構成し、
    各論理メモリノードは、外部からライトされる第1データを第1の物理メモリノードに記憶し、前記第1データの冗長データである第2データを前記第1の物理メモリノードと異なる第2の物理メモリノードに記憶し、
    前記コマンドは、前記複数の論理メモリノードのうちの一を指定する第1アドレスと、論理メモリノード毎に割り当てられたメモリ空間内の前記第1データの記憶位置を指定する第2アドレスと、を備え、
    各論理メモリノードは、前記第1アドレスが自論理メモリノードを指定しない場合、前記コマンドを他の論理メモリノードに転送し、前記第1アドレスが自論理メモリノードを指定する場合、前記第2アドレスに基づいて前記第1の物理メモリノード内の前記第1データの第1の記憶位置を演算するとともに前記第1の記憶位置に記憶される第1データに対応する第2データの前記第2の物理メモリノード内の第2の記憶位置を演算し、演算された各記憶位置に前記コマンドに応じたアクセスを行う、
    ことを特徴とするストレージシステム。
  2. 各論理メモリノードは、前記コマンドがリードコマンドである場合、前記第1の記憶位置から前記第1データをリードし、リードに失敗した場合、前記第2の記憶位置から前記第2データをリードし、前記リードされた第2データを用いて前記リードに失敗した第1データを復元する、
    ことを特徴とする請求項1に記載のストレージシステム。
  3. 各論理メモリノードは、前記コマンドがライトコマンドである場合、前記第1の記憶位置に記憶される前記第1データを更新するとともに、前記第2の記憶位置に記憶される前記第2データを前記第1データの更新に応じて更新する、
    ことを特徴とする請求項1に記載のストレージシステム。
  4. 各物理メモリノードは、前記第2アドレスに基づいて前記第1の記憶位置を演算し、前記第1アドレスと前記第1の記憶位置との対が自物理メモリノードを示す場合には、前記演算された第1の記憶位置に対して前記コマンドに応じたアクセスを行い、前記第1アドレスと前記第1の記憶位置との対が自物理メモリノードを示さない場合には、自物理メモリノードに隣接された他の物理メモリノードに前記コマンドを転送する、
    ことを特徴とする請求項1に記載のストレージシステム。
  5. 各物理メモリノードは、前記第1アドレスと前記第1の記憶位置との対が自物理メモリノードを示し、かつ、前記コマンドがリードコマンドである場合、前記第1の記憶位置から前記第1データをリードし、リードに失敗した場合、前記第2の記憶位置を演算し、自物理メモリノードと同一の論理メモリノードに属する第2の物理メモリノード内の前記第2の記憶位置から前記第2データをリードし、前記リードされた第2データを用いて前記リードに失敗した第1データを復元する、
    ことを特徴とする請求項4に記載のストレージシステム。
  6. 各物理メモリノードは、前記第1アドレスと前記第1の記憶位置との対が自物理メモリノードを示し、かつ、前記コマンドがライトコマンドである場合、前記第1の記憶位置に記憶される前記第1データを更新し、前記第2の記憶位置を演算し、自物理メモリノードと同一の論理メモリノードに属する第2の物理メモリノード内の前記第2の記憶位置に記憶される前記第2データを前記第1データの更新に応じて更新する、
    ことを特徴とする請求項4に記載のストレージシステム。
  7. 着脱可能なブレード基盤を複数備え、
    各論理メモリノードを構成する第1の物理メモリノードと第2の物理メモリノードとは、夫々異なるブレード基盤に実装される、
    ことを特徴とする請求項1〜6の何れか一項に記載のストレージシステム。
JP2013196935A 2013-09-24 2013-09-24 ストレージシステム Expired - Fee Related JP5902137B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2013196935A JP5902137B2 (ja) 2013-09-24 2013-09-24 ストレージシステム
TW103105909A TWI540589B (zh) 2013-09-24 2014-02-21 Storage system
KR1020140022939A KR101536070B1 (ko) 2013-09-24 2014-02-26 스토리지 시스템
CN201410065889.1A CN104461376B (zh) 2013-09-24 2014-02-26 存储***
US14/205,858 US9658802B2 (en) 2013-09-24 2014-03-12 Storage system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013196935A JP5902137B2 (ja) 2013-09-24 2013-09-24 ストレージシステム

Publications (2)

Publication Number Publication Date
JP2015064653A JP2015064653A (ja) 2015-04-09
JP5902137B2 true JP5902137B2 (ja) 2016-04-13

Family

ID=52692074

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013196935A Expired - Fee Related JP5902137B2 (ja) 2013-09-24 2013-09-24 ストレージシステム

Country Status (5)

Country Link
US (1) US9658802B2 (ja)
JP (1) JP5902137B2 (ja)
KR (1) KR101536070B1 (ja)
CN (1) CN104461376B (ja)
TW (1) TWI540589B (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102282006B1 (ko) * 2014-08-19 2021-07-28 삼성전자주식회사 컴퓨터 장치 및 저장 장치
JP6342351B2 (ja) 2015-03-02 2018-06-13 東芝メモリ株式会社 ストレージシステム
US9696935B2 (en) 2015-04-24 2017-07-04 Kabushiki Kaisha Toshiba Storage device that secures a block for a stream or namespace and system having the storage device
US20160321010A1 (en) 2015-04-28 2016-11-03 Kabushiki Kaisha Toshiba Storage system having a host directly manage physical data locations of storage device
JP2017045405A (ja) * 2015-08-28 2017-03-02 株式会社東芝 メモリシステム
US9940028B2 (en) * 2015-11-13 2018-04-10 Samsung Electronics Co., Ltd Multimode storage device
US9946596B2 (en) 2016-01-29 2018-04-17 Toshiba Memory Corporation Global error recovery system
US10101939B2 (en) 2016-03-09 2018-10-16 Toshiba Memory Corporation Storage system having a host that manages physical data locations of a storage device
CN106126114B (zh) * 2016-06-15 2018-09-07 武汉卡码酷科技有限公司 一种有查询功能的存储器及其查询方法
DE102016225308A1 (de) * 2016-12-16 2018-06-21 Robert Bosch Gmbh Verfahren und Vorrichtung zum Kalibrieren eines Steuergerätes
JP2021023680A (ja) * 2019-08-07 2021-02-22 ソニー・オリンパスメディカルソリューションズ株式会社 信号処理デバイス
CN114550775A (zh) * 2020-11-24 2022-05-27 瑞昱半导体股份有限公司 内存控制器及其控制方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3237736B2 (ja) * 1993-09-07 2001-12-10 ヒュンダイ エレクトロニクス アメリカ データ記憶装置のマトリックス構造
NO315959B1 (no) * 2002-04-16 2003-11-17 Thin Film Electronics Asa Fremgangsmåter til lagring av data i et ikke-flyktig minne
US7007027B2 (en) 2002-12-02 2006-02-28 Microsoft Corporation Algorithm for tree traversals using left links
JP2004272527A (ja) * 2003-03-07 2004-09-30 Hitachi Ltd ディスクアレイ装置および障害回復制御方法
CN101095058A (zh) * 2004-09-16 2007-12-26 以色列阿尔卡特电信公司 在使用标签交换协议的环形拓扑网络中保护多播业务的有效保护机制
KR101331569B1 (ko) * 2005-04-21 2013-11-21 바이올린 메모리 인코포레이티드 상호접속 시스템
US20070083723A1 (en) * 2005-09-23 2007-04-12 Dey Jayanta K Highly-available blade-based distributed computing system
JP4224077B2 (ja) * 2006-04-04 2009-02-12 株式会社東芝 ストレージシステム
JP5087870B2 (ja) * 2006-07-12 2012-12-05 富士通セミコンダクター株式会社 半導体メモリ、コントローラおよび半導体メモリの動作方法
US8397011B2 (en) 2007-10-05 2013-03-12 Joseph Ashwood Scalable mass data storage device
US8549092B2 (en) * 2009-02-19 2013-10-01 Micron Technology, Inc. Memory network methods, apparatus, and systems
JP2011086077A (ja) * 2009-10-14 2011-04-28 Nec Corp ストレージ装置、ストレージシステム、ディスクアレイ制御方法、及びプログラム
JP5238791B2 (ja) * 2010-11-10 2013-07-17 株式会社東芝 転送機能を有するメモリノードを相互に接続したストレージ装置及びデータ処理方法
US8788788B2 (en) * 2011-08-11 2014-07-22 Pure Storage, Inc. Logical sector mapping in a flash storage array
JP5773154B2 (ja) 2011-09-05 2015-09-02 コニカミノルタ株式会社 画像形成入力装置および画像形成装置
US8341342B1 (en) * 2012-03-23 2012-12-25 DSSD, Inc. Storage system with incremental multi-dimensional RAID

Also Published As

Publication number Publication date
TWI540589B (zh) 2016-07-01
KR20150033507A (ko) 2015-04-01
CN104461376B (zh) 2017-09-22
US9658802B2 (en) 2017-05-23
CN104461376A (zh) 2015-03-25
KR101536070B1 (ko) 2015-07-24
JP2015064653A (ja) 2015-04-09
TW201513129A (zh) 2015-04-01
US20150089179A1 (en) 2015-03-26

Similar Documents

Publication Publication Date Title
JP5902137B2 (ja) ストレージシステム
US11327834B2 (en) Efficient computation of parity data in storage system implementing data striping
US10990479B2 (en) Efficient packing of compressed data in storage system implementing data striping
JP7374939B2 (ja) 分散型ストレージシステム
US11385999B2 (en) Efficient scaling and improved bandwidth of storage system
US11182258B2 (en) Data rebuild using dynamic peer work allocation
CN107422983B (zh) 用于租户感知存储共享平台的方法和装置
US10261902B2 (en) Parallel processing of a series of data units for writing
US20200097363A1 (en) Automatic prefill of a storage system with conditioning of raid stripes
US20180024964A1 (en) Disaggregated compute resources and storage resources in a storage system
US20190235777A1 (en) Redundant storage system
CN103067433B (zh) 一种分布式存储***的数据迁移方法、设备和***
US11494103B2 (en) Memory-efficient processing of RAID metadata bitmaps
TW201508775A (zh) 儲存元件及資料處理方法
US11579790B1 (en) Servicing input/output (‘I/O’) operations during data migration
US20170123674A1 (en) Storage system that includes a plurality of routing circuits and a plurality of node modules connected thereto
JP6070357B2 (ja) ストレージ装置
US9891992B2 (en) Information processing apparatus, information processing method, storage system and non-transitory computer readable storage media
CN109840051B (zh) 一种存储***的数据存储方法及装置
KR102133316B1 (ko) 메모리 시스템 관리
US20200334103A1 (en) Storage system, drive housing thereof, and parity calculation method
US20170111286A1 (en) Storage system that includes a plurality of routing circuits and a plurality of node modules connected thereto
US11163492B2 (en) Media hiccup management in a storage system
US10776202B1 (en) Drive, blade, or data shard decommission via RAID geometry shrinkage
JP2020047105A (ja) ストレージ制御装置および障害トラックの回復方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150812

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7421

Effective date: 20151102

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151215

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160119

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160309

R151 Written notification of patent or utility model registration

Ref document number: 5902137

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees