JP2017130002A - ストレージ制御装置および制御プログラム - Google Patents

ストレージ制御装置および制御プログラム Download PDF

Info

Publication number
JP2017130002A
JP2017130002A JP2016008394A JP2016008394A JP2017130002A JP 2017130002 A JP2017130002 A JP 2017130002A JP 2016008394 A JP2016008394 A JP 2016008394A JP 2016008394 A JP2016008394 A JP 2016008394A JP 2017130002 A JP2017130002 A JP 2017130002A
Authority
JP
Japan
Prior art keywords
instruction set
data
storage unit
descriptor
write
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.)
Pending
Application number
JP2016008394A
Other languages
English (en)
Inventor
裕一 小川
Yuichi Ogawa
裕一 小川
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016008394A priority Critical patent/JP2017130002A/ja
Priority to US15/359,798 priority patent/US20170206178A1/en
Publication of JP2017130002A publication Critical patent/JP2017130002A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • 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/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
    • 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/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)
  • Bus Control (AREA)

Abstract

【課題】書き込みデータの送達確認のための処理負荷を低減する。
【解決手段】記憶部13は、記憶部20へのデータの送達状況を確認するための確認用データ2bを記憶部20上のあらかじめ決められた位置から読み出すための命令セット1cを記憶する。プロセッサ11は、書き込みデータ2aを記憶部20へ書き込む書き込み命令と、記憶部13における命令セット1cの位置を含む命令セット1bとを作成して出力する。転送制御部12は、書き込み命令に応じて記憶部20への書き込みデータ2aの書き込みを実行した後、命令セット1bに基づいて記憶部13から命令セット1cを読み出し、命令セット1cに基づいて記憶部20からの確認用データ2bの読み出しを実行し、その実行の成否を判定する。
【選択図】図1

Description

本発明は、ストレージ制御装置および制御プログラムに関する。
コンピュータシステム内でのデータ転送方式の1つとして、DMA(Direct Memory Access)がある。DMAを用いたシステムでは、CPU(Central Processing Unit)がDMAコントローラにデータ転送を指示すると、DMAコントローラは、CPUとは独立に記憶装置間で直接データを転送する。これにより、CPUの処理負荷が低減され、システム全体での処理効率が向上する。
DMAを用いたシステムの例として、CPUがディスクリプタ情報を生成してディスクリプタ記憶部に格納すると、HDD(Hard Disk Drive)内のコントローラがディスクリプタ記憶部からディスクリプタ情報を読み出し、そのディスクリプタ情報にしたがってメモリとHDDとの間でDMA転送するものが提案されている。
また、データのバックアップを確実に実行するための技術として、次のようなシステムが提案されている。このシステムにおいては、第1の装置は、データを格納するとともにそのデータを第2の装置へ送信し、第2の装置は、第1の装置から受信したデータを格納するとともにそのデータを第1の装置へ送信する。第1の装置は、第2の装置へ送信したデータと第2の装置から受信したデータとを照合し、それらが不一致である場合にはデータを再度送信する。
特開2007−241588号公報 特開2005−182251号公報
ここで、DMAコントローラが、CPUによって作成されたディスクリプタに基づいて、第1の記憶装置内のデータを第2の記憶装置に書き込む処理を想定する。この場合に、第2の記憶装置にデータが送達されたかを確認する方法として、第2の記憶装置へのデータの書き込み後に、そのデータを読み出して照合する方法が考えられる。
このようにデータの書き込み後に照合用データを読み出すためには、CPUは、データの書き込みのためのディスクリプタと、照合用データの読み出しのためのディスクリプタとを作成する。データの書き込みのたびに照合用データの読み出しも実行する場合は、このような2つのディスクリプタが繰り返し生成される。
しかし、データの書き込みのたびに、データの送達確認のためのディスクリプタを繰り返し生成することは、CPUの処理効率を悪化させるという問題がある。また、データの書き込みのたびにそのデータと同じサイズの照合用データを読み出すので、照合用データの読み出しにかかる時間が長くなる場合があり、そのことがデータの送達確認全体の処理効率を悪化させる原因になる。
1つの側面では、本発明は、書き込みデータの送達確認のための処理負荷を低減可能なストレージ制御装置および制御プログラムを提供することを目的とする。
1つの案では、第1の記憶部、プロセッサおよび転送制御部を有するストレージ制御装置が提供される。このストレージ制御装置において、第1の記憶部は、第2の記憶部へのデータの送達状況を確認するための確認用データを第2の記憶部上のあらかじめ決められた位置から読み出すための第1の命令セットを記憶する。プロセッサは、書き込みデータを第2の記憶部へ書き込む書き込み命令と、第1の記憶部における第1の命令セットの位置を含む第2の命令セットとを作成して出力する。転送制御部は、書き込み命令に応じて第2の記憶部への書き込みデータの書き込みを実行した後、第2の命令セットに基づいて第1の記憶部から第1の命令セットを読み出し、第1の命令セットに基づいて第2の記憶部からの確認用データの読み出しを実行し、その実行の成否を判定する。
また、1つの案では、第1の記憶部、プロセッサおよび転送制御部を有するストレージ制御装置が提供される。このストレージ制御装置において、第1の記憶部は、第2の記憶部へのデータの送達状況を確認するための確認用データについての第2の記憶部における位置を示す転送元アドレスと、転送先アドレスと、読み出し命令とを含む第1の命令セットを記憶する。プロセッサは、第2の命令セットを作成して出力する。この第2の命令セットは、転送元アドレスと、第2の記憶部における位置を示す転送先アドレスと、書き込み命令とを含む情報群、または、第1の記憶部における第1の命令セットの位置を示す参照先アドレスと、参照命令とを含む情報群を含む。転送制御部は、プロセッサから出力された第2の命令セットが書き込み命令を含む場合には、第2の命令セットに含まれる転送元アドレスと転送先アドレスとに基づいて第2の記憶部へのデータの書き込みを実行し、プロセッサから出力された第2の命令セットが参照命令を含む場合には、第2の命令セットに含まれる参照先アドレスに基づいて第1の記憶部から第1の命令セットを読み出し、第1の命令セットに基づいて第2の記憶部から確認用データを読み出し、その成否を判定する。
また、1つの案では、上記のストレージ制御装置のプロセッサと同様の処理をコンピュータに実行させる制御プログラムが提供される。
1つの側面では、書き込みデータの送達確認のための処理負荷を低減できる。
第1の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。 第2の実施の形態に係るストレージシステムの構成例を示す図である。 CMおよびFRTのハードウェア構成例を示す図である。 DMAコントローラの内部構成例を示す図である。 ディスクリプタについて説明するための図である。 DMAコントローラによる基本的なデータ転送処理手順の例を示すシーケンス図である。 ダミーリードを伴うライト処理手順の比較例を示すシーケンス図(その1)である。 ダミーリードを伴うライト処理手順の比較例を示すシーケンス図(その2)である。 ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。 第2の実施の形態におけるダミーリード実行の仕組みを説明するための図である。 第2の実施の形態において、ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。 ホストライトが要求された場合の処理手順の例を示すシーケンス図(その1)である。 ホストライトが要求された場合の処理手順の例を示すシーケンス図(その2)である。 DMAコントローラの初期化処理の例を示すフローチャートである。 ホストライトが要求された場合のCPUの処理の例を示すフローチャートである。 DMAコントローラの処理の例を示すフローチャートである。
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。図1に示すストレージ制御装置10は、プロセッサ11、転送制御部12および記憶部13を有する。
プロセッサ11は、記憶部20へのデータの書き込みや、記憶部20からのデータの読み出しを転送制御部12に指示する。転送制御部12は、例えば、プロセッサ11とは別の制御回路や演算回路として実現される。転送制御部12は、プロセッサ11からの指示に基づいて、記憶部20へのデータの書き込みや、記憶部20からのデータの読み出しを実行する。転送制御部12の動作により、記憶部20へのデータの書き込みや、記憶部20からのデータの読み出しは、プロセッサ11を介在せずに実行される。
なお、図1では例として、転送制御部12による読み書き制御の対象となる記憶部20が、ストレージ制御装置10の外部に配置されているが、記憶部20はストレージ制御装置10の内部に搭載されていてもよい。また、図1では例として、転送制御部12は、記憶部20と、ストレージ制御装置10が有する記憶部13との間のデータ転送を制御するものとする。記憶部13,20は、例えば、RAM(Random Access Memory)などの記憶装置として実現される。
記憶部13には、命令セット1cがあらかじめ格納される。後述するように、命令セット1cには、確認用データ2bの読み出し処理を転送制御部12に実行させるための情報が含まれる。
ところで、プロセッサ11は、記憶部20へのデータの書き込みを転送制御部12に実行させた後、そのデータが記憶部20に送達されたかを確認するための読み出し処理を転送制御部12に実行させる。この確認用の読み出し処理では、記憶部20に記憶された確認用データ2bが読み出される。確認用データ2bは、記憶部20への書き込みが行われた書き込みデータとは別のデータであり、記憶部20内のあらかじめ決められた位置に記憶される。
転送制御部12によって書き込みデータが記憶部20に書き込まれた後、その書き込みデータの書き込み先の位置に関係なく、同一の確認用データ2bが転送制御部12によって読み出される。確認用データ2bの読み出しが成功した場合、少なくとも、転送制御部12から記憶部20までの経路上の回路は正常に動作している。このため、その直前に実行された記憶部20へのデータ書き込みは、正常に実行された可能性が高いと判断される。
このように確認用データ2bを読み出すことでデータ送達を確認する方法によれば、記憶部20に書き込みデータを書き込んだ直後にその書き込みデータを読み出すベリファイリード処理と比較して、読み出されるデータのサイズを一定量以下に留めることができる。このため、送達確認のための処理負荷を低減し、かつその処理時間を短縮できる。
以下、記憶部20へのデータ書き込みとそのデータの送達確認とを含む処理について具体的に説明する。
まず、プロセッサ11は、書き込みデータ2aを記憶部13から記憶部20に書き込むように転送制御部12に指示する(ステップS1a)。この書き込み指示は、例えば、プロセッサ11が命令セット1aを作成して出力することで行われる。命令セット1aには、書き込みを指示する書き込み命令と、記憶部13における書き込みデータ2aの位置を示す転送元アドレスと、記憶部20における書き込みデータ2aの書き込み先を示す転送先アドレスとが含まれる。なお、書き込みデータ2aの転送元および転送先の位置は任意であるので、命令セット1aに含まれる転送元アドレスおよび転送先アドレスは可変である。
転送制御部12は、出力された命令セット1aを参照し、転送元アドレスに基づいて記憶部13から書き込みデータ2aを読み出し、転送先アドレスに基づいて書き込みデータ2aを記憶部20へ書き込む(ステップS1b)。
次に、プロセッサ11は、確認用データ2bを読み出すように転送制御部12に指示する。この読み出し指示は、プロセッサ11が命令セット1bを作成して出力することで行われる(ステップS2a)。なお、命令セット1aの出力後に、書き込みデータ2aの書き込みの実行開始や実行完了を待たずに命令セット1bがプロセッサ11から出力されてもよい。
命令セット1bには、例えば図1に示すように、記憶部13における命令セット1cの位置を示す参照先アドレスと、参照先アドレスからの読み出しを指示する読み出し命令とが含まれる。ここで、命令セット1cは、複数回の書き込み命令後の成否確認用に共通に用いられるので、命令セット1bに含まれる参照先アドレスは、固定値とされる。
転送制御部12は、出力された命令セット1bに基づいて、記憶部13から命令セット1cを読み出す(ステップS2b)。図1の例では、転送制御部12は、命令セット1bに含まれる参照先アドレスに基づいて、命令セット1cを記憶部13から読み出す。
命令セット1cには、確認用データ2bを記憶部20のあらかじめ決められた位置から読み出すための情報が含まれる。例えば、命令セット1cには、読み出しを指示する読み出し命令と、記憶部20における確認用データ2bの位置を示す転送元アドレスと、記憶部13における確認用データ2bの書き込み先を示す転送先アドレスとが含まれる。ここで、命令セット1cに含まれる転送元アドレスと転送先アドレスは、固定値とされる。
転送制御部12は、読み出した命令セット1cに基づいて、確認用データ2bを記憶部20から読み出す(ステップS2c)。図1の例では、転送制御部12は、命令セット1cに含まれる転送元アドレスに基づいて確認用データ2bを記憶部20から読み出し、転送先アドレスに基づいて確認用データ2bを記憶部13へ書き込む。
転送制御部12は、確認用データ2bの読み出しの成否を判定してプロセッサ11に通知する(ステップS2d)。プロセッサ11は、確認用データ2bの読み出しに成功したことが通知された場合に、書き込みデータ2aの書き込みに成功したと判定する。
ここで、転送制御部12に確認用データ2bの読み出しを実行させる方法としては、例えば、プロセッサ11がその読み出し用の命令セット1cを作成して転送制御部12に出力する方法が考えられる。しかし、確認用データ2bの読み出し元は常に同一であり、その読み出し先も同一でよいため、作成される命令セット1cの内容も常に同一でよい。このような同一内容の命令セット1cを、記憶部20への書き込みデータの書き込みを指示するたびに作成することは、無駄な処理であり、プロセッサ11の処理効率を悪化させる。
これに対して、本実施の形態に係るストレージ制御装置10においては、このような同一内容の命令セット1cがあらかじめ作成され、記憶部13に記憶される。そして、プロセッサ11は、この命令セット1cの読み出しを指示する命令セット1bを作成して出力することで、確認用データ2bの読み出しを転送制御部12に指示する。転送制御部12は、出力された命令セット1bに基づいて命令セット1cを読み出し、命令セット1cに基づいて確認用データ2bを記憶部20から読み出す。
プロセッサ11が作成する命令セット1bは、記憶部13上の固定位置に記憶された命令セット1cを読み出すための内容だけを含めばよいので、記憶部間のデータ転送を指示するための命令セット1cより簡易な内容とすることができる。このため、命令セット1bのデータサイズを、命令セット1cより小さくすることができる。例えば、命令セット1cが転送元と転送先という2つのアドレスを含むのに対し、命令セット1bは参照先を示すただ1つのアドレスのみを含めばよい。また、図1の例のように確認用データ2bが装置外部の記憶部20に格納されている場合、命令セット1cにおける転送元アドレスとしては実アドレスが設定される。これに対して、命令セット1cは装置内部のローカルな記憶部内の固定位置に記憶されているので、その位置を指定するための命令セット1b内の参照先アドレスのビット数を、様々な方法で減少させることができる。
このように、本実施の形態に係るストレージ制御装置10によれば、確認用データ2bの読み出しを指示するためにプロセッサ11が作成する命令セット1bのサイズを小さくすることができる。このため、確認用データ2bの読み出しを指示するために要するプロセッサ11の処理時間を短縮でき、その処理負荷を低減できる。
以上説明したように、本実施の形態に係るストレージ制御装置10によれば、書き込みデータの送達確認のために読み出されるデータのサイズを安定的に小さくすることができる。さらに、確認用データ2bの読み出しを指示するための命令セット1bのサイズも小さくすることができる。これにより、書き込みデータの送達確認のための処理負荷を低減でき、かつ処理時間を短縮できる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステム50は、CM(Controller Module)100,200、FRT(Frontend RouTer)310およびDE(Drive Enclosure)320を有する。また、CM100,200には、SAN(Storage Area Network)430を介してホスト装置410,420が接続されている。
CM100,200は、ホスト装置410またはホスト装置420からの要求に応じて、DE320に搭載された記憶装置に対するアクセスを制御するストレージ制御装置である。CM100は、CM100の内部のキャッシュを用いて、DE320内の記憶装置に対するアクセスを制御する。CM200も同様に、CM200の内部のキャッシュを用いて、DE320内の記憶装置に対するアクセスを制御する。
また、CM100とCM200は、FRT310を介して互いに接続され、データを互いに送受信することができる。特に、後述するように、CM100とCM200との間では、それぞれが備えるDMAコントローラにより、一方が備えるRAMから他方が備えるRAMへのデータの転送が可能になっている。
このようなFRT310を介したRAM間のデータ転送は、例えば、キャッシュのミラーリングに利用される。例えば、CM100,200のうち、一方が運用状態に設定され、他方がスタンバイ状態に設定される。運用状態のCMは、その内部のキャッシュのデータを、FRT310を介して他方のCM内のミラーリング領域に書き込むことで、キャッシュのデータを二重化する。これにより、運用状態のCMが異常停止した場合に、他方のCMが運用状態に遷移し、DE320内の記憶装置へのアクセス制御を引き継ぐことができる。
なお、以下の説明では、ホスト装置410またはホスト装置420から、CM100またはCM200を介してDE320にデータを書き込む処理を、「ホストライト」と記載する場合がある。また、CM100のRAMからCM200のRAMへのデータの書き込み、またはその逆方向のデータの書き込みを、「ホストライト」とは区別して「CM間ライト」と記載する場合がある。
DE320には、ホスト装置410,420からのアクセス対象となる複数台の記憶装置が搭載されている。本実施の形態では例として、DE320は、このような記憶装置としてHDD321,322,323,・・・が搭載されたディスクアレイ装置であるものとする。なお、ホスト装置410,420からのアクセス対象となる記憶装置は、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置であってもよい。
図3は、CMおよびFRTのハードウェア構成例を示す図である。
CM100は、CPU101、RAM102、SSD103、PCIe(PCI express,PCI:Peripheral Component Interconnect)スイッチ(SW)104、CA(Channel Adapter)105、DI(Drive Interface)106およびDMAコントローラ110を有する。
CPU101は、CM100全体を統括的に制御する。CPU101は、例えば、1または複数のプロセッサを備える。また、図示しないが、CPU101は、メモリコントローラを備えている。メモリコントローラにより、DMAコントローラ110からRAM102に対するデータの読み書きが、CPU101のプロセッサを介さずに実行可能となる。
RAM102は、CM100の主記憶装置として使用される。RAM102には、CPU101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。例えば、RAM102には、ホスト装置410,420からの要求に応じたDE320内の記憶装置へのアクセス制御の際に用いられるキャッシュの領域が確保される。
SSD103は、CM100の補助記憶装置として使用される。SSD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、HDDなどの他の種類の不揮発性記憶装置が用いられてもよい。また、SSD103は、バスコントローラが搭載されたチップセットなどを介してCPU101と接続されていてもよい。
CPU101とCA105、DI106、DMAコントローラ110との間は、PCIeスイッチ104を介してPCIeバスによって接続されている。PCIeスイッチ104は、CPU101とCA105、DI106、DMAコントローラ110との間のデータ送受信を制御する。
CA105は、SAN430を介してホスト装置410,420と通信するためのインタフェースである。CA105は、例えば、FC(Fibre Channel)インタフェースである。DI106は、DE320内の記憶装置と通信するためのインタフェースである。DI106は、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)インタフェースである。
DMAコントローラ110は、RAM102と、他方のCM200のRAM202との間のデータ転送を制御する。後述するように、DMAコントローラ110は、CPU101によって作成されたディスクリプタの内容にしたがって、RAM102とRAM202との間のデータ転送を制御する。
CM200は、CM100と同様のハードウェア構成を有する。CM200は、CPU201、RAM202、SSD203、PCIeスイッチ(SW)204、CA205、DI206およびDMAコントローラ210を有する。CPU201、RAM202、SSD203、PCIeスイッチ204、CA205、DI206およびDMAコントローラ210は、CPU101、RAM102、SSD103、PCIeスイッチ104、CA105、DI106およびDMAコントローラ110にそれぞれ対応する構成要素であるので、ここでは説明を省略する。
FRT310は、PCIeスイッチ(SW)331を有する。PCIeスイッチ331は、CM100のDMAコントローラ110およびCM200のDMAコントローラ210に接続されている。DMAコントローラ110、PCIeスイッチ331およびDMAコントローラ210を介することで、CM100のRAM102とCM200のRAM202との間のデータ転送が、CPU101,201を介さずに実行される。
なお、以上の構成において、CM100,200は、図1のストレージ制御装置10の一例である。CM100をストレージ制御装置10の一例とした場合、CPU101は図1のプロセッサ11の一例であり、RAM102,202はそれぞれ図1の記憶部13,20の一例であり、DMAコントローラ110は図1の転送制御部12の一例である。
図4は、DMAコントローラの内部構成例を示す図である。なお、図4では、CM100のDMAコントローラ110の内部構成について示すが、CM200のDMAコントローラ210も同様の内部構成を有する。また、図4では、DMAコントローラ110によって参照されるRAM102上の記憶領域についても例示している。
DMAコントローラ110は、ディスクリプタ読み出し部111、転送制御部112、開始ポインタレジスタ113、終了ポインタレジスタ114、ベースアドレス記憶部115およびエラーレジスタ116を有する。また、RAM102には、ディスクリプタ領域120および共用ディスクリプタ領域130が確保される。
ディスクリプタ領域120には、複数のディスクリプタがFIFO(First In First Out)方式で格納される。ディスクリプタ領域120は、例えば、リングバッファとして実現される。ディスクリプタには、DMAコントローラ110に実行させるRAM間のデータ転送処理の内容を示す命令セットが記述される。ディスクリプタは、CPU101によって作成されてディスクリプタ領域120に格納される。
共用ディスクリプタ領域130には、あらかじめ決められた同一のデータ転送処理(後述するダミーリード)の内容が記述された共用ディスクリプタが格納される。共用ディスクリプタは、CPU101によって書き替え可能である。
また、CM100は、ホストアクセス制御部101aを有する。ホストアクセス制御部101aの処理は、SSD103などの記憶装置に記憶された所定のプログラムをCPU101が実行することによって実現される。ホストアクセス制御部101aは、ホスト装置410またはホスト装置420からの要求に応じたDE320へのアクセス処理を制御する。この制御において、ホストアクセス制御部101aは、RAM102に確保されたキャッシュ領域(図示せず)を使用する。
具体的には、ホストアクセス制御部101aは、例えばホスト装置410からホストリードが要求されたとき、要求されたデータがキャッシュ領域に格納されている場合には、そのデータをキャッシュ領域から読み出してホスト装置410に送信する。一方、要求されたデータがキャッシュ領域に格納されていない場合、ホストアクセス制御部101aは、要求されたデータをDE320内のHDDから読み出してキャッシュ領域に格納し、そのデータをホスト装置410に送信する。
また、ホストアクセス制御部101aは、ホスト装置410またはホスト装置420からDE320へのデータの書き込みをライトバック方式で制御する。例えば、ホスト装置410からホストライトが要求された場合、ホストアクセス制御部101aは、ホスト装置410から受信したライトデータをRAM102のキャッシュ領域に書き込む。また、ホストアクセス制御部101aは、そのライトデータをCM200のRAM202にも書き込む。ライトデータのRAM202への書き込みは、DMAコントローラ110にRAM間のデータ転送を依頼することで実行される。ホストアクセス制御部101aは、ライトデータをRAM202に書き込んだ後、ホスト装置410にホストライトの完了応答を送信する。ホストアクセス制御部101aは、その後のタイミングで、RAM102のキャッシュ領域に書き込まれたライトデータを、DE320内の対応するHDDに書き込む。
なお、ホストアクセス制御部101aは、CPU101によって実現され、かつ、RAM間のデータ転送をDMAコントローラ110に依頼する処理機能の中のあくまで一例である。CPU101は、ホスト装置410またはホスト装置420からDE320へのアクセス処理以外の処理過程において、RAM102からRAM202へのデータ転送をDMAコントローラ110に依頼してもよい。また、キャッシュ領域は、DMAコントローラ110によって実行されるRAM間のデータ転送における転送元の一例である。RAM102の記憶領域のうち、ディスクリプタ領域120、共用ディスクリプタ領域130およびキャッシュ領域以外の領域が、RAM間のデータ転送における転送元として指定されてもよい。
ディスクリプタ読み出し部111および転送制御部112は、例えば、それぞれ専用の電子回路として実現される。また、ディスクリプタ読み出し部111および転送制御部112の処理の一部は、DMAコントローラ110が備えるプロセッサが所定のファームウェアを実行することで実現されてもよい。
ディスクリプタ読み出し部111は、開始ポインタレジスタ113、終了ポインタレジスタ114およびベースアドレス記憶部115を参照しながら、ディスクリプタ領域120から順次ディスクリプタを読み出す。開始ポインタレジスタ113には、ディスクリプタ領域120のディスクリプタのうち、読み出しが未実行のディスクリプタの記憶領域の先頭位置を指し示す開始ポインタが記憶される。終了ポインタレジスタ114には、ディスクリプタ領域120のディスクリプタのうち、読み出しが終了したディスクリプタの記憶領域の終端位置を指し示す終了ポインタが記憶される。ベースアドレス記憶部115には、ベースアドレスが記憶される。開始ポインタおよび終了ポインタは、ベースアドレスを基準とした相対アドレスとして表され、ベースアドレスに開始ポインタおよび終了ポインタを加算することで、ディスクリプタ領域120における実際のアドレスが算出される。
ディスクリプタ読み出し部111は、読み出したディスクリプタに基づくデータ転送処理を、転送制御部112に依頼する。ディスクリプタ読み出し部111は、転送制御部112によるデータ転送処理の結果を示す情報を、エラーレジスタ116に記録する。
なお、ディスクリプタ読み出し部111は、後述するダミーリードを転送制御部112に実行させる場合には、ディスクリプタ領域120から読み出したディスクリプタに基づいて共用ディスクリプタ領域130から共用ディスクリプタを読み出す。そして、ディスクリプタ読み出し部111は、読み出した共用ディスクリプタに基づいてダミーリードを転送制御部112に依頼する。
転送制御部112は、ディスクリプタ読み出し部111から依頼されたデータ転送処理を実行する。実行するデータ転送処理は、CM100のRAM102から読み出したデータをCM200のRAM202に書き込む「CM間ライト」と、CM200のRAM202から読み出したデータをCM100のRAM102に書き込む「CM間リード」とに大別される。転送制御部112は、CM200のRAM202へのデータの書き込みや、CM200のRAM202からのデータの読み出しを、CM200のDMAコントローラ210に対してFRT310のPCIeスイッチ331を介して依頼する。これにより、RAM102とRAM202との間のデータ転送は、CM101,201を介在させずに実行可能となる。
なお、転送制御部112は、CM200のDMAコントローラ210からの依頼に応じて、RAM102へのデータの書き込みやRAM102からのデータの読み出しを実行することもできる。
図5は、ディスクリプタについて説明するための図である。図5に示すように、ディスクリプタには、例えば、モード、データ長、ソースアドレスおよび宛先アドレスが記述される。
モードは、処理の種別を示す。例えば、モードとしては、CM間ライトを示すライトモードや、CM間リードを示すリードモードがある。データ長は、ライトデータまたはリードデータのサイズを示す。ソースアドレスは、データの転送元アドレスを示す。ソースアドレスは、ライトモードではRAM102のアドレスを示し、リードモードではRAM202のアドレスを示す。宛先アドレスは、データの転送先アドレスを示す。宛先アドレスは、ライトモードではRAM202のアドレスを示し、リードモードではRAM102のアドレスを示す。本実施の形態では、ディスクリプタのサイズは16バイトであり、モード、データ長、ソースアドレスおよび宛先アドレスの各領域のサイズは4バイトであるものとする。
前述のように、RAM102には、複数のディスクリプタがFIFO方式で格納されるディスクリプタ領域120が確保される。図5の例では、ディスクリプタ領域120は、ディスクリプタ#1からディスクリプタ#NまでのN個のディスクリプタを保持可能になっている。ディスクリプタは、CPU101によって作成されてディスクリプタ領域120に格納される。ディスクリプタ領域120に格納されたディスクリプタは、DMAコントローラ110のディスクリプタ読み出し部111によって読み出され、その内容が参照される。
開始ポインタレジスタ113が記憶する開始ポインタは、ディスクリプタ領域120のディスクリプタのうち、読み出しが未実行のディスクリプタの記憶領域の先頭位置を指し示す。終了ポインタレジスタ114が記憶する終了ポインタは、ディスクリプタ領域120のディスクリプタのうち、読み出しが終了したディスクリプタの記憶領域の終端位置を指し示す。
CPU101は、ディスクリプタを作成してディスクリプタ領域120に格納すると、格納したディスクリプタの記憶領域の終端位置を指し示すように終了ポインタを更新する。これにより、開始ポインタと終了ポインタとに差分が生じる状態となる。DMAコントローラ110のディスクリプタ読み出し部111は、開始ポインタが指し示す位置から終了ポインタが指し示す位置までディスクリプタを順次読み出し、読み出したディスクリプタに基づくデータ転送処理を実行する。
図5の例では、開始ポインタおよび終了ポインタがディスクリプタ#3の終端位置を指し示す状態から、CPU101によってディスクリプタ#4〜#6がディスクリプタ領域120に格納される。そして、終了ポインタはディスクリプタ#6の終端位置を示すようにCPU101によって更新される。ディスクリプタ読み出し部111は、まず、開始ポインタに基づいてディスクリプタ#4を読み出し、ディスクリプタ#4に基づくデータ転送処理を転送制御部112に依頼する。このデータ転送処理が完了すると、ディスクリプタ読み出し部111は、開始ポインタをディスクリプタ1つ分だけ増加させる。以後、ディスクリプタ読み出し部111は、開始ポインタと終了ポインタとが一致するまで上記の処理を繰り返す。これにより、ディスクリプタ#5,#6が順次読み出され、ディスクリプタ#5,#6に基づくデータ転送処理が実行される。
なお、開始ポインタおよび終了ポインタの最大値は、ディスクリプタ領域120における最終のディスクリプタ(ディスクリプタ#N)の先頭位置を示す値となる。この位置からディスクリプタ1つ分だけ開始ポインタおよび終了ポインタをさらに増加させる場合には、開始ポインタおよび終了ポインタの値はディスクリプタ領域120の先頭位置(ディスクリプタ#1の先頭位置)を示す値に戻る。
図6は、DMAコントローラによる基本的なデータ転送処理手順の例を示すシーケンス図である。この図6では例として、CM200のRAM202に対するライト処理(CM間ライト)の手順を示す。なお、図6に示す「SP」は、開始ポインタによって示されるディスクリプタ領域120の位置を示し、「EP」は、終了ポインタによって示されるディスクリプタ領域120の位置を示す。
[ステップS11]CPU101は、CM間ライトの処理内容を記述したディスクリプタ121を作成し、作成したディスクリプタ121をディスクリプタ領域120に書き込む。
[ステップS12]CPU101は、終了ポインタレジスタ114内の終了ポインタを、ディスクリプタ1つ分だけ増加させる。これにより、図6の左上に示すように、開始ポインタと終了ポインタとの間にディスクリプタ1つ分の差分が生じる状態となる。
[ステップS13]DMAコントローラ110のディスクリプタ読み出し部111は、開始ポインタと終了ポインタとの間に差分が生じたことを検知すると、開始ポインタが指し示す位置からディスクリプタ121を読み出す。
[ステップS14]ディスクリプタ読み出し部111は、ディスクリプタ121に基づくCM間ライトを転送制御部112に依頼する。転送制御部112は、依頼されたCM間ライトを実行する。具体的には、転送制御部112は、RAM102からデータを読み出し、読み出したデータをPCIeスイッチ331を介してCM200のDMAコントローラ210に送信して、CM200のRAM202に対する書き込みを依頼する。これにより、データがRAM202に書き込まれる。
[ステップS15]ディスクリプタ読み出し部111は、転送制御部112によるCM間ライトが完了すると、開始ポインタレジスタ113内の開始ポインタを、ディスクリプタ1つ分だけ増加させる。これにより、図6の左下に示すように、開始ポインタと終了ポインタが同じ位置を示すようになる。
[ステップS16]ディスクリプタ読み出し部111は、ディスクリプタ121に基づくデータ転送処理が完了したことをCPU101に通知する。
以上の手順により、CPU101は、ディスクリプタ121の作成および格納と終了ポインタの更新によって、RAM102とRAM202との間のデータ転送処理をDMAコントローラ110に実行させることができる。DMAコントローラ110によってデータ転送処理が実行されている間、CPU101は他の処理を並行して実行することができる。
ところで、DMAコントローラ110は、上記のステップS14でCM間ライトを実行した後、データがCM200に届いたかを確認せずに、処理が終了したことをCPU101に応答する。このため、CPU101は、データがCM200のRAM202に正しく書き込まれたかを判別できない。
例えば、CM間ライトは、ホストライトが要求された場合に、RAM102のキャッシュ領域に書き込んだライトデータをCM200のRAM202にミラーリングするために実行される。この場合、CPU101は、ライトデータのCM間ライトが終了したことをDMAコントローラ110から通知されると、実際にはライトデータの書き込みに失敗したとしても、ホスト装置410に対してホストライトが正常に完了したと応答してしまう。このため、もしCM100の動作が故障により停止すると、キャッシュ領域内のデータの一部が失われてしまう。
そこで、ライトデータの送達確認のために、CM間ライトに続けてダミーリードを実行する方法が考えられる。ダミーリードは、CM200のRAM202上のあらかじめ決められた同じ領域からデータを読み出す処理である。ここで、比較例として、CM間ライトの直後にダミーリードを実行する場合の処理手順の例について、図7,図8を用いて説明する。
図7,図8は、ダミーリードを伴うライト処理手順の比較例を示すシーケンス図である。
[ステップS21]CPU101のホストアクセス制御部101aは、例えばホスト装置410から、ホストライト要求を受信する。また、ホストアクセス制御部101aは、ホスト装置410からライトデータを受信し、RAM102のバッファ領域に格納する。
[ステップS22]ホストアクセス制御部101aは、バッファ領域に格納したライトデータを、RAM102内のキャッシュ領域に書き込む。
[ステップS23]ホストアクセス制御部101aは、CM間ライトの処理内容を記述したディスクリプタ122aと、ダミーリードの処理内容を記述したディスクリプタ122bを作成する。前者のCM間ライトとは、受信したライトデータをRAM102から読み出し、CM200のRAM202に書き込む処理である。ホストアクセス制御部101aは、作成したディスクリプタ122a,122bを、順にディスクリプタ領域120に書き込む。
[ステップS24]ホストアクセス制御部101aは、終了ポインタレジスタ114内の終了ポインタを、ディスクリプタ2つ分だけ増加させる。これにより、図7の左側に示すように、開始ポインタと終了ポインタとの間にディスクリプタ2つ分の差分が生じる状態となる。
[ステップS25]DMAコントローラ110のディスクリプタ読み出し部111は、開始ポインタと終了ポインタとの間に差分が生じたことを検知すると、開始ポインタが指し示す位置からディスクリプタ122aを読み出す。
[ステップS26]ディスクリプタ読み出し部111は、ディスクリプタ122aに基づくCM間ライトを転送制御部112に依頼する。転送制御部112は、依頼されたCM間ライトを実行する。これにより、受信したライトデータがRAM202に書き込まれる。
[ステップS27]ディスクリプタ読み出し部111は、転送制御部112によるCM間ライトが完了すると、開始ポインタレジスタ113内の開始ポインタを、ディスクリプタ1つ分だけ増加させる。これにより、開始ポインタはダミーリードのためのディスクリプタ122bの先頭位置を指し示すようになる。
[ステップS28]ディスクリプタ読み出し部111は、ディスクリプタ122aに基づくデータ転送処理が完了したことをCPU101に通知する。
続いて、図8の処理が実行される。
[ステップS31]ディスクリプタ読み出し部111は、開始ポインタが指し示す位置からディスクリプタ122bを読み出す。
[ステップS32]ディスクリプタ読み出し部111は、ディスクリプタ122bに基づくダミーリードを転送制御部112に依頼する。転送制御部112は、依頼されたダミーリードを実行する。これにより、CM200のRAM202の所定領域からダミーデータが読み出され、RAM102の所定領域に書き込まれる。
[ステップS33]ディスクリプタ読み出し部111は、転送制御部112によるダミーリードが完了すると、開始ポインタレジスタ113内の開始ポインタを、ディスクリプタ1つ分だけ増加させる。これにより、図8の左側に示すように、開始ポインタと終了ポインタが同じ位置を示すようになる。
[ステップS34]ディスクリプタ読み出し部111は、ディスクリプタ122bに基づくデータ転送処理が完了したことをCPU101に通知する。
[ステップS35]CPU101のホストアクセス制御部101aは、ステップS34の通知によりダミーリードが正常に実行されたことを認識し、ホスト装置410に対してホストライトが正常に完了したことを応答する。
以上の処理においては、ダミーリードを実行したときに、もしCM200内のダミーデータの経路上の回路(例えばDMAコントローラ210)に異常がある場合には、DMAコントローラ110はダミーデータを受信できない。このため、DMAコントローラ110は、ダミーデータの受信可否に基づいて、少なくとも、直前のCM間ライトの実行時にCM200内のライトデータの経路上の回路に異常があったか否かを推定できる。そして、ダミーデータを受信できた場合、DMAコントローラ110は、直前のCM間ライトが正常に実行された可能性が高いと推定できる。このように、ダミーリードの成否から、直前のCM間ライトでのライトデータ送達の成否を高い確率で暫定的に判定できる。
また、ダミーリードでは、上記のようにRAM202上のあらかじめ決められた領域から、あらかじめ決められたデータが読み出される。このため、例えば、CM間ライトで転送されたライトデータを、その直後にRAM202から読み出すベリファイリード処理と比較して、読み出されるデータのサイズを安定的に小さくできる。したがって、送達確認のための処理負荷を低減でき、かつ処理時間も短縮でき、その結果、ホストライト要求に対する応答時間を短縮することができる。
図9は、ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。図7,図8に示した比較例の処理が実行される場合、CPU101は、ホストライトが要求されるたびに、CM間ライトのためのディスクリプタとダミーリードのためのディスクリプタの両方を作成する。このため、ホストライトが連続して要求された場合には、その都度、このような2種類のディスクリプタが生成され、ディスクリプタ領域120に順に格納される。
図9は、ホストライトが3回連続して要求された場合に作成されるディスクリプタの例を示している。この例では、1回目のホストライトに対応するCM間ライト用のディスクリプタ123aおよびダミーリード用のディスクリプタ123bと、2回目のホストライトに対応するCM間ライト用のディスクリプタ123cおよびダミーリード用のディスクリプタ123dと、3回目のホストライトに対応するCM間ライト用のディスクリプタ123eおよびダミーリード用のディスクリプタ123fとが作成されている。
ここで、前述のように、ダミーリードは、RAM202内の同一のアドレスから同一のデータを読み出すものである。このため、ダミーリード用のディスクリプタはすべて同じ内容である。このような同じ内容のディスクリプタを、ホストライト要求を受けるたびに繰り返し作成することは、CPU101の処理効率を悪化させるという問題がある。
そこで、本実施の形態では、ダミーリードの実行のための専用のディスクリプタ(共用ディスクリプタ)を、RAM102の共用ディスクリプタ領域130にあらかじめ格納しておく。そして、CPU101は、上記の比較例のようなダミーリード用のディスクリプタを作成するのではなく、共用ディスクリプタの読み出しを実行させるための専用のディスクリプタを作成する。この共用ディスクリプタの読み出し用のディスクリプタのサイズを、比較例のようなダミーリード用のディスクリプタより小さくすることで、CPU101によるディスクリプタ作成時間を短縮し、CPU101の処理効率を向上させる。
図10は、第2の実施の形態におけるダミーリード実行の仕組みを説明するための図である。上記のように、RAM102には、ディスクリプタ領域120とは別に共用ディスクリプタ領域130が確保される。共用ディスクリプタ領域130には、ダミーリード実行用の共用ディスクリプタ131があらかじめ格納される。
共用ディスクリプタ131のデータ構造やサイズは、CM間ライトやCM間リードのためのディスクリプタと同様である。すなわち、共用ディスクリプタ131には、モード、データ長、ソースアドレスおよび宛先アドレスが、それぞれ4バイトのデータとして記述されている。ただし、共用ディスクリプタ131に記述される各データは、あらかじめ決められた固定値である。モードには、CM間リードを示すリードモードが設定される。データ長は、ダミーデータのサイズを示し、ソースアドレスには、CM200のRAM202におけるダミーデータの記憶領域のアドレスが設定される。宛先アドレスには、CM100のRAM102の所定領域のアドレスが設定される。
ダミーリードを実行させる場合、CPU101は、モードとしてポインタモードが設定されたディスクリプタを作成する。ポインタモードとは、ディスクリプタに基づいてCM間ライトやCM間リードを行うのではなく、ディスクリプタに設定されたポインタに基づいて共用ディスクリプタ131を読み出す動作モードである。図10の例では、ディスクリプタ領域120に格納されたディスクリプタ#3に、ポインタモードが設定されている。以下、ポインタモードが設定されたディスクリプタを、単に「ポインタモードのディスクリプタ」と記載する。
ポインタモードのディスクリプタにおいては、モードの領域が、1バイトのサブモード領域141と、3バイトのポインタ領域142とに分割されている。サブモード領域141のうちの1つのビットには、ポインタモードに設定されていることを示すビット値が設定される。したがって、DMAコントローラ110のディスクリプタ読み出し部111は、サブモード領域141を参照することで、読み出したディスクリプタにポインタモードが設定されていることを判別できる。
ポインタ領域142には、RAM102における共用ディスクリプタ131の記憶領域の先頭位置を指し示すポインタが設定される。このポインタは、3バイトのポインタ領域142に収まるような数値として設定される。本実施の形態では、ポインタがベースアドレスに対する加算値として設定されることで、ポインタのビット数がRAM102上の実アドレスより小さく設定される。なお、他の方法の例として、共用ディスクリプタ131をRAM102上の先頭に近い記憶領域に格納し、その記憶領域の実アドレスにおける上位ビットを省略した値をポインタとして設定してもよい。すなわち、装置外部にあるRAM202とは違い、RAM102は装置内部にあるローカルな記憶装置であるので、RAM102内の固定的な記憶領域を示す位置情報のビット数を実アドレスより減らすための様々な手法が容易に考えられる。
ポインタモードのディスクリプタにおけるモード以外の領域(データ長、ソースアドレスおよび宛先アドレスに対応する領域)には、データが何も記憶されない。すなわち、ポインタモードのディスクリプタのサイズは、ライトモードやリードモードのディスクリプタや共用ディスクリプタ131のサイズより小さい。このため、CPU101は、ポインタモードのディスクリプタを、ライトモードやリードモードのディスクリプタや共用ディスクリプタ131より短時間で作成することができる。
なお、ポインタモードのディスクリプタには、例えば、ポインタの代わりに共用ディスクリプタ131の実アドレスが設定されてもよい。この場合でも、ソースアドレスと宛先アドレスという2つの実アドレスが設定される他のディスクリプタと比較して、ポインタモードのディスクリプタのサイズを小さくすることができる。
DMAコントローラ110のディスクリプタ読み出し部111は、開始ポインタに基づいてRAM102から読み出したディスクリプタにポインタモードが設定されていることを認識すると、ポインタ領域142に設定されているポインタが指し示す記憶領域から共用ディスクリプタ131を読み出す。そして、ディスクリプタ読み出し部111は、読み出した共用ディスクリプタ131に基づいてダミーリードを実行する。
このように、本実施の形態では、ダミーリードの実行のための共用ディスクリプタ131を、ポインタモードのディスクリプタに基づいて読み出す仕組みが設けられる。そして、ポインタモードのディスクリプタには、記憶領域を指し示す情報としてあらかじめ決められた1つの領域を指し示す情報だけが設定されればよいので、ポインタモードのディスクリプタのサイズを小さくすることができる。これにより、ダミーリードの実行を依頼するためのCPU101の処理時間が短縮される。その結果、CPU101の処理負荷が低減され、その処理効率が向上する。
図11は、第2の実施の形態において、ホストライトが連続して要求された場合におけるディスクリプタの作成例を示す図である。この図11では、図9の例と同様にホストライトが3回連続して要求された場合に作成されるディスクリプタの例を示している。
図11では、1回目のホストライトに対応するCM間ライト用のディスクリプタ124aに続いて、ポインタモードのディスクリプタ124bが作成されている。また、2回目のホストライトに対応するCM間ライト用のディスクリプタ124cに続いて、ポインタモードのディスクリプタ124dが作成されている。さらに、3回目のホストライトに対応するCM間ライト用のディスクリプタ124eに続いて、ポインタモードのディスクリプタ124fが作成されている。ディスクリプタ124b,124d,124fにそれぞれ設定されるポインタは、いずれもダミーリード用の共用ディスクリプタ131を指し示す。
この図11におけるディスクリプタ124b,124d,124fのサイズは、図9におけるダミーリード用のディスクリプタ123b,123d,123fより小さい。このため、CPU101によるディスクリプタ124b,124d,124fの作成時間が短縮される。したがって、図11のようにホストライトが連続して要求されるほど、CPU101の処理負荷についての大きな低減効果が得られる。
図12,図13は、ホストライトが要求された場合の処理手順の例を示すシーケンス図である。
[ステップS51]CPU101のホストアクセス制御部101aは、例えばホスト装置410から、ホストライト要求を受信する。また、ホストアクセス制御部101aは、ホスト装置410からライトデータを受信し、RAM102のバッファ領域に格納する。
[ステップS52]ホストアクセス制御部101aは、バッファ領域に格納したライトデータを、RAM102内のキャッシュ領域に書き込む。
[ステップS53]ホストアクセス制御部101aは、CM間ライトの処理内容を記述したディスクリプタ125aと、ポインタモードのディスクリプタ125bを作成する。ホストアクセス制御部101aは、作成したディスクリプタ125a,125bを、順にディスクリプタ領域120に書き込む。
[ステップS54]ホストアクセス制御部101aは、終了ポインタレジスタ114内の終了ポインタを、ディスクリプタ2つ分だけ増加させる。これにより、図12の左側に示すように、開始ポインタと終了ポインタとの間にディスクリプタ2つ分の差分が生じる状態となる。
[ステップS55]DMAコントローラ110のディスクリプタ読み出し部111は、開始ポインタと終了ポインタとの間に差分が生じたことを検知すると、開始ポインタが指し示す位置からディスクリプタ125aを読み出す。
[ステップS56]ディスクリプタ読み出し部111は、ディスクリプタ125aに基づくCM間ライトを転送制御部112に依頼する。転送制御部112は、依頼されたCM間ライトを実行する。これにより、受信したライトデータがRAM202に書き込まれる。
[ステップS57]ディスクリプタ読み出し部111は、転送制御部112によるCM間ライトが完了すると、開始ポインタレジスタ113内の開始ポインタを、ディスクリプタ1つ分だけ増加させる。これにより、開始ポインタはポインタモードのディスクリプタ125bの先頭位置を指し示すようになる。
[ステップS58]ディスクリプタ読み出し部111は、ディスクリプタ125aに基づくデータ転送処理が完了したことをCPU101に通知する。
続いて、図13の処理が実行される。
[ステップS61]ディスクリプタ読み出し部111は、開始ポインタが指し示す位置からディスクリプタ125bを読み出す。
[ステップS62]ディスクリプタ読み出し部111は、ディスクリプタ125bに設定されたポインタが指し示すRAM102内の記憶領域から、共用ディスクリプタ131を読み出す。
[ステップS63]ディスクリプタ読み出し部111は、共用ディスクリプタ131に基づくダミーリードを転送制御部112に依頼する。転送制御部112は、依頼されたダミーリードを実行する。これにより、CM200のRAM202の所定領域からダミーデータが読み出され、RAM102の所定領域に書き込まれる。
ディスクリプタ読み出し部111は、ステップS63でRAM202からのダミーデータの読み出しに成功した場合、次のステップS64の処理を実行する。
[ステップS64]ディスクリプタ読み出し部111は、転送制御部112によるダミーリードが完了すると、開始ポインタレジスタ113内の開始ポインタを、ディスクリプタ1つ分だけ増加させる。これにより、図13の左側に示すように、開始ポインタと終了ポインタが同じ位置を示すようになる。
[ステップS65]ディスクリプタ読み出し部111は、ディスクリプタ125bに基づくデータ転送処理が完了したことをCPU101に通知する。
[ステップS66]CPU101のホストアクセス制御部101aは、ステップS65の通知によりダミーリードが正常に実行されたことを認識し、ホスト装置410に対してホストライトが正常に完了したことを応答する。
次に、CM100の処理についてフローチャートを用いて説明する。
図14は、DMAコントローラの初期化処理の例を示すフローチャートである。図14の処理は、例えば、電源投入によってCM100が起動した際に実行される。
[ステップS101]CPU101は、DMAコントローラ110を初期化する。
[ステップS102]CPU101は、ダミーリード実行のための共用ディスクリプタ131を作成し、RAM102内のあらかじめ決められた記憶領域に格納する。
図15は、ホストライトが要求された場合のCPUの処理の例を示すフローチャートである。なお、この図15では例として、ホスト装置410からホストライトが要求されるものとする。
[ステップS111]ホストアクセス制御部101aは、ホスト装置410からホストライト要求を受信する。また、ホストアクセス制御部101aは、ホスト装置410からライトデータを受信し、RAM102のバッファ領域に格納する。
[ステップS112]ホストアクセス制御部101aは、バッファ領域に格納したライトデータを、RAM102のキャッシュ領域に書き込む。
[ステップS113]ホストアクセス制御部101aは、CM間ライトの処理内容を記述したディスクリプタを作成し、ディスクリプタ領域120に格納する。作成されるディスクリプタには、バッファ領域に格納したライトデータを読み出し、CM200のRAM202に書き込むという処理内容が記述される。
[ステップS114]ホストアクセス制御部101aは、ポインタモードのディスクリプタを作成し、ディスクリプタ領域120に格納する。
[ステップS115]ホストアクセス制御部101aは、終了ポインタレジスタ114内の終了ポインタを、ディスクリプタ2つ分だけ増加させる。
[ステップS116]ホストアクセス制御部101aは、DMAコントローラ110からCM間ライトの終了通知を受信したかを判定する。この終了通知は、例えば、割り込みによってDMAコントローラ110から通知される。ステップS116の判定は一定時間ごとに行われ、ホストアクセス制御部101aが終了通知を受信すると、処理がステップS117に進められる。
[ステップS117]ホストアクセス制御部101aは、エラーレジスタ116の内容を読み込み、エラーが発生していないかを確認する。なお、図示しないが、実際には、エラーが発生していない場合に処理がステップS118に進み、エラーが発生している場合には、ホストアクセス制御部101aは、ホストライトの実行に失敗したことをホスト装置410に通知して、処理を終了する。
[ステップS118]ホストアクセス制御部101aは、DMAコントローラ110からダミーリードの終了通知を受信したかを判定する。この終了通知は、例えば、割り込みによってDMAコントローラ110から通知される。ステップS118の判定は一定時間ごとに行われ、ホストアクセス制御部101aが終了通知を受信すると、処理がステップS119に進められる。
[ステップS119]ホストアクセス制御部101aは、エラーレジスタ116の内容を読み込み、エラーが発生していないかを確認する。
[ステップS120]ホストアクセス制御部101aは、ホスト装置410に応答する。エラーが発生していない場合、ホストアクセス制御部101aは、ホストライトが正常に完了したことをホスト装置410に通知する。一方、エラーが発生した場合、ホストアクセス制御部101aは、ホストライトが正常に完了しなかったことをホスト装置410に通知する。
図16は、DMAコントローラの処理の例を示すフローチャートである。
[ステップS131]ディスクリプタ読み出し部111は、開始ポインタレジスタ113および終了ポインタレジスタ114から、それぞれ開始ポインタおよび終了ポインタを読み出す。
[ステップS132]ディスクリプタ読み出し部111は、ステップS131で読み出した開始ポインタと終了ポインタとを比較する。開始ポインタの値と終了ポインタの値とが異なる場合、ディスクリプタ読み出し部111は、ステップS133の処理を実行する。一方、開始ポインタの値と終了ポインタの値とが等しい場合、ディスクリプタ読み出し部111は、一定時間後にステップS131の処理を実行する。
[ステップS133]ディスクリプタ読み出し部111は、ディスクリプタ領域120における開始ポインタが指し示す位置からディスクリプタを読み出す。
[ステップS134]ディスクリプタ読み出し部111は、読み出したディスクリプタのモードの領域に、ポインタモードが設定されているかを判定する。ポインタモードが設定されている場合、ディスクリプタ読み出し部111は、ステップS135の処理を実行する。ポインタモードが設定されていない場合、ディスクリプタ読み出し部111は、ステップS136の処理を実行する。
[ステップS135]ディスクリプタ読み出し部111は、読み出したディスクリプタに設定されたポインタが指し示す、共用ディスクリプタ領域130の位置から、共用ディスクリプタ131を読み出す。
[ステップS136]ディスクリプタ読み出し部111は、ディスクリプタに基づくデータ転送処理を転送制御部112に依頼する。このとき参照されるディスクリプタは、ステップS134で「Yes」の場合はステップS135で読み出された共用ディスクリプタ131であり、ステップS134で「No」の場合はステップS133で読み出されたディスクリプタである。転送制御部112は、依頼されたデータ転送処理を実行する。
[ステップS137]転送制御部112は、データ転送処理の実行結果をディスクリプタ読み出し部111に通知する。ディスクリプタ読み出し部111は、通知された内容に基づいて、データ転送処理の成否をエラーレジスタ116に書き込む。
[ステップS138]ディスクリプタ読み出し部111は、開始ポインタレジスタ113内の開始ポインタを、ディスクリプタ1つ分だけ増加させる。
[ステップS139]ディスクリプタ読み出し部111は、データ転送処理の終了通知をCPU101に出力する。この出力は、例えば割り込みによって行われる。
この後、ステップS131に戻る。
以上説明した第2の実施の形態では、ダミーリードの実行を指示するためにCPU101が作成するディスクリプタのサイズを小さくすることができる。このため、ダミーリードの実行を指示するたびに共用ディスクリプタ131を作成する場合と比較して、ダミーリードの実行を指示するためのCPU101の処理時間を短縮でき、その処理負荷を低減できる。
なお、上記の各実施の形態に示した装置(ストレージ制御装置10、CM100,200)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc-Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
1a〜1c 命令セット
2a 書き込みデータ
2b 確認用データ
10 ストレージ制御装置
11 プロセッサ
12 転送制御部
13,20 記憶部
S1a,S1b,S2a〜S2d ステップ

Claims (6)

  1. 第2の記憶部へのデータの送達状況を確認するための確認用データを前記第2の記憶部上のあらかじめ決められた位置から読み出すための第1の命令セットを記憶する第1の記憶部と、
    書き込みデータを前記第2の記憶部へ書き込む書き込み命令と、前記第1の記憶部における前記第1の命令セットの位置を含む第2の命令セットとを作成して出力するプロセッサと、
    前記書き込み命令に応じて前記第2の記憶部への前記書き込みデータの書き込みを実行した後、前記第2の命令セットに基づいて前記第1の記憶部から前記第1の命令セットを読み出し、前記第1の命令セットに基づいて前記第2の記憶部からの前記確認用データの読み出しを実行し、その実行の成否を判定する転送制御部と、
    を有するストレージ制御装置。
  2. 前記第1の命令セットは、アドレス情報として、前記第2の記憶部における前記確認用データの位置を示す転送元アドレスと、前記確認用データの転送先アドレスとを含み、
    前記第2の命令セットは、アドレス情報として、前記第1の記憶部における前記第1の命令セットの位置を示す単独のアドレスを含む、
    請求項1記載のストレージ制御装置。
  3. 前記第1の記憶部は、前記プロセッサから出力された命令セットを一時的に記憶する一時記憶領域を有し、
    前記プロセッサは、前記書き込みデータを前記第2の記憶部へ書き込むための第3の命令セットと、前記第2の命令セットとを作成して前記一時記憶領域に格納し、
    前記転送制御部は、前記一時記憶領域から前記第3の命令セットを読み出し、前記第3の命令セットに基づいて前記第2の記憶部への前記書き込みデータの書き込みを実行し、次に前記一時記憶領域から前記第2の命令セットを読み出し、前記第2の命令セットに基づいて前記第1の記憶部から前記第1の命令セットを読み出す、
    請求項1または2記載のストレージ制御装置。
  4. 前記第1の記憶部は、ホスト装置からの書き込み要求に応じた、前記ストレージ制御装置に接続された記憶装置に対する前記書き込みデータの書き込み処理を実行する際にキャッシュとして利用されるキャッシュ領域を含み、
    前記第2の記憶部は、他のストレージ制御装置に搭載され、前記キャッシュ領域のデータのミラーデータを格納するためのミラーキャッシュ領域を含み、
    前記プロセッサは、前記ホスト装置から前記書き込み要求と前記書き込みデータとを受信すると、前記書き込みデータを前記キャッシュ領域に書き込むとともに、前記ミラーキャッシュ領域を書き込み先とする前記書き込み命令と前記第2の命令セットとを出力し、前記キャッシュ領域への前記書き込みデータの書き込みに成功し、かつ、前記転送制御部により前記確認用データの読み出しに成功したと判定されると、前記書き込み要求に対する完了応答を前記ホスト装置に出力する、
    請求項1乃至3のいずれか1項に記載のストレージ制御装置。
  5. 第2の記憶部へのデータの送達状況を確認するための確認用データについての前記第2の記憶部における位置を示す転送元アドレスと、転送先アドレスと、読み出し命令とを含む第1の命令セットを記憶する第1の記憶部と、
    第2の命令セットを作成して出力するプロセッサであって、前記第2の命令セットは、転送元アドレスと、前記第2の記憶部における位置を示す転送先アドレスと、書き込み命令とを含む情報群、または、前記第1の記憶部における前記第1の命令セットの位置を示す参照先アドレスと、参照命令とを含む情報群を含む、前記プロセッサと、
    前記プロセッサから出力された前記第2の命令セットが前記書き込み命令を含む場合には、前記第2の命令セットに含まれる転送元アドレスと転送先アドレスとに基づいて前記第2の記憶部へのデータの書き込みを実行し、前記プロセッサから出力された前記第2の命令セットが前記参照命令を含む場合には、前記第2の命令セットに含まれる参照先アドレスに基づいて前記第1の記憶部から前記第1の命令セットを読み出し、前記第1の命令セットに基づいて前記第2の記憶部から前記確認用データを読み出し、その成否を判定する転送制御部と、
    を有するストレージ制御装置。
  6. コンピュータに、
    第2の記憶部へのデータの送達状況を確認するための確認用データを前記第2の記憶部上のあらかじめ決められた位置から読み出すための第1の命令セットを第1の記憶部に格納し、
    書き込みデータを前記第2の記憶部へ書き込む書き込み命令と、前記第1の記憶部における前記第1の命令セットの位置を示す位置情報、および前記位置情報に基づく前記第1の命令セットの読み出し命令を含む第2の命令セットとを作成し、前記第2の記憶部へのアクセス動作を実行する転送制御部に対して前記書き込み命令と前記第2の命令セットとを出力することで、前記第2の記憶部からの前記確認用データの読み出しを前記転送制御部に指示する、
    処理を実行させる制御プログラム。
JP2016008394A 2016-01-20 2016-01-20 ストレージ制御装置および制御プログラム Pending JP2017130002A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016008394A JP2017130002A (ja) 2016-01-20 2016-01-20 ストレージ制御装置および制御プログラム
US15/359,798 US20170206178A1 (en) 2016-01-20 2016-11-23 Information processing apparatus, method of transferring data, and non-transitory computer-readable recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016008394A JP2017130002A (ja) 2016-01-20 2016-01-20 ストレージ制御装置および制御プログラム

Publications (1)

Publication Number Publication Date
JP2017130002A true JP2017130002A (ja) 2017-07-27

Family

ID=59315182

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016008394A Pending JP2017130002A (ja) 2016-01-20 2016-01-20 ストレージ制御装置および制御プログラム

Country Status (2)

Country Link
US (1) US20170206178A1 (ja)
JP (1) JP2017130002A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108388524A (zh) * 2016-12-21 2018-08-10 伊姆西Ip控股有限责任公司 用于缓存数据的方法和设备
US11036650B2 (en) * 2019-09-19 2021-06-15 Intel Corporation System, apparatus and method for processing remote direct memory access operations with a device-attached memory

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6657633B1 (en) * 2000-09-19 2003-12-02 Garmin International, Inc DMA computer system for driving an LCD display in a GPS receiver
US9405682B2 (en) * 2012-06-23 2016-08-02 Microsoft Technology Licensing, Llc Storage device access using unprivileged software code
JP5695126B2 (ja) * 2013-05-14 2015-04-01 株式会社日立製作所 計算機システム、サーバモジュール及びストレージモジュール

Also Published As

Publication number Publication date
US20170206178A1 (en) 2017-07-20

Similar Documents

Publication Publication Date Title
US10996892B2 (en) Apparatus and method for controlling data acceleration
US7631218B2 (en) RAID system and Rebuild/Copy back processing method thereof
US8839030B2 (en) Methods and structure for resuming background tasks in a clustered storage environment
US10027532B2 (en) Storage control apparatus and storage control method
US20110246677A1 (en) Systems and methods for controlling commands for target devices
US20080082713A1 (en) Interrupt control system and storage control system using the same
US8924606B2 (en) Storage system and data transfer control method
US11137918B1 (en) Administration of control information in a storage system
JP2018190376A (ja) 管理コントローラによるsas/sataハードディスクドライブ更新
JP6652647B2 (ja) ストレージシステム
JP4829370B1 (ja) メモリ制御装置、メモリ装置および停止制御方法
US8402195B2 (en) Storage system mounted with plurality of processors
US20050044283A1 (en) Apparatus having an inter-module data transfer confirming function, storage controlling apparatus, and interface module for the apparatus
JP5998884B2 (ja) ストレージ装置、およびモジュール間データ転送方法
JP2017130002A (ja) ストレージ制御装置および制御プログラム
US20090049334A1 (en) Method and Apparatus to Harden an Internal Non-Volatile Data Function for Sector Size Conversion
US11010080B2 (en) Layout based memory writes
WO2016059715A1 (ja) 計算機システム
JP6944117B2 (ja) 情報処理装置、転送制御方法および転送制御プログラム
US20120017057A1 (en) Data copying device, method for copying data and data storage device
US10719391B2 (en) Storage system and storage control apparatus
US10318171B1 (en) Accessing fast memory in a data storage array
US10503678B1 (en) Fabric management system and method
US10235317B1 (en) Fabric management system and method
KR101972535B1 (ko) 반도체 저장 장치

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180912

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190514

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190712

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20190712

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190712

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20191217