JP2020161103A - ストレージシステム及びデータ転送方法 - Google Patents

ストレージシステム及びデータ転送方法 Download PDF

Info

Publication number
JP2020161103A
JP2020161103A JP2019144572A JP2019144572A JP2020161103A JP 2020161103 A JP2020161103 A JP 2020161103A JP 2019144572 A JP2019144572 A JP 2019144572A JP 2019144572 A JP2019144572 A JP 2019144572A JP 2020161103 A JP2020161103 A JP 2020161103A
Authority
JP
Japan
Prior art keywords
command
data
storage
drive
storage controller
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.)
Granted
Application number
JP2019144572A
Other languages
English (en)
Other versions
JP6898393B2 (ja
Inventor
洋俊 赤池
Hirotoshi Akaike
洋俊 赤池
紀夫 下薗
Norio Shimozono
紀夫 下薗
細木 浩二
Koji Hosoki
浩二 細木
定広 杉本
Sadahiro Sugimoto
定広 杉本
伸浩 横井
Nobuhiro Yokoi
伸浩 横井
良介 達見
Ryosuke Tatsumi
良介 達見
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to US16/573,815 priority Critical patent/US10620868B1/en
Priority to US16/793,855 priority patent/US10761764B1/en
Priority to US16/996,074 priority patent/US11301159B2/en
Publication of JP2020161103A publication Critical patent/JP2020161103A/ja
Priority to JP2021097036A priority patent/JP7135162B2/ja
Application granted granted Critical
Publication of JP6898393B2 publication Critical patent/JP6898393B2/ja
Active 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/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/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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/0658Controller construction arrangements
    • 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/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】ドライブ筐体からホストコンピュータにストレージコントローラを介さずに直接データを転送する高性能なストレージシステムを提供する。【解決手段】少なくとも一つのホストコンピュータと第1のネットワークを介して接続される少なくとも一つのドライブ筐体と、ドライブ筐体に接続されるストレージコントローラとを有し、ストレージコントローラは、ドライブ筐体に対し、論理ボリュームの作成を指示し、ドライブ筐体は、ストレージコントローラからの指示に従って、論理ボリュームを作成し、ホストコンピュータに対してストレージシステムの記憶領域を提供し、ホストコンピュータから、ストレージシステムの記憶領域に対し、IOコマンドを受信する。【選択図】図1

Description

本発明は、情報処理システム、ストレージシステム及びデータ転送方法に関し、例えば、フラッシュドライブを搭載したシステムに適用して好適なものである。
従来、ストレージシステムのドライブボックスはJBOD(Just a Bunch Of Disks)で、ドライブスロットにSAS/SATAドライブを搭載し、外部I/FとしてSAS(Serial Attached SCSI)ネットワークに接続できるものが主流であった。SASはコネクション単位でバスを占有する通信I/Fであり、多数のドライブ接続に適している一方でコネクション処理のオーバーヘッドが高く性能向上に適していない。また、高速なSSD向けのNVMeプロトコルに対応したJBODにおいても、ストレージシステムのストレージコントローラとJBODの接続が、PCI Express (PCIe)で直結した構成となるため、ドライブ接続の拡張性が低く、多数のドライブと接続することができない。最近は、SSD(Solid State Drive)等のフラッシュドライブの高性能化に伴い、高性能なI/Fを持つFBOF(Fabric-attached Bunch of Flash)がJBODの代替として出てきている。FBOFはEthernet、Infiniband等の高性能なネットワークに接続可能で、NVMe over Fabrics(NVMeoF)に対応しているという特徴がある。NVMeoFとは、NVMeプロトコルをネットワーク上で用いることができる規格である。この様な背景の下、SSDの高い性能を引き出すために、ストレージシステムにおいて高速なデータ転送と、ネットワーク接続によるドライブ接続の高拡張性が求められている。
(従来ストレージにおけるデータ転送帯域の問題)
従来ストレージでは、ストレージのフロントエンド(Frontend。以降、FEと略記する)ネットワークにホストコンピュータを接続し、フロントエンドネットワークとは互いに独立したバックエンド(Backend。以降、BEと略記する)ネットワークにドライブボックスを接続していた。FEネットワークはFC(Fibre Channel)ネットワークやEtherネットワークが主流であり、BEネットワークはSASネットワークが主流である。ホストコンピュータからのコマンドをストレージコントローラが受信すると、例えばリードコマンドの場合、ストレージコントローラがドライブボックス内のドライブからデータを読み出し、ホストコンピュータにデータ転送を行う。ストレージのBEネットワークを、FBOFの高性能なI/Fに対応したネットワークに変更することによって、SASネットワークに比べてBEネットワークのデータ転送帯域を拡大できるメリットがある。ところが、上述のデータ転送の経路は従来から変わらず、ストレージコントローラがホストコンピュータにデータ転送をすることから、FBOFを複数台接続してもストレージコントローラのデータ転送帯域がボトルネックとなり、FBOFの性能を引き出すことができないという問題がある。
(高速なデータ転送の実現方法)
近年、ホストコンピュータおよびストレージでは主にEtherネットワークベースで、FBOFと同様にNVMe over Fabrics規格への対応が行われている。FBOFはEtherネットワークに接続可能なI/Fを持ち、NVMe over Fabrics規格に対応しているので、ストレージのFEネットワークにおいてホストコンピュータとFBOF間でストレージコントローラを介さずに直接データ転送(以降、直転送と記す)することができる。この直転送によりストレージコントローラの性能ボトルネックを解消し、高速なデータ転送を実現することができる。
(直転送実現の課題)
直転送を実現するにあたり、以下の2つの課題がある。
(課題1)ストレージシステムの提供する論理ボリュームについて、ホストコンピュータから見たアドレス空間と、FBOF内のドライブのアドレス空間が異なり、ホストコンピュータは所望のデータがFBOF内のドライブのどのアドレスに格納されているか識別できない。
(課題2)ストレージシステムのキャッシュを使うことでデータアクセスの高性能化を行う場合、キャッシュに新データがある時は、ストレージのキャッシュからデータを読み込む必要があるが、ホストコンピュータは新データの有無を判断できない。
このような課題に対して、例えば特許文献1には、ホストコンピュータで動作するAgentソフトウエアが、ホストコンピュータのアクセス先データに対応するFBOF内のドライブとそのアドレスをストレージコントローラに問い合わせ、得られた情報を元に直接FBOF内のドライブにアクセスする発明が開示されている。
US9,800,661号明細書
特許文献1に開示された発明では、ホストコンピュータが直接FBOFのドライブにアクセスできる一方で、AgentソフトウエアでRAIDなどのデータ保護のための計算をしなくてはならず、ホストコンピュータ側に高信頼な処理を行うための計算負荷がかかる問題がある。
また、ストレージコントローラで動作するSnapshot、Thin Provisioningなどのプログラムプロダクト(ストレージ装置の機能)の動作と、Agentソフトウエアの動作との競合を避けるため、ネットワークを介した排他制御が必要となり、性能低下させる問題がある。
本発明は以上の点を考慮してなされたもので、Agentソフトウエアのようなストレージのデータ処理を行う特殊なソフトウエアをホストコンピュータに導入する必要がなく、FBOFからの直転送による高速なデータ転送を実現する情報処理システム、ストレージシステム及びデータ転送方法を提案しようとするものである。
また、ストレージ装置によるデータ保護とプログラムプロダクト機能を提供することができ、FBOFからの直転送による高速なデータ転送を実現する情報処理システム、ストレージシステム及びデータ転送方法を提案しようとするものである。
かかる課題を解決するために本発明の情報処理システムの一側面は、
記憶装置を有する少なくとも一つのドライブ筐体と、ドライブ筐体に接続されるストレージコントローラとを有し、ホストコンピュータにネットワークを介して接続されるストレージシステムであって、ドライブ筐体は、ストレージコントローラからの指示に従って、指定された識別名を有する論理ボリュームを作成し、ホストコンピュータに対して論理ボリュームを記憶領域として提供し、ホストコンピュータから論理ボリュームを提供するドライブ筐体に対して発行された第1のコマンドを受信し、ストレージコントローラに、第1のコマンドに対応する第2のコマンドを送信し、ストレージコントローラは、第2のコマンドへの応答をドライブ筐体に送信し、ドライブ筐体は、記第2のコマンドへの応答をストレージコントローラから受信すると、第2のコマンドへの応答に従って、ホストコンピュータに第1のコマンドの応答を行い、
論理ボリュームは、ストレージコントローラがデータ保護するデータ格納領域に対応する。
本発明によれば、高信頼かつ高性能な情報処理システムを構築しうる、情報処理システム、ストレージシステム及びデータ転送方法を実現できる。
実施例1の情報処理システム構成図である。 実施例1のドライブ筐体の構成図である。 実施例1のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャにおいてプログラムの構成図である。 NVMe over FabricsにおけるホストとNVM Subsystemの識別名を示す図である。 ユーザデータのアドレスマッピングの概念図である。 実施例1のストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。 実施例1のドライブエンクロージャにおけるデータ転送のオフロードコマンドの処理手順を示すフローチャートである。 転送方法の判定で用いるデータ転送条件を示す図である。 ホストコマンドのフォーマットを示した図である。 ストレージコントローラのホスト情報テーブルを示した図である。 ドライブ情報テーブルを示した図である。 オフロードコマンドのフォーマットを示した図である。 実施例2のキャッシュレスのストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。 実施例1のストレージコントローラにおけるホストコマンド(通常のコマンド)処理を示すフローチャートである。 実施例1のストレージコントローラにおけるデステージの処理手順を示すフローチャートである。 実施例2のキャッシュレスのストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。 実施例3のドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成を示す図である。 実施例3のNVMe over FabricsにおけるホストコンピュータとNVM Subsystemの識別名を示す図である。 実施例3のドライブエンクロージャにおけるホストコマンドとオフロードコマンドの処理手順を示すフローチャートである。 実施例3のストレージコントローラにおけるエンクロージャコマンドの処理手順を示すフローチャートである。 実施例3のストレージコントローラにおけるデステージの処理手順を示すフローチャートである。 実施例4の情報処理システムの構成を示すブロック図である。 実施例1のドライブエンクロージャにおけるコントローラコマンドの処理手順を示すフローチャートである。 実施例3のドライブエンクロージャにおけるコントローラコマンドの処理手順を示すフローチャートである。 ドライブエンクロージャのホスト情報テーブルを示す図である。 エンクロージャコマンドのフォーマットを示す図である。 実施例5のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャにおいてプログラムの構成図である。 実施例5のドライブエンクロージャにおけるホストコマンドの処理手順を示すフローチャートである。 実施例5のドライブエンクロージャにおけるコントローラコマンドの処理手順を示すフローチャートである。 実施例5のストレージコントローラにおけるエンクロージャコマンドの処理手順を示すフローチャートである。 実施例5のドライブエンクロージャにおける2重化領域とパリティ生成済み領域を示す図である。 実施例5のドライブエンクロージャにおける2重書きの対応関係を示す図である。 実施例7のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャにおいてプログラムの構成図である。 実施例7のドライブエンクロージャにおけるホストコマンドの処理手順を示すフローチャートである。 実施例7のストレージコントローラにおけるエンクロージャコマンドの処理手順を示すフローチャートである。 実施例9のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャにおいてプログラムの構成図である。 実施例9のストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。 実施例9のドライブエンクロージャにおけるオフロードコマンドの処理手順を示すフローチャートである。 アドレス変換テーブルの一例を示す図である。 データ保護ドライブグループテーブルの一例を示す図である。
以下、図面を参照して本発明の実施形態を説明する。以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされている。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は単数でも複数でも構わない。
以下の説明では、「テーブル」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ID」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
同一あるいは同様な機能を有する構成要素が複数ある場合には、基本的に同一の符号を付して説明する。
また、以下の説明では、プログラムを実行して行う処理を実行する場合があるが、プログラムは、中央処理部であるプロセッサ(例えばCPU)によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)および/またはインターフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主体がプロセッサとされてもよい。
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサと配布対象のプログラムを記憶する記憶資源を含み、プログラム配布サーバのプロセッサが配布対象のプログラムを他の計算機に配布してもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
(発明の概要)
FBOFは、ストレージコントローラから提供されたデータ転送情報に基づき、ストレージシステムのドライブからリードしたデータを、ホストコンピュータに転送(直転送)する。データ転送情報は、ホストコンピュータからのリードコマンドに指定された論理ボリュームのアドレスに対応するFBOF内のドライブとドライブ内のアドレスを含む。上記の、論理ボリュームのアドレスと、FBOF内のドライブとドライブ内のアドレスの対応関係は、ストレージ装置が構成情報に基づいて導出する。尚、ストレージコントローラは、図面上、CTLと表記する場合がある。また、ドライブを含むストレージシステムと対比し、ストレージコントローラをストレージ装置と呼ぶ場合がある。
ストレージコントローラがホストコンピュータからコマンドを受け取る場合、データ転送情報には、ホストコンピュータのデータ格納先のアドレス等の情報を含む。キャッシュを搭載するストレージコントローラにおいては、ストレージコントローラがキャッシュヒット、ヒットミス判定を行い、キャッシュヒットしたデータについてはストレージコントローラがホストコンピュータにデータを転送し、キャッシュヒットミスしたデータについてはFBOFがホストコンピュータにデータを転送する。
本実施の形態のストレージ装置およびデータ転送方法によれば、ストレージコントローラの通信I/Fと、キャッシュ制御やバッファを使わず、FBOFとホストコンピュータの間で直接データ転送することによるリードIO性能の向上とレイテンシの削減(応答性能向上)が見込める。更に、リードIO性能については、FBOF追加による性能スケーリングが見込める。
以下図面について、本発明の一実施の形態を詳述する。
(1)実施例1の情報処理システムの構成
図1は実施例1の情報処理システム構成図である。図1は、ホストコンピュータやストレージコントローラと同じネットワークにドライブ筐体を接続する形態(接続形態1:実施例1、実施例2、実施例3、実施例5、実施例7、実施例9)による情報処理システムの構成を示している。
この情報処理システム100は、1又は複数のホストコンピュータ110と、ストレージ装置120と、ドライブ筐体140を備え、これらがLAN(Local Area Network)又はインターネット等からなるネットワーク150を介して相互に接続されて構成されている。ドライブ筐体140がFBOFである。ドライブ筐体は、図面の表記の関係で、ENC、或いはドライブエンクロージャと呼ぶことがある。ストレージ装置120とドライブ筐体140とでストレージシステムを構成する。ネットワーク150は、例えば、Ethernet(登録商標)、Infiniband(登録商標)等の高性能なネットワークで、NVMe over Fabrics(NVMeoF)に対応している。
ホストコンピュータ110は、CPU(Central Processing Unit)及びメモリ等の情報資源を備えたコンピュータ装置であり、例えば、オープン系のサーバや、クラウドサーバ等から構成される。ホストコンピュータ110は、ユーザ操作や、実装されたプログラムからの要求に応じてネットワーク150を介してストレージ装置120にライトコマンドやリードコマンドを送信する。
ストレージ装置120は、ストレージとしての機能をホストコンピュータ110に提供するための必要なソフトウエアが実装された装置であり、冗長化されたストレージコントローラ121とストレージコントローラ122から構成される。ストレージコントローラ121は、マイクロプロセッサ123、メモリ125、フロントエンドインタフェース(ネットワークI/F)126及び記憶装置129とを備える。ストレージコントローラ122はストレージ121と同じ構成である。
マイクロプロセッサ123は、ストレージコントローラ121全体の動作制御を司るハードウェアであり、1又は複数のプロセッサコア124を有する。各プロセッサコア124は、ホストコンピュータ110から与えられたリードコマンドやライトコマンドに応じて、対応するドライブ筐体(FBOF)140にデータを読み書きする。
またメモリ125は、例えば、SDRAM(Synchronous Dynamic Random Access Memory)等の半導体メモリから構成され、必要なプログラム(OS(Operating System)を含む)やデータを記憶保持するために利用される。メモリ125は、マイクロプロセッサ123の主記憶であり、マイクロプロセッサ123が実行するプログラム(ストレージ制御プログラム等)や、マイクロプロセッサ123が参照する管理テーブル等が格納される。また、メモリ125は、ストレージコントローラ121のディスクキャッシュ(キャッシュメモリ)としても使用される。
メモリ125に格納されたプログラム(図3、図14、図23に示すプログラム)をマイクロプロセッサ123のプロセッサコア124が実行することにより、ストレージ機能をホストコンピュータ110に提供するための各種処理が実行される。ただし、以下においては、理解の容易化のため、かかるプログラムをマイクロプロセッサ123が実行するものとして説明を進める。
ネットワークI/F126は、ホストコンピュータ110に対するインタフェースであり、ネットワーク150を介したホストコンピュータ110との通信時におけるプロトコル制御を行う。
記憶装置129には、OSやストレージ制御プログラム、管理テーブルのバックアップ等が格納される。記憶装置129は、例えばHDDやSSD(Solid State Drive)である。
ストレージコントローラ122はストレージコントローラ121と同じ内部構成のため、図示を省略した。ストレージコントローラ121とストレージコントローラ122間はNon transparent bridge等のMP間I/F134で接続され、ユーザデータや、ストレージ構成情報などを含む制御情報が通信される。ストレージコントローラ122の動作もストレージコントローラ121と同様であり、説明の簡略化のために、特に断りがない限り以降ではストレージコントローラ121のみ説明する。
(2)ドライブ筐体の構成
図2は、ドライブ筐体の構成図である。ドライブ筐体140は、ドライブの制御と、外部から記憶装置であるドライブに読み書きする機能を提供するための必要なソフトウエアが実装された装置である。また、ドライブ筐体は、冗長化されたドライブエンクロージャ200とドライブエンクロージャ201、1又は複数のドライブ218から構成される。ドライブエンクロージャの冗長化はドライブ筐体の可用性と信頼性向上のために望ましいが、必須ではない。ドライブ筐体を冗長化の無い単一のドライブエンクロージャから構成しても良い。
ドライブエンクロージャ200は、マイクロプロセッサ202、メモリ204、ネットワークI/F205及びPCIeスイッチ214と、記憶装置208とを備える。ドライブ218はデュアルポートのNVMeドライブで、PCIe接続ポート219と222を備える。PCIe接続ポート219と222は、それぞれドライブエンクロージャ200のPCIe SW(Switch)214のPCIe接続ポート221と、ドライブエンクロージャ201のPCIe SW214のPCIe接続ポート221に、それぞれPCIeリンク220とPCIeリンク223で接続される。ドライブ218は、ストレージシステムの記憶領域を構成し、ホストコンピュータからのデータを格納する記憶装置である。なお、ドライブ218は必ずしもNVMeドライブである必要はなく、例えばSASドライブやSATAドライブであってもよい。またドライブ218は必ずしもデュアルポートである必要はなく、シングルポートであってもよい。
マイクロプロセッサ202は、ドライブエンクロージャ200全体の動作制御を司るハードウェアであり、1又は複数のプロセッサコア203を有する。各プロセッサコア203は、ストレージ装置120から与えられたリードコマンドやライトコマンドに応じて、対応するドライブ218にデータを読み書きするとともに、ストレージ装置120から与えられたデータ転送コマンドに応じて、ホストコンピュータ110との間のデータ転送を行う。
またメモリ204は、例えば、SDRAM(Synchronous Dynamic Random Access Memory)等の半導体メモリから構成され、必要なプログラム(OS(Operating System)を含む)やデータを記憶保持するために利用され、キャッシュメモリとして機能する。
メモリ204は、マイクロプロセッサ202の主記憶であり、マイクロプロセッサ202が実行するプログラム(ドライブエンクロージャ制御プログラム等)や、マイクロプロセッサ202が参照する管理テーブル等が格納される。メモリ204に格納されたプログラムをマイクロプロセッサ202のプロセッサコア203が実行することにより、FBOFを含むドライブエンクロージャ機能をストレージ装置120とホストコンピュータ110に提供するための各種処理が実行される。ただし、以下においては、理解の容易化のため、かかるプログラムをマイクロプロセッサ202が実行するものとして説明を進める。
ネットワークI/F205とPCIe SW214のPCIeポート215は、それぞれマイクロプロセッサ202のPCIeポート207とPCIeポート217に、それぞれPCIeリンク206とPCIeリンク216で接続される。
記憶装置208には、OSやドライブエンクロージャ制御プログラム、管理テーブルのバックアップ等が格納される。記憶装置208は例えばHDDやSSDである。
ドライブエンクロージャ201はドライブエンクロージャ200と同じ内部構成のため、図示を省略した。ドライブエンクロージャ200とドライブエンクロージャ201間はNon transparent bridge等のMP間I/F213で接続され、ユーザデータや、ドライブエンクロージャ構成情報などを含む制御情報が通信される。ドライブエンクロージャ201の動作もドライブエンクロージャ200と同様であり、説明の簡略化のために、特に断りがない限り以降ではドライブエンクロージャ200のみ説明する。
(3)ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成
図3は、実施例1のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャにおいて実施例1に直接関与するプログラムの構成の図であり、ストレージコントローラがホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態による(ターゲット構成形態1:実施例1、実施例2、実施例9)を示す。
ホストコンピュータ110のプログラムはアプリケーションプログラム300、イニシエータドライバ301および図示しないOS(Operation System)から構成される。
アプリケーションプログラム300は、例えば、数値計算プログラムや、データベース、Webサービス等のプログラムである。イニシエータドライバ301は、ターゲットドライバが提供するNVMeoF(NVMe over Fabrics)対応の記憶領域を認識し、リード、ライト等のコマンドのアプリケーションI/Fをアプリケーションプログラムに対して提供する。実施例1では、ホストコンピュータ110のイニシエータドライバ301は、ストレージコントローラ121のターゲットドライバ302と、ドライブエンクロージャ200のターゲットドライバ308の提供するNVMeoF対応の記憶領域を認識する。
ストレージコントローラ121のプログラムは、ターゲットドライバ302、イニシエータドライバ303、ホストコマンド処理部304、データ転送制御部(ホストコンピュータとストレージコントローラ間)305、キャッシュ制御部306、データ転送オフロード部307、オフロードコマンド通信部(イニシエータ)315、デステージ処理部314、アドレス変換部318、および図示しないOSから構成される。
ターゲットドライバ302は、イニシエータドライバ301に対してNVMeoF対応の記憶領域を提供するとともに、ホストコマンドの受信、コマンドの完了応答の送信を行う。
イニシエータドライバ303は、ターゲットドライバ308の提供するNVMeoF対応の記憶領域を認識するとともに、ドライブエンクロージャ200との間でコマンドの送信、コマンドの完了応答の受信を行う。ストレージコントローラ121がドライブエンクロージャ200に発行するコマンドをコントローラコマンドと呼ぶ。
ホストコマンド処理部304は、ホストコンピュータが発行したコマンドを、ターゲットドライバ302を介して受信し、コマンドの解析、リードコマンド・ライトコマンド・管理コマンドの処理、コマンドの完了応答の作成、ターゲットドライバ302を介したコマンドの完了応答の送信等を行う。
データ転送制御部(ホストコンピュータとストレージコントローラ間)305は、ホストコマンド処理部304の指示に従い、NVMeoFに対応したストレージコントローラとホストコンピュータとの間のデータ転送処理を行う。
キャッシュ制御部306は、キャッシュデータの検索に基づくキャッシュヒット、ヒットミスの判定、ダーティデータ(物理ドライブへの書込み前の状態)とクリーンデータ(物理ドライブへの書込み後の状態)の各状態間の遷移、キャッシュ領域のリザーブ及びリリース等の制御を行う。キャッシュヒット、ヒットミスの判定は、ホストコンピュータからのIOコマンドに応答するデータがストレージコントローラのキャッシュメモリ204にあるか否かを判定する。例えば、ホストコンピュータからのIOコマンドがリードコマンドの場合、リードコマンドに応答するデータがキャッシュメモリ204上にあるか否を判定する。これらのキャッシュ制御の各処理は広く知られた技術であり、ここでの詳細な説明を省略する。
データ転送オフロード部307は、データ転送のオフロードコマンド(データ転送パラメータ)を作成し、ドライブエンクロージャ(200もしくは201)に対してホストコンピュータへのデータ転送をオフロードコマンドで指示する。オフロードコマンド通信部(イニシエータ)315は、ドライブエンクロージャとの間でオフロードコマンドの送信、応答の受信を行う。
デステージ処理部314は、イニシエータドライバ303を介して、キャッシュ内のデータをドライブに書き込むデステージ処理を行う。アドレス変換部318は、ストレージコントローラの管理するname space504のデータ範囲505と、データの格納先であるドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509とのマッピングテーブルを持ち、データ範囲505のアドレスを、対応するドライブエンクロージャ200、ドライブ、ドライブ内の記憶領域のアドレスに変換する。
ドライブエンクロージャ200のプログラムは、ターゲットドライバ308、コントローラコマンド処理部309、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)310、データ転送制御部(ストレージコントローラとドライブエンクロージャ間)316、オフロードコマンド通信部(ターゲット)313、オフロードコマンド処理部311、ドライブ制御部312、バッファ制御部317、および図示しないOSから構成される。
ターゲットドライバ308は、イニシエータドライバ301とイニシエータドライバ303に対してNVMeoF対応の記憶領域を提供するとともに、ホストコンピュータとの間でホストコマンドの受信、コマンドの完了応答の送信を行い、ストレージコントローラとの間でコントローラコマンドの受信、コマンドの完了応答の送信を行う。
コントローラコマンド処理部309は、ストレージコントローラが発行したコマンドを、ターゲットドライバ308を使用して受信し、コマンドの解析、リード・ライト処理、コマンドの完了応答の作成、ターゲットドライバ308を介したイニシエータドライバ303に対するコマンドの完了応答の送信等を行う。
データ転送制御部(ホストコンピュータとエンクロージャ間)310は、オフロードコマンド処理部311の指示に従い、NVMeoFに対応したホストコンピュータとドライブエンクロージャとの間のデータ転送処理を行う。データ転送制御部(ストレージコントローラとエンクロージャ間)316は、コントローラコマンド処理部309の指示に従い、NVMeoFに対応したストレージコントローラとドライブエンクロージャとの間のデータ転送処理を行う。
オフロードコマンド通信部(ターゲット)313は、ストレージコントローラからのオフロードコマンドの受信と応答の送信を行う。オフロードコマンド処理部311は、ストレージコントローラ121からのデータ転送のオフロードコマンドを受信し、オフロードコマンドの解析、リード処理、オフロードコマンドの完了応答の作成、オフロードコマンドの完了応答の送信等を行う。
ドライブ制御部312は、ドライブ218の管理と、コントローラコマンド処理部309およびオフロードコマンド処理部311の指示に従ってドライブ218に対してリード・ライト処理を行う。バッファ制御部317は、データ転送を行うための一時的なメモリ領域であるバッファの確保と解放を行う。
(4)NVMe over FabricsにおけるホストコンピュータとNVM Subsystemの識別名
図4は、NVMe over FabricsにおけるホストコンピュータとNVM Subsystemの識別名を示す図である。つまり、ターゲット構成形態1によるNVMe over FabricsにおけるホストコンピュータとNVM Subsystemの識別名を示す図である。
識別名とはNVMe over Fabrics規格のNQN (NVMe Qualified Name)であり、ファブリック内でユニークである。NVM Subsystemとは、記憶領域(NVMe規格ではnamespaceと呼ばれる)と、管理コマンドおよびリード・ライト等のIOコマンドの処理機能を持つ論理的なドライブである。図4のNQNは、理解の容易化のため、規格で定められたフォーマットではない簡略化した文字列で表している。
ホストコンピュータ110は、少なくとも1つの識別名401(ホストNQN)を持つ。ホストコンピュータ110は複数でもよいが、図示を省略した。ドライブエンクロージャ200は、少なくとも1つの識別名402(NVM Subsystem NQN)を持つ。例えば、ドライブ筐体140のドライブ218毎に1つの識別名402を持つ。上記はドライブエンクロージャ201についても同様であり、説明は省略する。ドライブエンクロージャ200とドライブエンクロージャ201は二つ以上でもよいが、図示を省略した。
ストレージコントローラ121は、少なくとも1つの識別名403(NVM Subsystem NQN)を持つ。この識別名403に対応するNVM Subsystemの中に、ストレージプールの一部を割り当てた論理的な記憶領域がnamespaceとして割り当てられる。ストレージプールとは、複数のドライブ218の記憶領域から構築され、RAID等のデータ保護がされた記憶領域である。上記はストレージコントローラ122のNVM Subsystemについても同様であり、説明は省略する。
ストレージ装置120とドライブ筐体140の起動後、ドライブエンクロージャ200(およびドライブエンクロージャ201)は、上記識別名402を持つNVM Subsystemを作成する。また、ストレージコントローラ121(およびストレージコントローラ122)は、ドライブエンクロージャ200(およびドライブエンクロージャ201)に対してconnectコマンドを送ることで、ドライブエンクロージャ200(およびドライブエンクロージャ201)のNVM Subsystemにコマンド送信およびデータ転送できるようにするとともに、上記識別名403を持つNVM Subsystemを作成する。
ホストコンピュータ110は、ストレージコントローラ121(およびストレージコントローラ122)とドライブエンクロージャ200(およびドライブエンクロージャ201)に対してconnectコマンドを送ることで、ストレージコントローラ121(およびストレージコントローラ122)とドライブエンクロージャ200(およびドライブエンクロージャ201)のNVM Subsystemにコマンド送信およびデータ転送できるようにする。
(5)ユーザデータのアドレスマッピング
図5は、ユーザデータのアドレスマッピングの説明に供する概念図である。つまり、ユーザデータのアドレスマッピングの説明に供する概念図である。
ホストコンピュータ110はOSがアプリケーションプログラムに提供する連続した仮想メモリ500と、実際のデータの格納先である物理メモリ502を備える。
ホストコンピュータ110のアプリケーションプログラムは、例えばストレージコントローラ121にリードコマンドを発行するときに、仮想メモリ500内にリードデータの格納先として仮想メモリ領域501を確保する。仮想メモリ領域501は、メモリ管理単位であるページ単位で、物理メモリ内の物理メモリ領域503に対応している。アプリケーションプログラム300がストレージ装置120に発行するリードコマンドは、リード対象のnamespace504(ストレージ装置において論理ボリュームに相当する)と、namespace504内のデータ範囲505に対応するnamespace504内のアドレスと、データ転送長と、ホストコンピュータ110内でデータ転送に用いる物理メモリ領域503の情報と、を指定するフィールドを有する。
データ範囲505「a」−「d」のデータは、ストレージコントローラ121内のキャッシュ506のキャッシュ管理単位であるキャッシュセグメント507、もしくは、ドライブエンクロージャ200に接続するドライブ508内の記憶領域509に格納される。キャッシュ506はデータの一時的な格納に用いられる。1つのキャッシュセグメントには、例えば、64KBのデータを格納することができる。実施例1では、キャッシュ管理単位をキャッシュセグメントとして説明するが、1又は複数のキャッシュセグメントを関連付けたキャッシュスロットの単位で管理してもよい。
図5では、一例として、データ範囲505内の「a」箇所にデータが書き込まれ、キャッシュセグメント507に新データが格納され、ドライブ508内の記憶領域509の「a」箇所のデータが旧データとなった状態を示している。ストレージコントローラ121のデステージング処理によりキャッシュセグメント507のデータが記憶領域509の「a」箇所に書き込まれ、新データに更新されると、キャッシュセグメント507は解放され、再利用できる状態となる。
namespace504内のデータ範囲505に対応するキャッシュセグメント507とのマッピング、もしくはドライブエンクロージャ200と、ドライブ508と、記憶領域509のアドレスとのマッピングは、ストレージコントローラ121で管理する。
namespace504内のデータ範囲505に対応するキャッシュセグメント507とのマッピングは、従来のキャッシュメモリと同じであり説明を省略する。
namespace504内のデータ範囲505に対応するドライブエンクロージャ200と、ドライブ508と、記憶領域509のアドレスとのマッピングは、図36Aにて説明する。
(36)アドレス変換テーブル、データ保護ドライブグループテーブル
図36Aはアドレス変換テーブル、図36Bはデータ保護ドライブグループテーブルを示す図である。これらアドレス変換テーブル及びデータ保護ドライブグループテーブルは、ストレージコントローラ121によって管理される。
図36Aは、namespace504内のデータ範囲505とデータ格納先のアドレスのマッピング情報である、アドレス変換テーブル3600を示す図である。アドレス変換テーブル3600は、論理ボリュームのアドレスからデータ格納先のアドレスに変換するアドレス変換処理で使用される。アドレス変換テーブル3600は、論理アドレス3601、ドライブ領域番号3602、ドライブアドレス3603の項目を含む。
実際のストレージシステムでは、論理ボリューム、ストレージプール、キャッシュ、RAIDやミラーリング等で保護された記憶領域、ドライブという複数の階層が存在し、アドレス変換処理は多段となる。本実施例では説明を簡単にするため、実施例の説明に必要となる階層以外を省略し、例として論理ボリュームとドライブのアドレスの対応関係のみを述べる。論理ボリュームはNVM SubsystemとNamespaceのペアに対応する。例では、論理ボリューム毎に1つアドレス変換テーブル3600が存在するものとした。論理アドレス3601は、論理ボリューム内の論理アドレスである。ドライブ領域番号3602は、ドライブ508の識別番号である。
ドライブ領域番号3602は、図9Cにて詳細を説明する。ドライブアドレス3603は、ドライブ508内のデータ格納先のアドレスである。以降の説明で、ドライブアドレスを物理アドレスと呼ぶ場合がある。ドライブアドレス3603のテーブル要素の形態はデータの格納方式に依存する。本実施例ではデータ保護方式をRAIDとして、アドレス変換テーブル3600で論理アドレス3601とドライブ領域番号3602、ドライブアドレス3603を対応付ける。データ保護方式がミラーリングの場合は、アドレス変換テーブル3600で論理アドレス3601と、ミラー元とミラー先のそれぞれのドライブ領域番号3602、ドライブアドレス3603を対応付ける。
アドレス変換テーブルにおけるアドレスの管理単位、すなわち論理アドレスとドライブアドレスの対応付けの単位は、例えばRAIDストライプ単位である。論理ボリュームのブロックサイズは例えば512B、RAIDストライプサイズは例えば512KB(=1024 Block)である。本実施例では論理アドレスとデータ格納先の対応関係を容易に理解できるように、アドレス変換テーブルを用いてアドレス変換処理を説明した。RAIDやミラーリング等のデータ保護方式では、計算によりアドレス変換をすることが可能であり、アドレス変換処理は本方法に限定されるものではない。例えば、RAIDではパリティサイクルの単位で論理アドレスとドライブアドレスの対応付けに周期性があり、RAIDグループのドライブ構成と周期性を用いて、論理アドレス3601からドライブ領域番号3602、ドライブアドレス3603を計算することができる。RAIDグループのドライブ構成は、図36Bで説明する。
図36Bは、データ保護に用いるドライブグループの管理情報である、データ保護ドライブグループテーブル3610を示す図である。データ保護ドライブグループテーブル3610は、ドライブグループ番号3611、データ保護方式3612、ドライブ構成3612の項目を含む。
ドライブグループ番号3611は、ドライブグループの識別番号である。データ保護方式3612は、ドライブグループのデータ保護方式を示している。例えばRAID5(3D+1P)、RAID6(6D+2P)、ミラーリングなどである。“D”はデータドライブ、“P”はパリティドライブを示している。例えば“3D+1P”は3台のデータドライブ、1台のパリティドライブで、合計4台のドライブで構成されることを示している。ドライブ構成3612は、ドライブグループを構成するドライブのドライブ領域番号を示している。データ保護ドライブグループテーブル3610は、ストレージシステムの構成情報の1つとして、ストレージ装置120が管理・保存する。
(6)ストレージコントローラにおけるホストコマンドの処理手順
図6は、実施例1のストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。つまり、ターゲット構成形態1によるストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。
ストレージコントローラ121のターゲットドライバ302がホスト110からコマンドを受信すると、ホストコマンド処理部304がステップ600以降の処理を開始する。
始めに、ホストコマンド処理部304は、ストレージコントローラのホスト情報テーブル920の情報を用いて、NVM Subsystem NQNである識別名923(図4の403)を得る(図9B参照)とともに、受信したNVMeコマンドを解析し(受信したNVMeコマンドについては図9A参照)、コマンド種別912、namespaceの識別子であるNID (namespace ID)913、開始アドレス914、データ転送長のフィールド915を読み込む(ステップ601)。
次に、コマンドの種別で処理を分岐する(ステップ613)。コマンド種別912がIOコマンド(リードコマンドもしくはライトコマンド)の場合はステップ602に進む。コマンド種別が管理コマンド(namespaceの作成や削除のコマンド、NVM Subsystemの情報取得コマンド、NVM Subsystemの設定コマンド等)の場合はステップ614に進む。以下では、ステップ613においてコマンド種別がIOコマンドの場合のフローについて説明する。
ステップ613からステップ602に処理が分岐すると、ターゲットドライバ302から得られるストレージコントローラの識別名403、受信したNVMeコマンドのNID、開始アドレスとデータ転送長の情報に基づき、キャッシュ制御部306がキャッシュヒット、ヒットミス判定を行う(ステップ602)。
次に、上記キャッシュヒット、ヒットミス判定と、上記コマンド種別とデータ転送長の情報に基づきデータ転送方法の判定を行う(ステップ603)。データ転送方法の判定は、図8に示すテーブルに従って、通常のデータ転送を行うか、ドライブ筐体にデータ転送をオフロードするか、を判定する。
次に、データ転送方法で処理を分岐する(ステップ604)。データ転送方法が通常のデータ転送の場合はステップ605に進み、データ転送方法がオフロードの場合はステップ606に進む。通常のデータ転送を行う場合、通常のコマンド処理を行う(ステップ605)。通常のコマンド処理については、図11にて説明する。最後に、処理を完了する(ステップ610)。
以下、フローチャートのステップ606以降の説明に戻り、ドライブ筐体にデータ転送をオフロードする処理のフローについて説明する。
ステップ604からステップ606に処理が分岐すると、データ転送オフロード部307がデータ転送に必要なデータ転送パラメータ(オフロードコマンド)を、開始アドレスとデータ転送長の情報に基づき、アドレス変換テーブル3600を参照して作成する(ステップ606)。つまり、ストレージコントローラは、アドレス変換テーブル3600を参照し、ホストから受領したコマンドに対応するデータの格納先のドライブに対し、物理アドレスを含むオフロードコマンドを生成する。
オフロードコマンドには、ホストコンピュータを識別するホストNQN、ホストコンピュータのデータ格納先のアドレス等の情報、データ格納先のドライブアドレス、データ転送長を含む。オフロードコマンドに必要な制御データを含み、その作成方法は図9A−Dの説明で行う。
次に、データ転送オフロード部307はステップ601で得られた識別名923(図4の403)、NID、開始アドレスに対応するデータ格納先のドライブエンクロージャ200を、アドレス変換テーブル3600を参照することでアドレス変換部318によって識別し、オフロードコマンド通信部 (イニシエータ)315を使用してドライブエンクロージャ200にオフロードコマンドを送信する(ステップ607)。
次に、ドライブエンクロージャ200からのオフロードコマンドの完了を待つ(ステップ608)。次に、データ転送オフロード部307はオフロードコマンド通信部 (イニシエータ)315を使用してドライブエンクロージャ200からのオフロードコマンドの完了応答を受信し、オフロードコマンドのコマンドの完了応答を解析する(ステップ611)。NVMeプロトコルでは、一つのコマンドをキューによって処理するため、コマンド発行元に対して、必ずコマンドを処理するデバイスが完了応答を行う必要がある。つまり、ホストコンピュータからのコマンドがリードコマンドである場合、完了応答はコマンドの依頼先であるストレージコントローラからホストコンピュータに返す必要があるためである。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、ホストコマンド処理部304はホストコンピュータのリードコマンドに対するコマンドの完了応答を作成する(ステップ612)。次に、ターゲットドライバ302を使用してホストコンピュータ110にリードコマンドの完了応答を送信し(ステップ609)、処理を完了する(ステップ610)。なお、転送対象のデータが複数のドライブエンクロージャ200のドライブ218にまたがる場合は、複数のドライブエンクロージャ200に対して、ステップ606とステップ607の処理を行う。また、ステップ608では、オフロードコマンドを送信した先の全ドライブエンクロージャ200からのオフロードコマンドの完了を待つものとする。
以下、フローチャートのステップ614以降の説明に戻り、ステップ613においてコマンド種別が管理コマンドの場合のフローについて説明する。
ステップ613からステップ614に処理が分岐すると、管理コマンドで指定された内容に従い、ホストコマンド処理部304は管理コマンドの処理を行う(ステップ614)。次に、管理コマンドの処理の結果を含むコマンドの完了応答を作成する(ステップ615)。次に、ターゲットドライバ302を使用してホストコンピュータ110にコマンドの完了応答を送信する(ステップ616)。
このように、IOコマンド、例えば、リードコマンドを受領すると、キャッシュヒットした場合は、ストレージコントローラがホストコンピュータに対しリードデータを転送し、キャッシュミスした場合、アドレス変換テーブルを参照してオフロードコマンドを作成し、ドライブ筐体(FBOF)にリードデータを直接ホストコンピュータに転送するように制御する。尚、リードデータは、ドライブ筐体からホストコンピュータに直接転送するが、コマンドの完了応答は、ホストコンピュータからコマンドを受領したストレージコントローラのホストコマンド処理部304がターゲットドライバ302を介して行う必要がある。
(11)ストレージコントローラにおけるホストコマンドの処理手順の続き(通常のコマンド処理)
図11は、実施例1のストレージコントローラにおけるホストコマンドの処理手順の続きで、通常のコマンド処理の処理手順を示すフローチャートである。つまり、ターゲット構成形態1によるストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートのステップ605の処理である(通常のコマンド処理)。
始めに、ホストコマンド処理部304は、コマンド種別で処理を分岐する(ステップ1101)。コマンド種別がリードコマンドの場合、ステップ1102に進む。コマンド種別がライトコマンドの場合、ステップ1113に進む。
ステップ1101からステップ1102に処理が分岐した場合、キャッシュヒット/ヒットミスで処理が分岐する(ステップ1102)。キャッシュヒットの場合は、ステップ1103に進む。ヒットミスの場合はステップ1106に進む。ここで、キャッシュヒット、ヒットミスの判定は、ホストコンピュータからのIOコマンドに応答するデータがストレージコントローラのキャッシュメモリ204にあるか否かを判定する。例えば、ホストコンピュータからのIOコマンドがリードコマンドの場合、リードコマンドに応答するデータがキャッシュメモリ204上にあるか否を判定する。
次に、フローチャートのステップ1101においてコマンド種別がリードコマンドで、ステップ1102でキャッシュヒットの場合のフローについて説明する。ステップ1103に処理が分岐すると、データ転送制御部(ホストコンピュータとストレージコントローラ間)305は、リードコマンドで指定されたアドレス範囲のデータを、キャッシュ506から、リードコマンドで指定されたホストコンピュータ110内の物理メモリ領域503に転送する(ステップ1103)。
次に、ホストコマンド処理部304はコマンドの完了応答を作成する(ステップ1104)。次にターゲットドライバ302を使用してホストコンピュータへコマンドの完了応答を送信する(ステップ1105)。最後に、処理を完了する(ステップ1118)。
次に、フローチャートのステップ1101においてコマンド種別がリードコマンドで、ステップ1102でキャッシュヒットミスの場合のフローについて説明する。ステップ1101からステップ1102に処理が分岐し、ステップ1102からステップ1106に処理が分岐すると、キャッシュ制御部306がリードデータを格納するためのキャッシュ領域の確保を行う(ステップ1106)。次に、ホストコマンド処理部304は、ステップ601で得られた識別名403、NID、開始アドレスに対応するデータ格納先のドライブエンクロージャ200とドライブ508を、アドレス変換テーブル3600を参照することでアドレス変換部318によって識別し、イニシエータドライバ303を使用してドライブエンクロージャ200にコントローラコマンドのリードコマンドを発行する(ステップ1107)。
リードコマンドの読み込み先はアドレス変換部318のアドレス変換で得られ、それはデータ範囲505に対応するドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509である。リードデータの転送先として、ステップ1106で確保したキャッシュ領域のアドレスをコマンドに指定する。なお、NVMeトランスポートにRDMAを用いる場合、NVMeoF規格ではデータ転送に必要な情報として、コマンド発行元のメモリ領域のアドレスを指定する。また、NVMeoF規格では、connectコマンドによりホストコンピュータとNVM Subsystemの間にAdminキュー、およびIOキューを作成し、これらのキューを介してコマンドと完了応答の送受信を行う。以降では説明を簡単にするため、ドライブ508に対応するNVM Subsystemとのコマンドと完了応答の送受信を、単にドライブ508とのコマンドと完了応答の送受信と記載する。
次に、ドライブエンクロージャ200からのリードコマンド完了を待つ(ステップ1108)。次に、ホストコマンド処理部304はイニシエータドライバ303を使用してドライブエンクロージャ200からのリードコマンドの完了応答を受信し、リードコマンドのコマンドの完了応答を解析する(ステップ1109)。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、データ転送制御部(ホストコンピュータとストレージコントローラ間)305は、キャッシュ内に格納されたリードデータを、キャッシュ506から、リードコマンドで指定されたホストコンピュータ110内の物理メモリ領域503に転送する(ステップ1110)。
データ転送の完了後、ホストコマンド処理部304はホストコンピュータのリードコマンドに対するコマンドの完了応答を作成する(ステップ1111)。次に、ターゲットドライバ302を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ1112)。最後に、処理を完了する(ステップ1118)。
次に、フローチャートのステップ1101においてコマンド種別がライトコマンドの場合のフローについて説明する。ステップ1101からステップ1113に処理が分岐すると、キャッシュ制御部306がライトデータを格納するためのキャッシュ領域の確保を行う(ステップ1113)。
次に、データ転送制御部(ホストコンピュータとストレージコントローラ間)305は、ライトコマンドで指定されたホストコンピュータ110内の物理メモリ領域503のデータを、確保したキャッシュ領域に転送する(ステップ1114)。次に、キャッシュ領域に転送したライトデータをもう片方のストレージコントローラに転送し、両方のストレージコントローラのキャッシュ領域にライトデータを格納する(ステップ1115)。これをキャッシュの二重書きをと呼ぶ。
次に、ホストコマンド処理部304は、ホストコンピュータ110のライトコマンドに対応するコマンド完了応答を作成する(ステップ1116)。次に、ターゲットドライバ302を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ1117)。最後に、処理を完了する(ステップ1118)。
(12)ストレージコントローラにおけるデステージの処理手順
図12はストレージコントローラにおけるデステージの処理手順を示すフローチャートである。つまり、ターゲット構成形態1によるストレージコントローラにおけるデステージの処理手順を示すフローチャートである。
デステージ処理部314がデステージ条件を満たすと判定(例えば、ダーティキャッシュ量が閾値以上など)すると、デステージ処理部314がステップ1200以降の処理を開始する。
デステージ処理部314は、キャッシュ内に格納されたデステージ対象データをドライブに書き込むまで以降の処理を繰り返す(ステップ1201)。デステージ対象データの選択方法については本実施例の本質ではないため、説明を省略する。デステージ処理部314は、デステージ対象データを書き込むコントローラコマンドのライトコマンドを作成する(ステップ1202)。
ライトコマンドの書き込み先はアドレス変換部318のアドレス変換で得られ、それはデータ範囲505に対応するドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509である。次に、ドライブエンクロージャ200にイニシエータドライバ303を介してライトコマンドを送信する(ステップ1203)。次に、ドライブエンクロージャ200からのコマンド完了を待つ(ステップ1204)。次に、ドライブエンクロージャ200からのコマンドの完了応答を、イニシエータドライバ303を介して受信し、コマンドの完了応答の解析を行う(ステップ1205)。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、ステップ1201の繰り返しが続く場合は、ステップ1202に進む。ステップ1201の繰り返しが終了すると、デステージが完了したキャッシュ領域の解放を行う(ステップ1206)。最後に、処理を終了する(ステップ1207)。
(20)ドライブエンクロージャにおけるコントローラコマンドの処理手順
図20はドライブエンクロージャにおけるコントローラコマンドの処理手順を示すフローチャートである。ドライブエンクロージャ200のターゲットドライバ308がストレージコントローラ121からコントローラコマンドを受信すると、コントローラコマンド処理部309がステップ2000以降の処理を開始する。
始めに、コントローラコマンド処理部309は、ストレージコントローラ121から受信したコマンドを解析し、コマンド種別、namespaceの識別子であるNID (namespace ID)、開始アドレス、データ転送長のフィールドを読み込む(ステップ2001)。
次に、コマンド種別で処理を分岐する(ステップ2002)。コマンド種別がリードコマンドの場合、ステップ2003に進む。コマンド種別がライトコマンドの場合、ステップ2009に進む。コマンド種別が管理コマンドの場合、ステップ2015に進む。
以下、ステップ2002において、コマンド種別がリードコマンドの場合のフローについて説明する。ステップ2002からステップ2003に処理が分岐すると、コントローラコマンド処理部309は、リードデータを格納するためのバッファ領域を確保する(ステップ2003)。次に、確保したバッファ領域にリード対象のデータをドライブから読み出す(ステップ2004)。リード対象のデータを格納したドライブ508は、コントローラコマンドの送信先の識別名402で識別する。ドライブに発行するリードコマンドのnamespace IDと開始アドレス、データ転送長には、ステップ2001のフィールドの値を指定する。つまり、ドライブエンクロージャは、ストレージコントローラからのコントローラコマンドに従って、記憶装置であるドライブからデータを読み出す。ドライブエンクロージャが自身のドライブからデータをリードする方法は一般的な方法であり、詳細は割愛する。
次に、バッファ領域に格納したリードデータをストレージコントローラへデータ転送する(ステップ2005)。本実施例では、NVMeoF規格においてNVMeトランスポートにRDMA (Remote Direct Memory Access)を用いることを前提とする。すなわち、データ転送はコマンドに指定されたコマンド発行元のメモリ領域に対するRDMA Writeで行う。次に、ストレージコントローラ121からのリードコマンドに対応するコマンドの完了応答を作成する(ステップ2007)。次に、コマンドの完了応答を、ターゲットドライバ308を介してストレージコントローラ121に送信する(ステップ2008)。最後に、処理を終了する(ステップ2018)。
次に、フローチャートのステップ2009以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。ステップ2002からステップ2009に処理が分岐すると、ライトデータを格納するバッファ領域を確保する(ステップ2009)。次に、ストレージコントローラ121からライトデータを転送する(ステップ2010)。データ転送は、NVMeトランスポートにRDMAを用いる場合のNVMeoFの規格に従い、コマンドに指定されたコマンド発行元のメモリ領域に対するRDMA Readで行う。
次に、バッファ領域に格納したライトデータをドライブへ書き込む(ステップ2011)。ライト対象のドライブ508は、コントローラコマンドの送信先の識別名402で識別する。ドライブに発行するライトコマンドのnamespace IDと開始アドレス、データ転送長には、ステップ2001のフィールドの値を指定する。ドライブエンクロージャが自身のドライブにデータをライトする方法は一般的な方法であり、詳細は割愛する。
次に、ストレージコントローラ121からのライトコマンドに対応するコマンドの完了応答を作成する(ステップ2012)。次に、コマンドの完了応答を、ターゲットドライバ308を介してストレージコントローラ121に送信する(ステップ2014)。最後に、処理を終了する(ステップ2018)。
次に、フローチャートのステップ2015以降の説明に戻り、コマンド種別が管理コマンドの場合の処理フローについて説明する。ステップ2002からステップ2015に処理が分岐すると、管理コマンドの処理を行う(ステップ2015)。次に、ストレージコントローラ121からの管理コマンドに対応するコマンドの完了応答を作成する(ステップ2016)。次に、コマンドの完了応答を、ターゲットドライバ308を介してストレージコントローラ121に送信する(ステップ2017)。最後に、処理を終了する(ステップ2018)。
(7)ドライブエンクロージャにおけるデータ転送のオフロードコマンドの処理手順
図7は、実施例1のドライブエンクロージャにおけるデータ転送のオフロードコマンドの処理手順を示すフローチャートである。ターゲット構成形態1によるドライブエンクロージャにおけるデータ転送のオフロードコマンドの処理手順を示すフローチャートである。
ドライブエンクロージャ200のオフロードコマンド処理部311は、ストレージコントローラ121からオフロードコマンド通信部(ターゲット)313を介してオフロードコマンドを受信すると、ステップ700以降の処理を開始する。
始めに、オフロードコマンド処理部311はオフロードコマンドの各フィールドを読み込む(ステップ701)。各フィールドについては、図9Dにて説明する。次に、リードデータを格納するためのバッファをメモリ204に確保する(ステップ708)。次に、ステップ701で読み込んだフィールドのNVM Subsystem NQNとNIDの情報と、ドライブエンクロージャ内のNVM Subsystem NQNとドライブ218のマッピング情報から、対応するドライブ218を識別し、ドライブ218にリードコマンドを発行する。当該リードコマンドの開始アドレスとデータ転送長には、ステップ701で読み込んだフィールドの開始アドレスと、データ転送長と、データの格納先としてステップ708で確保したバッファのアドレスを指定する(ステップ702)。ドライブはオフロードコマンドに従って、データの格納する記憶装置からデータを読み出す。
次に、ドライブ218からのリードコマンドの完了を待つ(ステップ703)。次に、ドライブ218からのリードコマンドの完了応答を受信し、完了応答の内容を解析する(ステップ707)。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、データ転送制御部(ホストコンピュータとエンクロージャ間)310がバッファのリードデータをホストコンピュータ110にデータ転送する(ステップ704)。データ転送制御部(ホストコンピュータとエンクロージャ間)310は、ドライブエンクロージャ220とホストコンピュータ110との間でネットワークI/F205を介したRDMAによるデータ転送を行う。
データ転送制御部(ホストコンピュータとエンクロージャ間)310は、リードデータのデータ転送のためのRDMA Writeコマンドを作成し、RDMA通信のためのキューにコマンドをエンキューする。RDMA Writeコマンドには、データ転送長と、データ転送元となるバッファのアドレスと、データ転送先となるホストコンピュータ110の物理メモリ領域503を識別する情報として、ステップ701で読み込んだフィールドのメモリアドレスとR_keyと、を指定する。RDMA通信のためのキューは前記のconnectコマンドでホストコンピュータのネットワークI/FとネットワークI/F205の間で事前に作成されている。
NVMeプロトコルでは、一つのコマンドをキューによって処理するため、コマンド発行元に対して、必ずコマンドを処理するデバイスが完了応答を行う必要がある。つまり、ホストコンピュータからのコマンドがリードコマンドである場合、完了応答はコマンドの依頼先であるストレージコントローラからホストコンピュータに返す必要があるためである。ただし、コマンドに応答するデータは必ずしも、キューで結ばれたコマンドの依頼先のデバイスから転送される必要がないため、ドライブエンクロージャからホストコンピュータに直接データを転送し、ストレージコントローラのボトルネックを解消している。
次に、データ転送制御部(ホストコンピュータとエンクロージャ間)310のデータ転送の完了後、オフロードコマンド処理部311はバッファを開放(ステップ709)する。次に、ストレージコントローラ121にオフロードコマンド通信部(ターゲット)313を介してオフロードコマンドの完了応答を送信し(ステップ705)、処理を終了する(ステップ706)。
(8)データ転送方法の判定
図8は、転送方法の判定で用いるデータ転送条件とデータ転送種別を示す図である。データ転送種別は、IOパターン800として示され、IOパターンはデータ転送長が閾値よりも小さい、もしくは大きい場合と、リード、もしくはライトのコマンド種別と、で分類される。各分類について、キャッシュヒットした場合801と、キャッシュヒットミスした場合802で転送条件が決定される。
実施例1において、ドライブ筐体140からホストコンピュータ110に直接データ転送できる条件はコマンド種別がリードかつ、キャッシュヒットミスした場合である。なお、データ転送長が大きい場合はシーケンシャルアクセスの可能性が高く、直接データ転送することによる性能向上メリットが大きい。一方で、データ転送長が小さい場合は、ランダムアクセスの可能性が高く、キャッシュヒットによる性能向上メリットが大きいため、通常のコマンド処理でデータのキャッシュ506へのコピーを行う。
なお、上記データ転送長の閾値は固定である必要はなく、ストレージ装置のワークロードに応じて変更できるようにして良い。
(9)ホストコマンドのフォーマット、ストレージコントローラのホスト情報テーブル、ドライブ情報テーブル、オフロードコマンドのフォーマット
図9Aはホストコマンドのフォーマット、図9Bはストレージコントローラのホスト情報テーブル、図9Cはドライブ情報テーブル、図9Dはオフロードコマンドのフォーマットを示す図である。
図9Aに示した、ホストコマンドのフィールドは、コマンド識別子911、コマンド種別912、NID913、開始アドレス914、データ転送長915、メモリアドレス916、R_key917を含む。
コマンド識別子911は、個々のコマンドを識別するため識別子である。例えば、複数のコマンドを多重に実行する仕組みにおいて、発行したコマンドと、コマンドの完了応答を対応させることに使用する。コマンド識別子によるコマンド識別はコマンド実行において広く知られた方法であり、詳しい説明を省略する。
コマンド種別912は、リードコマンド、ライトコマンド、管理コマンドを示すコード(符合)である。
NID913は、NVM Subsystem内のnamespace IDである。当該NVM Subsystemは、実施例1では、ストレージコントローラ121のNVM Subsystemである。また、このNVM SubsystemのNQNは、図9Bのホスト情報テーブルのNVM Subsystem NQN923に登録されている。
開始アドレス914とデータ転送長915は、データ転送対象のデータの、namespace内のアドレスとデータ転送長である。
メモリアドレス916は、ホストコンピュータ110の指定するデータ転送先のホストコンピュータ内メモリ領域のアドレスである。R_key917は上記ホストコンピュータ内メモリ領域の識別子である。なお、ホストコマンドのうち、実施例1の説明で重要度の低いフィールドであるメタデータポインタ等については図から省略した。メタデータとは、ドライブや論理ボリュームの論理ブロック単位(例えば512B)に割り当てられた付加的なデータである。メタデータのあり、なしに関わらず実施例1は適用可能であるので、説明を省略する。
また、説明を簡単にするため、図9Aではメモリアドレス916とR_key917の組が1つしかないが、複数の組から成るリストであっても良い。同様に、以降のオフロードコマンドの説明を含め、以降ではメモリアドレスとR_keyを1つの組として説明をするが、複数の組から成るリストであっても良い。
図9Bは、ストレージコントローラのホスト情報テーブルである。ホスト情報テーブル920は、キュー番号921、ホストNQN922、NVM Subsystem NQN923の項目を含む。
キュー番号921は、ホストコンピュータとNVM Subsystemの間のIOキューの番号である。ストレージコントローラ121は、IOキューを内部で管理するために、ホストコンピュータ110からconnectコマンドを受信してIOキューを作成する時に、当該キュー番号を採番する。キュー番号はストレージコントローラ121の内部でユニークな値である。ホストNQN922とNVM Subsystem NQN923は、それぞれ、上記IOキューでつながったホストコンピュータ110のNQNとストレージコントローラ121のNVM SubsystemのNQNである。
図9Cに示したドライブ情報テーブル930は、ドライブ領域番号931、ドライブエンクロージャ(ENC)番号932、NVM Subsystem NQN933、NID934の項目を含む。
ドライブ領域番号931は、ストレージコントローラ121で使用するドライブ218の領域の番号である。ドライブ218は図5ではドライブ508に対応する。ストレージコントローラ121はドライブ218の領域をnamespace単位で、管理するために当該ドライブ領域番号を採番する。ドライブ領域番号はストレージコントローラ121の内部でユニークな値である。
ドライブエンクロージャ番号932は、当該ドライブ218を内部に持つドライブエンクロージャ200の番号である。ストレージコントローラ121はドライブエンクロージャ200を管理するために当該ドライブエンクロージャ番号932を採番する。ドライブエンクロージャ番号932はストレージコントローラ121の内部でユニークな値である。NVM Subsystem NQN933とNID934は、ドライブ218に対応する識別名402とドライブ218内のnamespace IDである。
図9Dはオフロードコマンドのフォーマットを示す。オフロードコマンド900のフィールドは、コマンド識別子908、ホストNQN901、メモリアドレス902、R_key903、データ転送方向909、NVM Subsystem NQN904、NID905、開始アドレス906、データ転送長907、を含む。
コマンド識別子908は、個々のコマンドを識別するため識別子である。ホストNQN901は、ドライブ筐体140がデータ転送する先のホストコンピュータ110のホストNQNである。メモリアドレス902は、ホストコンピュータ110の指定するデータ転送先のホストコンピュータ内メモリ領域のアドレスである。R_key903は上記ホストコンピュータ内メモリ領域の識別子である。データ転送方向909は、ドライブエンクロージャ200からホストコンピュータ110へのデータ転送、もしくは、ホストコンピュータ110からドライブエンクロージャ200へのデータ転送、のどちらかを示す。NVM Subsystem NQN904と、NID905は、それぞれドライブエンクロージャ200のNVM SubsystemのNVM Subsystem NQNと、NVM Subsystem内のnamespace IDである。開始アドレス906とデータ転送長907は、データ転送対象のデータの、namespace内のアドレスとデータ転送長である。NID905、開始アドレス906、データ転送長907は、ホストコマンドの論理アドレスからアドレス変換テーブル3600を参照して得られる情報である。
上記オフロードコマンドのフィールド901〜909の値は、ホストコマンド処理部304が次のようにして設定する。
ホストコマンド処理部304は、ストレージコントローラ121のターゲットドライバ302がホストコンピュータ110からコマンドを受領したIOキューと、ストレージコントローラのホスト情報テーブル920のエントリを照らし合わせ、IOキューに対応するホストNQN922をホストNQN901に設定し、NVM Subsystem NQN923を識別名403として識別する。この処理は図6のステップ601で行われる。
ホストコマンド処理部304は、ホストコンピュータ110がホストコマンド内に指定するメモリアドレス916とR_key917を、メモリアドレス902とR_key903に設定する。ホストコマンド処理部304は、アドレス変換部318を用いて、ステップ601で得られた識別名403(NVM Subsystem NQN923に対応する)、ホストコマンドのNID913、開始アドレス914とデータ転送長915の情報から、データ格納先のドライブ508とデータ格納先のアドレスを識別する。
具体的には、次のように行う。最初にアドレス変換部318は、ステップ601で得られた「(A)識別名403(NVM Subsystem NQN)」、「(B)ホストコマンドのNID913」(ストレージ装置において論理ボリュームに相当する)、「(C)開始アドレス914」(namespace内の論理アドレスに相当する)を、アドレス変換テーブル3600を用いて、「(D)ドライブ領域番号3602」、「(E)ドライブアドレス3603」に変換する。
次にアドレス変換部318は、「(D)ドライブ領域番号3602」から、ドライブ情報テーブル930を用いて、「(F)ENC番号932」、「(G)NVM Subsystem NQN933」、「(H)NID934」に変換する。
オフロードコマンドの転送先のドライブエンクロージャ200は、「(F)ENC番号」で識別される。オフロードコマンドのNVM Subsystem NQN904、NID905、開始アドレス906は、それぞれ「(G)NVM Subsystem NQN」、「(H)NID」、「(E)ドライブアドレス」に対応する。
コマンド識別子908は、実行中のオフロードコマンドの間でユニークな値である。実施例1では、リードコマンドのときのみオフロードを行うので、データ転送方向909はドライブエンクロージャ200からホストコンピュータ110のみである。
尚、図9Dのオフロードコマンドの各フィールドの情報は、上記した順に限定されるものではない。例えば、ホストコマンドから設定できる情報を纏めて設定することもできる。
以上、実施例1によれば、ホストコンピュータからのリードコマンドを受領したストレージコントローラが、キャッシュミス判定し、リードコマンドのデータ転送長が閾値より長い場合、FBOFであるドライブ筐体からホストコンピュータに対して、直接リードデータを転送する。そのため、ストレージコントローラに、複数のドライブ筐体を接続した場合であっても、ストレージコントローラのボトルネックを解消し、高速なデータ転送を実現することができる。
実施例1では、ストレージコントローラがキャッシュを有する形態を説明したが、実施例2では、キャッシュを有さない形態を説明する。キャッシュレスのストレージコントローラにおいても、情報処理システムの構成と、ストレージコントローラ、ドライブエンクロージャの処理は類似点が多いため、以降では、実施例1との違いについて説明する。実施例2において、実施例2で説明する相違点以外は、実施例1の説明と同様であるため、説明は割愛する。
キャッシュレスのストレージコントローラでは、構成上の違いとして図3のキャッシュ制御部306と、図5のキャッシュ506が無くなるという違いがある。そのため、ライトデータはドライブエンクロージャ200に接続するドライブ508内の記憶領域509に転送(デステージング)されることにより、ドライブ508内の記憶領域509のデータが即時反映されることになる。ただし、デステージング中は、ドライブ508内の記憶領域509に新データと旧データが混在することになり、ストレージ装置として一貫性のあるデータをホストコンピュータに応答できるように、図6の制御の一部ステップが変更となる。ドライブ508内の記憶領域509がデステージングかどうかを判定するために、ストレージコントローラ121は記憶領域509毎にデステージング状態を示すビットマップを持って管理しても良い。
データ転送方法の判定については、キャッシュレスとなるため、図8において、キャッシュヒットミスの場合802のみとなるとともに、リードの場合は常に直転送とする。すなわち、図8において、キャッシュヒット801の場合が無く、さらに閾値が0バイトの場合のデータ転送方法の判定に相当する。
(10)キャッシュレスのストレージコントローラにおけるホストコマンドの処理手順
図10はキャッシュレスのストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。
ステップ1002を除き、ステップ600〜ステップ616とステップ1000〜ステップ1016の内容は同じである。ステップ1002では、ターゲットドライバ302から得られる識別名403、ステップ1001で得られるNID、開始アドレスとデータ転送長の情報に基づき、ホストコマンド処理部304は、当該領域のデータがデステージング済みかどうかを判定し、デステージング中の場合はデステージ完了を待つ。デステージ完了後、ドライブに最新のデータが反映された状態となる。
(13)キャッシュレスのストレージコントローラ(実施例2)におけるホストコマンドの処理手順 (通常のコマンド処理)
図13はキャッシュレスのストレージコントローラ(実施例2)におけるホストコマンドの処理手順の続きで、通常のコマンド処理の処理手順を示すフローチャートである。
始めに、ホストコマンド処理部304は、コマンド種別で処理を分岐する(ステップ1301)。コマンド種別がリードコマンドの場合はステップ1302に進む。コマンド種別がライトコマンドの場合は、ステップ1309に進む。以下では、ステップ1301においてコマンド種別がリードコマンドの場合のフローについて説明する。
ステップ1301からステップ1302に処理が分岐すると、ホストコマンド処理部304はリードデータを格納するためのバッファ領域の確保をする(ステップ1302)。
次に、識別名403、NID、開始アドレスに対応するデータ格納先のドライブエンクロージャ200とドライブ508をアドレス変換部318によって識別し、ホストコマンド処理部304はイニシエータドライバ303を使用してドライブエンクロージャ200にリードコマンドを発行する(ステップ1303)。ドライブに発行するリードコマンドのnamespace IDと開始アドレスはアドレス変換部318のアドレス変換によって得られ、データ転送長には、ステップ1001のフィールドの値を指定する。
次に、ドライブエンクロージャ200からのリードコマンド完了を待つ(ステップ1304)。次に、リードコマンド完了応答を受信し、完了応答を解析する(ステップ1305)。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、データ転送制御部(ホストコンピュータとストレージコントローラ間)305は、リードコマンドで指定されたアドレス範囲のデータを、確保したバッファ領域から、リードコマンドで指定されたホストコンピュータ110内の物理メモリ領域503に転送する(ステップ1305)。データ転送の完了後、ホストコマンド処理部304はホストコンピュータ110のリードコマンドに対するコマンドの完了応答を作成する(ステップ1307)。次に、ターゲットドライバ302を介してホストコンピュータ110にコマンドの完了応答送信する(ステップ1308)。最後に、処理を完了する(ステップ1322)。
次に、フローチャートのステップ1309以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。図11との処理の主な違いは、ホストコンピュータにライトコマンドの完了応答を送信するタイミングである。すなわち、キャッシュ有りの場合は、ライトデータのキャッシュ二重書き後にホストコンピュータへライトコマンドの完了応答を送信し、デステージの条件が満たされたときにドライブへの書き込みを行っていたのに対して、キャッシュ無しの場合は、ライトデータをドライブに書き込み完了した後に、ホストコンピュータへライトコマンドの完了応答を送信する。
ステップ1301からステップ1309に処理が分岐すると、ライトデータとRAIDストライプを格納するためのバッファ領域の確保を行う(ステップ1309)。次に、データ転送制御部(ホストコンピュータとストレージコントローラ間)305は、ライトコマンドで指定されたホストコンピュータ110内の物理メモリ領域503のデータを、確保したバッファ領域に転送する(ステップ1310)。データ転送は、NVMeトランスポートにRDMAを用いる場合のNVMeoFの規格に従い、RDMA Readで行う。
次に、ライトコマンドの書き込み先に対応するRAIDストライプをドライブからリードするコントローラコマンドのリードコマンドを作成する(ステップ1311)。ライトコマンドの書き込み先はアドレス変換部318のアドレスに変換で得られ、それはデータ範囲505に対応するドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509である。次に、ホストコマンド処理部304はイニシエータドライバ303を使用してリードコマンドをドライブエンクロージャに送信する(ステップ1312)。RAIDストライプはRAIDを構成する複数のドライブエンクロージャ200の複数のドライブに跨ることがある。その場合は、各ドライブエンクロージャの各ドライブに対して上記の通りリードコマンドを発行する。
次にリードコマンドの完了を待つ(ステップ1313)。次に、リードコマンドの完了応答の受信と完了応答の解析を行う(ステップ1314)。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、読み出したRAIDストライプからパリティを計算する(ステップ1315)。次に、RAIDストライプの更新データとパリティをドライブにライトするライトコマンドを作成する(ステップ1316)。次に、ドライブエンクロージャ200にコントローラコマンドのライトコマンドを送信する(ステップ1317)。前述の通り、RAIDストライプが複数のドライブエンクロージャ200の複数のドライブに跨る場合は、各ドライブエンクロージャの各ドライブに対して上記の通りライトコマンドを発行する。次に、ライトコマンドの完了を待つ(ステップ1318)。次に、ライトコマンドの完了応答を受信し、完了応答の解析を行う(ステップ1319)。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、ホストコンピュータ110からのライトコマンドに対応するコマンドの完了応答を作成する(ステップ1320)。次に、ホストコンピュータ110にコマンドの完了応答を送信する(ステップ1321)。最後に、処理を終了する(ステップ1322)。
実施例2では、図10のステップ1004で、ホストコンピュータからのリードコマンドに対し、キャッシュレスとなるため、図8において、キャッシュヒットミスの場合802のみとなるとともに、閾値が0バイトの場合のデータ転送方法に該当すると判定し、リードの場合は常に直転送とする。
実施例2によると、リードの場合は常に直転送となるため、ストレージコントローラに、複数のドライブ筐体を接続した場合であっても、ストレージコントローラのボトルネックを解消し、高速なデータ転送を実現することができる。
(14)ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態による(ターゲット構成形態2:実施例3、実施例4、実施例5、実施例6、実施例7、実施例8)のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成
図14は、ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態による(ターゲット構成形態2:実施例3、実施例4、実施例5、実施例6、実施例7、実施例8)のホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成を示す図である。
ストレージコントローラ121のプログラムは、エンクロージャコマンド通信部(ターゲット)1401、エンクロージャコマンド処理部1402、データ転送制御部(ストレージコントローラとエンクロージャ間)1403、キャッシュ制御部1404、データ転送オフロード部1405、オフロードコマンド通信部(イニシエータ)1406、デステージ処理部1407、コントローラコマンド送信部(イニシエータ)1408、アドレス変換部1419および図示しないOSから構成される。
エンクロージャコマンド通信部(ターゲット)1401は、エンクロージャコマンド通信部(イニシエータ)1411に対してNVMeoF対応の記憶領域を提供する。
エンクロージャコマンド処理部1402は、ドライブエンクロージャ200が発行したコマンドを、エンクロージャコマンド通信部(ターゲット)1401を使用して受信し、コマンドの解析、リード・ライト処理、コマンドの完了応答の作成、エンクロージャコマンド通信部(ターゲット)1401を介したコマンドの完了応答の送信等を行う。
データ転送制御部(ストレージコントローラとエンクロージャ間)1403は、エンクロージャコマンド処理部1402の指示に従い、ストレージコントローラとドライブエンクロージャとの間のデータ転送処理を行う。キャッシュ制御部1404は、キャッシュデータの検索に基づくキャッシュヒット、ヒットミスの判定、ダーティデータ(物理ドライブへの書込み前の状態)とクリーンデータ(物理ドライブへの書込み後の状態)の各状態間の遷移、キャッシュ領域のリザーブ及びリリース等の制御を行う。これらのキャッシュ制御の各処理は広く知られた技術であり、ここでの詳細な説明を省略する。
データ転送オフロード部1405は、データ転送のオフロードコマンドを作成し、ドライブエンクロージャ200に対してホストコンピュータへのデータ転送を指示する。オフロードコマンドは、ホストコンピュータから受領したIOコマンドから、アドレス変換テーブル等のストレージの構成情報に基づき作成し、ドライブ筐体側でIOコマンド処理を行うためのコマンドであり、そのため、図9Dで示すような、ホスト識別子、メモリアドレス、ドライブの識別子、ドライブのNS、開始アドレス、データ長などのデータ転送パラメータを含む。
オフロードコマンド通信部(イニシエータ)1406は、ドライブエンクロージャとの間でオフロードコマンドの送信、応答の受信を行う。デステージ処理部1407は、キャッシュ内のデータをドライブに書き込むデステージ処理を行う。コントローラコマンド送信部(イニシエータ)1408は、ドライブエンクロージャとの間でコントローラコマンドの送信と完了応答の受信を行う。アドレス変換部1419は、データ範囲505と、データの格納先であるドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509とのマッピングテーブルを持ち、データ範囲505のアドレスを、対応するドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509のアドレスに変換する。
ドライブエンクロージャ200のプログラムはターゲットドライバ1409、ホストコマンド処理部1410、エンクロージャコマンド通信部(イニシエータ)1411、データ転送制御部(ストレージコントローラとエンクロージャ間)1413、データ転送制御部(ホストコンピュータとエンクロージャ間)1414、オフロードコマンド通信部(ターゲット)1415、オフロードコマンド処理部1416、コントローラコマンド通信部(ターゲット)1417、ドライブ制御部1418、バッファ制御部1412、コントローラコマンド処理部1420、および図示しないOSから構成される。
ターゲットドライバ1409は、ホストコンピュータの110のイニシエータドライバ301に対してNVMeoF対応の記憶領域を提供する。ホストコマンド処理部1410は、ホストコンピュータもしくはストレージコントローラが発行したコマンドを、ターゲットドライバ1409を使用して受信し、コマンドの解析、リード・ライト処理、コマンドの完了応答の作成、ターゲットドライバ1409を介したコマンドの完了応答の送信等を行う。エンクロージャコマンド通信部1411は、エンクロージャコマンド通信部(ターゲット)1401の提供するNVMeoF対応の記憶領域を認識する。データ転送制御部1413(コントローラとエンクロージャ間)は、ストレージコントローラとドライブエンクロージャとの間のデータ転送処理を行う。データ転送制御部(ホストコンピュータとエンクロージャ間)1414は、ホストコマンド処理部1410およびオフロードコマンド処理部1416の指示に従い、NVMeoFに対応したホストコンピュータとドライブエンクロージャとの間のデータ転送処理を行う。
オフロードコマンド通信部(ターゲット)1415は、ストレージコントローラ121からのデータ転送のオフロードコマンドの受信と、完了応答の送信を行う。オフロードコマンド処理部1416は、オフロードコマンドの解析、リード処理、オフロードコマンドの完了応答の作成、オフロードコマンド通信部(ターゲット)1415を介したオフロードコマンドの完了応答の送信等を行う。コントローラコマンド通信部(ターゲット)1417は、ストレージコントローラ121との間でコントローラコマンドの受信と完了応答の送信を行う。
ドライブ制御部1418は、ドライブ218の管理と、ホストコマンド処理部1410およびオフロードコマンド処理部1416の指示に従ってドライブ218に対してリード・ライト処理を行う。バッファ制御部1412は、データ転送を行うための一時的なメモリ領域であるバッファの確保と解放を行う。コントローラコマンド処理部1420は、ストレージコントローラが発行したコマンドを、ターゲットドライバ1409を使用して受信し、コマンドの解析、リード・ライト処理、コマンドの完了応答の作成、ターゲットドライバ1409を介したコマンドの完了応答の送信等を行う。
(15)ターゲット構成形態2によるNVMe over FabricsにおけるホストコンピュータとNVM Subsystemの識別名
図15は、ターゲット構成形態2によるNVMe over FabricsにおけるホストコンピュータとNVM Subsystemの識別名を示す図である。
ホストコンピュータ110は、少なくとも1つの識別名401(ホストNQN)を持つ。ホストコンピュータ110は複数でもよいが、図示を省略した。ドライブエンクロージャ200は、少なくとも1つの識別名1503(NVM Subsystem NQN)を持つ。この識別名1503に対応するNVM Subsystemの中に、ストレージプールの一部を割り当てた論理的な記憶領域がnamespaceとして割り当てられる。ストレージプールとは、複数のドライブ218の記憶領域から構築され、RAID等のデータ保護がされた記憶領域である。上記はドライブエンクロージャ201についても同様であり、説明は省略する。ドライブエンクロージャ200とドライブエンクロージャ201は2以上でもよいが、図示を省略した。本ターゲット構成形態では、ドライブエンクロージャがホストコンピュータのコマンドを受信するために、ストレージコントローラのNVM Subsystemが不要となり、ストレージコントローラのNVM Subsystemがない点が図4と異なる。
ドライブエンクロージャのNVM Subsystemの作成はマスタースレーブ方式で行う。ストレージ装置120がマスターとなり、ドライブエンクロージャ200(およびドライブエンクロージャ201)がスレーブとなる。これは、ドライブエンクロージャのNVM Subsystemを定義する情報を、ストレージ装置の構成情報として、データ保護機能を持つストレージ装置120が管理・保存するためである。これにより、ストレージコントローラのデータ保護機能やストレージコントローラで動作するSnapshot、Thin Provisioningなどのプログラムプロダクト(ストレージ装置の機能)の機能を提供できる。NVM Subsystemを定義する情報とは、NVM Subsystem NQN(ここでは、識別名1503を指す)、NVMトランスポートの情報(ホストコンピュータとNVM Subsystemの間の接続を定義する情報。ここでは、ドライブエンクロージャのIPアドレス、TCP/UDPポートなどを指す)、シリアル番号やモデル番号などである。
ストレージ装置120がドライブエンクロージャのドライブを認識し、ホストコンピュータに記憶領域を提供するまでの主な流れは次の通りである。はじめに、ストレージ装置120は、ドライブエンクロージャからドライブ508の実装情報を取得し、図9Cのドライブ情報テーブル930を作成する。次にストレージ装置120は、ドライブ情報テーブル930のドライブ508の記憶領域を組み合わせ、データ保護方式に応じてRAIDやミラーリング等で保護された記憶領域を構築する。記憶領域の組み合わせとデータ保護方式の設定は自動でも手動でも良い。ここで言う自動とは、ストレージ装置120が自動で設定することを意味し、手動とは、ユーザ指示に従ってストレージ装置120が設定することを意味する。データ保護に用いる記憶領域の組み合わせは、データ保護ドライブグループテーブル3610で管理・保存される。ストレージシステムにおけるデータ保護方式は良く知られた技術であり、説明を省略する。次にストレージ装置120は、RAIDやミラーリング等で保護された記憶領域をまとめてストレージプールを構築する。次にストレージ装置120は、ストレージプールの一部の記憶領域を切り出し、論理ボリュームを構築する。次にストレージ装置120は、NVM Subsystemを作成し、namespaceとして論理ボリュームを割り当てる。ストレージ装置120では、論理ボリュームの論理アドレスとドライブの物理アドレスとの対応をアドレス変換テーブル3600として管理する。
NVM Subsystemの作成において、ドライブエンクロージャがストレージ装置120の論理的な記憶領域をホストコンピュータに対して提供できるように、ストレージ装置120は上記のNVM Subsystemを定義する情報をパラメータとして指定して、ドライブエンクロージャ200(およびドライブエンクロージャ201)にNVM Subsystemの作成を指示する。ドライブエンクロージャ200(およびドライブエンクロージャ201)は指示に従い、NVM Subsystemを作成する。NVM Subsystemの作成は、例えば、起動時、ドライブエンクロージャの増設時、構成変更時に行う。
これにより、ドライブエンクロージャは、自身の記憶領域をホストコンピュータに提供することができ、ストレージコントローラは各ドライブエンクロージャの記憶領域を、例えばRAID技術等で、データ保護することができる。即ち、ストレージコントローラの構成情報に基づき、NVM Subsystemの作成を各ドライブエンクロージャに指示することで、ストレージコントローラからの指示に基づいて、NVM Subsystemの作成したドライブエンクロージャは、作成したNVM Subsystemをホストコンピュータに記憶領域として提供することになる。
ホストコンピュータ110は、ドライブエンクロージャ200(およびドライブエンクロージャ201)に対してconnectコマンドを送ることで、ドライブエンクロージャ200(およびドライブエンクロージャ201)のNVM Subsystemにコマンド送信およびデータ転送できるようにする。
(16)ターゲット構成形態2によるドライブエンクロージャにおけるホストコマンドとオフロードコマンドの処理手順
図16は、ターゲット構成形態2によるドライブエンクロージャにおけるホストコマンドとオフロードコマンドの処理手順を示すフローチャートである。
ドライブエンクロージャ200のターゲットドライバ1409がホストコンピュータ110からコマンドを受信すると、ホストコマンド処理部1410がステップ1600以降の処理を開始する。
始めに、ホストコマンド処理部1410は受信したNVMeコマンドを解析し(コマンドのフォーマットについてはホストコマンドの図9Aのフォーマット910を参照)、コマンド種別912、namespaceの識別子であるNID (namespace ID)913、開始アドレス914、データ転送長915のフィールドを読み込む(ステップ1601)。
次に、コマンドの種別で処理を分岐する(ステップ1602)。コマンド種別がリードコマンドの場合はステップ1603に進む。コマンド種別がライトコマンドの場合はステップ1623に進む。コマンド種別が管理コマンドの場合はステップ1617に進む。以下では、ステップ1601においてコマンド種別がリードコマンドの場合のフローについて説明する。
ステップ1603に処理が分岐すると、ホストコマンド処理部1410はリードデータを格納するためのバッファ領域の確保を行う(ステップ1603)。次に、エンクロージャコマンドのリードコマンド(リード要求)を作成する(ステップ1604)。このリードコマンドは、ホストコンピュータ110のリードコマンドで指定されたアドレス範囲のデータを読み込み、確保したバッファ領域にデータを格納する。ドライブエンクロージャがストレージコントローラに発行するコマンドをエンクロージャコマンドと呼ぶ。エンクロージャコマンドのフォーマットおよび作成方法は図22で説明する。
次に、作成したエンクロージャコマンドを、エンクロージャコマンド通信部(イニシエータ)1411を使用してストレージコントローラ121に送信する(ステップ1605)。次に、ストレージコントローラ121からのコマンド完了応答を待つ(ステップ1606)。次に、エンクロージャコマンド通信部(イニシエータ)1411を介してストレージコントローラ121からのリードコマンドの完了応答を受信し、リードコマンドのコマンドの完了応答を解析する(ステップ1607)。ステップ1607で、ストレージコントローラは、アドレス変換テーブルに基づき、ホストコマンドの対象データがホストコマンドを受領したターゲットドライバ1409と同じドライブ筐体140内に接続されたドライブ218に格納されていない場合には、通常のリード応答を含む完了応答をエンクロージャに送信し、ホストコマンドの対象データがホストコマンドを受領したターゲットドライバ1409と同じドライブ筐体140内のドライブに格納されている場合には、オフロード指示を含む完了応答を送信する。完了応答がエラーの場合は異常発生時の処理を行うが、ここでは説明を省略する。以降は完了応答が成功したとして説明を続ける。
次に、完了応答の種別で処理を分岐する(1608)。完了応答がリード応答の場合は、ステップ1609に進む。完了応答がオフロード指示のあるリード応答の場合は、ステップ1613に進む。以下では、ステップ1608においてコマンドの応答種別がリード応答の場合のフローについて説明する。
ステップ1608からステップ1609に処理が分岐すると、ホストコンピュータ110へリードデータを転送する(ステップ1609)。具体的には、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)1414は、バッファに格納されたリードデータを、リードコマンドで指定されたホストコンピュータ110内の物理メモリ領域503に転送する。ここでは、実施例1と同様に、データ転送をコマンドに指定されたコマンド発行元のメモリ領域に対するRDMA Writeで行うものとして説明する。ただし、ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する本実施例では、NVMeトランスポートとしてRDMAだけでなくTCPやFibre Chennel等を用いることができる。そのため、データ転送はRDMA Writeに限定されず、NVMeトランスポートで規定されたデータ転送を用いても良い。
次に、ホストコマンド処理部1410はホストコンピュータ110からのリードコマンドに対応するコマンドの完了応答を作成する(ステップ1610)。次に、ターゲットドライバ1409を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ1611)。次に、確保したバッファ領域を開放する(ステップ1612)。最後に、処理を完了する(ステップ1635)。
次に、フローチャートのステップ1608以降の説明に戻り、コマンドの応答種別がオフロード指示のあるリード応答の場合の処理のフローについて説明する。ステップ1608からステップ1613に処理が分岐すると、オフロードコマンド処理部1416はオフロード指示に従って確保したバッファ領域にリード対象のデータをドライブからリードする(ステップ1613)。リード対象のデータを格納したドライブ508は、オフロード指示に指定された識別名402で識別する。ドライブに発行するリードコマンドのnamespace IDと開始アドレス、データ転送長には、オフロード指示の値を指定する。ドライブエンクロージャは、オフロードコマンドに従って、記憶装置であるドライブからデータを読み出す。ドライブエンクロージャが自身のドライブからデータをリードする方法は一般的な方法であり、詳細は割愛する。
次に、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)1414は、バッファに格納されたリードデータを、リードコマンドで指定されたホストコンピュータ110内の物理メモリ領域503に転送する(ステップ1614)。コマンドに応答するデータは必ずしも、キューで結ばれたコマンドの依頼先のデバイスから転送される必要がないため、ドライブエンクロージャからホストコンピュータに直接データを転送し、ストレージコントローラのボトルネックを解消している。
次に、オフロードコマンドの完了応答を作成する(ステップ1615)。次に、オフロードコマンドの完了応答を、オフロードコマンド通信部(ターゲット)1415を使用してストレージコントローラ121に送信する(ステップ1616)。以降、ステップ1610、1611、1612、1635は上記で説明したとおりである。オフロードコマンド発行元であるストレージコントローラに処理の完了を通知する必要があるためである。
次に、フローチャートのステップ1623以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。ステップ1602からステップ1623に処理が分岐すると、ホストコマンド処理部1410はライトデータを格納するためのバッファ領域を確保する(ステップ1623)。次に、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)1414は、ライトコマンドで指定されたホストコンピュータ110内の物理メモリ領域503のデータを、確保したバッファ領域に転送する(ステップ1624)。次に、ホストコマンド処理部1410はバッファ領域のライトデータを、ホストコンピュータ110のライトコマンドで指定されたアドレス範囲に書き込むエンクロージャコマンドのライトコマンドを作成する(ステップ1625)。
次に、エンクロージャコマンド通信部(イニシエータ)1411を使用してストレージコントローラ121にエンクロージャコマンドを送信する(ステップ1626)。次に、ストレージコントローラ121からのXFER RDYを待つ(ステップ1627)。XFER RDYは書き込み準備ができたことを意味するメッセージである。次に、エンクロージャコマンド通信部(イニシエータ)1411を介してストレージコントローラ121からのXFER RDYを受信する(ステップ1628)。
次に、バッファ領域に格納したライトデータをデータ転送制御部(ストレージコントローラとドライブエンクロージャ間)1413がストレージコントローラに転送する(1629)。次に、ストレージコントローラ121のコマンド完了を待つ(ステップ1630)。次に、ストレージコントローラ121からエンクロージャコマンド通信部(イニシエータ)1411を介してライトコマンドのコマンド完了応答を受信し、ライトコマンドのコマンド完了応答を解析する(ステップ1631)。次に、ホストコンピュータ110からのライトコマンドに対応するコマンドの完了応答を作成する(ステップ1632)。次に、ターゲットドライバ1409を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ1633)。次に、確保したバッファ領域を開放する(ステップ1634)。最後に、処理を完了する(ステップ1635)。
次に、フローチャートのステップ1617以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ1602からステップ1617に処理が分岐すると、次に、ホストコンピュータ110の管理コマンドの内容をコピーして、エンクロージャコマンドの管理コマンドを作成する(ステップ1617)。次に、エンクロージャコマンド通信部(イニシエータ)1411を使用してストレージコントローラ121にエンクロージャコマンドを送信する(ステップ1618)。次に、ストレージコントローラ121のコマンド完了を待つ(ステップ1619)。次に、エンクロージャコマンド通信部(イニシエータ)1411を介してストレージコントローラ121から管理コマンドのコマンド完了応答を受信し、管理コマンドのコマンド完了応答を解析する(ステップ1620)。次に、ホストコンピュータ110からの管理コマンドに対応するコマンドの完了応答を作成する(ステップ1621)。次に、ターゲットドライバ1409を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ1622)。最後に、処理を完了する(ステップ1635)。
(17)ターゲット構成形態2によるストレージコントローラにおけるエンクロージャコマンドの処理手順
図17は、ターゲット構成形態2によるストレージコントローラにおけるエンクロージャコマンドの処理手順を示すフローチャートである。ストレージコントローラ121のエンクロージャコマンド通信部(ターゲット)1401がドライブエンクロージャ200からエンクロージャコマンドを受信すると、エンクロージャコマンド処理部1402がステップ1700以降の処理を開始する。
始めに、エンクロージャコマンド処理部1402は受信したエンクロージャコマンドを解析し、コマンド種別、namespaceの識別子であるNID (namespace ID)、開始アドレス、データ転送長のフィールドを読み込む(ステップ1701)。次に、コマンドの種別で処理を分岐する(ステップ1702)。コマンド種別がリードコマンドの場合はステップ1703に進む。コマンド種別がライトコマンドの場合はステップ1717に進む。コマンド種別が管理コマンドの場合はステップ1714に進む。以下では、ステップ1702においてコマンド種別がリードコマンドの場合のフローについて説明する。
ステップ1703に処理が分岐すると、エンクロージャコマンド通信部(ターゲット)1401から得られる識別名403、ステップ1701で得られたNID、開始アドレスとデータ転送長の情報に基づき、キャッシュヒット、ヒットミス判定を行う(ステップ1703)。次に、キャッシュヒットかヒットミスで処理を分岐する(ステップ1705)。キャッシュヒットの場合はステップ1706に進み、ヒットミスの場合はステップ1709に進む。ここで、キャッシュヒット、ヒットミスの判定は、ホストコンピュータからのIOコマンドに応答するデータがストレージコントローラのキャッシュメモリ204にあるか否かを判定する。例えば、ホストコンピュータからのIOコマンドがリードコマンドの場合、リードコマンドに応答するデータがキャッシュメモリ204上にあるか否を判定する。
キャッシュヒットの場合、データ転送処理部(ストレージコントローラとドライブエンクロージャ間)1403を使用してドライブエンクロージャ200にキャッシュ内のデータを転送する(ステップ1706)。次に、エンクロージャコマンドのリードコマンドの完了応答を作成する(ステップ1707)。次に、エンクロージャコマンド通信部1401(ターゲット)を使用してドライブエンクロージャ200にコマンドの完了応答を送信する(ステップ1708)。最後に、処理を完了する(ステップ1723)。
以下、フローチャートのステップ1709以降の説明に戻り、ヒットミスの場合の処理のフローについて説明する。ステップ1705からステップ1709に処理が分岐すると、データ転送オフロード部1405はデータ転送に必要なオフロードコマンドを、アドレス変換テーブル等を参照することで作成する(ステップ1709)。オフロードコマンドに必要な制御データと、その作成方法は図9A−Dの説明の通りである。
次に、エンクロージャコマンドのリードコマンドの完了応答を作成する(ステップ1710)。次に、エンクロージャコマンド通信部(ターゲット)1401から得られる識別名403、ステップ1701で得られたNID、開始アドレスとデータ転送長の情報から、データ格納先のドライブエンクロージャ200を識別し、オフロードコマンド通信部(イニシエータ)1406を使用してドライブエンクロージャ200にオフロードコマンドとリードコマンドの完了応答を送信する(ステップ1711)。
次に、ドライブエンクロージャ200からのオフロードコマンドの完了を待つ(ステップ1712)。次に、オフロードコマンド通信部(イニシエータ)1406を介してドライブエンクロージャ200からのオフロードコマンドの完了応答を受信し、オフロードコマンドのコマンドの完了応答を解析する(ステップ1713)。最後に、処理を完了する(ステップ1723)。
以下、フローチャートのステップ1702以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。ステップ1702からステップ1717に処理が分岐すると、エンクロージャコマンド処理部1402がライトデータを格納するためのキャッシュ領域の確保を行う(ステップ1717)。次に、エンクロージャコマンド通信部(ターゲット)1401を介してドライブエンクロージャ200にXFER RDYを送信する(ステップ1718)。次に、データ転送制御部(ストレージコントローラとエンクロージャ間)1403がドライブエンクロージャからの転送データを受信する(ステップ1719)。
次に、ライトデータをもう片方のストレージコントローラに転送し、キャッシュの二重書きを行う(ステップ1720)。次に、ドライブエンクロージャのライトコマンドに対応するコマンド完了応答を作成する(ステップ1721)。次に、エンクロージャコマンド通信部(ターゲット)1401を使用してドライブエンクロージャ200にコマンドの完了応答送信する(ステップ1722)。最後に処理を完了する(ステップ1723)。
以下、フローチャートのステップ1714以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ1714に処理が分岐すると、管理コマンドで指定された内容に従い、エンクロージャコマンド処理部1402は管理コマンドの処理を行う(ステップ1714)。次に、管理コマンドの処理の結果を含むコマンドの完了応答を作成する(ステップ1715)。次に、エンクロージャコマンド通信部(ターゲット)1401を使用してドライブエンクロージャ200にコマンドの完了応答を送信する(ステップ1716)。最後に、処理を完了する(ステップ1723)。
(18)ターゲット構成形態2によるストレージコントローラにおけるデステージの処理手順
図18は、ターゲット構成形態2によるストレージコントローラにおけるデステージの処理手順を示すフローチャートである。図12との共通点が多いことから、理解の容易化のため差分だけを説明する。差分は、図12においてライトデータのデータ転送をドライブエンクロージャ200のRDMA Readで行っていた箇所が、ストレージコントローラ121からの転送データの送信に変わる点である。
変更箇所はステップ1801からステップ1803である。すなわち、ステップ1203の後に、デステージ処理部1407はドライブエンクロージャ200からのXFER RDYを待つ(ステップ1801)。次に、オフロードコマンド通信部(イニシエータ)1406を介してドライブエンクロージャからXFER RDYを受信する(ステップ1802)。次に、データ転送処理部(ストレージコントローラとエンクロージャ間)1403はドライブエンクロージャに転送データを送信する(ステップ1803)。ステップ1204以降は、図12と同じである。
(21)ターゲット構成形態2によるドライブエンクロージャにおけるコントローラコマンドの処理手順
図21は、ターゲット構成形態2によるドライブエンクロージャにおけるコントローラコマンドの処理手順を示すフローチャートである。
図20との共通点が多いことから、理解の容易化のため差分だけを説明する。差分は、ストレージコントローラとの間のデータ転送である。ステップ2005のRDMA Writeによるデータ転送は、データ転送制御部(ストレージコントローラとドライブエンクロージャ間)1413でのデータ転送に変わる(ステップ2101)。また、ステップ2010のRDMA Readによるデータ転送は、ドライブエンクロージャ200からストレージコントローラ121へのXFER RDY送信(ステップ2102)と、データ転送制御部(ストレージコントローラとドライブエンクロージャ間)1413によるストレージコントローラからの転送データの受信(ステップ2103)に変わる。それ以外のステップについては、図20と同じである。
(22)ドライブエンクロージャのホスト情報テーブル、とエンクロージャコマンドのフォーマット
図22はドライブエンクロージャのホスト情報テーブルを示す図である。図23は、エンクロージャコマンドのフォーマットを示す図である。
図22のホスト情報テーブルは、キュー番号2201、ホストNQN2202、NVM Subsystem NQN2203の項目から構成される。実施例3では、ドライブエンクロージャ200がホストコンピュータ110に対してNVMe over Fabricsのターゲットとして動作する。そのため、ホストコマンドの処理でホストコンピュータの情報を参照できるように、ドライブエンクロージャ200はホストコンピュータの情報をホスト情報テーブルに格納する。
キュー番号2201は、ホストコンピュータとNVM Subsystemの間のIOキューの番号である。ドライブエンクロージャ200は、IOキューを内部で管理するために、ホストコンピュータ110からconnectコマンドを受信してIOキューを作成する時に、当該キュー番号を採番する。キュー番号はドライブエンクロージャ200の内部でユニークな値である。ホストNQN2202とNVM Subsystem NQN2203は、それぞれ、上記IOキューでつながったホストコンピュータ110のNQNとドライブエンクロージャ200のNVM SubsystemのNQNである。NVM Subsystem NQN2203は、識別名1503に対応する。
図23に示す、エンクロージャコマンドのフィールドは、コマンド識別子2211、ホストNQN2212、ドライブエンクロージャ番号2213、ドライブエンクロージャメモリアドレス2214、NVM Subsystem NQN2215、コマンド種別2216、NID (namespace ID)2217、開始アドレス2218、データ転送長2219、メモリアドレス2220、R_key2221から構成される。
コマンド識別子2211は、個々のコマンドを識別するための識別子である。ホストNQN2212は、コマンド発行元のホストコンピュータ110のNQN(ホストNQN2202に対応する)である。エンクロージャ番号2213は、エンクロージャコマンドの送信元を識別するための番号で、ドライブエンクロージャ200自身の番号である。当該ドライブエンクロージャ番号は、ドライブエンクロージャ200を管理するためにストレージコントローラ121が採番する番号である。採番のタイミングは、例えば、ストレージ装置の起動時や、ドライブエンクロージャの増設時である。
メモリアドレス2214は、ドライブエンクロージャ200がストレージコントローラ121とのデータ転送に用いるデータバッファのアドレスである。ドライブエンクロージャ200とストレージコントローラ121の間のデータ通信はRDMA通信や、ストレージ装置で一般的なFC(Fibre Channel)を使用することができる。RDMA通信を使う場合には、メモリアドレス2214に加えてR_keyが必要となるが、ここでは、RDMA通信に限定しないために記載を省略した。
NVM Subsystem NQN2215は、ホストコマンドのアクセス対象のNVM SubsystemのNQN(識別名1503に対応する)である。
コマンド種別2216、NID2217、開始アドレス2218、データ転送長2219、メモリアドレス2220、R_key2221は、ホストコマンドのコマンド識別子911、コマンド種別912、NID913、開始アドレス914、データ転送長915、メモリアドレス916、R_key917である。
上記エンクロージャコマンドのフィールド2211〜2221の値は、ホストコマンド処理部1410が次のようにして設定する。
ホストコマンド処理部1410は、コマンド識別子2211に、実行中のエンクロージャコマンドの間でユニークな値を設定する。
ホストコマンド処理部1410は、ドライブエンクロージャ200のターゲットドライバ1409がホストコンピュータ110からコマンドを受領したIOキューと、ドライブエンクロージャのホスト情報テーブル2200のエントリを照らし合わせ、IOキューに対応するホストNQN2202とNVM Subsystem NQN2203を、ホストNQN2212とNVM Subsystem NQN2215(識別名1503に対応する)に設定する。
ホストコマンド処理部1410は、自身のエンクロージャ番号をエンクロージャ番号2213に、ドライブエンクロージャ200がストレージコントローラ121とのデータ転送に用いるデータバッファのアドレスをエンクロージャメモリアドレス2214に設定する。
ホストコマンド処理部1410は、コマンド種別2216、NID2217、開始アドレス2218、データ転送長2219、メモリアドレス2220、R_key2221に、ホストコンピュータから受信したホストコマンドのコマンド識別子911、コマンド種別912、NID913、開始アドレス914、データ転送長915、メモリアドレス916、R_key917の値を設定する。
実施例3では、実施例1や2と異なり、ホストコンピュータとネットワークを介して接続されたドライブエンクロージャが、ホストコンピュータから直接IOコマンドを受信する。IOコマンドがリードコマンドの場合、ドライブエンクロージャは、直接ホストコンピュータにリードデータを転送すると共に、完了報告も行う。つまり、ドライブエンクロージャがホストコンピュータに対し、作成したNVM Subsystemをホストコンピュータに記憶領域として提供する。
実施例3によれば、ストレージコントローラのデータ保護技術を維持しつつ、ドライブエンクロージャのオフロード機能により、ストレージコントローラの処理負荷を軽減すると共に、リードコマンドに対しホストコンピュータに対して直接リードデータを転送することができる。
(19)実施例4の情報処理システムの構成
図19はストレージコントローラがホストコンピュータと別のネットワークに接続する形態(接続形態2:実施例4、実施例6、実施例8)かつターゲット構成形態2の形態による情報処理システムの接続構成の図である。
図1との共通点が多いことから、理解の容易化のため差分だけを説明する。図1との違いは、ドライブ筐体140がネットワーク150とネットワーク1901との、2つの別々のネットワークに接続していることである。ネットワーク150はホストコンピュータ110とドライブ筐体140が接続するネットワークであり、ネットワーク1901はストレージ装置120とドライブ筐体140が接続するネットワークである。ここで、ドライブ筐体140はネットワークI/F205を介してネットワーク150とネットワーク1901に接続している。また、ストレージ装置120はネットワークI/F126を介してネットワーク1901に接続している。
実施例4におけるストレージ装置120とドライブ筐体140の制御方法は、実施例3と同じため説明を割愛する。
なお、ネットワーク1901はPCIeのネットワークであっても良い。この場合、ドライブ筐体140は、ネットワークI/F205が無い代わりにPCIeポート206を介してネットワーク1901に接続する。また、ストレージ装置120は、ネットワークI/F126が無い代わりにPCIeポート126を介してネットワーク1901に接続する。ストレージ装置120とドライブ筐体140の制御方法について、PCIeのネットワークを介したデータ転送方法(例えばDMA)に変わる以外は実施例3と同じため説明を割愛する。
実施例4によれば、実施例3と同様、ドライブエンクロージャ140がホストコンピュータからIOコマンド等を受信する形態により適したネットワーク構成とすることができる。
実施例5の概要について説明する。実施例5は、実施例3のライトIOを高速化した実施例に相当する。実施例5の情報処理システムの構成は図1に示すとおりである。実施例5では、実施例3と同様にストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態(ターゲット構成形態2)である。
ライトIOの高速化は、ライトデータをホストコンピュータからドライブ筐体にストレージコントローラを介さずに転送し、ドライブ筐体はライトデータをドライブに書き込むことで実現する。ライトデータの書き込み先はストレージコントローラが決定し、ドライブ筐体はストレージコントローラに問い合わせることでライトデータの書き込み先を取得する(ライトIO処理の連携方式1)。NVMe over FabricsにおけるホストとNVM Subsystemの識別名は図15に示したとおり、実施例3と同じため、説明を割愛する。
(23)ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態(ターゲット構成形態2:実施例3と同じ)で、ライトIOの高速化においてストレージコントローラがライトデータの書き込み先を決定し、ライトデータ書き込み先をストレージコントローラに問い合わせる方式(ライトIO処理の連携方式1)における、ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成
図24は、ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態で、ライトIOの高速化においてストレージコントローラが、アドレス変換テーブルに基づいて、ライトデータの書き込み先を決定し、ライトデータ書き込み先をストレージコントローラに問い合わせる方式(ライトIO処理の連携方式1)における、ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成を示す図である。
ストレージコントローラ121のプログラムは、エンクロージャコマンド通信部(ターゲット)2301、エンクロージャコマンド処理部2302、データ転送オフロード部2303、オフロードコマンド通信部(イニシエータ)2304、2重化解除指示部2305、コントローラコマンド送信部(イニシエータ)2306、書き込み先アドレス決定部2307、アドレス変換部2308、論物アドレス管理部2309、構成情報管理部2310、2重化情報管理部2311、および図示しないOSから構成される。
エンクロージャコマンド通信部(ターゲット)2301は、エンクロージャコマンド通信部(イニシエータ)2314に対してNVMeoF対応の記憶領域を提供する。
エンクロージャコマンド処理部2302は、ドライブエンクロージャ200が発行したコマンドを、エンクロージャコマンド通信部(ターゲット)2301を使用して受信し、コマンドの解析、リード・ライト処理、コマンドの完了応答の作成、エンクロージャコマンド通信部(ターゲット)2301を介したコマンドの完了応答の送信等を行う。
データ転送オフロード部2303は、データ転送のオフロードコマンドを作成し、ドライブエンクロージャ200に対してホストコンピュータとドライブエンクロージャ間のデータ転送を指示する。
オフロードコマンド通信部(イニシエータ)2304は、ドライブエンクロージャとの間でオフロードコマンドの送信、応答の受信を行う。2重化解除指示部2305は、ドライブエンクロージャ200に対して2重化領域の解放をコントローラコマンドで指示する。コントローラコマンド送信部(イニシエータ)2306は、ドライブエンクロージャとの間でコントローラコマンドの送信と完了応答の受信を行う。書き込み先アドレス決定部2307は、ドライブエンクロージャ内のドライブへのライトデータの書き込み先アドレスを決定する。アドレス変換部2308は、データ範囲505と、データの格納先であるドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509とのアドレス変換テーブル(マッピングテーブル)を持ち、データ範囲505のアドレスを、対応するドライブエンクロージャ200、ドライブ508、ドライブ508内の記憶領域509のアドレスに変換する。
論物アドレス管理部2309は、データ範囲505に対応する記憶領域509のアクセス排他状態と排他解除状態、記憶領域509の2重書き状態と2重書き解除状態の各状態の遷移の制御を行う。
構成管理部2310は、ストレージシステムの構成情報を初期化、更新、保存する役割を持つ。構成情報は、ストレージコントローラのハードウェア構成、構成設定、ドライブ筐体のノード情報、ハードウェア構成、構成設定を含む。2重化情報管理部2311は、パリティ生成済み領域2801、2重化領域2802、2重化領域2802内のプライマリ領域2803とセカンダリ領域2804の配置を初期化、更新、保存する役割を持つ。各領域については、図28と図29にて説明する。
ドライブエンクロージャ200のプログラムはターゲットドライバ2312、ホストコマンド処理部2313、エンクロージャコマンド通信部(イニシエータ)2314、データ転送制御部(ホストコンピュータとエンクロージャ間)2316、オフロードコマンド通信部(ターゲット)2317、オフロードコマンド処理部2318、コントローラコマンド通信部(ターゲット)2319、ドライブ制御部2320、バッファ制御部2315、コントローラコマンド処理部2321、ドライブ2重書き部2322、2重化解除処理部2323、および図示しないOSから構成される。
ターゲットドライバ2312は、ホストコンピュータの110のイニシエータドライバ301に対してNVMeoF対応の記憶領域を提供する。ホストコマンド処理部2313は、ホストコンピュータが発行したコマンドを、ターゲットドライバ2312を使用して受信し、コマンドの解析、リード・ライト処理、コマンドの完了応答の作成、ターゲットドライバ2312を介したコマンドの完了応答の送信等を行う。エンクロージャコマンド通信部(イニシエータ)2314は、ストレージコントローラ121のエンクロージャコマンド通信部(ターゲット)に対してエンクロージャコマンドを発行する。データ転送制御部(ホストコンピュータとエンクロージャ間)2316は、ホストコマンド処理部2313およびオフロードコマンド処理部2318の指示に従い、NVMeoFに対応したホストコンピュータとドライブエンクロージャとの間のデータ転送処理を行う。
オフロードコマンド通信部(ターゲット)2317は、ストレージコントローラ121からのデータ転送のオフロードコマンドの受信と、完了応答の送信を行う。オフロードコマンド処理部2318は、オフロードコマンドの解析、リード処理、ライト処理、オフロードコマンドの完了応答の作成、オフロードコマンド通信部(ターゲット)2317を介したオフロードコマンドの完了応答の送信等を行う。コントローラコマンド通信部(ターゲット)2319は、ストレージコントローラ121との間でコントローラコマンドの受信と完了応答の送信を行う。コントローラコマンド処理部2321は、ストレージコントローラが発行したコマンドを、コントローラコマンド処理部(ターゲット)2319を使用して受信し、コマンドの解析、2重化解除処理の実行、コマンドの完了応答の作成、コントローラコマンド処理部(ターゲット)2319を介したコマンドの完了応答の送信等を行う。
ドライブ制御部2320は、ドライブ218の管理と、ホストコマンド処理部2313およびオフロードコマンド処理部2318、ドライブ2重書き部2322、2重化解除処理部2323の指示に従ってドライブ218に対してリード・ライト処理を行う。バッファ制御部2315は、データ転送を行うための一時的なメモリ領域であるバッファの確保と解放を行う。
ドライブ2重書き部2322は、ライトデータを2つのドライブに書き込む処理を行う。2つのドライブに書き込むことで、ドライブ障害によるユーザデータのロストを防止する。2重化解除処理部2323は、2重書きによるデータ保護からRAIDによるデータ保護に切り替える処理を行う。
(25)ターゲット構成形態2、ライトIO処理の連携方式1によるドライブエンクロージャにおけるホストコマンドの処理手順
図25は、ターゲット構成形態2、ライトIO処理の連携方式1によるドライブエンクロージャにおけるホストコマンドの処理手順を示すフローチャートである。なお、一部の処理は図16の処理と共通していることから、共通の処理のステップについては図16のステップ番号を記載した。
ドライブエンクロージャ200のターゲットドライバ2312がホストコンピュータ110からコマンドを受信すると、ホストコマンド処理部2313がステップ2500以降の処理を開始する。
始めに、ホストコマンド処理部2313は受信したNVMeコマンドを解析し(コマンドのフォーマットについてはホストコマンドの図9Aのフォーマット910を参照)、コマンド種別912、namespaceの識別子であるNID (namespace ID)913、開始アドレス914、データ転送長915のフィールドを読み込む(ステップ2501)。
次に、コマンドの種別で処理を分岐する(ステップ2502)。コマンド種別がリードコマンドの場合はステップ1603に進む。コマンド種別がライトコマンドの場合はステップ2503に進む。コマンド種別が管理コマンドの場合は、ステップ1617に進む。以下では、ステップ2502においてコマンド種別がリードコマンドの場合のフローについて説明する。
ステップ1603に分岐すると、図16においてコマンド種別がリードコマンドで、かつ、応答種別がオフロードの場合の処理と同じとなる。処理が同じため、以降の説明を割愛する。
次に、フローチャートのステップ2502以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。ステップ2502からステップ2503に処理が分岐すると、ホストコマンド処理部2313は、ライトデータを格納するためのバッファ領域を、バッファ制御部2315を用いて確保する(ステップ2503)。次に、ホストコマンド処理部2313は、ストレージコントローラ121に受信したライトコマンドを通知するとともに、ライトコマンドで指定されたアドレス範囲に対応する書き込み先アドレスを問い合わせるエンクロージャコマンドを作成する(ステップ2504)。
次に、ホストコマンド処理部2313は、エンクロージャコマンドを、エンクロージャコマンド通信部(イニシエータ)2314を介してストレージコントローラ121に送信する(ステップ2505)。
次に、ホストコマンド処理部2313はストレージコントローラ121からの書き込み先アドレスの応答を待つ(ステップ2506)。ここで、書き込み先アドレスは、ストレージコントローラ121によってアドレス変換テーブルを参照して求めたものである。次にホストコマンド処理部2313は、ストレージコントローラ121からエンクロージャコマンド通信部(イニシエータ)2314を介して書き込み先アドレスの通知を受信し、通知を解析して書き込み先アドレスを取得する(ステップ2507)。
次に、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)2316は、ライトコマンドで指定されたホストコンピュータ110内の物理メモリ領域503のデータを、確保したバッファ領域に転送する(ステップ2508)。
次に、ドライブ2重書き部2322はバッファ領域のライトデータを、ステップ2507で受信した書き込み先アドレスに2重書きする(ステップ2509)。2重書きは2つのドライブに書き込むという意味であり、詳しくは図28と図29にて説明する。
次に、ドライブ2重書き部2322は、2重書きの完了を、すなわち2重書き先に対応するドライブからの書き込み完了を待つ(ステップ2510)。次に、ドライブ2重書き部2322は2重書きの完了応答を受信する(ステップ2511)。
次に、ホストコマンド処理部2313はストレージコントローラ121にエンクロージャコマンド通信部(イニシエータ)2314を介して書き込み完了を通知する(ステップ2512)。次に、ホストコマンド処理部2313はストレージコントローラ121からのコントローラコマンド(ライトコマンドに対応する)の完了応答を待つ(ステップ2513)。
次に、ホストコマンド処理部2313は、ストレージコントローラ121からエンクロージャコマンド通信部(イニシエータ)2314を介してライトコマンドのコマンド完了応答を受信し、ライトコマンドのコマンド完了応答を解析する(ステップ2514)。
次に、ホストコンピュータ110からのライトコマンドに対応するコマンドの完了応答を作成する(ステップ2515)。次に、ターゲットドライバ2312を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ2516)。次に、確保したバッファ領域を開放する(ステップ2517)。最後に、処理を完了する(ステップ2518)。
次に、フローチャートのステップ2502以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ2502からステップ1617に処理が分岐すると、図16においてコマンド種別が管理コマンドの場合と同じとなる。処理が同じため、以降の説明を割愛する。
(27)ターゲット構成形態2、ライトIO処理の連携方式1によるストレージコントローラにおけるエンクロージャコマンドの処理手順
図27は、ターゲット構成形態2、ライトIO処理の連携方式1によるストレージコントローラにおけるエンクロージャコマンドの処理手順を示すフローチャートである。なお、一部の処理は図17の処理と共通していることから、共通の処理のステップについては図17のステップ番号を記載した。
ストレージコントローラ121のエンクロージャコマンド通信部(ターゲット)2301がドライブエンクロージャ200からエンクロージャコマンドを受信すると、エンクロージャコマンド処理部2302がステップ2700以降の処理を開始する。
始めに、エンクロージャコマンド処理部2302は受信したエンクロージャコマンドを解析し、コマンド種別、namespaceの識別子であるNID (namespace ID)、開始アドレス、データ転送長のフィールドを読み込む(ステップ2701)。次に、コマンドの処理で処理を分岐する(ステップ2702)。コマンド種別がリードコマンドの場合はステップ1709に進む。コマンド種別がライトコマンドの場合はステップ2703に進む。コマンド種別が管理コマンドの場合はステップ1714に進む。
ステップ1709に分岐すると、図17においてオフロードの場合の処理と同じとなる。処理が同じため、以降の説明を割愛する。
以下では、ステップ2702においてコマンド種別がライトコマンドの場合のフローについて説明する。ステップ2703に分岐すると、エンクロージャコマンド処理部2302はエンクロージャコマンド通信部(ターゲット)2301から得られる識別名403、ステップ2301で得られたNID、開始アドレスとデータ転送長の情報に基づき、論理ボリュームのライト範囲へのアクセス排他を行う(ステップ2703)。アクセス排他を行う理由は、同一の論理アドレスにアクセスする複数のライトコマンドを受信した場合でも、データの一貫性を保障するためである。
次に、ライトデータの書き込み先のアドレス、すなわち2重書き先のドライブと物理アドレスを決定する(ステップ2704)。この処理フローでは、ライトデータの書き込みをストレージコントローラではなくドライブ筐体が行うので、ドライブ筐体のライトデータの書き込みを待って、ストレージコントローラが管理するアドレス変換テーブルを更新する必要がある。
次に、オフロードコマンド通信部(イニシエータ)2304を介して書き込み先アドレスをドライブエンクロージャ200に送信する(ステップ2705)。次に、ドライブエンクロージャ200からの書き込み完了を待つ(ステップ2706)。
次に、オフロードコマンド通信部(イニシエータ)2304を介してドライブエンクロージャ200からの書き込み完了を受信する(ステップ2707)。次に、アドレス変換部2308がアドレス変換テーブルの対応関係を更新する(ステップ2708)。すなわち、ライトコマンドの指定する論理ボリュームのライト範囲の論理アドレスに、2重書き先のドライブの識別子と物理アドレスをマッピングする。
次に、書き込み先アドレス決定部2307は追い書きポインタを更新する(ステップ2709)。追い書きポインタは追い書き処理がどこまで進んだかを示すポインタである。ポインタは例えばドライブの物理アドレスや、ドライブの物理アドレスに対応するインデックスである。次に、エンクロージャコマンドの完了応答を作成する(ステップ2710)。
次に、エンクロージャコマンド通信部(ターゲット)2301を介してコマンドの完了応答、ドライブエンクロージャ200に送信する(ステップ2711)。これにより、アドレス変換テーブルの更新の完了をドライブ筐体に通知する。次に、アクセス排他を解放する(2712)。ドライブ筐体では、ホストコンピュータに対して、ライトコマンドの完了通知を行い、処理を完了する(ステップ2713)。
次に、フローチャートのステップ2702以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ2702からステップ1714に処理が分岐すると、図17においてコマンド種別が管理コマンドの場合と同じとなる。処理が同じため、以降の説明を割愛する。
(26)ターゲット構成形態2、ライトIO処理の連携方式1によるドライブエンクロージャにおけるコントローラコマンドの処理手順
図26はターゲット構成形態2、ライトIO処理の連携方式1によるドライブエンクロージャにおけるコントローラコマンドの処理手順を示すフローチャートである。
ストレージコントローラ121の2重化解除指示部2305がデステージ条件を満たすと判定(例えば、2重化領域の書き込み済み量が閾値以上など)すると、2重化解除指示部2305がステップ2600以降の処理を開始する。
始めに、2重化解除指示部2305は、2重化解除対象を決定する(ステップ2601)。2重化解除対象の決定方法としては、例えば2重化領域の書き込み済み量が閾値以下になるまで書き込み時刻の古いものから優先的に2重化解除対象のRAIDストライプを選択する。次に、2重化解除対象を全て解除するまで以降の処理を繰り返す(ステップ2602)。
次に、2重化解除対象で、プライマリ領域2803のRAIDストライプを1つ選択する(ステップ2603)。次に、選択したRAIDストライプの2重化解除、すなわちパリティ生成と書き込みを、コントローラコマンド通信部(イニシエータ)2306を介してドライブエンクロージャ200に指示する(2604)。
次に、ドライブエンクロージャ200からの応答を待つ(ステップ2605)次に、ドライブエンクロージャ200のコントローラコマンド処理部2321はコントローラコマンド通信部(ターゲット)2319を介してストレージコントローラ121からの2重化解除指示を受信し、指示を解析する(ステップ2606)。次に、2重化解除処理部2323は、2重化解除指示に指定されたRAIDストライプのデータを読み込む(2607)。
次に、読み込んだデータのパリティを生成する(ステップ2608)。次に、生成したパリティを書き込む(ステップ2609)。次に、コントローラコマンド処理部2321は2重化解除指示の完了応答を作成し、コントローラコマンド通信部(ターゲット)2319を介してストレージコントローラ121に完了応答を送信する(ステップ2610)。
次に、2重化解除指示部2305はコントローラコマンド通信部(イニシエータ)2306を介してドライブエンクロージャ200から完了応答を受信する(ステップ2611)。次に、2重化情報管理部2311は、選択したRAIDストライプのセカンダリ領域の解放と2重化情報の更新を行い、論物アドレス管理部2309は、対応する記憶領域509の状態を2重書き解除状態に更新する(ステップ2612)。次に、ステップ2602の繰り返しが続く場合は、ステップ2603に進む。ステップ2602の繰り返しが終了すると、最後に、処理を終了する(ステップ2613)。
(28)ドライブエンクロージャにおける2重化領域とパリティ生成済み領域
図28はドライブエンクロージャにおける2重化領域とパリティ生成済み領域を示す図である。
ドライブ2805は、ドライブエンクロージャ内のRAIDグループに属するドライブ218である。図中では例として4台のドライブから成る、RAIDレベルがRAID5のRAIDグループが図示されている。尚、ドライブ数は4台に、RAIDレベルはRAID5に限定されるものではない。例えば、RAIDグループのドライブは、RAID5ではN+1台(N台のデータドライブと1台のパリティドライブ)、RAID6ではN+2台(N台のデータドライブと2台のパリティドライブ)、などの構成が可能である。
パリティ生成済み領域2801は、パリティ生成済みのパリティサイクルから構成される。図中、ストライプ2806の「m」、「n」、「o」、「P」がパリティスサイクルである。ストライプ2806はRAIDストライプである。ストライプ「P」は、ストライプ「m」、「n」、「o」のデータを冗長化したパリティである。
2重化領域2802は、ライトデータの書き込み先であり、プライマリ領域2803とセカンダリ領域2804で構成される。
2重化領域内のプライマリ領域2803は、ライトデータを格納したストライプ2806(「a」〜「f」)、未書き込みでライトデータを格納していないストライプ2806(文字の記載なし)、パリティ未生成のストライプ2806(灰色にハッチングされ、かつ、文字の記載がない)で構成される。
2重化領域内のセカンダリ領域2804は、プライマリ領域2803のコピーであり、同じ構成を持つ。図中、ストライプ2806(「a」〜「f」)は、ストライプ2806(「a’」〜「f’」)がコピーの関係に対応している。コピーの関係に対応する各ストライプは、ドライブ障害によるユーザデータ消失への対策として、それぞれ別のドライブの領域となるように配置する。例えば、ストライプ2806の「a」はドライブ0で、ストライプ2806の「a’」はドライブ1と、1つずれたドライブに配置する。これにより、ドライブ1台が故障しても、すくなくとも2重化したどちらか一方のユーザデータが残るため、ユーザデータ消失を防止することができる。
プライマリ領域2803とセカンダリ領域2804の違いとして、プライマリ領域2803のパリティサイクルはパリティ生成後にパリティ生成済み領域2801となり、セカンダリ領域2904のパリティサイクルはパリティ生成後にライトデータの格納先として2重化領域2802として再利用される点が異なる。
パリティ生成済み領域2801、2重化領域2802は論理的な管理領域である。そのため、ストライプ2806の所属する領域が変更されても、ストライプ2806の管理情報(メタデータ)が変更になるだけであり、ドライブへのIO負荷がかかるデータ移動は行わない。
この他、RAIDグループに属するドライブの記憶領域には、空き領域が存在するが、図示を省略した。また、データ保護のレベルに応じてセカンダリ領域2804は2つ以上でもよい。例えば、RAID6と同等のデータ保護のレベルを達成するため、つまり2ドライブ故障してもデータロスとしないためには、セカンダリ領域2804を2つ用意する。
(29)ドライブエンクロージャにおける2重化領域の対応関係
図29はドライブエンクロージャにおける2重化領域の対応関係を示す図である。
2重化領域へのライトデータの書き込みは、追記型の書き込み(ログストラクチャードライトとも呼ばれる)で行う。追記型の書き込み(追い書き)は、受信したユーザデータをシーケンシャルに書き込む方式であり、書き込み性能に優れている。書き込み先は、未書き込みでライトデータを格納していないプライマリ領域2803とセカンダリ領域2804のストライプ2806である。図では、プライマリ領域2803のストライプをストライプ2806「g」、セカンダリ領域のストライプをストライプ2806「g’」で示している。図では、ストライプ2806「g」とストライプ2806「g’」以外の記載は省略した。ストライプ2806「g」とストライプ2806「g’」は前述の通り、コピーの関係にあり、異なるドライブに配置されている。ドライブ2重書き部2322は、ホストコンピュータのライト要求に従ってユーザデータ2901をシーケンシャルに書き込む(図中、「g1」、「g2」、「g3」)。ストライプ2806「g」および「g’」がユーザデータで満たされてユーザデータをそれ以上書き込めない場合は、次のストライプ2806に移り書き込みを継続する。
実施例5によれば、ストレージコントローラのデータ保護技術を維持しつつ、ドライブエンクロージャのオフロード機能により、ストレージコントローラの処理負荷を軽減すると共に、ライトコマンドに対し、2重書き処理をドライブ筐体で行うことでストレージコントローラの処理負荷を軽減することができる。
実施例6は、実施例5におけるストレージコントローラがホストコンピュータと別のネットワークに接続する形態(接続形態2)の実施例である。接続形態2は、実施例4で説明したとおりである。
実施例6におけるストレージ装置120とドライブ筐体140の制御方法は、実施例5と同じため説明を割愛する。
実施例7と実施例5は、ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作し、ライトデータがホストからドライブ筐体に直接データ転送される点で共通している。一方で、実施例7と実施例5は、どこでライトデータの書き込み先を決定するかが異なる。具体的には、実施例5ではライトデータの書き込み先をストレージコントローラ121が決定して論物アドレスのマッピングを更新するのに対して、実施例7ではライトデータの書き込み先をドライブエンクロージャ200が決定し、ドライブエンクロージャ200が通知する論物アドレスのマッピングに基づいてストレージコントローラ121が論物アドレスのマッピングを更新する点が異なる。実施例7は実施例5に比べてライトデータの書き込み先をストレージコントローラ121に問い合わせる必要が無く、ライトコマンド処理の応答時間を短縮できるメリットがある。一方で、実施例7では停電などの障害で制御情報が揮発してしまう信頼の低いドライブエンクロージャ200で、高信頼なストレージ処理を実現するために、追い書きポインタをストレージコントローラに通知する仕組みが必要となる。NVMe over FabricsにおけるホストとNVM Subsystemの識別名は図15に示したとおり、実施例5と同じため、説明を割愛する。
(30)ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態(ターゲット構成形態2:実施例3と同じ)で、ライトIOの高速化においてライトデータの書き込み先をドライブエンクロージャが決定する方式(ライトIO処理の連携方式2)の、ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成
図30は、ストレージコントローラの代わりにドライブ筐体がホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態で、ライトIOの高速化においてライトデータ書き込み先をドライブエンクロージャが決定する方式(ライトIO処理の連携方式2)の、ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成を示す図である。
ストレージコントローラ121のプログラムは図24の構成要素と共通する部分があるため、主に差分について説明する。3001〜3006と2301〜2306、3008〜3011と2308〜2311がそれぞれ共通する構成要素である。ストレージコントローラ121のプログラムで図30と図24との違いは、図24の書き込み先アドレス決定部が無くなり、追い書きポインタ管理部3007が追加となる点である。追い書きポインタは追い書き処理がどこまで進んだかを示すポインタであり、ドライブエンクロージャで障害が発生した時に、ユーザデータの整合性保障、データのリカバリ、ストレージ処理の再開に必要な制御情報である。追い書きポインタ管理部3007は、信頼の低いドライブエンクロージャ200の代わりに、追い書きポインタのコピーを高信頼なストレージコントローラで保存する役割を持つ。
ドライブエンクロージャ200のプログラムは図24の構成要素と共通する部分があるため、主に差分について説明する。3012〜3023と2312〜2323がそれぞれ共通する構成要素である。ドライブエンクロージャ200のプログラムで図30と図24との違いは、追い書きポインタ更新部3024、論物対応パラメータ作成部3025、2重化情報のコピー3026が追加となる点である。追い書きポインタ更新部3024は、追い書きポインタを更新する役割を持つ。論物対応パラメータ作成部は、ライトコマンドの指定する論理ボリュームのライト範囲の論理アドレスと、2重書き先のドライブの識別子と物理アドレスの対応関係をストレージコントローラ121に通知するためのパラメータである論物対応パラメータ(アドレス変換テーブルのエントリに相当する情報)を作成する役割を持つ。2重化情報のコピー3026は、ストレージコントローラ121の2重化情報管理部3011の管理する2重化情報のコピーである。ドライブエンクロージャ200内に2重化情報のコピーを持つことにより、ライトコマンド処理でストレージコントローラ121に2重化情報を問い合わせる頻度を少なくし、処理効率を向上させる意味がある。
(31)ターゲット構成形態2、ライトIO処理の連携方式2によるドライブエンクロージャにおけるホストコマンドの処理手順
図31は、ターゲット構成形態2、ライトIO処理の連携方式2によるドライブエンクロージャにおけるホストコマンドの処理手順を示すフローチャートである。なお、一部の処理は図16の処理と共通していることから、共通の処理のステップについては図16のステップ番号を記載した。
ドライブエンクロージャ200のターゲットドライバ3012がホストコンピュータ110からコマンドを受信すると、ホストコマンド処理部3013がステップ3100以降の処理を開始する。
始めに、ホストコマンド処理部3013は受信したNVMeコマンドを解析し(コマンドのフォーマットについてはホストコマンドの図9Aのフォーマット910を参照)、コマンド種別912、namespaceの識別子であるNID (namespace ID)913、開始アドレス914、データ転送長915のフィールドを読み込む(ステップ3101)。
次に、コマンドの種別で処理を分岐する(ステップ3102)。コマンド種別がリードコマンドの場合はステップ1603に進む。コマンド種別がライトコマンドの場合はステップ3103に進む。コマンド種別が管理コマンドの場合は、ステップ1617に進む。以下では、ステップ3102においてコマンド種別がリードコマンドの場合のフローについて説明する。
ステップ1603に分岐すると、図16においてコマンド種別がリードコマンドで、かつ、応答種別がオフロードの場合の処理と同じとなる。処理が同じため、以降の説明を割愛する。
次に、フローチャートのステップ3102以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。ステップ3102からステップ3103に処理が分岐すると、ホストコマンド処理部2313はライトデータを格納するためのバッファ領域を、バッファ制御部3015を用いて確保する(ステップ3103)。
次に、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)3016は、ライトコマンドで指定されたホストコンピュータ110内の物理メモリ領域503のデータを、確保したバッファ領域に転送する(ステップ3104)。
次に、ホストコマンド処理部3013は、追記先アドレスを取得する(ステップ3105)。追記先アドレスは追い書きポインタの指し示すアドレスである。次に、ドライブ2重書き部3022はバッファ領域のライトデータを、ステップ3105で決定した書き込み先アドレスに2重書きする(ステップ3106)。
次に、ドライブ2重書き部3022は、2重書きの完了を、すなわち2重書き先に対応するドライブからの書き込み完了を待つ(ステップ3107)。次に、ドライブ2重書き部2322は2重書きの完了応答を受信する(ステップ3108)。
次に、追い書きポインタ更新部3024は、追い書きポインタを次の書き込み先の先頭アドレスに更新する(ステップ3109)。追い書きポインタは、図28と図29の2重書き方法に従って決定される。次に、論物対応パラメータ作成部3025が論物対応パラメータ作成を作成し、ホストコマンド処理部3013が、受信したライトコマンドの情報と論物対応パラメータとを含むエンクロージャコマンドを作成する(ステップ3110)。
次に、ホストコマンド処理部3013は、エンクロージャコマンド通信部(イニシエータ)3014を介してストレージコントローラ121にエンクロージャコマンドを送信する(ステップ3111)。次にホストコマンド処理部3013はストレージコントローラ121からのコントローラコマンド(ライトコマンドに対応する)の完了応答を待つ(ステップ3112)。次に、ホストコマンド処理部3013はエンクロージャコマンド通信部(イニシエータ)3014を介してストレージコントローラ121から完了応答を受信し、完了応答を解析する(ステップ3113)。
次に、ホストコンピュータ110からのライトコマンドに対応するコマンドの完了応答を作成する(ステップ3114)。次に、ターゲットドライバ3012を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ3115)。次に、確保したバッファ領域を開放する(ステップ3116)。最後に、処理を完了する(ステップ3117)。
次に、フローチャートのステップ2502以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ3102からステップ1617に処理が分岐すると、図16においてコマンド種別が管理コマンドの場合と同じとなる。処理が同じため、以降の説明を割愛する。
(32)ターゲット構成形態2、ライトIO処理の連携方式2によるストレージコントローラにおけるエンクロージャコマンドの処理手順
図32は、ターゲット構成形態2、ライトIO処理の連携方式2によるストレージコントローラにおけるエンクロージャコマンドの処理手順を示すフローチャートである。なお、一部の処理は図17の処理と共通していることから、共通の処理のステップについては図17のステップ番号を記載した。
ストレージコントローラ121のエンクロージャコマンド通信部(ターゲット)3001がドライブエンクロージャ200からエンクロージャコマンドを受信すると、エンクロージャコマンド処理部3002がステップ3200以降の処理を開始する。
始めに、エンクロージャコマンド処理部3002は受信したエンクロージャコマンドを解析し、コマンド種別、namespaceの識別子であるNID (namespace ID)、開始アドレス、データ転送長のフィールドを読み込む(ステップ3201)。
次に、コマンドの処理で処理を分岐する(ステップ3202)。コマンド種別がリードコマンドの場合はステップ1709に進む。コマンド種別がライトコマンドの場合はステップ3203に進む。コマンド種別が管理コマンドの場合はステップ1714に進む。
ステップ1709に分岐すると、図17においてオフロードの場合の処理と同じとなる。処理が同じため、以降の説明を割愛する。
以下では、ステップ3202においてコマンド種別がライトコマンドの場合のフローについて説明する。ステップ3203に分岐すると、エンクロージャコマンド処理部3002はエンクロージャコマンド通信部(ターゲット)3001から得られる識別名403、ステップ2301で得られたNID、開始アドレスとデータ転送長の情報に基づき、論理ボリュームのライト範囲へのアクセス排他を行う(ステップ3203)。アクセス排他を行う理由は、同一の論理アドレスにアクセスする複数のリードおよびライトコマンドを受信した場合でも、データの一貫性を保障するためである。
次に、コマンドに指定された論物対応パラメータ、すなわち2重書き先のドライブと物理アドレスのパラメータを解析する(ステップ3204)。次に、解析したパラメータの結果に従い、アドレス変換部3008がアドレス変換テーブルの対応関係(論物アドレスのマッピング)を更新する(ステップ3205)。次に、コマンドに指定された追い書きポインタの内容に従って、追い書きポインタ管理部3007がコマンド送信元のドライブエンクロージャに対応する追い書きポインタを更新する(ステップ3206)。次にエンクロージャコマンド処理部3002は、エンクロージャコマンドの完了応答を作成する(ステップ3207)。
次に、エンクロージャコマンド処理部3002はドライブエンクロージャ200にエンクロージャコマンド通信部(ターゲット)3001を介して完了応答を送信する(ステップ3208)。次に、エンクロージャコマンド処理部3002はアクセス排他を解放する(ステップ3209)。最後に、処理を完了する(ステップ3210)。
次に、フローチャートのステップ3202以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ3202からステップ1714に処理が分岐すると、図17においてコマンド種別が管理コマンドの場合と同じとなる。処理が同じため、以降の説明を割愛する。
実施例8は、実施例7におけるストレージコントローラがホストコンピュータと別のネットワークに接続する形態(接続形態2)の実施例である。接続形態2は、実施例4で説明したとおりである。
実施例8におけるストレージ装置120とドライブ筐体140の制御方法は、実施例7と同じため説明を割愛する。
実施例9と実施例5は、ストレージコントローラがライトデータの書き込み先を決定する点で共通している。一方で、実施例9は、ストレージコントローラがホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する点が、実施例5と異なる。NVMe over FabricsにおけるホストとNVM Subsystemの識別名は図4に示したとおり、実施例1,2と同じため、説明を割愛する。
(33)ストレージコントローラがホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態(ターゲット構成形態1:実施例1,2と同じ)で、ライトIOの高速化においてストレージコントローラがライトデータの書き込み先を決定し、ライトデータ書き込み先をストレージコントローラに問い合わせる方式(ライトIO処理の連携方式1)の、ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成
図33は、ストレージコントローラがホストコンピュータに対してNVMe over Fabricsのターゲットとして動作する形態で、ライトIOの高速化においてストレージコントローラがライトデータの書き込み先を決定し、ライトデータ書き込み先をストレージコントローラに問い合わせる方式(ライトIO処理の連携方式1)の、ホストコンピュータ、ストレージコントローラ、ドライブエンクロージャのプログラム構成を示す図である。
ストレージコントローラ121のプログラムは図24の構成要素と共通する部分があるため、主に差分について説明する。3303〜3011と2303〜2311がそれぞれ共通する構成要素である。ストレージコントローラ121のプログラムで図33と図24との違いは、図24のエンクロージャコマンド通信部(ターゲット)2301とエンクロージャコマンド処理部2302が無くなり、ターゲットドライバ3301とホストコマンド処理部3302が追加された点である。
ドライブエンクロージャ200のプログラムは図24の構成要素と共通する部分があるため、主に差分について説明する。3312〜3323と2312〜2323(2314を除く)がそれぞれ共通する構成要素である。ドライブエンクロージャ200のプログラムで図33と図24との違いは、エンクロージャコマンド通信部 (イニシエータ)2314がなくなった点である。
(34)ターゲット構成形態1、ライトIO処理の連携方式1によるストレージコントローラにおけるホストコマンドの処理手順
図34は、ターゲット構成形態1、ライトIO処理の連携方式1によるストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。実施例1のストレージコントローラにおけるホストコマンドの処理手順を示すフローチャートである。なお、一部の処理は図6の処理と共通していることから、共通の処理のステップについては図6のステップ番号を記載した。
ストレージコントローラ121のターゲットドライバ3301がホスト110からコマンドを受信すると、ホストコマンド処理部3302がステップ3400以降の処理を開始する。
始めに、ホストコマンド処理部3302は、ストレージコントローラのホスト情報テーブル920の情報を用いて、NVM Subsystem NQNである識別名923(図4の403)を得る(図9B参照)とともに、受信したNVMeコマンドを解析し(受信したNVMeコマンドについては図9A参照)、コマンド種別912、namespaceの識別子であるNID (namespace ID)913、開始アドレス914、データ転送長のフィールド915を読み込む(ステップ3401)。
次に、コマンドの種別で処理を分岐する(ステップ3402)。コマンド種別912がリードコマンドの場合はステップ606に進む。コマンド種別が管理コマンドの場合は、ステップ614に進む。コマンド種別がライトコマンドの場合は、ステップ3403に進む。
ステップ606に分岐すると、図6において、コマンド種別がIOコマンドで、データ転送方法がオフロードの場合の処理と同じとなる。処理が同じため、以降の説明を割愛する。
次に、フローチャートのステップ3402以降の説明に戻り、コマンド種別が管理コマンドの場合の処理のフローについて説明する。ステップ3402からステップ614に処理が分岐すると、図6においてコマンド種別が管理コマンドの場合と同じとなる。処理が同じため、以降の説明を割愛する。
次に、フローチャートのステップ3402以降の説明に戻り、コマンド種別がライトコマンドの場合の処理のフローについて説明する。ステップ3402からステップ3403に処理が分岐すると、ホストコマンド処理部3302は、ターゲットドライバ3301から得られる識別名403、ステップ2301で得られたNID、開始アドレスとデータ転送長の情報に基づき、論理ボリュームのライト範囲へのアクセス排他を行う(ステップ3403)。
次に、書き込み先アドレス決定部3307は、アドレス変換テーブルを参照してライトデータの書き込み先アドレスを決定する(ステップ3404)。次に、ホストコマンド処理部3302は、ドライブエンクロージャにライトコマンド処理させるため、決定された書き込み先アドレスを含むオフロードコマンドを作成する(3405)。
次に、ホストコマンド処理部3302は、オフロードコマンド通信部(イニシエータ)3306を介してドライブエンクロージャ200にオフロードコマンドを送信する(3406)。次に、オフロードコマンドの完了を待つ(ステップ3407)。次に、ホストコマンド処理部3302は、オフロードコマンド通信部(イニシエータ)3306を介してドライブエンクロージャ200からオフロードコマンドの完了応答を受信し、解析する(3408)。
次に、アドレス変換部3308が論物アドレスのマッピングを更新(アドレス変換テーブルの対応関係の更新)する(ステップ3409)。すなわち、ライトコマンドの指定する論理ボリュームのライト範囲の論理アドレスに、2重書き先のドライブの識別子と物理アドレスをマッピングする。次に、書き込み先アドレス決定部3307は追い書きポインタを更新する(ステップ3410)。次に、ホストコマンド処理部3302はアクセス排他を解除する(ステップ3411)。
次に、ホストコンピュータ110からのライトコマンドに対応するコマンドの完了応答を作成する(ステップ3412)。次に、ターゲットドライバ3301を使用してホストコンピュータ110にコマンドの完了応答送信する(ステップ3413)。最後に、処理を完了する(ステップ3414)。
(35)ターゲット構成形態1、ライトIO処理の連携方式1によるドライブエンクロージャにおけるデータ転送のオフロードコマンドの処理手順
図35は、ターゲット構成形態1、ライトIO処理の連携方式1によるドライブエンクロージャにおけるデータ転送のオフロードコマンドの処理手順を示すフローチャートである。なお、一部の処理は図7の処理と共通していることから、共通の処理のステップについては図7のステップ番号を記載した。
ドライブエンクロージャ200のオフロードコマンド処理部3318は、ストレージコントローラ121からオフロードコマンド通信部(ターゲット)313を介してオフロードコマンドを受信すると、ステップ3500以降の処理を開始する。
始めに、オフロードコマンド処理部3318はオフロードコマンドの各フィールドを読み込む(ステップ3501)。各フィールドについては、図9Dにて説明する。
次に、コマンドの種別で処理を分岐する(ステップ3502)。データ転送方向909がストレージシステムからホストコンピュータの場合はコマンド種別をリードコマンドのオフロードと判定し、データ転送方向909がホストコンピュータからストレージシステムの場合はコマンド種別をライトコマンドのオフロードと判定する。コマンド種別がリードコマンドのオフロード場合はステップ708に進む。コマンド種別がライトコマンドのオフロードの場合は、ステップ3504に進む。
ステップ708に分岐すると、図7のステップ8以降の処理と同じとなる。処理が同じため、以降の説明を割愛する。
次に、フローチャートのステップ3502以降の説明に戻り、コマンド種別がライトコマンドのオフロードの場合の処理のフローについて説明する。ステップ3502からステップ3504に処理が分岐すると、オフロードコマンド処理部3318は、バッファ制御部3315を用いてバッファを確保する(ステップ3504)。次に、データ転送制御部(ホストコンピュータとドライブエンクロージャ間)3316は、ライトコマンドで指定されたホストコンピュータ110内の物理メモリ領域503のデータを、確保したバッファ領域に転送する(ステップ3505)。次に、ドライブ2重書き部3322はバッファ領域のライトデータを、オフロードコマンドに指定された書き込み先アドレスに2重書きする(3506)。次に、ドライブ2重書き部3322は2重書きの完了応答を、すなわち2重書き先に対応するドライブからの書き込み完了を待つ(ステップ3507)。次に、ドライブ2重書き部2322は2重書きの完了応答を受信する(ステップ3508)。次に、オフロードコマンド処理部3318は、ステップ3504で確保したバッファを解放する(ステップ3509)。次に、オフロードコマンド処理部3318は、オフロードコマンドの完了応答を作成し、完了応答を送信する(3510)。最後に、処理を完了する(ステップ3511)。
110:ホストコンピュータ、120:ストレージ装置、121:ストレージコントローラ、140:ドライブ筐体、150:ネットワーク、200:ドライブエンクロージャ、218:ドライブ。

Claims (19)

  1. 記憶装置を有する少なくとも一つのドライブ筐体と、前記ドライブ筐体に接続されるストレージコントローラとを有し、ホストコンピュータにネットワークを介して接続されるストレージシステムであって、
    前記ドライブ筐体は、
    前記ストレージコントローラからの指示に従って、指定された識別名を有する論理ボリュームを作成し、前記ホストコンピュータに対して前記論理ボリュームを記憶領域として提供し、
    前記ホストコンピュータから前記論理ボリュームを提供する前記ドライブ筐体に対して発行された第1のコマンドを受信し、
    前記ストレージコントローラに、前記第1のコマンドに対応する第2のコマンドを送信し、
    前記ストレージコントローラは、
    前記第2のコマンドへの応答を前記ドライブ筐体に送信し、
    前記ドライブ筐体は、
    前記第2のコマンドへの応答を前記ストレージコントローラから受信すると、前記第2のコマンドへの応答に従って、前記ホストコンピュータに前記第1のコマンドの応答を行い、
    前記論理ボリュームは、前記ストレージコントローラがデータ保護するデータ格納領域に対応することを特徴とするストレージシステム。
  2. 請求項1に記載のストレージシステムにおいて、
    前記第1のコマンドは第1のリードコマンドであり、
    前記第2のコマンドは第2のリードコマンドであり、
    前記ストレージコントローラは、
    前記第2のリードコマンドで指定される前記論理ボリュームの論理アドレス範囲のデータ転送に用いるデータ転送パラメータを作成して前記ドライブ筐体に送信し、
    前記ドライブ筐体は、
    前記データ転送パラメータを前記ストレージコントローラから受信すると、前記データ転送パラメータに従って、前記記憶装置からデータを読み出し、前記ホストコンピュータに前記データを転送するとともに、前記応答を行うことを特徴とするストレージシステム。
  3. 請求項2に記載のストレージシステムにおいて、
    前記第1のリードコマンドは、コマンド種別、前記論理ボリュームにおける開始アドレス及びデータ転送長の情報を含み、
    前記第2のリードコマンドは、前記第1のリードコマンドにかかるコマンド種別、リードコマンドの対象の前記論理ボリュームにおける開始アドレス、データ転送長、リードコマンドの送信元の前記ホストコンピュータの識別子、前記第1のリードコマンドを受信したドライブ筐体の識別子、前記ホストコンピュータのデータ格納先のメモリアドレスを含むことを特徴とするストレージシステム。
  4. 請求項2に記載のストレージシステムにおいて、
    前記ストレージコントローラは、
    前記第2のリードコマンドに指定された前記論理ボリュームのアドレス範囲に対応するデータが前記ストレージコントローラのキャッシュ上にない場合、前記第2のリードコマンドに指定される前記論理ボリュームのアドレス範囲のデータ転送に用いる前記データ転送パラメータを作成して前記ドライブ筐体に送信し、
    前記第2のリードコマンドに指定された前記論理ボリュームのアドレス範囲に対応するデータが前記ストレージコントローラのキャッシュ上にある場合、前記キャッシュ上のデータを前記ホストコンピュータへ送信するデータとして用いることを特徴とするストレージシステム。
  5. 請求項4に記載のストレージシステムにおいて、
    前記ストレージコントローラは、前記第2のリードコマンドに指定された前記論理ボリュームのアドレス範囲に対応するデータが前記ストレージコントローラのキャッシュ上にある場合、前記キャッシュ上のデータを前記ドライブ筐体に送信し、
    前記ドライブ筐体は、前記ストレージコントローラから受信した前記データを、前記ホストコンピュータに転送することを特徴とするストレージシステム。
  6. 請求項2に記載のストレージシステムにおいて、
    前記ストレージコントローラは、前記論理ボリュームの論理アドレスと、前記論理ボリュームを構成する前記記憶装置の物理アドレスとの対応を管理するアドレス変換テーブルに基づいて、前記第1のリードコマンドで指定される前記論理ボリュームの論理アドレスから前記データ転送パラメータを生成することを特徴とするストレージシステム。
  7. 請求項4に記載のストレージシステムにおいて、
    前記データ転送パラメータは、前記ホストコンピュータの識別子、前記ホストコンピュータのデータ格納先のメモリアドレス等の情報、データ格納先の前記記憶装置の識別子と前記記憶装置内のアドレス、データ転送長を含むことを特徴とするストレージシステム。
  8. 請求項2に記載のストレージシステムにおいて、
    前記ストレージコントローラは、前記ストレージコントローラの管理する前記論理ボリュームの論理アドレスと、前記記憶装置の物理アドレスとの対応関係を管理し、前記第1のリードコマンド及び前記第2のリードコマンドに含まれるデータ範囲の論理アドレスを対応する前記記憶領域の物理アドレスに変換して前記データ転送パラメータに含ませることを特徴とするストレージシステム。
  9. 請求項1に記載のストレージシステムにおいて、
    前記ネットワークは、前記ホストコンピュータと前記ドライブ筐体とを接続する第1のネットワークと、前記ドライブ筐体と前記ストレージコントローラとを接続する第2のネットワークとを有することを特徴とするストレージシステム。
  10. 請求項1に記載のストレージシステムにおいて、
    前記ドライブ筐体は、
    前記ホストコンピュータからライトコマンドを受領すると、前記ストレージコントローラに前記ライトコマンドを転送し、
    前記ストレージコントローラから書き込み準備ができたこと示すメッセージを受領すると、前記ライトコマンドのライトデータを前記ストレージコントローラに転送することを特徴とするストレージシステム。
  11. 請求項1に記載のストレージシステムにおいて、
    前記第1のコマンドは第1のライトコマンドであり、コマンド種別、前記論理ボリュームにおける開始アドレス及びデータ転送長の情報を含んでおり、
    前記第2のコマンドは第2のライトコマンドであり、前記第1のライトコマンドにかかるデータの論理アドレスを含んでおり、

    前記ドライブ筐体は、
    前記記憶装置に、前記第1のライトコマンドに対応する前記データを格納することを特徴とするストレージシステム。
  12. 請求項11に記載のストレージシステムにおいて、
    前記ストレージコントローラは、
    前記ストレージコントローラの管理する前記論理ボリュームの論理アドレスと、前記記憶装置の物理アドレスとを対応付けたアドレス変換テーブルを管理し、
    前記第2のライトコマンドを受信したら、ライト対象のデータを格納する物理アドレスを設定し、前記物理アドレスを前記第2のコマンドの応答として前記ドライブ筐体に送信し、
    前記第2のライトコマンドに含まれる論理アドレスと、設定した物理アドレスに基づいて、前記アドレス変換テーブルを更新することを特徴とするストレージシステム。
  13. 請求項11に記載のストレージシステムにおいて、
    前記ストレージコントローラは、
    前記ストレージコントローラの管理する前記論理ボリュームの論理アドレスと、前記記憶装置の物理アドレスとを対応付けたアドレス変換テーブルを管理し、
    前記ドライブ筐体は、
    ライト対象データを格納するための物理アドレスを設定し、
    前記設定した物理アドレスと、前記第1のライトコマンドにかかるデータの論理アドレスとを含む前記第2のライトコマンドを前記ストレージコントローラに送信し、
    前記ストレージコントローラは、
    受信した前記第2のライトコマンドに含まれる論理アドレス及び物理アドレスに基づいて、前記アドレス変換テーブルを更新することを特徴とするストレージシステム。
  14. 請求項11に記載のストレージシステムにおいて、
    前記ドライブ筐体は、
    複数のドライブを用いて、ライト対象のデータを複数個格納する第1の冗長化を行うことを特徴とするストレージシステム。
  15. 請求項14に記載のストレージシステムにおいて、
    前記第1の冗長化は、前記ホストコンピュータへの前記第1のライトコマンドの応答前に行い、
    前記応答の後に、前記ライト対象のデータの冗長データを作成して格納するとともに、複数個格納した前記ライト対象のデータの個数を減らす第2の冗長化を行うことを特徴とするストレージシステム。
  16. 請求項11に記載のストレージシステムにおいて、
    前記ストレージコントローラは、
    前記ドライブ筐体から、前記ライト対象のデータに対する書込み処理の完了通知を受領した後、前記アドレス変換テーブルの更新を行うことを特徴とするストレージシステム。
  17. 請求項16に記載のストレージシステムにおいて、
    前記ストレージコントローラは、前記ドライブ筐体に前記アドレス変換テーブルの更新の完了を報告し、
    前記ドライブ筐体は、前記アドレス変換テーブルの更新の完了を受領すると、前記ホストコンピュータに前記第1のライトコマンドの応答を送信することを特徴とするストレージシステム。
  18. 請求項11に記載のストレージシステムにおいて、
    前記第2のライトコマンドは、前記第1のライトコマンドにかかるコマンド種別、ライトコマンドの対象の前記論理ボリュームにおける開始アドレス、データ転送長、ライトコマンドの送信元の前記ホストコンピュータの識別子、前記第1のライトコマンドを受信したドライブ筐体の識別子、前記ホストコンピュータのデータ格納先のメモリアドレスを含むことを特徴とするストレージシステム。
  19. 記憶装置を有する少なくとも一つのドライブ筐体と、前記ドライブ筐体に接続されるストレージコントローラとを有し、ホストコンピュータにネットワークを介して接続されるストレージシステムのデータ転送方法において、

    前記ドライブ筐体は、
    前記ストレージコントローラからの指示に従って、指定された識別名を有する論理ボリュームを作成し、前記ホストコンピュータに対して前記論理ボリュームを記憶領域として提供し、
    前記ホストコンピュータから前記論理ボリュームを提供する前記ドライブ筐体に対して発行された第1のコマンドを受信し、
    前記ストレージコントローラに、前記第1のコマンドに対応する第2のコマンドを送信し、
    前記ストレージコントローラは、
    前記第2のコマンドへの応答を前記ドライブ筐体に送信し、
    前記ドライブ筐体は、
    前記第2のコマンドへの応答を前記ストレージコントローラから受信すると、前記第2のコマンドへの応答に従って、前記ホストコンピュータに前記第1のコマンドの応答を行い、
    前記論理ボリュームは、前記ストレージコントローラがデータ保護するデータ格納領域に対応することを特徴とするストレージシステムのデータ転送方法。
JP2019144572A 2019-03-22 2019-08-06 ストレージシステム及びデータ転送方法 Active JP6898393B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US16/573,815 US10620868B1 (en) 2019-03-22 2019-09-17 Storage system and data transfer method
US16/793,855 US10761764B1 (en) 2019-03-22 2020-02-18 Storage system and data transfer method
US16/996,074 US11301159B2 (en) 2019-03-22 2020-08-18 Storage system and data transfer method
JP2021097036A JP7135162B2 (ja) 2019-03-22 2021-06-10 情報処理システム、ストレージシステム及びデータ転送方法

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2019054919 2019-03-22
JP2019054919 2019-03-22

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2021097036A Division JP7135162B2 (ja) 2019-03-22 2021-06-10 情報処理システム、ストレージシステム及びデータ転送方法

Publications (2)

Publication Number Publication Date
JP2020161103A true JP2020161103A (ja) 2020-10-01
JP6898393B2 JP6898393B2 (ja) 2021-07-07

Family

ID=72563905

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019144572A Active JP6898393B2 (ja) 2019-03-22 2019-08-06 ストレージシステム及びデータ転送方法
JP2021097036A Active JP7135162B2 (ja) 2019-03-22 2021-06-10 情報処理システム、ストレージシステム及びデータ転送方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2021097036A Active JP7135162B2 (ja) 2019-03-22 2021-06-10 情報処理システム、ストレージシステム及びデータ転送方法

Country Status (3)

Country Link
US (1) US11301159B2 (ja)
JP (2) JP6898393B2 (ja)
CN (1) CN111722791B (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022113046A (ja) * 2021-01-22 2022-08-03 株式会社日立製作所 情報処理システム及びデータ転送方法
JP7473600B2 (ja) 2022-07-15 2024-04-23 株式会社日立製作所 ストレージシステム、データ送信方法およびネットワークインタフェース

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11656992B2 (en) 2019-05-03 2023-05-23 Western Digital Technologies, Inc. Distributed cache with in-network prefetch
US11765250B2 (en) 2020-06-26 2023-09-19 Western Digital Technologies, Inc. Devices and methods for managing network traffic for a distributed cache
US11675706B2 (en) 2020-06-30 2023-06-13 Western Digital Technologies, Inc. Devices and methods for failure detection and recovery for a distributed cache
JP7526605B2 (ja) * 2020-07-20 2024-08-01 富士通株式会社 ストレージ制御装置、およびストレージ制御プログラム
US11736417B2 (en) 2020-08-17 2023-08-22 Western Digital Technologies, Inc. Devices and methods for network message sequencing
US12088470B2 (en) * 2020-12-18 2024-09-10 Western Digital Technologies, Inc. Management of non-volatile memory express nodes
CN113849129B (zh) * 2021-09-18 2023-08-25 苏州浪潮智能科技有限公司 一种存储控制器间的io请求转发方法、装置及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009140153A (ja) * 2007-12-05 2009-06-25 Fujitsu Ltd ストレージ管理装置、ストレージシステム制御装置、ストレージ管理プログラムおよびストレージシステム
JP2016539399A (ja) * 2014-09-15 2016-12-15 華為技術有限公司Huawei Technologies Co.,Ltd. データ書込み要求処理方法及びストレージアレイ
US9800661B2 (en) * 2014-08-20 2017-10-24 E8 Storage Systems Ltd. Distributed storage over shared multi-queued storage device
WO2018189858A1 (ja) * 2017-04-13 2018-10-18 株式会社日立製作所 ストレージシステム

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004027625A1 (ja) 2002-09-20 2004-04-01 Fujitsu Limited ストレージ制御装置、ストレージ制御プログラムおよびストレージ制御方法
JP4387261B2 (ja) 2004-07-15 2009-12-16 株式会社日立製作所 計算機システム、および、記憶装置システムの移行方法
JP4819369B2 (ja) * 2005-02-15 2011-11-24 株式会社日立製作所 ストレージシステム
JP4723290B2 (ja) 2005-06-06 2011-07-13 株式会社日立製作所 ディスクアレイ装置及びその制御方法
JP4859471B2 (ja) * 2006-02-02 2012-01-25 株式会社日立製作所 ストレージシステム及びストレージコントローラ
JP4224077B2 (ja) * 2006-04-04 2009-02-12 株式会社東芝 ストレージシステム
US7613876B2 (en) 2006-06-08 2009-11-03 Bitmicro Networks, Inc. Hybrid multi-tiered caching storage system
JP4386932B2 (ja) 2007-08-17 2009-12-16 富士通株式会社 ストレージ管理プログラム、ストレージ管理装置およびストレージ管理方法
JP2010033287A (ja) 2008-07-28 2010-02-12 Hitachi Ltd ストレージサブシステム及びこれを用いたデータ検証方法
US8868869B2 (en) 2011-08-08 2014-10-21 International Business Machines Corporation Enhanced copy-on-write operation for solid state drives
US8943227B2 (en) 2011-09-21 2015-01-27 Kevin Mark Klughart Data storage architecture extension system and method
US8489937B2 (en) * 2011-12-06 2013-07-16 Hitachi, Ltd. Storage subsystem and method for controlling the same
WO2013157032A1 (en) 2012-04-16 2013-10-24 Hitachi, Ltd. Storage subsystem and data management method of storage subsystem
WO2014087517A1 (ja) 2012-12-06 2014-06-12 株式会社 日立製作所 論理ボリュームの配置方法および再配置方法
US20140189204A1 (en) 2012-12-28 2014-07-03 Hitachi, Ltd. Information processing apparatus and cache control method
US10445229B1 (en) * 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US9696922B2 (en) 2013-12-24 2017-07-04 Hitachi, Ltd. Storage system
US10222988B2 (en) 2014-04-22 2019-03-05 Hitachi, Ltd. Efficient management storage system via defining of several size units in advance
US9959203B2 (en) * 2014-06-23 2018-05-01 Google Llc Managing storage devices
JP6511795B2 (ja) 2014-12-18 2019-05-15 富士通株式会社 ストレージ管理装置、ストレージ管理方法、ストレージ管理プログラムおよびストレージシステム
JP6417951B2 (ja) 2015-01-15 2018-11-07 富士通株式会社 ストレージ制御装置およびストレージ制御プログラム
WO2016121026A1 (ja) * 2015-01-28 2016-08-04 株式会社日立製作所 ストレージ装置、計算機システム、及び、方法
WO2016189640A1 (ja) * 2015-05-26 2016-12-01 株式会社日立製作所 ストレージ装置、及び方法
WO2017072868A1 (ja) * 2015-10-28 2017-05-04 株式会社日立製作所 ストレージ装置
CN108701002B (zh) * 2016-02-29 2021-10-29 株式会社日立制作所 虚拟存储系统
JP6708923B2 (ja) 2016-03-14 2020-06-10 富士通株式会社 ストレージシステム
WO2017168690A1 (ja) * 2016-03-31 2017-10-05 株式会社日立製作所 ストレージ装置、及び方法
US10467172B2 (en) * 2016-06-01 2019-11-05 Seagate Technology Llc Interconnect for shared control electronics
CA3028821C (en) * 2016-06-24 2023-01-24 Huawei Technologies Co., Ltd. Data processing method, storage apparatus, solid state disk, and storage system
JP2019008730A (ja) * 2017-06-28 2019-01-17 東芝メモリ株式会社 メモリシステム
US10437477B2 (en) * 2017-07-20 2019-10-08 Dell Products, Lp System and method to detect storage controller workloads and to dynamically split a backplane
JP7074453B2 (ja) * 2017-10-30 2022-05-24 キオクシア株式会社 メモリシステムおよび制御方法
CN112286838B (zh) * 2019-07-25 2024-09-06 戴尔产品有限公司 存储设备可配置的映射粒度系统
JP2021124796A (ja) * 2020-01-31 2021-08-30 株式会社日立製作所 分散コンピューティングシステム及びリソース割当方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009140153A (ja) * 2007-12-05 2009-06-25 Fujitsu Ltd ストレージ管理装置、ストレージシステム制御装置、ストレージ管理プログラムおよびストレージシステム
US9800661B2 (en) * 2014-08-20 2017-10-24 E8 Storage Systems Ltd. Distributed storage over shared multi-queued storage device
JP2016539399A (ja) * 2014-09-15 2016-12-15 華為技術有限公司Huawei Technologies Co.,Ltd. データ書込み要求処理方法及びストレージアレイ
US20170177223A1 (en) * 2014-09-15 2017-06-22 Huawei Technologies Co.,Ltd. Write data request processing system and method in a storage array
WO2018189858A1 (ja) * 2017-04-13 2018-10-18 株式会社日立製作所 ストレージシステム

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022113046A (ja) * 2021-01-22 2022-08-03 株式会社日立製作所 情報処理システム及びデータ転送方法
JP7201716B2 (ja) 2021-01-22 2023-01-10 株式会社日立製作所 情報処理システム及びデータ転送方法
JP7473600B2 (ja) 2022-07-15 2024-04-23 株式会社日立製作所 ストレージシステム、データ送信方法およびネットワークインタフェース

Also Published As

Publication number Publication date
JP6898393B2 (ja) 2021-07-07
CN111722791B (zh) 2024-02-27
US20200379668A1 (en) 2020-12-03
JP7135162B2 (ja) 2022-09-12
US11301159B2 (en) 2022-04-12
CN111722791A (zh) 2020-09-29
JP2021128802A (ja) 2021-09-02

Similar Documents

Publication Publication Date Title
JP6898393B2 (ja) ストレージシステム及びデータ転送方法
US10620868B1 (en) Storage system and data transfer method
US11561696B2 (en) Garbage collection pacing in a storage system
JP6600698B2 (ja) 計算機システム
US11409454B1 (en) Container ownership protocol for independent node flushing
US10831386B2 (en) Remote direct memory access
US10877922B2 (en) Flushes based on intent log entry states
US11327653B2 (en) Drive box, storage system and data transfer method
US11644978B2 (en) Read and write load sharing in a storage array via partitioned ownership of data blocks
US11921695B2 (en) Techniques for recording metadata changes
JP6835949B2 (ja) 情報システム、管理プログラム及び情報システムのプログラム交換方法
US20170220249A1 (en) Systems and Methods to Maintain Consistent High Availability and Performance in Storage Area Networks
US7650476B2 (en) System, method and computer program product for generating a consistent point in time copy of data
US10503440B2 (en) Computer system, and data migration method in computer system
US10936243B2 (en) Storage system and data transfer control method
US11875060B2 (en) Replication techniques using a replication log
WO2016194162A1 (ja) 計算機システム
US11327895B1 (en) Protocol for processing requests that assigns each request received by a node a sequence identifier, stores data written by the request in a cache page block, stores a descriptor for the request in a cache page descriptor, and returns a completion acknowledgement of the request
US11112973B2 (en) Computer system and data management method
US20240232020A1 (en) Replication techniques using a metadata log
Shu Storage Arrays

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200226

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210416

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210610

R150 Certificate of patent or registration of utility model

Ref document number: 6898393

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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