JP6074056B2 - 計算機システムおよびデータ制御方法 - Google Patents

計算機システムおよびデータ制御方法 Download PDF

Info

Publication number
JP6074056B2
JP6074056B2 JP2015546206A JP2015546206A JP6074056B2 JP 6074056 B2 JP6074056 B2 JP 6074056B2 JP 2015546206 A JP2015546206 A JP 2015546206A JP 2015546206 A JP2015546206 A JP 2015546206A JP 6074056 B2 JP6074056 B2 JP 6074056B2
Authority
JP
Japan
Prior art keywords
storage
server
request
processor
memory
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
JP2015546206A
Other languages
English (en)
Other versions
JPWO2015068239A1 (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
Application granted granted Critical
Publication of JP6074056B2 publication Critical patent/JP6074056B2/ja
Publication of JPWO2015068239A1 publication Critical patent/JPWO2015068239A1/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
    • 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]
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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
    • G06F3/0613Improving I/O performance in relation to throughput
    • 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

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)に関する。
一般に、サーバ装置とストレージ装置とを有する計算機システムでは、異なるベンダーによって製造されたサーバ装置とストレージ装置とを、通信ネットワーク(例えばFC(Fibre Channel)ネットワーク或いはIP(Internet Protocol))を介して接続することで構成する。サーバ装置からのI/Oの処理に際して、ストレージ装置内に複数搭載されているMP(Micro Processor)(データ格納処理を実施するプロセッサ)及び各MPが利用するメモリに偏りが発生するとI/O性能が思うように向上しない。これに対し、ストレージのコントローラが動的に処理実行MPを変更できる技術がある(例えば特許文献1参照)。
又、複数サーバ装置毎にストレージ装置を接続する構成とすると、各サーバ装置のアクセス範囲が限定されるために、情報が分散して管理コストの増加及び利便性の低下が生じる。また、サーバ装置のメンテナンスやストレージ容量の追加などの管理タスクによって、特定の格納データにアクセスできない状態が発生する。そのため通信ネットワークに、ネットワークスイッチ(例えばFCスイッチ或いはルータ)を介在させ、サーバ装置からストレージ装置に対するI/Oは、ネットワークスイッチデバイスによるルーティングにより複数のサーバを同じストレージ装置に接続することが可能となる。複数のサーバ装置でストレージ装置を共有することで、どのサーバ装置からも同じデータにアクセス可能となり、例えば、サーバ装置の故障時も他のサーバ装置からデータにアクセスできる。また、ストレージ容量の一元管理などが可能となり、管理コスト及び利便性の面で有益である。
米国公報2008/0263190号公報
サーバ及びストレージそれぞれの性能向上及び、フラッシュメモリ記憶装置のストレージ利用によるバックエンドの広帯域化に合わせて、サーバとストレージ間の接続帯域も、より広帯域化が必要となってきている。また、サーバ性能向上に合わせて、ストレージからのレスポンタイム向上することも課題である。この解決策としてFCのポート数増加や次世代品の利用などがあるが、高コストとなってしまう。より広帯域、低レイテンシを低コストで実現することを目指すと、バス接続のようなシンプルでより太く接続できる方法が適している。よって、サーバとストレージをネットワークスイッチのフォワード機能に頼らずに直接接続(直結)し、一体型シャーシ構成とすることで、帯域とレイテンシの課題解決を狙う。又、本構成においてストレージMPの負荷低減を図りつつMP間の負荷均等化も考慮する。更に、サーバとストレージが直結される構成をとりつつ、システムの柔軟性、拡張性を保持することを課題とする。
本発明の目的は、サーバとストレージ間のより密接な接続を実現しつつ計算システムの柔軟性又は拡張性の低下を軽減することにある。
計算機システムが、第1のストレージ制御モジュールと、少なくとも1のサーバモジュールとを有する。第1のストレージ制御モジュールは、複数のストレージプロセッサを有する。各サーバモジュールが、サーバプロセッサと、そのサーバプロセッサと複数のストレージプロセッサのうちの少なくとも2のストレージプロセッサとに接続するサーバインタフェースデバイス(サーバI/F)とを有する。少なくとも1のサーバモジュールのうちのいずれか1のサーバである発行サーバのサーバプロセッサが、I/Oリクエストを発行する。発行サーバのサーバI/Fは、発行サーバのサーバプロセッサからI/Oリクエストを受け、受けたI/Oリクエストの発行サーバ識別情報と当該I/Oリクエストの宛先ストレージ記憶領域の識別情報と当該宛先ストレージ記憶領域を担当する前記ストレージプロセッサの識別情報とを対応付ける振り分け情報を参照することによってストレージプロセッサの特定し、特定されたストレージプロセッサに前記I/Oリクエストに基づくコマンドを送出する。
サーバとストレージ間のより密接な接続を実現しつつ計算システムの柔軟性又は拡張性の低下を軽減することができる。
実施例1に係る計算機システムの構成を示す。 SVIFの構成を示す。 発行元ID及び発行先IDの構成を示す。 MP検索テーブルの構成を示す。 初期化処理の流れを示す。 実施例1に係るライト処理の流れを示す。 実施例1に係るリード処理の流れを示す。 実施例2に係る計算機システムの構成を示す。 実施例2に係るストレージメモリの構成を示す。 実施例2に係るライト処理の流れを示す。 キャッシュ判定結果処理の詳細を示す。 実施例2に係るリード処理の流れを示す。 実施例3に係る計算機システムの構成を示す。 BEIF部のポート番号とMPの番号との対応付けの第1及び第2の例を示す。
以下、幾つかの実施例を説明する。
以下の説明では、「×××テーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××テーブル」を「×××情報」と呼ぶことができる。
また、以下の説明では、種々の対象(例えば、筐体、ポート)の識別情報として、番号が使用されるが、番号に代えて又は加えて他種の識別情報が使用されてもよい。
また、以下の説明では、「VOL」は、論理ボリュームの略であり、論理的な記憶デバイスである。VOLは、実体的なVOL(RVOL)であってもよいし、仮想的なVOL(VVOL)であってもよい。また、VOLは、そのVOLを提供するストレージ装置に接続されている外部の装置(例えばサーバ装置)に提供されるオンラインVOLと、外部の装置には提供されない(外部の装置からは認識されない)オフラインVOLとがあってよい。「RVOL」は、そのRVOLを有するストレージ装置が有する物理的な記憶資源(例えば、複数のPDEVで構成されたRAID(Redundant Array of Independent
(or Inexpensive) Disks)グループ)に基づくVOLである。「VVOL」としては、例えば、そのVVOLを有するストレージ装置に接続されている外部のストレージ装置の記憶資源(例えばVOL)に基づいておりストレージ仮想化技術に従うVOLである外部接続VOL(EVOL)と、複数の仮想ページ(仮想的な記憶領域)で構成されており容量仮想化技術(典型的にはThin Provisioning)に従うVOL(TPVOL)と、オリジナルのVOLのスナップショットとして提供されるスナップショットVOLとがあってよい。TPVOLは、典型的にはオンラインVOLである。スナップショットVOLは、RVOLであってもよい。「PDEV」は、不揮発性の物理的な記憶デバイスの略である。複数のPDEVで複数のRAIDグループが構成されてよい。RAIDグループはパリティグループと呼ばれてもよい。「プール」は、論理的な記憶領域(例えば複数のプールVOLの集合)であり、用途ごとに用意されてよい。例えば、プールとして、TPプールと、スナップショットプールとがあってよい。TPプールは、複数の実ページ(実体的な記憶領域)で構成された記憶領域である。TPプールからTPVOLの仮想ページに実ページが割り当てられてよい。スナップショットプールは、オリジナルのVOLから退避されたデータが格納される記憶領域でよい。「プールVOL」は、プールの構成要素となるVOLである。プールVOLは、RVOLであってもよいしEVOLであってもよい。プールVOLは、典型的にはオフラインVOLである。
図1は、実施例1に係る計算機システムの構成を示す。
まず、実施例1の概要を説明する。
計算機システムは、サーバモジュール(以下、サーバ)111と、サーバ111にバスで接続されたストレージ制御モジュール113とを有する。本実施例においてはサーバモジュールは複数存在し、全てがストレージ制御モジュールと接続されている。ストレージ制御モジュール113が、複数のMP(Micro Processor)141を有する。また、複数のサーバ111のそれぞれは、ストレージ制御モジュール113内の複数コントローラ131のそれぞれと接続され、1つのコントローラ131(例えばCTL A)へのパスと、別のコントローラ131(例えばCTL B)への冗長パスとを確保してもよい。各サーバ111が、I/O(Input/Output)リクエストを発行するCPU(Central Processing Unit)122と、通信インタフェース回路であるサーバI/F(以下、SVIF)123とを有する。SVIF123が、発行されたI/Oリクエストに基づきMP検索テーブル(MP検索用の管理テーブル)を使って複数のMP141からターゲットとなるMP141を特定し、そのターゲットMP141に対するI/OコマンドをターゲットMP141に対して発行する。つまり、SVIF123が、I/Oリクエスト毎にI/Oコマンドを処理するMP141を指定する。そのI/Oコマンドは、指定されたターゲットMP141により処理される。これにより、SVIF123は、冗長パスを含めた複数パスのうち使用するパス、及び、そのパスの先にあるI/Oコマンドを処理するターゲットMP141までを指定し、I/Oコマンドを送ることで、複数のサーバ111とストレージ制御モジュール113をネットワークスイッチ無しに接続することができ、且つ、計算機システムの柔軟性又は拡張性の低下を軽減することができる。なお、I/Oコマンドに従うI/O対象データの転送は、DMA(Direct Memory Access)により行われる。また、I/Oコマンド本体もDMAによって転送されてもよい。DMAにより、サーバメモリ121からストレージメモリ143へデータ又はコマンドが直接転送される。
以下、実施例1を詳細に説明する。
計算機システムが、シャーシ101を有する。シャーシ101が、N台のサーバ111と、N台のサーバ111に接続されたストレージモジュール(以下、ストレージ)112とを有する。つまり、計算機システムは、予め、サーバ111及びストレージ112が結合された形で同一シャーシ101に入った統合型システムであって、構成済みによる導入容易化、運用管理の一元化を提供する。実施例1では、N=8であるが、Nは2以上の整数であればよく、N台のサーバ111はストレージ112を共有する。ストレージ112は、ストレージ制御モジュール113と、ストレージ制御モジュール113に接続された複数のPDEV132を有する。ストレージ制御モジュール113は、PDEV132に対するI/O(Input/Output)を制御するコントローラ(以下、CTL)131を有する。
各サーバ111は、例えばプリント基板(例えばいわゆるブレードサーバ)である。各サーバ111は、サーバメモリ121と、SVIF123と、それらに接続されたCPU122とを有する。サーバメモリ121は、コンピュータプログラム及びデータを格納する。CPU122は、サーバメモリ121に格納されたコンピュータプログラムを実行する。コンピュータプログラムとして、例えば、サーバ仮想化プログラム(例えばハイパバイザ)、及び、アプリケーションプログラムがある。CPU122は、サーバ仮想化プログラムを実行し、結果として、1又は複数の仮想マシン(以下、VM)を実行することができる。また、CPU122は、アプリケーションプログラムを実行することもできる。CPU122は、それらのようなコンピュータプログラムを実行することで、I/O先情報を含んだI/Oリクエストを発行することができる。I/O先情報は、VOLにおける領域を表す情報であり、例えば、LUN(Logical Unit Number)とLBA(Logical Block Address)を含んだ情報でよい。SVIF123は、通信インタフェース回路であり、例えばASIC(Application Specific Integrated Circuit)である。SVIFは、発行されたI/Oリクエストに基づきそのI/Oリクエストが有するI/O先情報を有するI/Oコマンドを送信することができる。
CTL131は、例えばプリント基板である。CTL131は、ストレージポート142と、ストレージメモリ143と、PDEV I/F(以下、PIF)145と、ストレージI/F(以下、STIF)144と、それらに接続されたMP(Micro Processor)141とを有する。PIF145に、1以上のPDEV132が接続される。ストレージメモリ143が、コンピュータプログラム及びデータを格納する。データとして、例えば、MP検索テーブルがある。MP検索テーブルは、後述するようにMP141が作成する。MP141が、ストレージメモリ143に格納されたコンピュータプログラムを実行することで、I/Oコマンドに従いPIF145を介してPDEV132に対するI/Oを行うことができる。PIF145とPDEV132間は、所定のプロトコル、例えば、FC(Fibre Channel)或いはSAS(Serial Attached SCSI)で通信することができる。ストレージメモリ143が、MP141毎に設けられてよい。PIF145及びSTIF144のうちの少なくとも1つが、MP141毎に設けられてよい。STIF144は、通信インタフェース回路であり、例えばASICである。STIF144は、別のストレージ制御モジュール(図示せず)内のSTIFに接続可能である。これにより、ストレージ制御モジュール113のスケールアウトが可能である(スケールアウトされたストレージ制御モジュールを有する計算機システムの一例を実施例2で説明する)。なお、実施例1及び実施例3では、STIF144は無くてもよい。また、STIFの代わりにPIFだけの構成でもよい。なお、STIFとSVIFは同じハードウェアでもよい。
CTL131は、1又は複数のMP141を有する。MP141毎に担当VOL(I/O先とできるVOL)が異なっていてよい。また、CTL131は二重化されており、故に、MP141が二重化されている。二重化されているMP141間(二重化されているCTL131間)で通信が行われてよく、1つのMP141に障害が生じた場合、二重化されている他方のCTLとの間でフェイルオーバが行われてよい。
8台のサーバ111がストレージ制御モジュール113にバスで接続されている。このバスは各サーバ111若しくはストレージ制御モジュール113における要素間接続にも用いられる内部バス接続であるため、一般的に外部接続に比べて、広帯域を得ることが可能である。例として、PCIe(PCI-Express)プロトコルが用いられる。内部バスを利用することで、FCフレームの作成などは不要となるために処理負荷の軽減が可能である。更に、サーバメモリ121からストレージメモリ143へ直接データ転送を可能にすることでMPの負荷を低減し、低レイテンシを実現することができる。さらに、サーバ111とストレージ112をPCIeで直接接続することで、従来必要とされていたFCスイッチのようなネットワークスイッチが不要となり、又、一筺体とすることでケーブルの長さも削減できるために、コスト低減のメリットも得ることが可能である。
各SVIF123が、F個のバックエンドインタフェース部(以下、BEIF部)(図1では図示せず)を有している。このため、N台のサーバ111が、(N×F)個のBEIF部を有する。また、各CTL131が、G個のストレージポート142を有している。CTL131がH重化(実施例1ではH=2)されているので、ストレージ制御モジュール113が、(G×H)個のストレージポート142を有する。(N×F)と(G×H)は同じ値でなくてもよいが、実施例1では、(N×F)と(G×H)は同じ値であり、N=8、F=2、G=N=8、H=F=2である。各SVIF123が有する2つのBEIF部は、2つのCTL131のストレージポート142にそれぞれ接続される。なお、Hは2以上の整数ではなく1でもよい。また、SVIF123は、必ずしもサーバ111内でなく、サーバ111とコントローラ131間にあって、本実施例で説明する機能を果たせばよい。SVIF123をサーバ111内におけば、サーバ111とストレージ112間の冗長化を担保でき、信頼性を高めることが可能である。1つのサーバ111につき複数のSVIF123が備えられてもよい。
各CTL131が、p個のMP141を有し(pは1以上の整数)、故に、ストレージ制御モジュール113が、(p×H)個のMP141を有する。ストレージ制御モジュール113がMP141を複数持つことで、複数サーバ111のI/O処理を分散して処理し、レスポンスタイムの向上が期待できる。(p×H)個のMP141が(G×H)個のストレージポート142に接続されている。1個のMP141が、そのMP141を有するCTL131が有するG個のストレージポート142のうちのG/p個のストレージポート142に接続される。実施例1では、p=2、G=8なので、1個のMP141が4個のストレージポート142に接続される。
さて、図1では、同種の要素を区別するために、同種の要素に通し番号が割り振られている。例えば、サーバ111には、01、02、…のように通し番号が割り振られ、CTL131には、A、Bのように通し番号が割り振られている。また、図1では、親要素と子要素(親要素が有する要素)の関係を分かり易くするために、子要素に、親要素に割り振られている通し番号と同じ通し番号が割り振られている。例えば、通し番号「01」が割り振られているサーバ111のサーバメモリ121、CPU122及びSVIF123には、それぞれ、同じ通し番号「01」が割り振られており、通し番号「A」が割り振られているCTL131のMP141、ストレージメモリ143、PIF145及びSTIF144には、それぞれ、同じ通し番号「A」を含んだ通し番号が割り振られている。以下、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合には、通し番号を使用することがある。
幾つかの要素を例に取り実施例1を更に詳細に説明する。なお、その要素についての説明は、同種の他の要素についても同様とすることができる。
MP A1に、ストレージメモリA1及びA2と、PIF A1と、STIF A1とがある。MP A1とMP A2の各々は、図示の通りMP B1及びMP B2とに二重化されていてよい。二重化されているPIF A1及びPIF B1に、同じPDEV(例えばPDEV 1及び2)が接続される。二重化されているMP A1及びB1が通信可能に接続されている。
MP A1(又はA2)とMP B1(又はB2)がMPクラスタを構成する。一方のMP A1(又はA2)に障害が生じると他方のMP B1(又はB2)へのフェイルオーバが行われてよい。MP A1及びA2の各々に、1以上の担当VOLが関連付けられてよい。例えば、VOL1〜4(図示せず)のうち、MP A1の担当VOLがVOL1及び2であって、MP A2の担当VOLがVOL3及び4であってよい。言い換えれば、VOL1及び2の各々の担当MPがMP A1であり、VOL3及び4の各々の担当MPがMP A2でよい。各ストレージポート142に、そのストレージポート142から提供可能なVOLが関連付けられていてよい。ストレージポート142に関連付けられているVOLは、そのストレージポートに接続されているMP141の担当VOLでよい。
MP A1は、例えば前述したMP検索テーブルを作成し、各SVIF123が一部又は全てを参照可能とする。なお、MP検索テーブルの一部又は全てをSFIV123、サーバ、ストレージのいずれか又は任意の組合せで格納又は複製してそちらを参照してもよい。
図1の破線は、ライト対象データ(以下、WRデータ)の流れを示している。CPU01が、PDEV2に基づくVOL(例えば、PDEV2が基になっているRVOL、又は、PDEV 2に基づく領域が割り当てられるTPVOL)をライト先としたライトリクエスト及びWRデータをサーバメモリ01に格納する。ライトリクエストは、発行元ID(図3参照)、ストレージポート番号及びライト先LUNを含んでいる。SVIF01が、サーバメモリ01からライトリクエストを取得し、そのライトリクエスト中の発行元IDとライト先LUNとに基づきMP検索テーブルからターゲットのMP A1を特定する。SVIF01が、ターゲットのMP A1の番号を含んだ発行先ID(図3参照)を含んだライトコマンドを、ターゲットMP A1に対応するBEIF部から送信、又は、発行先IDから特定したターゲットMP A1用のライトコマンド処理待ちメモリ領域(例えばキューイングメモリ)に、ライトコマンドを、ターゲットMP A1に対応するBEIF部を介して格納する。後者の場合、ライトコマンドは、ターゲットMP A1の番号を含んでいなくてよく、そのライトコマンドが、ターゲットMP A1の番号に関連付けられているライトコマンド処理待ちメモリ領域に格納される。ライトコマンド処理待ちメモリ領域は、ターゲットMP A1のストレージメモリA1(又はA2)に設けられている。例えば、図9に示すストレージメモリA1の中にコマンド用領域902があり、その中にMP A1用、MP A2用の領域がある。もし、MP検索テーブルの更新が間に合わずに、更新前のMP検索テーブルを基にI/OコマンドのターゲットMPが決定された場合、I/Oコマンドが誤ったメモリ領域(更新後のMP検索テーブルに基づき決定されたターゲットMPに対応したメモリ領域)に格納されてしまうことがある。例えば、処理するMPを有するCTLとそのMPをターゲットとしたI/Oコマンドを格納したメモリ領域を有するCTLが異なってしまうことがある。このようなケースを考慮し、ストレージメモリA1に、MP B1またはB2用のコマンドが詰まれてもよいように、ストレージメモリA1のコマンド用領域902(例えば転送用領域912及び914)には、MP
B1、MP B2用の領域があってもよい。この場合、そのCTL Aの代表MP(例えば、MP A1)がCTL B側のメモリのMP B1又はB2用のメモリにコマンドを転送してもよい。コマンド処理待ちメモリ領域に格納されたデータは、ストレージ側から順番に読み出される。なお、優先順位がI/Oコマンド(及びメモリ領域の少なくとも一方)に規定されて格納されている場合は、それを加味してI/Oコマンドが読み出されてもよい。ターゲットMP A1が、そのライトコマンドを取得し、転送リクエストをSVIF01に送信する。SVIF01が、その転送リクエストに従い、サーバメモリ01からストレージメモリA1(又はA2)にWRデータをDMA転送する。なお、転送リクエストも上記したI/Oコマンドと同様に、例えばSVIF01に対応した処理待ちメモリ領域(例えば、ストレージメモリA1に設けられた、SVIF01に対応するメモリ領域)に格納され、SVIF01がそのメモリ領域から転送リクエストを読み出してもよい。また、上記したMP検索テーブルの更新が間に合わなく、処理するMPを有するCTLとI/Oコマンドを格納したメモリ領域を有するCTLが違ってしまった場合や、SVIF01がCTL Aに対してI/Oコマンドを発行したときにCTL Bのメモリでキャッシュヒットしてしまった場合などは、ストレージ制御モジュール113は、SVIF01に対し、I/Oコマンドを受けたストレージポートを有するCTL(例えばCTL A)と別のCTL(例えばCTL B)のストレージポートから転送リクエストを発行してもよい。また、転送リクエストのメモリ領域とI/Oコマンドレスポンスのメモリ領域は同じメモリ領域でよく、同様に、転送レスポンスのメモリ領域とI/Oコマンドリクエストのメモリ領域は同じメモリ領域(キューイングメモリ)でよく、MPがメモリ領域からオブジェクトを引き抜くときに引き抜いたオブジェクトがリクエストであるかレスポンスであるか判定してよい。これにより、メモリ容量に対して、キューイングメモリ本数(メモリ領域数)を少なくし、1つのキューイングメモリのキューイング数(1つのキューイングメモリに格納可能なオブジェクトの数)を多く取るような構成が採用されてもよい。ターゲットMP A1は、ライトコマンドに対するレスポンスをサーバ01に返す前又は返した後に、ストレージメモリA1内のWRデータを、ライト先VOL(ライト先LUNに関連付けられているVOL)の基になっているPDEV2に書き込む。
なお、ライト先VOLと同じVOLをリード元とするリードリクエストがCPU01により発行された場合、そのリードリクエストに基づきリードコマンドがSVIF01からターゲットMP A1に対して送信され、ターゲットMP A1により、そのリードコマンドに従うリード対象データ(以下、RDデータ)がストレージメモリA1(又はA2)にPDEV2から読み出される。そして、SVIF01が、RDデータを、ストレージメモリA1(又はA2)からサーバメモリ01にDMA転送する。このように、WRデータもRDデータもDMAによりサーバ111とストレージ制御モジュール113間でメモリからメモリへ直接転送されるので、FCのようなフレーム作成負荷を削減でき、I/Oレイテンシを削減することができる。また、ターゲットMPを指定して転送処理させるため、MP負荷分散によりI/Oレイテンシを削減し、かつ帯域を効率的に利用することになると共に、ターゲットのMPを有するCTLと別のCTLへI/Oリクエストを発行したために、一旦、ターゲットMPを有するCTLへI/Oリクエストを転送するなどの処理がなくなる、更に、I/Oリクエストを直接ターゲットMP用のメモリ領域に格納することで、I/Oリクエストを一旦バッファ用のメモリに受けて、改めてターゲットMP用のメモリ領域に配置し直すなどのオーバヘッドを削減することができるため、I/Oの高速化が期待される。サーバ111及びストレージ112が直接結合された(ネットワークスイッチ無しに結合された)本システム構成においては、全てのサーバ111が全てのMP141と接続されているが、サーバ111及びMP141間のパスは複数ある。例えば、CTL BのMP B1にI/Oコマンドを発行する方法としては、サーバ111からCTL AのMP A1にI/Oコマンドを発行し、MP A1がCTL AとCTL Bの間のパスを使ってMP B1へI/Oコマンドを横振り(転送)し、MP B1へI/Oコマンドを処理させる方法と、サーバ111からCTL BのMP B1にI/Oコマンドを発行し、そのまま処理させる方法がある。また、スケールアウトした場合はさらに経由方法は複数通りになる。複数のポート(BEIF部)より、どのポートを使ってコマンドを発行するかによって、コマンドが経由するパスが変わり、目標のMPに到達するまでのレイテンシ、及び、使用するパスの帯域が増加する。さらに、MPで上記のような横振りを実施するとMP負荷が増加し、I/O低下の要因となる。構成は固定的であるために、レイテンシ低減のためには適切なMPに最初からコマンドを送出することが望ましい。このために、本システムでは、コマンド送出前にデータアクセスするストレージの記憶領域(VOL)とMPの関係を把握し、ターゲットとすべきMPを特定してから適切なBEIF部を介してコマンドをやりとりすることとする。
図2は、SVIF123の構成を示す。
SVIF123は、前述したようにASICであり、フロントエンドインタフェース部(以下、FEIF部)203と、内部プロセッサ202と、レジスタ部201と、BEIF部204と、それらに接続された内部スイッチ205とを有する。SVIF123が有する要素のうち、内部プロセッサ202及びBEIF部204が、それぞれ2つ以上存在するが、それらの要素のうちの少なくとも一方が1つであってもよい。また内部プロセッサ202及びBEIF部204以外の少なくとも1つの要素が複数存在してもよい。
FEIF部203は、前段デバイスに接続される通信インタフェース部(例えばポート)であり、BEIF部204は、後段デバイスに接続される通信インタフェース部(例えばポート)である。具体的には、FEIF部203は、このSVIF123を有するサーバ111内のCPU122に接続され、BEIF部204は、MP141(ストレージポート142)に接続される。レジスタ部201は、MP検索テーブルの一部又は全部を記憶する。レジスタ部201は、DMA転送されるデータを記憶することもできる。内部スイッチ205は、SVIF123内の要素間の接続を切り替える。
内部プロセッサ202は、ファームウェアのようなコンピュータプログラムを実行することにより、振分け部211、DMA部212及び制御部213として機能する。振分け部211は、振分け処理を行う。振分け処理は、CPU122により発行されたI/Oリクエストに基づきターゲットのMP141を特定すること、特定したMP141に対するI/Oコマンドを2つのBEIF部204のうちのいずれから送信するかを決定することを含む。DMA部212は、I/Oコマンドに従うI/O対象データをDMA転送する。制御部213は、障害系や初期化処理など、SFIV123全体の制御を行う。その他、内部プロセッサの処理をサポートする専用ハードウェアがあってもよい。また、図示していないが、I/Oコマンドやそのほか制御データを行うDMA部が別にあってもよい。更に、各内部プロセッサが共通で使うDMA部が別にあってもよい。なお、FEIF部やBEIF部にDMA部があってもよいし、キューイングインタフェースとして動作する専用ハードウェアがあってもよいし、プロトコル変換を行うハードウェアがあってもよい。
以上がSVIF123の構成であるが、SVIF123の構成とSTIF144の構成が同じでよい。すなわち、同じ構成の通信インタフェース回路(ASIC)が、各サーバ111とストレージ制御モジュール113とに搭載されてよい。また、SVIF123及びSTIF144が各サーバ111とストレージ制御モジュール113とに複数搭載されてもよい。また、SVIF123が分離して、一部がサーバ、もう一部がストレージに置かれていてもよい。ただし、この場合も、振分け部など主要な機能はサーバ側とし、SVIF123のストレージ側ポートは2つ以上とし、複数CTLへ接続されているものとする。
図3は、発行元ID及び発行先IDの構成を示す。
発行元IDは、CPU122により発行されたI/Oリクエストに含まれるIDであり、例えばサーバ識別子(S_ID)と呼ばれてよい。以下、I/Oリクエストを発行したCPUを「発行CPU」と言い、発行CPUを有するサーバを「発行サーバ」と言い、発行サーバが有するサーバメモリを「発行サーバメモリ」と言い、発行サーバが有するSVIFを「発行SVIF」と言うことがある。発行元IDは、例えば、シャーシ番号、ブレード番号及びサーバポート番号などを含む。シャーシ番号は、発行サーバを有するシャーシの番号である。ブレード番号は、発行サーバの番号である。サーバポート番号は、発行CPUにより実行されI/Oリクエストを発行したVMのポートの番号である。また、VMを利用しないような環境においては、サーバポート番号はSVIF123のBEIF部204の番号でもよい。BEIF部204が複数ある場合には、それぞれにサーバポート番号を関連付けて、内部プロセッサ202が、サーバ111(CPU122)には複数のBEIF部204をそれぞれ複数ポートとして認識させる、又は、サーバ111(CPU122)には1つのBEIF部204を1ポートとして認識させて、他のBEIF部204を冗長ポート(冗長パス)として、SVIF123が冗長化に利用してもよい。なお、内部プロセッサ202が、サーバ111に複数ポートを認識させた場合には、サーバ111(CPU122)が、任意のポートを冗長ポートとして利用してもよいし、SVIF123に任意のポートを冗長ポートとして利用させてもよい。
本実施例においては、CTL Aのストレージメモリ143内に、MP A1用の領域とMP A2用の領域を設ける。これらの領域はそれぞれMP A1とMP A2の処理待ちコマンドを格納する領域として利用される。
発行先IDは、例えば、シャーシ番号、クラスタ番号、プロセッサ番号及びストレージポート番号などI/Oコマンドのパスを特定できる番号を含む。シャーシ番号は、I/Oコマンドを処理するMPを有するシャーシの番号である。クラスタ番号は、上記シャーシ内のI/Oコマンドを処理するMPを有するクラスタの番号である。プロセッサ番号は、上記クラスタ内のストレージポートに対応したMPの番号であり、必ずしもI/Oコマンドを処理するMP番号と一致しなくてもよい。ストレージポート番号は、プロセッサ番号に関連付けられているストレージポートの番号である。これにより、一体型構成のため、あらかじめ構成によりそれぞれの配置状況から番号(他種の識別情報でもよい)が一意に決められるため、スイッチなどを使って調停しなくとも唯一の発行先IDを設定できる。また、発行先IDはポート番号そのものでもよく、上記にならえば、構成により、ポート番号も一意に決定することができる。例えば、サーバ01がMP A2にI/Oリクエストを発行する場合は、パス上のMPのプロセッサ番号であるMP A1の番号をプロセッサ番号として含んだ発行先IDを有するI/Oコマンドを、そのパス上のMP A1に対応したストレージメモリA1(又はA2)におけるターゲットMP A2用のコマンド処理待ちメモリ領域(例えばキューイングメモリ)に格納する。これにより、MP A1に関連付けられたポートを経由して、MP A2にI/Oコマンドを処理させることができる。よって、必ずしも発行先ID内のプロセッサ番号はI/Oコマンドを処理するMPのプロセッサ番号と一致させずに、I/Oコマンドを処理するターゲットのキューで最終目的地がわかるようにしてもよい。この場合は、SVIF123とストレージ112の間のI/Fとなるキューは振分け対象のMP数と同じとなる。なお、発行先ID中のプロセッサ番号は、直接I/Oコマンドを処理するMPのプロセッサ番号としてもよい。この場合は、ターゲットMPが異なる複数のI/Oコマンドが1つのキューに混在してよく、すなわち、キューがMP数分なくてもよい。SVIF123は、後述する初期化処理で得た情報により発行先IDを決定することが可能となる。
図4は、MP検索テーブルの構成を示す。
MP検索テーブル401は、1つのテーブル又は複数のテーブルで構成されてもよい。本実施例では、MP検索テーブル401は、複数のテーブル、例えば、第1サブテーブル411と第2サブテーブル412とを含む。
第1サブテーブル411は、複数のレコードを有し、各レコードが、ソース情報(サーバ111及びそのサーバ111上のVM(仮想サーバ)の識別番号)と当該ソース情報を記録するアドレス(第1アドレス)を記憶する。第2サブテーブル412は、複数のレコードを有し、各レコードが、アドレス(第2アドレス)と、デスティネーション情報(ストレージ112側の情報)を記憶する。
ソース情報(例えばVMの識別番号)を記録する第1アドレスと、例えば、LUNとから、第2サブテーブル412の第2アドレスが作成され、その第2アドレスに対応したレコードにデスティネーション情報としてストレージ112側の情報が格納される。ストレージ112側の情報は、VOL情報(例えば、VOL番号、容量)と、対応するストレージポート142に関するポート情報(例えばストレージポート番号)と、対応するストレージポート142に接続されているMP141に関する情報(例えばMP番号(MPのプロセッサ番号))とを含む。なお、MP検索テーブル401は、1つのテーブルで構成されていてもよい。また、MP検索テーブル401は、さらに他のテーブルを関連付けて持っていてもよい。例えば、第2サブテーブル412のMP番号が仮想化され、別途、仮想MP番号(仮想化されたMP番号)と実MP番号との対応関係を表すテーブル(第3サブテーブル)が用意され、実MPが故障した際は、第3サブテーブルのみが更新され(例えば、故障した実MPの実MP番号に対応した仮想MP番号に別の実MP番号が対応付けられ)、第2サブテーブル412は更新されないことで、テーブル検索負荷低減などが行われてもよい。また、MP検索テーブル401には、検索メモリのようなロジックメモリが利用されてもよいし、通常メモリと組み合わせた利用がされてもよい。
MP141は、サーバ111のログイン処理時に、そのサーバ111を識別する識別子(識別情報)より、第1サブテーブル411を作成し、SVIF123に、作成した第1サブテーブル411を設定する。ストレージメモリ143の一部は共有メモリとして利用することができ、この共有メモリは全てのMP141からアクセス可能である。ストレージ112のMP141は、予め、そのストレージ112の共有メモリに、すべてのVOLに関する制御情報を格納している。制御情報には、ストレージ112が提供している各VOLの情報と、そのVOLのオーナ権を有するMPを特定する情報(例えばMP番号)が含まれている。冗長性担保のために、複数のMP141が1のVOLへアクセス可能であるが、オーナ権は、通常において何れのMP141が主体的にそのVOLについての処理を担当するかを意味する。又、複数のMP141間で負荷を分散させるために、提供される複数のVOLについて、異なる複数のMP141が主担当として関連づけられていることが望ましい。これにより、サーバ111からのI/Oリクエストについて必要とされる処理がMP間で分散される。特に、複数のサーバ111で1のストレージ112を共有する本実施例構成においても、MP141間での負荷均衡化が図られるため、システム全体としての性能低下を防止することができる。MP141は、共有メモリ内の制御情報より、第1サブテーブル411のサーバ識別子より引かれる第1アドレスとLUNとをアドレスとした第2アドレスを有する第2サブテーブル412を作成し、第2サブテーブル412をストレージメモリ143の所定の位置へ配置する。第2サブテーブル412には、第2アドレスに対応付けられるデスティネーション情報(ストレージ側の情報)として、サーバ識別子とLUNに関連付いたVOL情報とそのVOL情報が表すVOLに対するI/Oを処理するMPのMP番号を格納する。各VOLについてストレージ側の認識している識別情報と、サーバ側に認識している識別情報(LUN)とは必ずしも一致しない。例えば、異なる2つのVOLが2つのサーバによってそれぞれ同じLUNで管理されていることもありうる。よって、本実施例においては、サーバの識別情報とサーバからのI/Oリクエストで指定される宛先記録領域の識別情報(より具体的にはボリュームの識別情報であるLUN)とから一つのVOLを特定して、当該VOLのオーナMPを特定することとする。
MP検索テーブル401の更新は、ストレージ状況を把握できるMP141によって行うことができる。ストレージ112に関する情報をSVIF123がストレージ112から受けて、制御部213が、その情報を基に、MP検索テーブル401を作成又は更新してもよい。第1サブテーブル411は、参照時のレイテンシ軽減のためにSVIF123のレジスタ部201に記憶され、サーバ111毎に異なっていてよい。第2サブテーブル412は、少なくとも1つのストレージメモリ143に記憶され、サーバ01〜08に共通であってもよい。第2サブテーブル412のサイズが大きいためである。なお、SVIF123が参照可能な範囲であれば、第1及び第2サブテーブル412及び412の両方又は片方がレジスタ部201に記憶されてもよいし、ストレージメモリ143に記憶されてもよいし、サーバメモリ121に記憶されてもよい。なお、複数の場所に同じ第1サブテーブル411と同じ第2サブテーブル412の両方又は片方があり、それぞれ同期していてもよい。本実施例においては、ストレージ112がサーバ111からのアクセス状況や負荷状況を参照した上で、MP141がMP検索テーブル401を作成することが可能となる。よって、複数のサーバ111がストレージ112を共有するシステム構成において、I/Oコマンドの処理を複数のMP141で負荷分散可能となる。
MP検索テーブル401の更新タイミングとしては、例えば、データ伝送を始める前の初期化時や、ストレージ側の構成が変更される時が考えられる。具体的には、データの位置が変更されI/Oの分布が変更し得るデータマイグレーション時、上記した任意のボリュームに対するオーナー権の変更時(例えば後述のMP振分けテーブルの更新時)、何れかのMPの負荷が所定値を超えた場合、何れかのMP障害時に更新されてもよい。MP141がMP振分けテーブル(VOLとそのVOLのオーナ権を有するMPとの対応関係を表すテーブル)の更新は、何れかのMPの負荷が所定値を超えた場合、ボリューム構成が変更された場合含めて、任意のタイミングで行われてよい。上記構成により、ストレージの状況にあわせた適切な振り分けが可能となる。もし、MP検索テーブル401の更新の前にI/Oコマンドが発行されてしまった場合は、I/Oコマンドを送られたMP141がそのI/Oコマンド中の発行先ID(又はそのI/Oコマンドが格納されたコマンド処理待ちメモリ領域(例えばキューイングメモリ)に関連付けられたMPの番号)に合わせて、自分で処理または担当のMPに処理を横振りする。なお、LUNが無いリクエストの場合は、そのリクエストの内容にしたがって、処理するMP141が決定されてもよいし、あらかじめその場合の処理MPが決められていてもよい。
振分け部211(SVIF123)が、I/Oリクエスト中の発行元IDをキーとし、そのキーに対応する第1アドレスを第1サブテーブル411から特定する。なお、サーバ111は仮想化されている場合があり、1つのサーバ111について複数の発行元のサーバ識別子を持つことがある。振分け部211(SVIF123)が、第1アドレスとI/Oリクエスト中のLUNとの組合せをキーとし、そのキーに対応するデスティネーション情報を第2サブテーブル412から特定する。特定されたデスティネーション情報は、MP番号を含む。これにより、発行元IDと発行先LUNとに対応するターゲットのMP141が特定され、振分け部211は、特定されたMP番号を含んだ発行先IDを生成、又は、特定されたMP番号に対応したコマンド処理待ちメモリ領域(例えばキューイングメモリ)を取得することができる。また、MP番号を取得することで、振分け部211は、どちらのBEIF部204からI/Oコマンドを発行するかも決定する。例えば、BEIF部204が2個(2ポート)で、MPが4個(MP A1、A2、B1、B2)ある場合、MP A1(又はA2)は第1ポート(一方のBEIF部204)、MP B1(又はB2)なら第2ポート(他方のBEIF部204)という対応付けをSVIF123が予め保持しておくことで(例えば図14の対応付けテーブル1401のような情報をSVIF123のレジスタ部201が予め保持しておくことで)、振分け部211は、I/Oコマンドが経由するBEIF部204を決定することができる。また、ポート番号とMPの関係は一体型構成のためあらかじめ決まることから、ポート番号のビットとMPの任意のビット位置を対応させることで(例えば図14の参照符号1402で示す対応関係を振分け部211に設定しておくことで)、どちらのポートにどのMPが対応しているかを表現するようにし、対応付けテーブルを持たない構成としてもよい。なお、本システムはサーバ111とストレージ112が予め接続された構成をとるために、BEIF部204とそれに接続されるMP141の構成は決まっており、そのために、BEIF部204とMP141の対応付けは予め設定しておくことができる。また、MP141の障害等を想定して、MP141が、最適なBEIF部204とMP141との関連付けを表す情報を生成してSVIF123の参照可能な位置(例えば、ストレージメモリ143、SVIF123内のレジスタ部201等)に格納してもよい。なお、MP検索テーブル401は、上記のようにSVIF123とストレージ112に分けて配置してもよいし、SVIF123とサーバ111に分けて配置してもよいなど、サーバ111、SVIF123、ストレージ112の任意の組合せまたは任意の場所に設置してもよい。なお、各デスティネーション情報は、発行先IDの要素であるシャーシ番号、クラスタ番号及びストレージポート番号を含んでいてよい。
以下、本実施例で行われる処理の流れを説明する。なお、以下の説明では、SVIF01を例に取るが、SVIF02〜08のいずれについても同様の処理が行われる。本実施例では、初期化処理が行われ、その初期化処理において、MP検索テーブル401が作成され、計算機システムがI/O開始可能な状態となる。その後、いずれのサーバ111も、I/Oリクエストを発行し、そのI/Oリクエストに従うI/O対象データを、I/O先VOLに格納することができる。I/O先VOLに格納されたI/O対象データは、実際には、1又は複数のPDEVに書き込まれる。本実施例では、説明を簡単にするために、1つのVOLに格納されたI/O対象データが1つのPDEVに格納されるものとする。
図5は、初期化処理の流れを示す。
サーバ01とCTL Aとの間で、物理層での通信が可能となるよう物理層での初期化が行われる(S501)。なお、この初期化は、通信における一般的な物理層初期化と同じなので、詳細を省略する。また、サーバ01とCTL Bとの間の処理については図示省略する。
物理層初期化の完了後、SVIF01に接続されているMP A1が、SVIF01に対するログイン処理を行う(S502)。また、CPU01(例えばVM)も、SVIF01に対するログイン処理を行う(S503)。このログイン処理において、CPU01は、指定し得る発行元IDをSVIF01に送信する。サーバはSVIF01に対するログイン処理(S503)が完了した後、ストレージ112に対するログイン処理を行う(S504)。
MP A1は、例えば一般的なLU設定機構により、ユーザがLUを生成し、ストレージ、サーバの初期化処理により生成したLUとサーバの対応付けを行い、ストレージ112内の全てのMP141が共有しているメモリで管理しているVOL制御情報とサーバ識別子が関連付けられた後に、その関連付けを基に前述したMP検索テーブル401を作成し(S505)、そのMP検索テーブル401のうちの少なくとも第1サブテーブル411をSVIF01のレジスタ部201に格納する。また、SVIF01の制御部213は、前記したようにMP141とBEIF部204とを関連付けることができる。なお、MP141とBEIF部204の関連付け情報を基に、制御部213は、パス管理テーブル(図14)を生成しレジスタ部201に格納してもよい。パス管理テーブルは、BEIF部204とMP番号との対応付けを表してよい。パス管理テーブルから、どのMPに対するI/OコマンドをどのBEIF部204から送信すべきかが特定可能でもよい。また、上記したようにテーブルを持たずにポート番号とMP番号が対応付けられてもよい。
MP検索テーブル401作成の後、サーバ01とCTL Aとの間で所定の処理が行われることで、計算機システムがI/O開始可能状態となる(S506)。
図6は、ライト処理の流れの一例を示す。
データ準備が行われる(S601)。具体的には、CPU01(VM)が、ライトリクエスト及びWRデータをサーバメモリ01に格納する。ライトリクエストが、発行元IDを含む。SVIF01のDMA部212が、サーバメモリ01からライトリクエストを取得する(S602)。そのライトリクエストは、一時的にレジスタ部201に格納されてよい。ライトリクエストには、発行元のサーバID、ライトデータの格納先を示す転送元アドレス、更にライトデータ格納先のLUNが含まれている。この転送元アドレスの指定方法は限定せず、転送元アドレスが格納されたサーバ側のメモリアドレスのポインタでもよい。また、ライトデータの格納先が複数の領域に分散していてもよく、この場合、複数の領域(あて先)を指定できるようなリスト構造(例えば、転送元アドレスを複数持つリスト構造、転送元アドレスと次のアドレスが格納されたポインタを持つリスト構造、又は、転送元アドレス及び次の転送元アドレスへのポインタが格納されているアドレスを示すポインタを持つリスト構造、又は、転送元アドレスへのポインタ及び転送元アドレスへのポインタが格納されているアドレスを示すポインタを持つリスト構造)がライトリクエストに含まれていてもよい。SVIF01は実際にデータ転送を実施するまでの任意のタイミングでリスト構造よりデータの転送元アドレスを取得してもよい。
SVIF01の振分け部211が、振分け処理を行う(S603)。振分け処理では、振分け部211が、ライトリクエスト中の発行元IDと、ライトリクエスト中のLUNとを用いて、MP検索テーブル401からターゲットのMP A1を特定し、ライトコマンドを2つのBEIF部204のうちのいずれから送信するかを決定する。なお、ライトコマンドが、特定したMP A1の番号を含んだ発行先IDを有してもよいし、MP A1用のライトコマンド処理待ちメモリ領域(例えばキューイングメモリ)に格納されてもよい。そのライトコマンドは、レジスタ部201に格納されてよい。SVIF01のDMA部212が、ライトコマンドを、決定されたBEIF部204を介してMP A1のストレージメモリA1(例えばMP A1用のライトコマンド処理待ちメモリ領域(例えばキューイングメモリ))に転送(格納)し、ターゲットMP A1が、ストレージメモリA1からライトコマンドを取得する(S604)。ライトコマンドは、ライト先情報(例えば、LUN、VOL番号及びLBA)を含む。MP A1が、格納先準備を行う(S605)。例えば、MP A1が、ライトコマンドから特定されるライト先と同じライト先のデータがストレージメモリA1にキャッシュされているか否かのキャッシュ判定を行い、その判定結果が真か偽かに応じて、ストレージメモリA1(及び、その冗長メモリB1)からキャッシュ領域を確保する。
MP A1が、転送リクエストをストレージメモリA1に格納し、SVIF01のDMA部212が、ストレージメモリA1から転送リクエストを取得する(S606)。その転送リクエストは、WRデータの転送先アドレス又は転送先アドレスを特定するためのポインタ又はその両方を含む。また、WRデータの転送先アドレスは、ストレージメモリA1における確保されたキャッシュ領域のアドレスである。なお、SVIF01に冗長化先のストレージメモリB1のキャッシュ領域のアドレスを教えて、転送処理を肩代わりしてもらってもよい(つまり、SVIF01が、ストレージメモリB1のキャッシュ領域にWRデータを格納してよい)。SVIF01のDMA部212が、転送リクエスト中のコマンドIDから、SVIF01がサーバから取得した転送元アドレスを特定し、転送元アドレスが表す領域(サーバメモリ01の領域)から、転送元リクエスト中の転送先アドレスが表す領域(ストレージメモリA1の領域)へ、WRデータを転送する(S607)。これにより、WRデータが、ストレージメモリA1における確保されたキャッシュ領域に格納される。なお、SVIF01のライトリクエスト処理に必要な転送元アドレス、転送先アドレスは複数個に分割されて送受信されてもよい。例えば、分割されたアドレス情報及び次のアドレス情報へのポインタを格納したメモリへのポインタを含ませたリスト構造(SGL)としたり、分割されたアドレス情報と次のアドレス情報へのポインタをからなるリスト構造としたりすることができる。
SVIF01のDMA部212が、転送レスポンス(転送リクエストに対するレスポンス)をストレージメモリA1に格納し、MP A1が、転送レスポンスをストレージメモリA1から取得する(S608)。MP A1が、ストレージメモリA1におけるWRデータを、冗長メモリA1における確保されたキャッシュ領域にコピーする(S609)。なお、SVIF01がストレージメモリA1と冗長メモリA1の両方にデータをライトしてもよい。この場合は、転送レスポンス(S608)はデータ冗長化(S609)の後になる。MP A1が、コマンドレスポンス(ライトコマンドに対するレスポンス)をストレージメモリA1に格納し、SVIF01のDMA部212が、そのコマンドレスポンスをストレージメモリA1から取得する(S610)。SVIF01のDMA部212が、リクエストレスポンス(ライトリクエストに対するレスポンス)をサーバメモリ01に転送(格納)し、CPU01が、リクエストレスポンスをサーバメモリ01から取得する(S611)。また、SVIF01は、コマンドレスポンス処理が完了したことをMP A1に通知する(S612)。
なお、ストレージ用のデータ保障コードとして利用される、DIF(Data Integrity
Feature)などの計算、付与、チェック、及び削除をSVIF123が実施されてもよく、この場合、内部プロセッサ202で実施されてよい。ライト時のDIF計算及び付与は、例えばS607でサーバメモリ01からSVIV01がデータを読んだときに実施されてもよい。
図7は、リード処理の流れの一例を示す。
格納先準備が行われる(S701)。具体的には、CPU01(VM)が、リードリクエストをサーバメモリ01に格納する。リードリクエストが、発行元IDを含む。SVIF01のDMA部212が、サーバメモリ01からリードリクエストを取得する(S702)。そのリードリクエストは、一時的にレジスタ部201に格納されてよい。リードリクエストには、リードしたデータを格納する転送先アドレスが含まれていてもよい。この転送先アドレスの形式は、ライトデータの送付にならった形式としてもよい。SVIF01は、実際にデータ転送を実施するまでの任意のタイミングで、リスト構造よりデータの転送先アドレスを取得してもよい。
SVIF01の振分け部211が、振分け処理を行う(S703)。振分け処理では、振分け部211が、リードリクエスト中の発行元IDと、リードリクエスト中のLUNとを用いて、MP検索テーブル401からターゲットのMP A1を特定し、リードコマンドを2つのBEIF部204のうちのいずれから送信するかを決定する。また、MP A1又はMP A2のそれぞれの担当メモリのうち、どちらに格納するかも決定する。なお、リードコマンドが、特定したMP A1の番号を含んだ発行先IDを有してもよいし、MP A1用のリードコマンド処理待ちメモリ領域(例えばキューイングメモリ)に格納されてもよい。そのリードコマンドは、レジスタ部201に格納されてよい。SVIF01のDMA部212が、リードコマンドを、決定されたBEIF部204を介してMP A1のストレージメモリA1((例えばMP A1用のリードコマンド処理待ちメモリ領域(例えばキューイングメモリ)))に転送(格納)し、ターゲットMP A1が、ストレージメモリA1からリードコマンドを取得する(S704)。リードコマンドは、リード元の情報(例えば、LUN、VOL番号及びLBA)を含む。MP A1が、データ準備を行う(S705)。例えば、MP A1が、リードコマンドから特定されるリード元のRDデータがストレージメモリA1にキャッシュされているか否かのキャッシュ判定を行い、その判定結果が真か偽かに応じて、ストレージメモリA1(及び、その冗長メモリA1)からキャッシュ領域を確保する。その判定結果が偽の場合、MP A1が、キャッシュ領域をストレージメモリA1に確保し、RDデータを、リード元の基になっているPDEV132から読み出し、読み出したRDデータを、確保したキャッシュ領域に格納する。
MP A1が、転送リクエストをストレージメモリA1に格納し、SVIF01のDMA部212が、ストレージメモリA1から転送リクエストを取得する(S706)。その転送リクエストは、RDデータの転送元アドレス又は転送元アドレスを特定するためのポインタ又はその両方を含む。RDデータの転送元アドレスは、ストレージメモリA1における確保されたキャッシュ領域のアドレスである。SVIF01のDMA部212が、転送リクエスト中のコマンドIDから、SVIF01がサーバから取得した転送先アドレスを特定し、転送元アドレスが表す領域(ストレージメモリA1の領域)から、転送先アドレスが表す領域(サーバメモリ01の領域)へ、RDデータをDMA転送する(S707)。これにより、RDデータが、サーバメモリ01における確保された領域に格納される。SVIF01のDMA部212が、転送レスポンスをストレージメモリA1に格納し、MP A1が、転送レスポンスをストレージメモリA1から取得する(S708)。MP
A1が、コマンドレスポンス(リードコマンドに対するレスポンス)をストレージメモリA1に格納し、SVIF01のDMA部212が、そのコマンドレスポンスをストレージメモリA1から取得する(S709)。SVIF01のDMA部212が、リクエストレスポンス(リードリクエストに対するレスポンス)をサーバメモリ01に格納し、CPU01が、リクエストレスポンスをサーバメモリ01から取得する(S710)。なお、SVIF01のリードリクエスト処理に必要な転送元アドレス、転送先アドレスは複数個に分割されて送受信されてもよい。例えば、分割されたアドレス情報及び次のアドレス情報へのポインタを格納したメモリへのポインタを含ませたリスト構造(SGL)としたり、分割されたアドレス情報と次のアドレス情報へのポインタをからなるリスト構造としたりすることができる。また、SVIF01は、コマンドレスポンス処理が完了したことをMP A1に通知する(S711)。
また、ストレージ用のデータ保障コードとして利用される、DIF(Data Integrity
Feature)などの計算、付与、チェック、及び削除が、SVIF123で実施されてもよく、この場合、内部プロセッサ202で実施されてよい。リード時のDIFチェック及び削除は、例えばS707でストレージメモリA1からSVIV01がデータを読んだときに実施されてもよい。
なお、本実施例では、オートレスポンスが採用されてよい。オートレスポンスとは、転送リクエストがリクエストであるが疑似的なレスポンスでもあることである。オートレスポンスが採用されている場合、前述した転送リクエストに代えて特殊転送リクエストが発行される。特殊転送リクエストは、オートレスポンスを意味する値が関連付けられた転送リクエストである。また、特殊転送リクエストは、コマンドレスポンスを生成するための情報も含む。具体的には、MP A1が発行した特殊転送リクエストはSVIF 01により取得されるが、SVIF01は、転送リクエストが特殊転送リクエストであることを認識した場合、RDデータのDMA転送が完了したら、リクエストレスポンスをサーバメモリ01に格納する。つまり、S706の転送リクエストが特殊転送リクエストの場合、S707の後、S709が行われること無く、S710が行われる。なお、転送レスポンス(S708)は、転送が正常に完了したことを伝えるためにコマンドレスポンス(S709)の前又は後に実施されてもよいし、SVIF01の転送が完了したことを示すカウンタなどを設けて、必要に応じてMP A1がそのカウンタなどを参照してもよい。これにより、オートレスポンスが無効の場合に比べてリード処理を高速に行うことができる。また、WRデータのDMA転送時も同様に、データ冗長化(S609)をSVIF01が実施した後、コマンドレスポンス(S610)を実施しないで、リクエストレスポンス(S611)を発行してもよい。このとき、転送レスポンス(S608)は、リクエストレスポンス(S611)の前又は後に実施されてもよいし、SVIF01の転送が完了したことを示すカウンタなどを設けて、必要に応じてMP A1がそのカウンタなどを参照してもよい。なお、オートレスポンスを実施し、SVIF01が、CPU01のコマンドレスポンスの後に、MP A1にリクエストレスポンスを返す場合は、完了通知はリクエストレスポンスに含んでもよい。
リード処理およびライト処理において、オートレスポンスを採用するか否かが、MPにより判定されてよい。
以上、実施例1によれば、SVIF123が、ターゲットのMP141を特定し、ターゲットのMP141を指定したI/Oコマンドを送信する。本システムはサーバとストレージとを広帯域なバス接続した一体型システムである。よってSVIF123がコマンド送出時にMP141側を特定する情報を参照することが可能であり、特定したMPへのコマンド送出が可能となる。これにより、複数のサーバ111とストレージ112間をネットワークスイッチ無しに接続することができる。なお、各SVIF123には、CTL AのMPに接続されるパス(物理パス)と、CTL BのMPに接続されるパス(物理パス)とがあるが、各SVIF123は、一方のパスに障害が生じた場合、I/Oコマンドを他方のパスから送信する。その場合、MP(例えばMP B1)が、そのI/OコマンドのターゲットMP(例えばMP A1)でなくても、そのターゲットMPの冗長MPであるので、そのI/Oコマンドを処理することができる。これに合わせて、MP検索テーブル401における振分け先MPが書き換えられてもよい。前術したように第2サブテーブル412のMP番号が仮想化され前述した第3サブテーブルが用意されていれば、第3サブテーブルの実MP番号のみ書き換えることで、例えば第2サブテーブルは更新しなくてもよく、テーブル更新負荷を低減できる。また、MP検索テーブル401の全部又は一部(例えば第2サブテーブル412)をストレージメモリA1とストレージメモリB1の両方に互いに同期して格納することで、CTL Aの閉塞時は、MP検索テーブル401の参照先を、閉塞前の参照先であるストレージメモリA1からストレージメモリ B1に切り替えることで、SVIF01はストレージメモリ B1のMP検索テーブル401(例えば第2サブテーブル412)より情報を取得し、適切なMP振分け処理を継続することができる。
また、実施例1によれば、転送されるI/Oコマンドが、ターゲットMPのプロセッサ番号を含んでいてもよいし、複数のMP(MP番号)にそれぞれ関連付けられている複数のコマンド処理待ちメモリ領域のうちのターゲットMPに関連付けられているコマンド処理待ちメモリ領域(例えばキューイングメモリ)に格納されてもよい。後者の場合、I/Oコマンドが、宛先のポート(ストレージポート)に接続されているMPの番号を含んでいるものの、ターゲットMPのプロセッサ番号を含んでいてもいなくてもよい。また、複数のMP(MP番号)にそれぞれ関連付けられている複数のコマンド処理待ちメモリ領域は、転送先のメモリ(例えばストレージメモリA1又はA2)に設けられていて、転送元のI/F(例えばSVIF01の振分け部211)によって、複数のコマンド処理待ちメモリ領域のうちのターゲットMPに関連付けられているコマンド処理待ちメモリ領域に格納される。このため、転送元のI/Fは、MPのプロセッサ番号とコマンド処理待ちメモリ領域のアドレス(転送先メモリにおけるアドレス)との対応関係を表す情報(例えばアドレスマップ)を記憶していてよく、その情報を基に転送先のコマンド処理待ちメモリ領域が特定されてよい。また、MP毎のコマンド処理待ちメモリ領域は、ライトコマンド処理待ちメモリ領域とリードコマンド処理待ちメモリ領域等のようにコマンド種類毎のコマンド処理待ちメモリ領域を含んでいてもよいし、複数のコマンド種類に共通の領域であってもよい。
以下、実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。
実施例2では、ストレージ112(ストレージ制御モジュール113)がスケールアウトされる。具体的には、直列に(多段に)K個のストレージ制御モジュール113を接続し、且つ、N台のサーバ111(Nは2以上の整数、例えばN=8))に、K個のストレージ制御モジュール113の1番目のストレージ制御モジュール113を接続することができる。例えば、P個のシャーシ101を有し(Pは2以上の整数)、各シャーシ101が、少なくとも1つのストレージ制御モジュールを有していてよい。STIF144同士を接続することでP個のシャーシ101内のK個のストレージ制御モジュール113を直列(多段)に接続することが可能である。
実施例1ではK=1(及びP=1)であるが、Kは2以上の整数でよく、実施例2ではK=2である。以下、実施例2を詳細に説明する。なお、以下の説明では、「n番目のストレージ制御モジュール」という表現を使用することがあるが、nの値は、先頭のストレージ制御モジュールが最も小さく(n=1)、末尾のストレージ制御モジュールが最も大きい(n=K=2)。
図8は、実施例2に係る計算機システムの構成を示す。なお、図8では、ストレージポートの図示は省略されている。また、シャーシの参照符号以外の参照符号も図示が省略されている。
ストレージ制御モジュールを含んだ計算機サブシステムのスケールアウトにより計算機システムが構築されている。1つの計算機サブシステムは、1つのシャーシ101内の複数の要素で構成されている。本実施例では、実施例1で説明した構成のシャーシ(計算機サブシステム)が2個用意され、2個のシャーシ(以下、第1及び第2シャーシ)101A及び101BにおけるSTIF同士が接続される。図8では、第1シャーシ101A内の各要素の通し番号は、実施例1と同じであり、第2シャーシ101B内の各要素の通し番号は、第1シャーシ内の要素の通し番号と重複しない番号である。第2シャーシ101Bでも、ストレージ制御モジュール(二重化されたCTL C、D)に、8台のサーバ11〜18が接続されている。第1シャーシ101A内のSTIF A1、A2、B1及びB2が、第2シャーシ101B内のSTIF C1、C2、D1及びD2にそれぞれ接続されている。STIF144の構成はSVIF123の構成と同じであり、故に、STIF144の2つのBEIF部204には、別のSTIF144の2つのBEIF部204がそれぞれ接続されている。なお、1つのSTIF144の2つのBEIF部204に、異なる2つのストレージ制御モジュールのSTIF144が接続されてもよい。以下の説明では、n番目のストレージ制御モジュールにとっての(n+1)番目のストレージ制御モジュール(又は、サーバ111にとっての1番目のストレージ制御モジュール)を、「後段モジュール」と言うことがある。また、n番目のストレージ制御モジュールにとっての(n−1)番目のストレージ制御モジュール(又は、1番目のストレージ制御モジュールにとってのサーバ111)を、「前段モジュール」と言うことがある。サーバ01〜08にとっての1番目のストレージ制御モジュールは、CTL A、Bを有するストレージ制御モジュールであり、サーバ11〜18にとっての1番目のストレージ制御モジュールは、CTL C、Dを有するストレージ制御モジュールである。
STIFの接続は図示しているCTL AとCTL C、CTL BとCTL Dの接続以外にも、CTL AとCTL D、CTL BとCTL Cと接続されてもよい。また、接続するポート数は任意の数でもよい。
後段モジュールのMP141は、前段モジュールを介してSVIF123に対し、ログイン処理を実施する。例えば、MP C1が、MP検索テーブル401を作成し、作成したMP検索テーブル401の全部又は一部(例えば第2サブテーブル412)をストレージメモリA1に対し、STIF C1及びSTIF A1を介して送信してよいし、作成したMP検索テーブル401の全部又は一部(例えば第1サブテーブル411)をSVIF01に対し、STIF C1、STIF A1、及び、MP A1が接続されているストレージポートを介して、送信してもよい。そのMP検索テーブル401(第2サブテーブル412)中のデスティネーション情報は、MP C1が担当するVOLに関する情報を含んでよい。MP C1が、MP検索テーブル401を、前段モジュールのMP A1同様に作成することができる。つまり、2番目のストレージ制御モジュールにおけるMP
C1が、そのMP C1が担当するVOLに関する情報を、1番目のストレージ制御モジュールを介してサーバ01に提供することができる。すなわち、SVIF01及びストレージメモリA1の少なくとも一方には、前段MP検索テーブル401と後段MP検索用のMP検索テーブル401が格納される。それらのMP検索テーブル401がマージされたMP検索テーブル401が生成されてもよい。SVIF01は、MP C1に特定されるVOLがI/O先となるI/OコマンドについてはターゲットMPがMP C1となるように振り分けることになる。また、SVIF01が、ストレージ112から情報をもらってMP検索テーブル401を作成又は更新してもよいし、STIF C1が、ストレージ112から情報をもらってMP検索テーブル401を作成又は更新してもよい。前段と後段のストレージメモリの複数の場所に同じMP検索テーブル401があり、それぞれ同期していてもよい。
互いに接続されているSTIF144同士において、一方のSTIF(イニシエータとなるSTIF)144からI/Oコマンド又はI/O対象データを受信する他方のSTIF144は、そのコマンド又はデータをブリッジするだけでよい。例えば、STIF A1とSTIF C1同士において、STIF Aがイニシエータの場合、MP C1が、I/OコマンドをSTIF A1から受けそのI/Oコマンドをブリッジする。ブリッジされたI/Oコマンドは、ストレージメモリC1に転送され格納される。
図9は、実施例2に係るストレージメモリ143の構成を示す。ここでは、ストレージメモリA1を例に取る。
ストレージメモリA1が、コマンド用領域902と、レスポンス用領域903と、残り領域901とを有する。コマンド用領域902に、I/Oコマンドが格納され、レスポンス用領域903に、コマンドレスポンスが格納される。なお、転送リクエスト、転送レスポンスについても同様にコマンド用領域に転送リクエスト、レスポンス用領域に転送レスポンスが格納されてもよい。また、キューイングメモリ領域をI/Oコマンドと転送で共用し、例えば、コマンド用領域にI/Oコマンドと転送レスポンス、レスポンス用領域にI/Oレスポンス、転送リクエストが格納され、ストレージへのインバウンドかアウトバウンドかによって、キューイングメモリ領域が分けられてもよい。また、残り領域901に、転送リクエスト、転送レスポンス等の他のコマンドが格納されてもよく、更に残り領域に制御系のリクエスト、レスポンスが格納されてもよい。また、残り領域901から、キャッシュ領域が確保されてよい。更に、残り領域に制御系の情報やテーブル情報を格納していてもよい。
コマンド用領域902が、非転送用領域913と転送用領域912とを有し、同様に、レスポンス用領域903、非転送用領域915と転送用領域914とを有する。非転送用領域913に、MP A1がターゲットMPであるI/Oコマンドが格納され、非転送用領域915に、MP A1からのI/Oレスポンスが格納される。転送用領域912に、MP A1がターゲットMPではないI/Oコマンド(後段モジュールへの転送を必要とするI/Oコマンド)が格納され、転送用領域914に、MP A1がターゲットMPでない上記I/Oコマンドのリクエストが格納される。MP A1は、非転送用領域913に格納されているI/Oコマンドを処理する。MP A1は、転送用領域912に格納されているI/Oコマンドを後段モジュールに転送するようSTIF A1のDMA部212に指示してよい。或いは、転送用領域912内のI/Oコマンドは、後段モジュールのSTIF144からのポーリングにより取得されてもよい。更に、MP A1は、レスポンスに関しても、SVIF01のDMA部に転送するように指示してもよいし、SVIFからのポーリングにより取得されてもよい。このように、I/Oコマンド、レスポンスを受けたMP141ではなく、I/Oコマンド、レスポンスを送信、受信するI/F(SVIF123又はSTIF144)がI/Oコマンドの転送の要否を判定する。これにより、後段モジュールの転送処理負荷、又は後段モジュールからの転送処理を軽減することができる。SVIF123は、どちらのCTL131経由で後段のターゲットMPに対してI/Oコマンドを発行するかは、どのMPに振り分けるかの上記MP検索テーブル401を参照することで決定する。MP A1(又はMP A2とし、どちらかがMPを代表して処理を実施してもよいし、それぞれが行ってもよい)は、後段ストレージ(ストレージ制御モジュール)の増設時のキュー初期化を行い、キュー初期化において、MP C1とMP C2があることを認識し、ストレージメモリA1(又はA2)に、SVIF01からのI/OコマンドでありMP C1へ転送されるI/Oコマンドが格納される転送キュー(例えばMP C1に関連付けられたコマンド処理待ちメモリ領域)を作成する。そして、SVIF01がMP C1へアクセスするときはMP A1が処理する転送キューへ対応付けるための設定がSVIF01に対して行われる。これにより、SVIF01がMP C1用の転送キューを認識する。同様に、例えば、MP D1へのアクセスはMP B1の転送キューと対応付ける設定がSVIF01に対して行われる。なお設定は、MP
A1が代表して実施してもよいし、MP B1が実施してもよいし、それぞれが実施してもよい。これにより、どちらのポートから出せばよいかが決まる。キューが認識されたところで、MP C1からSVIF01へのログイン処理が実施され、MP C1とSVIF01間でポート番号などを交換しあう。また、MP C1は、MP検索テーブル401を作成し、SVIF01がMP C1のMP検索テーブル401を参照できるように、MP A1のMP検索テーブル401が記憶されているメモリにおける領域として、MP
C1のMP検索テーブル401の領域を、MP A1により確保してもらい、確保されたメモリ領域に、MP C1のMP検索テーブル401をセットする。MP C1がセットしたMP検索テーブル401には、サーバ01から後段ストレージのどのVOLへのアクセスはどのMP(C1又はC2、登録は片方のMP C1、C2のどちらかが代表して行ってもよいし、それぞれが行ってもよい)が担当するかが設定されている。なお、MP
D1及びD2についてのMP検索テーブル401はMP B1(又はB2)が設定してもよいし、代表してMP C1(又はC2)が設定してもよい。MP B1(又はB2)が設定したときは、MP B1(又はB2)が他のMP検索テーブル401を記憶しているメモリと同じメモリにコピーしてもよい。複数の場所に同じMP検索テーブル401があってよく、例えば、CTL AとCTL Bに同じMP検索テーブル401があってよく、それぞれは同期しており、片方を設定(又は更新)した後に、もう片方へ設定(又は更新)のためのコピーが行われてもよい。上記例であれば、MP C1(又はC2)のMP検索テーブルがCTL Aのストレージメモリに設定され、MP D1(又はD2)のMP検索テーブルがCTL Bのストレージメモリに設定され、お互いにコピーしあって、最終的に、CTL AのストレージメモリとCTL Bのストレージメモリに同じ全てのMP検索テーブルが登録されてよい。もしくは、MP C1(又はC2)とMP D1(又はD2)のMP検索テーブルがCTL Aのストレージメモリに設定され、そのMP検索テーブルがCTL Bへコピーされてもよい。これらの処理において、MP検索テーブル401の設定及びコピーは、コピー元のCTL及びコピー先のCTLのうちの少なくとも1つにおける1又は複数のMPにより行われてよい。なお、転送処理はそれぞれの転送キューを担当するMPが実施してよい。これにより、SVIF01が上気した後段のストレージのVOLにアクセスするときは、上記発行先ID中のプロセッサ番号に対応するMP経由でMP C1のキューにI/Oコマンドがセットされる。なお、転送用領域にMP C1のキューが設定されてもよい。これにより、SVIFが振分けによりI/Oコマンドの処理MPを一意に指定でき、長いパスを通ることによるレイテンシの増加や、無駄なパスを占有することによる利用帯域の増加、及び、無駄なMP横振りによるMP負荷を低減できる。なお、CTL AのSTIF A1(又はA2)とCTL BのSTIF B1(又はB2)が接続されていてもよく、上記振分け処理をSTIF A1、A2、B1及びB2のうちの少なくとも1つが実施してもよい。この場合、前段の振分けでD1(又は、D2)への振分けはA1(又は、B1)の転送領域にセットする。
ストレージ制御モジュールが直列(多段)の構成では、DMAの連携により、I/Oコマンド及びI/O対象データが転送される。このため、サーバ、前段ストレージ、後段ストレージをそれぞれPCIe直結することで、前段ストレージ制御モジュール同様に、MPは低負荷で、かつ、プロトコル処理のオーバヘッド少なく低レイテンシでデータ転送できる。また、広帯域を維持しつつ、ストレージ及びサーバのリソースを増設できる。よって、サーバ及びストレージのスケールアウト時も低レイテンシ、広帯域なI/Oの高速化が期待される。
図10は、実施例2に係るライト処理の流れを示す。
図6のS601〜S604及びS606〜S608と同様の処理が行われることで、ライトコマンド及びWRデータがストレージメモリA1に格納される。なお、本実施例に係る振分け処理では、SVIF01の振分け部211が、ターゲットMPの番号を含んだ発行先ID中のシャーシ番号から(図3参照)、ターゲットMPが1番目のストレージ制御モジュールに存在するか否かを判定する。その判定結果が真の場合、振分け部211が、ライトコマンドの格納先をストレージメモリA1における非転送用領域913に決定する。その判定結果が偽の場合、振分け部211が、ライトコマンドの格納先をストレージメモリA1における転送用領域912に決定する。SVIF01のDMA部212は、その決定に従いライトコマンドを格納する。なお、各SVIF(及び各STIF)のレジスタ部201には、後段モジュールのシャーシ番号が記憶されていて、SVIF01は、発行先ID中のシャーシ番号がSVIF01のレジスタ部201に記憶されているか否かを基に、ターゲットMPが後段モジュールにあるか否かを判定することができる。また、各STIF(及び各SVIFのレジスタ部201が後段モジュールのシャーシ番号を記憶しないで、各STIF(及び各SVIFの振分け部211が、自シャーシの番号でなく、記憶していないシャーシ番号のI/Oコマンドが来た場合は後段モジュールに転送することとしてもよい。
ライトコマンドがストレージメモリA1における非転送用領域913に格納されている場合、実施例1と同様の流れでライト処理が終了する。
ライトコマンドがストレージメモリA1における転送用領域912に格納されている場合、STIF A1のDMA部212が、ストレージメモリA1における転送用領域912からライトコマンドを取得し、STIF A1の振分け部211が、ライトコマンド内の発行先ID中のシャーシ番号から、後段モジュールにターゲットMPがあるか否かを判定する(S1001)。その判定結果が真の場合(例えばターゲットMPがMP C1の場合)、振分け部211が、ライトコマンドの格納先をストレージメモリC1における非転送用領域913に決定する。その判定結果が偽の場合、振分け部211が、ライトコマンドの格納先をストレージメモリC1における転送用領域912に決定する。ここでは、非転送用領域913に決定されたとする。STIF A1のDMA部212は、その決定に従いライトコマンドをSTIF C1を介してストレージメモリC1の非転送用領域913に転送(格納)し、MP C1が、そのライトコマンドをストレージメモリC1の非転送用領域913から取得する(S1002)。そして、格納先準備が行われる(S1003)。例えば、ターゲットMP C1が、ストレージメモリC1にライト先が同じデータがキャッシュされているか否かのキャッシュ判定を行う。そのキャッシュ判定の結果に応じて、キャッシュ領域の確保、及び、WRデータのDMA転送が行われる(キャッシュ判定結果処理)(S1004)。これにより、ストレージメモリC1における確保されたキャッシュ領域にWRデータが格納される。MP C1が、そのWRデータを、ストレージメモリC1の冗長メモリD1における確保されたキャッシュ領域にコピーする(S1005)。なお、図8のSTIF A1とSTIF D1をクロスして接続し、データ冗長化(S1005)の処理をSTIF A1が実施してもよい。その後、MP C1は、コマンドレスポンスをストレージメモリC1に格納し、STIF A1が、そのコマンドレスポンスをストレージメモリC1から取得し、コマンドレスポンスをストレージメモリA1に格納する(S1006)。SVIF01が、ストレージメモリA1からコマンドレスポンスを取得する(S1007)。そして、SVIF01が、リクエストレスポンスをサーバメモリ01に格納し、CPU01が、サーバメモリ01からリクエストレスポンスを取得する(S1008)。なお、S1004のフローはS605〜S608と同様の処理であり、フロントエンドのサーバからのリクエストか、バックエンドのストレージからのリクエストかが異なる。なお、図6はキャッシュミスの例を示している。また、フロントエンドとバックエンドの処理を区別するために、別々の処理待ちメモリ領域(例えばキューイングメモリ)にリクエストやレスポンスなどを配置するもしくは、リクエストやレスポンス内に区別できる識別子を設定してもよい。
図11は、キャッシュ判定結果処理の詳細を示す。
キャッシュ判定結果処理によれば、キャッシュヒットの場合(キャッシュ判定の結果が真の場合)に行われる処理であるキャッシュヒット処理と、キャッシュミスの場合(キャッシュ判定の結果が偽の場合)に行われるキャッシュミス処理とがある。キャッシュヒット処理としては、通常ヒット処理と、短縮ヒット処理とがある。通常ヒット処理は、図11に示される全ての処理を含んだ処理であり、短縮ヒット処理及びキャッシュミス処理は、それぞれ、通常ヒット処理の一部の処理である。
通常ヒット処理では、以下の処理が行われる。すなわち、ターゲットMP C1が、ストレージメモリC1からキャッシュ領域を一時的に確保する(S1101)。一時的に確保されたキャッシュ領域(以下、一時領域)は、例えばバッファ領域として管理されるような領域である。MP C1は、転送リクエストをストレージメモリC1に格納し、STIF A1が、転送リクエストをストレージメモリC1から取得する。転送リクエストにおいて、転送先アドレスは、一時領域のアドレスであり、転送元アドレスは、ストレージメモリA1における領域(WRデータが格納されている領域)のアドレスである。STIF A1が、転送リクエストに従いストレージメモリA1からストレージメモリC1の一時領域にWRデータをDMA転送し(S1103)、転送レスポンスをストレージメモリC1に格納し、MP C1が、転送レスポンスをストレージメモリC1から取得する(S1104)。その後、S1101〜S1104とほぼ同様の処理が再度行われる。具体的には、MP C1が、ストレージメモリC1からキャッシュ領域を正式に確保する(S1111)。確保されたキャッシュ領域は、ライト先が同じデータがキャッシュされている領域である。MP C1は、転送リクエストをストレージメモリC1に格納し、STIF
A1が、転送リクエストをストレージメモリC1から取得する(S1112)。STIF A1は、その転送リクエストに従いストレージメモリA1からストレージメモリC1の確保されたキャッシュ領域にWRデータをDMA転送し(S1113)、転送レスポンスをストレージメモリC1に格納し、MP C1が、転送レスポンスをストレージメモリC1から取得する(S1114)。なお、S1113のWRデータをストレージメモリA1からではなく、ストレージメモリC1に一時確保された領域からのDMA転送としてもよい。これにより、前段ストレージに障害が発生しても、後段に転送済みのデータを使って処理を完了できる。また、S1112〜S1114はMP C1が実施してもよい。これにより、前段ストレージに障害が発生し、STIF C1が利用できない場合でも、MP C1のDMAと後段に転送済みのデータを使って処理を完了できる。
通常ヒット処理として2段階を実施することより、キャッシュ上のデータを書き換えるときに、一時領域にデータを格納することとなる。よって、キャッシュヒットの上書き時には、STIF A1とSTIF C1との接続が切れた等でライトデータが途切たりした場合に新旧データが混ざった半端な状態となり、リカバリ不能となることを防ぐことができる。また、キャッシュを複数のサーバで共有しているために、複数のI/Oコマンドを同時に発行した場合のキャッシュへのアクセスを排他制御が必要となるが、一時領域にデータを格納することにより、MP C1のタイミングで上書き処理を実施できるようになり、処理のハンドリングがしやすくなる。なお、S1103で実際にデータを転送せずに、正式確保の後、S1113でデータを転送してもよい。これにより、帯域の利用率を上げることができ、上記データ破壊などの問題も回避できる。通常ヒット処理によれば、キャッシュ領域におけるキャッシュ済のデータがWRデータにより更新される。通常ヒット処理の後、MP C1は、コマンドレスポンスを発行する前又は発行した後、キャッシュ領域に格納されている更新済みデータを、PDEVに格納することができる。
短縮ヒット処理では、通常ヒット処理においてキャッシュ領域を正式に確保することが行われない。つまり、短縮ヒット処理は、通常ヒット処理のS1101〜S1104で構成され、通常ヒット処理におけるS1111〜S1114を含まない。短縮ヒット処理によれば、コマンドレスポンスを通常ヒット処理時に対して早く返すことができる。図8のSTIF A1とSTIF D1をクロスして接続し、データ冗長化はSTIF A1が実施してもよい。なお、短縮ヒット処理の後、MP C1は、コマンドレスポンスを発行する前又は発行した後、一時領域に格納されているWRデータと、ライト先が同じデータがキャッシュされている領域内のデータとに基づくデータ(キャッシュ済のデータがWRデータにより更新されたデータ)を、PDEVに格納することができる。なお、任意のタイミングで、MP C1又はSTIF A1がストレージメモリC1の一時確保の領域から正式確保の領域へデータ転送を実施してもよい。通常ヒット処理と短縮ヒット処理のどちらを行うかをターゲットMPが選択してよい。例えば、フラッシュメモリなどの比較的高速な媒体にデータを格納する際は、レスポンス重視で短縮ヒットを選択したり、HDDなどの比較的低速な媒体に格納する際はレスポンスタイムよりキャッシュヒットを優先し、通常ヒット処理を実施したりしてよい。これは、短縮ヒットの場合は、複数箇所にデータが置かれるため、更新前のデータと更新後のデータをマージした後のデータをヒットさせる必要があり、ヒット処理に若干の処理を含んでしまうためである。また、シーケンシャルアクセス、ランダムアクセスの違いによっても通常ヒット処理と短縮ヒット処理を選択してもよい。ターゲットMP C1(或いは他のMP(例えばC2))は、ストレージメモリC1のダーティ割合が所定割合未満の場合に、短縮ヒット処理を選択し、ダーティ割合が所定割合以上の場合に、通常ヒット処理を選択してよい。「ダーティ割合」とは、キャッシュ領域群の容量に対するダーティ容量の割合である。「ダーティ容量」は、ダーティのキャッシュ領域(PDEVに未だ格納されていないデータが格納されているキャッシュ領域)の総容量である。
キャッシュミス処理では、通常ヒット処理においてキャッシュ領域を一時的に確保することが行われない。つまり、キャッシュミス処理は、通常ヒット処理のS1111〜S1114で構成され、通常ヒット処理におけるS1101〜S1104を含まない。キャッシュミス処理において確保されるキャッシュ領域は、フリーのキャッシュ領域か、或いは、クリーンのキャッシュ領域(PDEVに格納済のデータのみを記憶したキャッシュ領域)である。ヒットミス処理の後、MP C1は、コマンドレスポンスを発行する前又は発行した後、確保されたキャッシュ領域に格納されているWRデータを、PDEVに格納することができる。
図12は、実施例2に係るリード処理の流れを示す。なお、実施例2では、オートレスポンスが採用された例を示している。
リードコマンドは、図10に示したライト処理におけるライトコマンドと同じように、ストレージメモリC1に格納される。具体的には、実施例1のS701〜S704と同様の処理が行われる。その後、STIF A1の振分け部211が、振分け処理により(S1201)、ターゲットMP C1を有するモジュールが後段モジュールであるため、リードコマンドをストレージメモリC1の非転送用領域913に転送(格納)し、MP C1が、ストレージメモリC1の非転送用領域913からリードコマンドを取得する(S1202)。そして、データ準備が行われる(S1203)。例えば、ターゲットMP C1が、ストレージメモリC1にRDデータがキャッシュされているか否かのキャッシュ判定を行う。キャッシュ判定の結果が偽であれば、MP C1が、ストレージメモリC1にキャッシュ領域を確保し、PDEVからキャッシュ領域にRDデータを読み出す。MP C1は、特殊転送リクエストをストレージメモリC1に格納し、STIF A1が、特殊転送リクエストをストレージメモリC1から取得する(S1204)。STIF A1が、特殊転送リクエストに従いストレージメモリC1のキャッシュ領域からストレージメモリA1にRDデータをDMA転送する(S1205)。STIF A1が、転送レスポンスをストレージメモリC1に格納し、MP C1が、転送レスポンスをストレージメモリC1から取得する(S1206)。STIF A1が、コマンドレスポンスをストレージメモリA1に格納し、MP A1が、コマンドレスポンスをストレージメモリA1から取得する(S1207)。MP A1が、特殊転送リクエストをストレージメモリA1に格納し、SVIF01が、特殊転送リクエストをストレージメモリA1から取得する(S1208)。SVIF01が、特殊転送リクエストに従いストレージメモリA1からサーバメモリ01にRDデータをDMA転送する(S1209)。SVIF01が、転送レスポンスをストレージメモリA1に格納し、MP A1が、転送レスポンスをストレージメモリA1から取得する(S1210)SVIF01が、リクエストレスポンスをサーバメモリ01に格納し、CPU01が、リクエストレスポンスをサーバメモリ01から取得する(S1211)。
以上、K=2(ストレージ制御モジュールが2つ)のケースを例に取ったが、K=3以上の整数となっても、サーバ111とターゲットMP間のコマンド及びデータの流れは同様である。すなわち、サーバ111とターゲットMP間においてDMA転送の連携により、コマンド及びデータが転送される。具体的には、転送モジュールが、順次後段側へとシフトしていくことになる。従って、転送モジュールは、サーバ111、又は、n番目のストレージ制御モジュール(nは1乃至(K−1)までのいずれかの整数)である。また、全てのシャーシ内の構成が同じでなくてもよい。例えば、ストレージ制御モジュール113を有しているがサーバ111を有していないシャーシが混在していてもよいし、複数のシャーシにおいてサーバ111の数が異なっていてもよい。
以下、実施例3を説明する。その際、実施例1及び2との相違点を主に説明し、実施例1及び2との共通点については説明を省略或いは簡略する。
実施例3では、サーバ111がスケールアウトされる(更に、実施例2のようにストレージもスケールアウトされてよい)。具体的には、ストレージ制御モジュールに、N台のサーバ111(実施例1及び2ではN=8)に加えて、Q台のサーバ111が接続される(Qは1以上の整数)。(N+Q)台のサーバ111は、複数のポート拡張モジュール経由でストレージ制御モジュールに接続される。ポート拡張モジュールは、例えば、ストレージからPCIe x4が16本出ているものから12本を別シャーシに出す切り替えを行い、残りの4本のポートでもとのサーバ8台を支える。別シャーシに出した12本はそれぞれ3つシャーシに4本ずつ接続し、それぞれのシャーシはサーバ8台でそれを利用する。図13では、SCM(Server-Storage Connect Module)1302とSCM1301の接続はPCIe x4を2本まとめて、PCIe x8で接続しているように記載している。このように、帯域を分割して、ポートを増やす目的でスイッチを利用する。なお、ストレージ制御モジュール113とSCM1302の間もPCIe x8とし、8本で接続してもよい。このスイッチは、内部バススイッチであり、FCスイッチなどに比べて低コストである。また、別筐体へ接続する線は、SCM内で内部バススイッチを経由する前にマルチプレクサのようにハードウェア回路で経路を切り替えて別筐体のSCM内の内部バススイッチに接続されてもよく、内部バススイッチが多段になる構成をせけて、機構がシンプルなものになるようにしてもよい。なお、SCMの内部バス同士を接続して、筐体を増やしていける構成としてもよい。各ポート拡張モジュール(内部バススイッチ)は、PCIeで通信可能である。すなわち、各ポート拡張モジュールは、CPUとSVIF間の通信のプロトコルと同じ通信プロトコルで通信可能である。以下の例では、ポート拡張モジュールは、信号の調整処理を行うSCM内に搭載されている。
図13は、実施例3に係る計算機システムの構成を示す。
図13によれば、Q=N=24である。すなわち、ストレージ制御モジュールに、8台のサーバ01〜08に加えて、別の24台のサーバ21〜48が接続される。サーバ21〜28は、サーバ01〜08を搭載したシャーシ101Cとは別のシャーシ101Dに搭載されている。サーバ31〜38はシャーシ101E、サーバ41〜48はシャーシ101Fに搭載されている。図13ではシャーシ101E、101Fの内部はシャーシ101Dと同様の構成とし、省略している。シャーシ101Dには、サーバ21〜28が搭載されているが、ストレージ制御モジュールは搭載されていない。つまり、このシャーシ101Dは、サーバ拡張用のシャーシでよい。シャーシ101E、シャーシ101Fも同様である。このシャーシは、サーバ21〜28と、それらに接続された複数のSCM1301を有する。SCM1301は、前述したように複数のポート拡張モジュールを内部に搭載している。なお、シャーシ101D、101E、101Fは101Cと同様にストレージ制御モジュール113を搭載したシャーシでもよい。この場合、内部構成は101Cと同様になる。また、図13ではシャーシが101C、101D、101E、101Fの4台の場合を示しているが、シャーシの数は任意の台数でもよい。また、図13では、ストレージ制御モジュール113に接続された複数のPDEV132は省略している。また、ストレージとSCMの接続ポート数、SCMとSCMの接続のポート数、サーバとSCMの接続ポート数は任意の数でもよい。また、SCMからポートを引き出し、外接用のポートとして、たとえばFCを用いてストレージ等を接続してもよい。
シャーシ101Cは、サーバ01〜08とストレージ制御モジュール113との間に介在する複数のSCM1302を有する。SCM1302は、ポート拡張モジュールを内部に有するSCMである。複数のSCM1302に、別のシャーシ101D内の複数のSCM1301が接続される。なお、例えばポート拡張モジュールに上記シンプルなスイッチを利用した場合は、SCM1301とSCM1302でスイッチが2段にならないようにSCM1301とSCM1302の接続ポート間は直接ストレージ制御モジュールが接続される形を取る。これにより、スイッチ多段化による障害処理系の複雑化を回避する。複数のSCM1301と複数のSCM1302間の通信のプロトコルもPCIeである。
各SCM1302は、複数の前段ポートと複数の後段ポートとを有する。前段ポートは、いずれかのサーバ111に接続されるポートであり、後段ポートは、ストレージ制御モジュール113のストレージポートに接続されるポートである。各SCM1302において、ポート拡張モジュールにスイッチ回路を利用した場合、前段ポートと後段ポートとの間の接続を切り替える、すなわち、どのサーバ111をK個のストレージ制御モジュール(Kは1以上の整数)のうちの1番目のストレージ制御モジュールに接続するかを制御する。このスイッチ回路は、例えば内部バススイッチとマルチプレクサの組合せである。
図13の構成時の各サーバのライト及びリードのI/Oフローは間にSCMをはさむが、基本的には図6、図7に従う。本実施例のように1台の共有ストレージに複数のサーバを接続することにより、サーバ負荷が高く、ストレージへのI/Oが比較的軽い用途に対してサーバとストレージのコストバランスを最適化する効果がある。なお、ストレージ制御モジュールのサーバ側をフロントエンドとした場合、SAS側のバックエンド側に、SCMを接続し、サーバ及びストレージをスケールしてもよい。
以上、一実施例を説明したが、本発明は、この実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
例えば、SVIF123及びSTIF144のうちの少なくも1つが、ASICに代えて、FPGA(Field Programmable Gate Array)のような回路であってもよい。
また、I/OコマンドとI/O対象データのうちI/OコマンドはDMAとは異なる方法で転送されてもよい。
また、各SVIF123の複数のBEIF部204が、MPクラスタを構成する複数のMPにそれぞれ接続されてもよい。MP141は、取得されたI/OコマンドのターゲットMPがMPクラスタ内の別のMPであることを特定した場合、そのI/OコマンドをターゲットMPに転送してよい。
また、SVIF123及びSTIF144がコマンド又はリクエスト等をメモリ121又は143から取得することは、ポーリングにより行われてもよいし、CPU122又はMP141からの指示に応答して行われてもよい。
また、実施例2のストレージ制御モジュール同士の接続において、STIVのBEIF部の数が増え、2台以上のストレージ制御モジュールに接続されてもよい。
111:サーバモジュール 113:ストレージ制御モジュール

Claims (14)

  1. 複数のストレージプロセッサを有する第1のストレージ制御モジュールと、
    サーバプロセッサと、前記サーバプロセッサと前記複数のストレージプロセッサのうちの少なくとも2のストレージプロセッサとに接続するサーバインタフェースデバイス(サーバI/F)とをそれぞれが有する少なくとも1のサーバモジュールと
    を有し、
    前記少なくとも1のサーバモジュールのうちのいずれか1のサーバである発行サーバの前記サーバプロセッサが、I/Oリクエストを発行し、
    前記発行サーバのサーバI/Fは、
    前記発行サーバの前記サーバプロセッサからI/Oリクエストを受け、
    前記I/Oリクエストの指定するデータの格納先アドレスであって前記発行サーバのサーバメモリ上の格納先アドレスを、前記発行サーバからの前記I/Oリクエストから取得し、
    前記受けたI/Oリクエストの発行サーバ識別情報と当該I/Oリクエストの宛先ストレージ記憶領域の識別情報と当該宛先ストレージ記憶領域を担当する前記ストレージプロセッサの識別情報とを対応付ける振り分け情報を参照することによって前記ストレージプロセッサを特定し、
    前記特定されたストレージプロセッサに前記I/Oリクエストに基づくI/Oコマンドを送信し、
    前記I/Oリクエストに基づいて生成したI/Oコマンドを前記特定されたストレージプロセッサに送信した返信として、前記I/Oリクエストの指定するデータの格納先アドレスであって前記第1のストレージ制御モジュールのストレージメモリ上の格納先アドレスを、前記特定された前記ストレージプロセッサから取得し、
    取得した前記サーバメモリ上の格納先アドレスと前記ストレージメモリ上の格納先アドレスとの間で前記データのメモリ間転送を行う、
    計算機システム。
  2. 複数のストレージプロセッサを有する第1のストレージ制御モジュールと、
    サーバプロセッサと、前記サーバプロセッサと前記複数のストレージプロセッサのうちの少なくとも2のストレージプロセッサとに接続するサーバインタフェースデバイス(サーバI/F)とをそれぞれが有する少なくとも1のサーバモジュールと
    を有し、
    前記少なくとも1のサーバモジュールのうちのいずれか1のサーバである発行サーバの前記サーバプロセッサが、I/Oリクエストを発行し、
    前記発行サーバのサーバI/Fは、
    前記発行サーバの前記サーバプロセッサからI/Oリクエストを受け、
    前記受けたI/Oリクエストの発行サーバ識別情報と当該I/Oリクエストの宛先ストレージ記憶領域の識別情報と当該宛先ストレージ記憶領域を担当する前記ストレージプロセッサの識別情報とを対応付ける振り分け情報を参照することによって前記ストレージプロセッサを特定し、
    前記特定されたストレージプロセッサに前記I/Oリクエストに基づくI/Oコマンドを送信し、
    前記第1のストレージ制御モジュールは、更に転送I/Fを有し、
    前記第1のストレージ制御モジュールの前記ストレージプロセッサは、前記転送I/Fを介して、第2のストレージ制御モジュールに含まれる複数のストレージプロセッサの何れかと接続されており、
    前記サーバI/Fは、前記I/Oリクエストを処理する前記ストレージプロセッサとして前記第2のストレージ制御モジュール内の前記ストレージプロセッサを特定する場合があり、
    前記転送I/Fは、前記I/Oリクエスト基づいて前記サーバI/Fが発行したI/Oコマンドを受信し、
    前記発行サーバの前記サーバI/F、及び、前記転送I/Fのうちの少なくとも一方が、前記I/Oリクエストに基づくI/Oコマンドについて特定されたストレージプロセッサが前記第1のストレージ制御モジュールに含まれる場合には、当該I/Oコマンドを、前記第1のストレージ制御モジュール内のストレージメモリにおける非転送用領域に書き込み、
    前記発行サーバの前記サーバI/F、及び、前記転送I/Fのうちの少なくとも一方が、前記I/Oリクエストに基づくI/Oコマンドについて特定されたストレージプロセッサが前記第1のストレージ制御モジュールに含まれない場合には、前記I/Oコマンドを、前記第1のストレージ制御モジュール内の前記ストレージメモリにおける転送用領域に書き込む、
    計算機システム。
  3. 前記振り分け情報を、前記複数のストレージプロセッサのうちの少なくとも1のストレージプロセッサが生成し、
    前記生成された振り分け情報を、前記発行サーバの前記サーバI/Fが参照する、
    請求項1又は2記載の計算機システム。
  4. 前記発行サーバの前記サーバメモリと前記第1のストレージ制御モジュールが有する複数のストレージメモリのうち前記特定されたストレージプロセッサの管理する前記ストレージメモリとの間で前記I/Oリクエストの指定するデータをメモリ間転送する、
    請求項1乃至3のうちのいずれか1項に記載の計算機システム。
  5. 前記サーバプロセッサと前記サーバI/Fを接続するバスによって、前記サーバI/Fと前記ストレージプロセッサは接続される、
    請求項1乃至4のうちのいずれか1項に記載の計算機システム。
  6. 前記サーバI/Fと前記ストレージプロセッサの接続はPCIexpressプロトコルによって行われる、
    請求項1乃至5のうちのいずれか1項に記載の計算機システム。
  7. 前記I/Oリクエストの宛先ストレージ記憶領域の識別情報は前記第1のストレージ制御モジュールに接続される少なくとも1の記憶デバイスの記憶領域によって提供されるボリュームの識別情報であって、
    前記振り分け情報は、前記ボリューム毎に当該ボリュームを担当する前記ストレージプロセッサを対応づけ、
    複数の前記ボリュームの間で異なる前記ストレージプロセッサが割り当てられている、
    請求項1乃至6のうちのいずれか1項に記載の計算機システム。
  8. 前記振り分け情報は、何れかの前記ストレージプロセッサの障害時と、何れかの前記ボリュームの構成が変更された時との少なくとも何れかの場合に更新される
    請求項7記載の計算機システム。
  9. 前記少なくとも1のサーバモジュールと前記第1のストレージ制御モジュールの間にポート拡張モジュールを有し、
    前記ポート拡張モジュールを介して別の前記少なくとも1のサーバモジュールが前記第1のストレージ制御モジュールに接続されており、
    前記ポート拡張モジュールが、そのポート拡張モジュールに接続されている複数台のサーバモジュールのうちのどれを前記第1のストレージ制御モジュールに接続するかを制御する、
    請求項1乃至8のうちのいずれか1項に記載の計算機システム。
  10. 複数のストレージプロセッサを有する第1のストレージ制御モジュールと、
    サーバプロセッサと、前記サーバプロセッサと前記複数のストレージプロセッサのうちの少なくとも2のストレージプロセッサとに接続するサーバインタフェースデバイス(サーバI/F)とをそれぞれが有する少なくとも1のサーバモジュールとを有する計算機システムにおいて実行されるデータ制御方法であって、
    前記少なくとも1のサーバモジュールのうちのいずれか1のサーバである発行サーバのサーバプロセッサにより、I/Oリクエストを発行し、
    前記発行サーバのサーバI/Fにより、前記発行サーバの前記サーバプロセッサからI/Oリクエストを受け、
    前記発行サーバのサーバI/Fにより、前記I/Oリクエストの指定するデータの格納先アドレスであって前記発行サーバのサーバメモリ上の格納先アドレスを、前記発行サーバからの前記I/Oリクエストから取得し、
    前記発行サーバのサーバI/Fにより、前記受けたI/Oリクエストの発行サーバ識別情報と当該I/Oリクエストの宛先ストレージ記憶領域の識別情報と当該宛先ストレージ記憶領域を担当する前記ストレージプロセッサの識別情報とを対応付ける振り分け情報を参照することによって前記ストレージプロセッサの特定し、
    前記発行サーバのサーバI/Fにより、前記特定されたストレージプロセッサに前記I/Oリクエストに基づくI/Oコマンドを送信し、
    前記発行サーバのサーバI/Fにより、前記I/Oリクエストに基づいて生成したI/Oコマンドを前記特定されたストレージプロセッサに送信した返信として、前記I/Oリクエストの指定するデータの格納先アドレスであって前記第1のストレージ制御モジュールが有するストレージメモリ上の格納先アドレスを、前記特定された前記ストレージプロセッサから取得し、
    前記発行サーバのサーバI/Fにより、取得した前記サーバメモリ上の格納先アドレスと前記ストレージメモリ上の格納先アドレスとの間で前記データのメモリ間転送を行う、
    データ制御方法。
  11. 複数のストレージプロセッサを有する第1のストレージ制御モジュールと、
    サーバプロセッサと、前記サーバプロセッサと前記複数のストレージプロセッサのうちの少なくとも2のストレージプロセッサとに接続するサーバインタフェースデバイス(サーバI/F)とをそれぞれが有する少なくとも1のサーバモジュールとを有する計算機システムにおいて実行されるデータ制御方法であって、
    前記少なくとも1のサーバモジュールのうちのいずれか1のサーバである発行サーバのサーバプロセッサにより、I/Oリクエストを発行し、
    前記発行サーバのサーバI/Fにより、前記発行サーバの前記サーバプロセッサからI/Oリクエストを受け、
    前記発行サーバのサーバI/Fにより、前記受けたI/Oリクエストの発行サーバ識別情報と当該I/Oリクエストの宛先ストレージ記憶領域の識別情報と当該宛先ストレージ記憶領域を担当する前記ストレージプロセッサの識別情報とを対応付ける振り分け情報を参照することによって前記ストレージプロセッサの特定し、
    前記発行サーバのサーバI/Fにより、前記特定されたストレージプロセッサに前記I/Oリクエストに基づくI/Oコマンドを送信し、
    前記第1のストレージ制御モジュールは、更に転送I/Fを有し、
    前記第1のストレージ制御モジュールの前記ストレージプロセッサは、前記転送I/Fを介して、第2のストレージ制御モジュールに含まれる複数のストレージプロセッサの何れかと接続されており、
    前記サーバI/Fは、前記I/Oリクエストを処理する前記ストレージプロセッサとして前記第2のストレージ制御モジュール内の前記ストレージプロセッサを特定する場合があり、
    前記転送I/Fにより、前記I/Oリクエスト基づいて前記サーバI/Fが発行したI/Oコマンドを受信し、
    前記発行サーバの前記サーバI/F、及び、前記転送I/Fのうちの少なくとも一方により、前記I/Oリクエストに基づくI/Oコマンドについて特定されたストレージプロセッサが前記第1のストレージ制御モジュールに含まれる場合には、当該I/Oコマンドを、前記第1のストレージ制御モジュール内のストレージメモリにおける非転送用領域に書き込み、
    前記発行サーバの前記サーバI/F、及び、前記転送I/Fのうちの少なくとも一方により、前記I/Oリクエストに基づくI/Oコマンドについて特定されたストレージプロセッサが前記第1のストレージ制御モジュールに含まれない場合には、前記I/Oコマンドを、前記第1のストレージ制御モジュール内の前記ストレージメモリにおける転送用領域に書き込む、
    データ制御方法。
  12. 前記複数のストレージプロセッサのうちの少なくとも1のストレージプロセッサにより、前記振り分け情報を生成し、
    前記発行サーバの前記サーバI/Fにより、前記生成された振り分け情報を参照する、
    請求項10又は11記載のデータ制御方法。
  13. 前記発行サーバの前記サーバメモリと前記第1のストレージ制御モジュールが有する複数のストレージメモリのうち前記特定されたストレージプロセッサの管理する前記ストレージメモリとの間で前記I/Oリクエストの指定するデータをメモリ間転送する、
    請求項10乃至12のうちのいずれか1項に記載のデータ制御方法。
  14. 前記サーバプロセッサと前記サーバI/Fを接続するバスによって、前記サーバI/Fと前記ストレージプロセッサは接続される、
    請求項10乃至13のうちのいずれか1項に記載のデータ制御方法。
JP2015546206A 2013-11-07 2013-11-07 計算機システムおよびデータ制御方法 Expired - Fee Related JP6074056B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/080133 WO2015068239A1 (ja) 2013-11-07 2013-11-07 計算機システムおよびデータ制御方法

Publications (2)

Publication Number Publication Date
JP6074056B2 true JP6074056B2 (ja) 2017-02-01
JPWO2015068239A1 JPWO2015068239A1 (ja) 2017-03-09

Family

ID=52597937

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015546206A Expired - Fee Related JP6074056B2 (ja) 2013-11-07 2013-11-07 計算機システムおよびデータ制御方法

Country Status (6)

Country Link
US (2) US8977781B1 (ja)
JP (1) JP6074056B2 (ja)
CN (1) CN105009099B (ja)
DE (1) DE112013006549T5 (ja)
GB (1) GB2535558A (ja)
WO (1) WO2015068239A1 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8671265B2 (en) 2010-03-05 2014-03-11 Solidfire, Inc. Distributed data storage system providing de-duplication of data using block identifiers
US9838269B2 (en) 2011-12-27 2017-12-05 Netapp, Inc. Proportional quality of service based on client usage and system metrics
US9054992B2 (en) 2011-12-27 2015-06-09 Solidfire, Inc. Quality of service policy sets
US9146890B1 (en) * 2013-01-25 2015-09-29 Pmc—Sierra Us, Inc. Method and apparatus for mapped I/O routing in an interconnect switch
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US9798728B2 (en) 2014-07-24 2017-10-24 Netapp, Inc. System performing data deduplication using a dense tree data structure
US9524103B2 (en) * 2014-09-10 2016-12-20 Netapp, Inc. Technique for quantifying logical space trapped in an extent store
US10133511B2 (en) 2014-09-12 2018-11-20 Netapp, Inc Optimized segment cleaning technique
US9671960B2 (en) 2014-09-12 2017-06-06 Netapp, Inc. Rate matching technique for balancing segment cleaning and I/O workload
JP2016058033A (ja) * 2014-09-12 2016-04-21 富士通株式会社 ストレージ制御装置およびストレージ制御プログラム
US9836229B2 (en) 2014-11-18 2017-12-05 Netapp, Inc. N-way merge technique for updating volume metadata in a storage I/O stack
US9720601B2 (en) 2015-02-11 2017-08-01 Netapp, Inc. Load balancing technique for a storage array
US9762460B2 (en) 2015-03-24 2017-09-12 Netapp, Inc. Providing continuous context for operational information of a storage system
US9710317B2 (en) 2015-03-30 2017-07-18 Netapp, Inc. Methods to identify, handle and recover from suspect SSDS in a clustered flash array
US9740566B2 (en) 2015-07-31 2017-08-22 Netapp, Inc. Snapshot creation workflow
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
JP6825263B2 (ja) * 2016-08-22 2021-02-03 富士通株式会社 ストレージ制御装置、およびストレージシステム
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
JP2018081346A (ja) * 2016-11-14 2018-05-24 日本電気株式会社 ストレージ装置、ストレージシステム、ストレージ制御方法、および、ストレージ制御プログラム
US11212209B2 (en) * 2019-07-16 2021-12-28 Hewlett Packard Enterprise Development Lp Speed determination for network ports
CN111061510B (zh) * 2019-12-12 2021-01-05 湖南毂梁微电子有限公司 一种可扩展的asip结构平台及指令处理方法
CN111092817A (zh) * 2019-12-23 2020-05-01 中国联合网络通信集团有限公司 一种数据传输方法及装置
JP7197545B2 (ja) * 2020-09-29 2022-12-27 株式会社日立製作所 ストレージシステム及びストレージシステムの制御方法
US20220291874A1 (en) * 2021-03-15 2022-09-15 Hitachi, Ltd. Data integrity checking mechanism for shared external volume
CN116708571B (zh) * 2023-07-22 2024-05-14 武汉船舶职业技术学院 一种基于5g通信的智能终端服务方法、系统及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011065551A (ja) * 2009-09-18 2011-03-31 Hitachi Ltd 計算機システムの管理方法、計算機システム及びプログラム
JP2012150623A (ja) * 2011-01-19 2012-08-09 Hitachi Ltd 計算機システムおよびpciカードのhba識別子引き継ぎ方式
WO2013118243A1 (ja) * 2012-02-06 2013-08-15 株式会社日立製作所 計算機システムおよびデータ入出力方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5991797A (en) * 1997-12-23 1999-11-23 Intel Corporation Method for directing I/O transactions between an I/O device and a memory
US6584513B1 (en) * 2000-03-31 2003-06-24 Emc Corporation Direct memory access (DMA) transmitter
US7080190B2 (en) * 2002-05-30 2006-07-18 Lsi Logic Corporation Apparatus and method for providing transparent sharing of channel resources by multiple host machines
JP4740763B2 (ja) * 2006-02-15 2011-08-03 株式会社日立製作所 ストレージシステム及びストレージコントローラ
JP5106913B2 (ja) 2007-04-23 2012-12-26 株式会社日立製作所 ストレージシステム、ストレージシステム管理方法、及び計算機システム
JP4774085B2 (ja) * 2008-07-31 2011-09-14 富士通株式会社 ストレージシステム
WO2012007999A1 (en) * 2010-07-16 2012-01-19 Hitachi, Ltd. Storage control apparatus and storage system comprising multiple storage control apparatuses
US8417898B2 (en) * 2010-10-07 2013-04-09 Hitachi, Ltd. Storage control apparatus and storage control apparatus control method
US8554963B1 (en) 2012-03-23 2013-10-08 DSSD, Inc. Storage system with multicast DMA and unified address space
KR101709118B1 (ko) * 2012-05-04 2017-02-22 한국전자통신연구원 하이브리드 스토리지 시스템의 파일 관리 방법 및 장치
CN103136131B (zh) * 2013-02-28 2017-02-08 浪潮集团有限公司 一种龙芯刀片服务器中实现计算刀片识别显示器的方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011065551A (ja) * 2009-09-18 2011-03-31 Hitachi Ltd 計算機システムの管理方法、計算機システム及びプログラム
JP2012150623A (ja) * 2011-01-19 2012-08-09 Hitachi Ltd 計算機システムおよびpciカードのhba識別子引き継ぎ方式
WO2013118243A1 (ja) * 2012-02-06 2013-08-15 株式会社日立製作所 計算機システムおよびデータ入出力方法

Also Published As

Publication number Publication date
US20150143002A1 (en) 2015-05-21
DE112013006549T5 (de) 2015-11-05
CN105009099B (zh) 2018-02-06
CN105009099A (zh) 2015-10-28
US8977781B1 (en) 2015-03-10
GB201513883D0 (en) 2015-09-23
WO2015068239A1 (ja) 2015-05-14
GB2535558A (en) 2016-08-24
JPWO2015068239A1 (ja) 2017-03-09
US10162567B2 (en) 2018-12-25

Similar Documents

Publication Publication Date Title
JP6074056B2 (ja) 計算機システムおよびデータ制御方法
US9823866B1 (en) Scalable data storage architecture and methods of eliminating I/O traffic bottlenecks
KR100793531B1 (ko) Raid 시스템 및 그 리빌드/카피백 처리 방법
US8725906B2 (en) Scalable data storage architecture and methods of eliminating I/O traffic bottlenecks
US9542320B2 (en) Multi-node cache coherency with input output virtualization
JP7135162B2 (ja) 情報処理システム、ストレージシステム及びデータ転送方法
US20110087833A1 (en) Local nonvolatile write-through cache for a data server having network-based data storage, and related operating methods
JP4528551B2 (ja) ストレージシステム
US9213500B2 (en) Data processing method and device
JP7105870B2 (ja) データアクセス方法、装置およびシステム
US9619404B2 (en) Backup cache with immediate availability
JP6068676B2 (ja) 計算機システム及び計算機システムの制御方法
JP2007128175A (ja) ストレージシステム
US10620843B2 (en) Methods for managing distributed snapshot for low latency storage and devices thereof
US10872036B1 (en) Methods for facilitating efficient storage operations using host-managed solid-state disks and devices thereof
US9940019B2 (en) Online migration of a logical volume between storage systems
US10503440B2 (en) Computer system, and data migration method in computer system
WO2017072868A1 (ja) ストレージ装置
US9477414B1 (en) Methods and systems for improved caching with data recovery
US9703714B2 (en) System and method for management of cache configuration
JP6825263B2 (ja) ストレージ制御装置、およびストレージシステム
US11972112B1 (en) Host IO device direct read operations on peer memory over a PCIe non-transparent bridge

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161124

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170105

R150 Certificate of patent or registration of utility model

Ref document number: 6074056

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees