JP2014167818A - データ転送装置およびデータ転送方法 - Google Patents
データ転送装置およびデータ転送方法 Download PDFInfo
- Publication number
- JP2014167818A JP2014167818A JP2014098713A JP2014098713A JP2014167818A JP 2014167818 A JP2014167818 A JP 2014167818A JP 2014098713 A JP2014098713 A JP 2014098713A JP 2014098713 A JP2014098713 A JP 2014098713A JP 2014167818 A JP2014167818 A JP 2014167818A
- Authority
- JP
- Japan
- Prior art keywords
- data
- data transfer
- memory
- transfer
- memory 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Bus Control (AREA)
Abstract
【課題】 複数パスで接続されていても、メモリへの書込みの確定を行う。
【解決手段】 データの転送元となる第1のメモリの転送元アドレスと、データの転送先となる第2のメモリの転送先アドレスと、データの転送長と、を記憶部から取得する取得部と、前記転送元アドレスに基づき、前記第1のメモリのデータを取得する読み出し部と、前記転送先アドレスに基づき、前記第2のメモリへデータの書き込みを行うメモリコントローラに、前記取得したデータを転送し、転送が終了すると、前記転送したデータの量が前記データの転送長に達しているか否かを判定し、前記判定の結果、前記転送したデータの量が前記データの転送長に達している場合、前記メモリコントローラに読み出し要求を送信する書き込み部とを備える。
【選択図】 図7
【解決手段】 データの転送元となる第1のメモリの転送元アドレスと、データの転送先となる第2のメモリの転送先アドレスと、データの転送長と、を記憶部から取得する取得部と、前記転送元アドレスに基づき、前記第1のメモリのデータを取得する読み出し部と、前記転送先アドレスに基づき、前記第2のメモリへデータの書き込みを行うメモリコントローラに、前記取得したデータを転送し、転送が終了すると、前記転送したデータの量が前記データの転送長に達しているか否かを判定し、前記判定の結果、前記転送したデータの量が前記データの転送長に達している場合、前記メモリコントローラに読み出し要求を送信する書き込み部とを備える。
【選択図】 図7
Description
本発明は、データ転送装置およびデータ転送方法に関する。
近年のストレージ装置(ディスクアレイシステムおよびそれに類する記憶装置)は、データを読み書きする速度を速くするために、ストレージコントローラにキャッシュメモリを搭載している。キャッシュメモリは、ハードディスクドライブ(Hard Disk Drive。以下「HDD」)やソリッドステートディスク(Solid State Disk。以下「SSD」)などの最終記憶メディアへ書き込むデータや頻繁に読み出されるデータの一部を保持することで、メディアのアクセスレイテンシを隠蔽し、ホストへの高速な応答を実現する。
例えば、ホストがデータをストレージ装置に書き込む場合、当該ホストからのデータを処理する、ストレージ装置内のストレージコントローラは、データをキャッシュメモリに格納した段階でホストに書込みの完了応答を返す。最終記憶メディアに比べてキャッシュメモリは非常に高速であるから、ホストはすぐに次のI/Oリクエストを発行することができる。一方ストレージコントローラはホストの動作とは非同期に、あるタイミングで最終記憶メディアにキャッシュメモリ内のデータを書き込むように動作している。
ストレージコントローラは、耐障害性を向上させるために複数の単位コントローラで構成されることが多い。このためキャッシュメモリ(以下、単にメモリと記述する。)も複数の箇所に分散配置される。処理上の効率化や複製による冗長化のために、しばしばメモリ間でのデータ転送が実施されるため、単位コントローラ間には内部バス技術を用いたネットワークパスが構成される。バスには例えばPCI Express(登録商標)などが用いられる。また、キャッシュメモリ間の転送はストレージ制御ソフトウェアが動作するプロセッサの指示によって、DMA(Direct Memory Access)と呼ばれるデータ転送コントローラを用いて行われる。
PCI Expressの場合、メモリへのライトリクエストは、ターゲットからの完了応答(Completion)がない、いわゆるポステッドアクセス(Posted Access)となる。ストレージコントローラのメモリコントローラ内部には、ハードウェアのデータ処理上の理由から、ネットワークパスからメモリコントローラまでの経路上にバッファが設けられることがある。従い、ライトリクエスト元は、果たしてデータが経路上にあるバッファをすべて通り抜けてメモリに書き込まれたか否かを確認することができない。このため、ネットワークパス等を経由してメモリに書込みする場合、ストレージ装置などでは、途中のバッファをフラッシュさせてメモリへの書込みを確定させるために、同一経路でダミーのメモリリードリクエストを発行する。PCI Expressでは、メモリリードリクエストはノンポステッドアクセス(Non-Posted Access)と呼ばれる。同一経路上におけるノンポステッドアクセスは、先に発行されたメモリライトリクエストなどのポステッドアクセスを追い抜いてメモリに到達することがないため、このリードリクエストへの応答が返ってくれば、先に発行したメモリライトリクエストに係る書込みデータはバッファを通り抜けて最終的なメモリに書き込まれていることが保証できる。
ところで、1本のパスで実現できる転送帯域は限られるので、帯域を確保するために複数のネットワークパスを張ることがある。複数のメモリ間データ転送を効率良く行うためには、このネットワークパスを偏りなく利用することが必要である。偏りをなくし均一的にパスを利用する方法としては、従来からネットワークパス上で負荷分散する技術が議論されてきた。
例えば、特許文献1には、転送するパケットのハッシュ値を計算し、そのハッシュ値に応じて経路を選択する方法が開示されている。この方法に依れば、複数のパスに負荷分散してパケットを送ることができるので、効率的にネットワーク転送することが可能となる。
しかしながら、この方法をPCI Express等のバスで接続した単位コントローラ間でメモリ間データ転送を行うストレージ装置およびこれに類するデータ転送システムに適用する場合にはいくつかの課題が生じる。
第1の課題は、先に述べたダミーリードの問題である。PCI Express等のバスでは、同一経路においてノンポステッドアクセスはポステッドアクセスを追い抜かないことが保証されているものの、異なる経路を通った場合には、先に送信されたポステッドアクセスよりも先に、ノンポステッドアクセスが最終的なメモリに到達することがあり得る。ダミーリードは先のライトリクエストを追い抜かないことを利用して書込み確定を確認することが目的であるから、ライトリクエストと同一経路を通じて発行する必要がある。しかしながら、特許文献1に記載の方法は、パケットのハッシュ値によってパスを振り分けてしまうため、両者のリクエストパケットは同じ経路を通るとは限らないという問題がある。両者のパケットは明らかにそのフォーマットが異なるから同一ハッシュ値になる可能性は極めて低い。そもそもライトリクエストが発行された場合に、ダミーリードを発行するという仕組み自体が存在しない。また、特許文献1は、変形例として、ハッシュ値ではなく、あらかじめ定めた他の識別子を用いても良いとしているが、どのライトパケットに対するダミーリードパケットなのか、当該ライトパケットがどの経路を通ったのか記憶テーブルを設けて記憶しなければならない。メモリ間データ転送で流れるパケットは秒間数十万〜数百万個と膨大であり、そもそも探索するだけでも時間がかかってしまう。また、このような処理は、そもそも特許文献1が解決しようとする負荷分散とは、目的を異にするものである。
第2の課題は、宛先メモリのアクセスの集中度合いによって転送時間が大きく左右されてしまう点である。特許文献1は、複数のパス(経路)で負荷分散するものの宛先は単一の装置であり、データ転送はネットワークを通じてなされることのみを想定していると考えられる。このことは、経路そのものの混み具合(データバッファの利用状況)を管理することで負荷分散する方法を開示していることからも明らかである。一方、本ストレージ装置の場合、あるメモリへのアクセスは必ずしもネットワークパスを通過したものばかりでなく、当該メモリと同一のストレージコントローラ内DMAによるアクセスも競合する。従い、パス(経路)の混み具合のみを管理しても必ずしも有意に負荷分散できない。
第3の課題は、メモリアクセスの混み具合は制御ソフトウェアのメモリの割り当て方(メモリ利用レイアウト)にも起因することである。例えば、メモリチャネル1は比較的アクセスの少ない制御情報エリアを割当て、メモリチャネル2はアクセスが頻繁にくるキャッシュエリアを多く割当てていた場合、パケットを、均等な比率でネットワークパスを通過させたのではメモリチャネル2のアクセスが詰まり、その結果、ネットワークパス通過中の後続するメモリチャネル1のパケットも滞留してしまう。特許文献1に示すような従来のネットワークの負荷分散技術だけでは、この問題は解決できない。
本発明は以上の課題に鑑みて成されたものである。
すなわち、本発明の目的は、複数パスで接続されていても、経路情報を記憶することなく、また、制御ソフトウェアの新たな介在を必要とせずにメモリへの書込みの確定を行うデータ転送装置およびデータ転送方法を提供することである。
すなわち、本発明の目的は、複数パスで接続されていても、経路情報を記憶することなく、また、制御ソフトウェアの新たな介在を必要とせずにメモリへの書込みの確定を行うデータ転送装置およびデータ転送方法を提供することである。
また本発明の他の目的は、ストレージコントローラ内外からの特定メモリへのアクセス集中があっても、パスに偏りを生じさせずに効率良く転送するデータ転送装置およびデータ転送方法を提供することである。
また、本発明の他の目的は、上位の制御ソフトウェアのメモリ利用情報を踏まえた効率的な転送を行うデータ転送装置およびデータ転送方法を提供することである。
本発明では、上記課題の少なくとも1つを解決するために、データの転送元となる第1のメモリの転送元アドレスと、データの転送先となる第2のメモリの転送先アドレスと、データの転送長と、を記憶部から取得する取得部と、前記転送元アドレスに基づき、前記第1のメモリのデータを取得する読み出し部と、前記転送先アドレスに基づき、前記第2のメモリへデータの書き込みを行うメモリコントローラに、前記取得したデータを転送し、転送が終了すると、前記転送したデータの量が前記データの転送長に達しているか否かを判定し、前記判定の結果、前記転送したデータの量が前記データの転送長に達している場合、前記メモリコントローラに読み出し要求を送信する書き込み部とを備えるデータ転送装置を提供する。
本発明によれば、ハードウェアがライトリクエスト発行経路をパケットごとに記憶しなくとも、あるいは制御ソフトウェアが書込み確定のための新たな制御を行わずとも、ライト応答が行われない内部バス技術を用いたネットワークパス上でメモリへの書込み確定を行うことができる。
また、本発明によれば、ネットワークパスを複数有している場合、宛先メモリの混雑状況も踏まえてパス選択することができ、効率的な転送が可能となる。
また、本発明によれば、同じハードウェアでも、その上で動作する制御ソフトウェアの特性に応じて効率的なデータ転送を行うことができる。
本発明を実施するための形態を実施例1、2、および3を用いて説明する。なお、当該実施例からの部分的変更によって実施できる形態は、各実施例内で変形例として記述する。
<実施例1>
本実施形態を図1〜図9を参照して説明する。
図1は本実施形態におけるストレージシステムの構成を示すブロック図である。ストレージ装置10は、複数のドライブ筐体51、52、…とストレージコントローラ筐体50とを含んで構成されている。ストレージ装置10は管理用LAN30を通じて管理端末31に接続されており、装置の設定等はこの管理端末31を通じて実行することが可能である。管理端末31はストレージ装置10の中に含んでいても良い。
本実施形態を図1〜図9を参照して説明する。
図1は本実施形態におけるストレージシステムの構成を示すブロック図である。ストレージ装置10は、複数のドライブ筐体51、52、…とストレージコントローラ筐体50とを含んで構成されている。ストレージ装置10は管理用LAN30を通じて管理端末31に接続されており、装置の設定等はこの管理端末31を通じて実行することが可能である。管理端末31はストレージ装置10の中に含んでいても良い。
また、ストレージ装置10はストレージネットワーク40を通じてホスト計算機20A〜20Cと接続されている。ホスト計算機20A〜20Cには、オペレーティングシステムおよびその上で動作するアプリケーション、または仮想マシンが搭載され、ストレージ装置10に対してI/Oを発行する。
ドライブ筐体51、52、…には複数のディスクドライブD00〜D0N、D10〜D1Nが搭載されている。ディスクドライブD00〜D1NはHDDやSSD、またはこれらに類する最終記憶媒体である。
ディスクドライブD00〜D1Nは、ドライブ筐体51、52に設けられたバックエンド相互接続機構500、バックエンド接続ケーブル510、およびストレージコントローラ筐体50内に設けられたI/Fカード90A,91Bを通じてディスクアレイコントローラ主パッケージ60A,60Bと接続される。バックエンド相互接続機構500は、例えばSAS(Serial Attached SCSI)エクスパンダであり、バックエンド接続ケーブル510は、例えばSASケーブルなどである。また、I/Fカード90A,91Bは、例えばSASプロトコルチップを搭載したHBA(Host Bus Adapter)等である。この接続によって、ストレージコントローラはディスクとの間でデータの送受信を行うことができる。
ストレージコントローラ筐体50には、ディスクアレイコントローラの主パッケージ60A,60Bとこれらを制御するプロセッサを搭載したMP(Micro Processor)パッケージ70A,70B、先述したドライブ接続90A,90B、およびホスト計算機20A〜20Cと接続するためのI/Fカードが設けられている。
MPパッケージ70A,70Bではストレージ制御プログラムが動作しており、ディスクアレイコントローラ主パッケージ60A,60Bに指示を送るために制御線71A〜72Bで接続されている。一方、ディスクアレイ主パッケージ60A,60Bは互いにデータを転送するために複数の内部データ転送パス101,102で接続されている。
なお、本実施形態では各パッケージはA系、B系の2つだけを示したが、3以上のパッケージが設けられ、互いに接続されていても構わないし、あるいは、I/Fカードを通じてストレージコントローラ筐体50同士が結合されていても良い。例えば、I/Fカード80A〜91Bの一部を、PCI Expressストレージコントローラ筐体間接続I/Fカードと交換できるようにしてもよい。また、これらの相互接続が内部データ転送パス101,102のように利用できるようにしても良い。
図2は、本実施形態におけるストレージ装置の理解を助けるために示した外観図である。ストレージコントローラ筐体50は最下段に搭載され、その上にドライブ筐体51〜58が示されている。図に表れていないが、背面には先に示したバックエンド接続ケーブルやストレージネットワーク40を構成するためのケーブルが配線される。
図3は、本実施形態におけるディスクアレイコントローラ主パッケージ60A,60B、およびこれを制御するMPパッケージ70A,70Bの内部の構成と、これらに接続するI/Fカード80A〜91Bの構成を示したブロック図である。
A系、B系は互いに対象な構造であるから、以降では代表してA系を用いて説明する。
A系、B系は互いに対象な構造であるから、以降では代表してA系を用いて説明する。
ディスクアレイコントローラ主パッケージ60Aには、ASIC(Application Specific Integrated Circuit)200A、メモリM0、M1、M2、M3が搭載される。ASIC200Aには様々な機能が搭載され、例えばメモリ間のデータ転送を行うDMA(Direct Memory Access)210A〜212Aが設けられている。メモリM0〜M3はストレージコントローラ50のキャッシュメモリであり、バッテリ等で不揮発化されたDRAM(Dynamic Random Access Memory)等が用いられる。DRAMは、DIMM(Dual Inline Memory Module)として設けられることが多い。またディスクアレイコントローラ主パッケージ60AはASIC200Aを通じてI/Fカード群と接続される。FE(Front-End)I/Fカード80A,81Aはストレージネットワーク40を通じてホストと接続するためのものであり、例えばファイバーチャネルプロトコルチップ等が搭載され、複数のホスト接続ポートを備えている。
一方BE(Back-End)I/Fカード90A,91Aはバックエンド接続ケーブル510を通じてドライブ筐体51,52・・・の各ディスクと接続される。
MPパッケージ70Aには、プロセッサのチップセット75およびプロセッサ760,761、これらプロセッサ上で動くプログラム等が格納されるローカルメモリ770,771が設けられている。プロセッサの種類や世代によっては、ローカルメモリ770,771はチップセット75に接続される形態もあれば、プロセッサ760,761に直接接続される形態もある。また、チップセット75はプロセッサ760,761に内包されても良い。プロセッサ760,761は制御線71A,71Bを通じ主パッケージ60A,60BのASIC200A,200Bに接続され、ハードウェアの制御を行う。制御線71A,71Bに用いられる技術としては例えばPCI Expressなどがある。
一方BE(Back-End)I/Fカード90A,91Aはバックエンド接続ケーブル510を通じてドライブ筐体51,52・・・の各ディスクと接続される。
MPパッケージ70Aには、プロセッサのチップセット75およびプロセッサ760,761、これらプロセッサ上で動くプログラム等が格納されるローカルメモリ770,771が設けられている。プロセッサの種類や世代によっては、ローカルメモリ770,771はチップセット75に接続される形態もあれば、プロセッサ760,761に直接接続される形態もある。また、チップセット75はプロセッサ760,761に内包されても良い。プロセッサ760,761は制御線71A,71Bを通じ主パッケージ60A,60BのASIC200A,200Bに接続され、ハードウェアの制御を行う。制御線71A,71Bに用いられる技術としては例えばPCI Expressなどがある。
図4は、先に述べたASIC200Aおよび200Bの内部の機能ブロックの構成を示したものである。ASIC200A,200B内には先に述べたDMA210,211,212、内部データ転送パス(I-Path: Internal Path)として使われるPCI Expressを制御するPCI Expressコア221,223、および内部データ転送パス101,102用の内部データ転送パスアービタ220,222、メモリコントローラ230,231,232,233、I/F制御ブロック240,241,242,243、プロセッサポート271,272、ルーティングプロセッサ(RP: Routing Processor)260,261、これらを相互接続するスイッチブロック250が存在する。
DMA210〜212(メモリ間データ転送制御部)は、プロセッサから指示を受け、あるメモリアドレスから指定された転送長分だけのデータを他のメモリアドレスにコピーする機能を持った転送制御ブロックである。DMA210〜212は、転送元メモリからデータをリードする読出し部(RX)2101、転送先メモリへデータを書き込む書込み部(TX)2102、および転送パラメータをフェッチし解析するパラメータフェッチ部(PF)2103を含んで構成される。データ転送に係る指示方法および転送処理の起動方法等については後述する。また本実施例ではDMAを3個設けているが、DMAの数は2個以下でも4個以上でも良い。
内部データ転送パス101,102はパッケージを跨いだメモリ間のデータ転送を行うためのネットワークであり、先に述べたようにPCI Expressが用いられる。PCI Expressコア221,223はPCI Expressの基本的な送受信動作を行う制御ブロックであり、PCI Expressバスのハードウェア制御やデータリンク制御、トランザクションプロトコル制御などを行う。内部データ転送パスアービタ220,222は複数の制御ブロックからのPCI Expressネットワークパス利用要求を調停し、所定のルールで使用権限を与えて利用させる仲介制御ブロックである。例えばDMA210とDMA211が同時にデータ転送しようとした場合、最初DMA210に利用権を与えて転送を行わせ、続いてDMA211に利用権を与えて転送を行わせるといった調停処理をする。
メモリコントローラ230〜233はメモリM0〜M3またはM4〜M7が接続され、DMA210〜212や他の制御ブロックからの要求に基づいて、メモリM0,M1,M2,M3およびメモリM4,M5,M6,M7への読み書きを行い、データパケットを送受信する制御ブロックである。また、メモリコントローラ230〜233は、複数の制御ブロックから同時にアクセスされた場合、そのアクセス順序を調停するためのアービタ(ARB)を備える。メモリコントローラ230〜233はメモリチャネルとも呼ばれる。各メモリコントローラ230〜233に接続されるメモリM0〜M7には、固有のメモリアドレス空間が割り当てられる。
I/F制御ブロック240〜243は、先のI/Fカード80A〜81B、90A〜91Bが接続され、これらとデータ転送を行うためのブロックである。プロセッサポート271,272は制御線71A,72A等が接続され、プロセッサ760,761およびASIC200が制御上の情報データの授受を行うほか、プロセッサ760A、761A、760B、761Bが相互に通信するための制御を行うブロックである。
ルーティングプロセッサ260,261は、I/F制御ブロック240〜243を通じてプロトコルチップから受けたコマンドを制御担当するプロセッサ760A〜761Bに振り分け処理を行う制御ブロックである。
ASIC200には、このほかにも様々な制御ブロックが存在してもよい。例えばデータ圧縮やデータ暗号化などハードウェア演算制御ブロックやプロセッサからのメモリアクセス専用コントローラなどが考えられる。
図5は、本実施形態におけるASIC200内のDMA210〜213に対し、プロセッサ760,761が転送指示するための仕組みを模式的に示した図である。なお、以降の説明では、いずれのプロセッサからいずれのDMAを起動する場合でも手順は同じであるため、代表してDMA210、およびプロセッサ760のケースについて説明する。
プロセッサ760は、DMA210を用いて、あるメモリアドレスにあるデータを別のメモリアドレスに転送させたい場合、DMA210に転送指示するためのパラメータ300(転送指示パラメータ)をローカルメモリ770上に構築する。パラメータ300は転送元のメモリアドレス、転送先のメモリアドレス、転送長、その他、から構成されるが詳細は後述する。なお、複数のパラメータ300は連続してローカルメモリ770に書き込まれるものとする。
プロセッサ760は、目的とするデータ転送に必要な数だけパラメータ300を連続してローカルメモリ770に書き込み、DMA210の起動トリガレジスタ2に、先頭のパラメータ300が記憶されたローカルメモリ770の開始アドレスを値としてセットする。例えば図5では、ローカルメモリ770のアドレス1000h番地(16進数)から4つのパラメータ、パラメータ0〜パラメータ3が構築されているので、プロセッサ760はDMA210の起動トリガレジスタ2に値1000hをセットする。
DMA210は当該レジスタ2に値がセットされると、その値に示されたローカルメモリ770のアドレスからパラメータ300を読み出して解析し、パラメータ300に指示されたデータ転送を行う。例えば図5では、起動トリガレジスタ2に値1000h(16進数)がセットされたので、DMA210はローカルメモリ770のアドレス1000h番地からパラメータ300を読み出すように動作する。DMA210の動作の詳細については、後述する。
図6は、本実施形態においてプロセッサ760がDMA210へのデータ転送指示を行うために用いるパラメータ300のフォーマット例を示した図である。パラメータIDフィールド3001には各パラメータ300に設定される固有の番号が指定される。転送元アドレスフィールド3002には転送元となるメモリの開始アドレスが指定される。転送先アドレスフィールド3003には転送先となるメモリの開始アドレスが指定される。転送長フィールド3004には転送するデータのデータ長が指定される。チェイン番号フィールド3005はパラメータ300のグルーピングを指定するフィールドである。チェイン番号フィールド3005は、グルーピングする他のパラメータ300がある場合、1から順に指定され、グルーピングの最後のパラメータ300に0が指定される。すなわち、チェイン番号3005は1から順に増加し、チェイン番号3005が0までのパラメータ群が1つの転送グループと見なされる(チェインがない場合はチェイン番号3005は0である)。DMA210は、チェイン番号3005が0以外の場合、当該パラメータ300の処理で終了せずに、連続して後続パラメータ300群に指示されたデータ転送を実施するチェイン動作を行う。パス番号フィールド3006には複数ある内部データ転送パス101,102のうち何番目のパスを利用するかが指定される。図6では、パス番号フィールド3006は1つとしたが、データ読み込み時、データ書き込み時など、個別に内部データ転送パス101,102を指定できるように複数設けてもよい。なお、図6に示すパラメータ300の構成は一例であり、他の制御に必要な別のフィールドがあっても構わない。
図7は、本実施形態におけるDMA210のデータ転送動作を示すフローチャートである。本図を用いて書込み先メモリ面が切り替わる毎、および一連のデータ転送が終了するごとにその間の書込みを自動的に確定させる本実施形態のDMAの転送動作を説明する。
DMA210はプロセッサ760からの起動指示により動作を開始する。本実施形態ではプロセッサ760からトリガレジスタ2に値が設定されると動作を開始するが、信号線を介した信号送信やメッセージ送信等を契機としてDMA210が起動するようにしてもよい。DMA210のパラメータフェッチ部2103は起動トリガレジスタ2に値が設定されると、設定された値が示すローカルメモリ770のアドレスを参照し、パラメータ300の1つをフェッチして設定内容を解析する(S8000)。例えば転送元アドレスフィールド3002から転送元メモリの開始アドレスを、転送先アドレスフィールド3003から転送先メモリの開始アドレスを、転送長フィールド3004から転送長(総データ転送量)を取得する。なお、DMA210が一旦起動すると、次のパラメータ300のフェッチはバックグラウンドで先読み(プリフェッチ)される(S8005)。
DMA210の読出し部2101はパラメータフェッチ部2103の解析結果に基づいて、転送元アドレスからどのメモリコントローラにアクセスすべきか特定する(S8010)。例えば、図8のようにメモリアドレスが割り振られているとする。転送元アドレスが23000番地だった場合、当該アドレスはメモリM1が持つ20000h〜2FFFFh番地の間にあるので、読出し部2101はメモリM1が接続されたメモリコントローラ231にアクセスすれば良いと判断する。続いて読出し部2101は該当メモリコントローラ231に対して、アクセスするアドレスと読み出すデータ長とを指定したメモリリードリクエストを発行する(S8020)。メモリリードリクエストは、対象メモリコントローラが同一ASIC200内の場合にはメモリコントローラへ直接発行され、対象メモリコントローラが別のASIC200の場合には、内部データ転送パス101,102を通じて発行される。DMA210が1回に転送できる転送長は比較的小さい。このため、パラメータ300で指定された転送長のデータを複数回に分けて転送することがある。パラメータ300で指定された転送長が、DMA210が1回に転送できる転送長よりも大きい場合には、DMA210により転送可能な最大転送長がデータ長として指定される。パラメータ300に指定された転送長が、DMA210が1回に転送できる転送長以下の場合には、パラメータ300で指定された転送長がデータ長としてリードリクエストに指定される。例えばDMA210が1回に転送できる転送長が2048バイトの場合、パラメータに指定された転送長が4096バイトであれば2048バイト、512バイトであれば512バイトが、読み出すデータ長としてリードリクエストに指定されることになる。
メモリコントローラ230〜233はリードリクエストに指定されたアドレスが指定する、リードリクエストに指定された転送長のデータをメモリM0〜M7から読み出し、読み出したデータとともにリードレスポンス(Completion)を読出し部2101に返す。リードレスポンスは同一ASIC200内部のDMA210であれば直接送信され、別ASIC200の場合には内部データ転送パス101,102を通じて送信される。DMA210の読出し部2101は、メモリコントローラ230〜233から読み出されたデータと共にリードレスポンスを受領し(S8030)、受領したデータをDMA210内部のバッファに格納する。
DMA210の書込み部2102は、DMA210内部のバッファにデータが格納されると、パラメータフェッチ部2103の解析結果に基づいて転送先アドレスからどのメモリコントローラ230〜233にアクセスすべきか特定する(S8040)。例えば、図8のようにメモリアドレスが割り振られており、転送先アドレスが51000h番地だった場合、書込み部2102はメモリM4が接続されたメモリコントローラ230にアクセスすれば良いと判断する。
書込み部2102は、2つ目以後のパラメータ300について、上記アクセス先として特定したメモリコントローラと前回のS8040において特定したメモリコントローラとが異なった場合(S8050:Yes)は、前回特定したメモリコントローラに対してダミーのリードリクエストを発行する(S8060)。ダミーのリードリクエストは、例えば転送長が0のメモリリードリクエストなど、先に発行されたメモリライトリクエストを追い抜かないもの(すなわち、先に発行された全てのメモリライトリクエストによるメモリへの書込みが終了した後に処理されるリクエスト)であればよい。ダミーリードリクエストは、ダミーリードリクエストを送信する対象のメモリコントローラが同一ASIC200内の場合にはメモリコントローラへ直接発行され、対象のメモリコントローラが別のASIC200の場合には、内部データ転送パス101,102を通じて転送される。なお、同一ASIC200内でDMA210からメモリコントローラ230〜233までの経路上にデータが滞留する部分(バッファ等)がない場合には、今回のS8040で特定したメモリコントローラが、前回のS8040で特定したメモリコントローラと異なる場合(S8050:Yes)であっても、前回のメモリコントローラが同一ASIC200内であれば、ダミーリードリクエストの発行を省略するよう実装しても構わない。書込み部2102は、ダミーリードリクエストに対するリードレスポンスが返ってくるとエラーがあるかどうか判定する(S8070)。エラーがない場合には(S8070:No)、書込み部2102は、DMA210内部のバッファに格納されたデータと共に新たなアクセス先のメモリコントローラへメモリライトリクエストを発行する(S8080)。
なお、S8050において、アクセス先のメモリコントローラが前回と同じ場合(S8050:No)およびS8000で読み出したパラメータ300が最初のものである場合には、S8060〜S8070の処理を行う必要はなく、S8080のみが実行される。
また、S8070において、メモリリードレスポンスにエラーがあった場合(S8070:Yes)、書込み部2102、読出し部2101、パラメータフェッチ部2103は当該パラメータ300および当該パラメータ300にチェインされている後続パラメータ(すなわち、チェイン番号欄3005に設定されている値が当該パラメータ300から連続してインクリメントされている一連のパラメータ300)についてデータ転送処理を全て中断し(S8300)、エラーに起因した終了のステータスをプロセッサ760,761へ通知する。
また、S8070において、メモリリードレスポンスにエラーがあった場合(S8070:Yes)、書込み部2102、読出し部2101、パラメータフェッチ部2103は当該パラメータ300および当該パラメータ300にチェインされている後続パラメータ(すなわち、チェイン番号欄3005に設定されている値が当該パラメータ300から連続してインクリメントされている一連のパラメータ300)についてデータ転送処理を全て中断し(S8300)、エラーに起因した終了のステータスをプロセッサ760,761へ通知する。
先に述べたとおりDMA210が1回に転送できる転送長は小さいことが多いため、書込み部2102は転送が終わると、前回までの転送量と今回の転送量を累計し、パラメータに指定された転送長に達成しているか判断する(S8090)。指定された転送長に達している場合(S8090:Yes)、書込み部2102は、最後にS8040において特定したメモリコントローラに対してダミーリードリクエストを送信して、これまでのデータのメモリへの書込みを確定する(S8100)。書込み部2102は、ダミーリードリクエストに対するメモリコントローラからのリードレスポンスを受信してエラーの有無を判定し(S8110)、エラーがあればS8300に進んで上述のように転送を中断する。読出し部2101、書込み部2102はパラメータフェッチ部2103へ指定された転送長に達したことを通知し次の指示を待つ。パラメータフェッチ部2103は次のパラメータがチェインされているか判定する(S8120)。次のパラメータがチェインされていない場合(S8120:No)、パラメータフェッチ部2103は転送終了ステータスをプロセッサ760,761に通知し(S8130)、データ転送処理を終了する。
なお、S8090において、累計転送量がパラメータ300に指定された転送長に達していない場合(S8090:No)、書込み部2102および読出し部2101は残転送長を今回転送分減じ(S8200)、また転送元アドレスおよび転送先アドレスを今回転送長分ずらして(S8210)、パラメータ300に指定された転送長に達するまで繰り返す(処理はS8010に戻る)。
また、S8100において、パラメータ300がチェインされていた場合(S8100:Yes)は、引き続いて次のパラメータ300によるデータ転送処理を行う(S8000に戻る)。
以上のようにして、本実施形態のDMA210はデータ転送処理を行う。
以上のようにして、本実施形態のDMA210はデータ転送処理を行う。
なお、実際の制御実装では、パラメータフェッチ部2103、読出し部2101、書込み部2102は同時並行動作しうるので、各処理(S8000〜S8130)は時間的に並行して行われることがある。また本実施形態ではパラメータフェッチ部2103、読出し部2101、書込み部2102の3つを設け上記のように役割を分担したが、DMAとして同様の機能を果たせば他の構成でも良い。
図9は、先の図7のDMA転送制御を含め、本実施形態におけるメモリ間データ転送制御の全体像を示すラダーチャートである。図の縦方向は時間の経過を示し、図の横方向は各資源間の制御およびデータの流れを示す。各資源はローカルメモリ770,771、プロセッサ760,761、メモリM0〜M7、DMA210〜213であるが、同一資源であれば動作は同じ為、番号は省略する。なお、メモリ#xは転送元のメモリを、メモリ#0およびメモリ#1は転送先のメモリを示しており、それぞれはM0〜M7が接続されたメモリコントローラ230〜233の中の任意の1つであり、転送元と転送先が重複しても良い。本図を用いて、データ転送制御の全体像を説明する。
プロセッサ760,761は図6に示したパラメータフォーマットに基づき、図5に示した方法でローカルメモリ上にパラメータ300群を作成する(R7000)。プロセッサ760,761は引き続いてDMAのパラメータ300を作成したローカルメモリのアドレスをトリガレジスタ2に設定することにより、DMAを起動するトリガをかける(R7100)。DMAはトリガレジスタ2を参照してローカルメモリからパラメータ300群の最初のパラメータ300をフェッチする(R7200)する。また、バックグラウンドタスクとして適切なタイミングにて次のパラメータ300をプリフェッチする(R7210)。DMAはパラメータ300を解析し、その結果に基づいて、メモリ#nからデータを読み出すと共に(R7300〜R73xx)、並行してメモリ#1にデータを書き込む(R7400〜R74xx)。書込み先メモリ面がメモリ#0からメモリ#1に切り替わる場合、DMAはそれまでの書込みを確定させるためのダミーのリードリクエストを発行する(R7500)。そして引き続きデータリードを行いながら(R7600〜R76xx)、メモリ#1へのデータの書込みを継続する(R7700〜R77xx)。パラメータ300に指定された転送長分のデータ転送が終了すると、最終メモリ面にダミーのリードリクエストを発行して書込みの確定処理を行う(R7800)。後続するパラメータ300がチェインされていない(次のパラメータ300のチェイン番号3005が0である)場合には、転送ステータスを、ローカルメモリを通じてプロセッサ760,761に返送する(R7900)。
(本実施例1の効果)
本実施例1によれば、同じメモリコントローラ230〜233へのライトリクエストについては、書込みを確定させずに連続して送信し、書込み先が異なるメモリコントローラ230〜233にライトリクエストを送信する場合には、先のメモリコントローラ230〜233に対してダミーリードリクエストを送信することができる。同一のメモリコントローラ230〜233に対するリクエストは同一の経路を通って送信されるので、ポステッドアクセスによるライトリクエストの後に、ノンポステッドアクセスによるダミーリードリクエストを送信することにより、先に発行されたライトリクエストに係るデータの書込みを確定することができる。したがって、内部データ転送パス101,102において、書き込みの完了応答がなされないプロトコルを用いている場合にも、ライトリクエストの発行経路をパケットごとに記憶することなく、メモリへの書込みを確定することができる。加えて、パケット毎の経路記憶領域が不要となり実装の小型化を図ることができる。また、本実施形態ではDMA210〜212が、書込み先のメモリM0〜M7が切り替わるタイミングおよび書込みが終了するタイミングにおいて自動的にダミーリードリクエストを送信することができるので、管理端末31やホスト計算機20において実行される制御ソフトウェアなどによりダミーリードリクエストを発行する等の追加の処理を行う必要がないため、システム全体として性能の高速化を図る事ができる。
本実施例1によれば、同じメモリコントローラ230〜233へのライトリクエストについては、書込みを確定させずに連続して送信し、書込み先が異なるメモリコントローラ230〜233にライトリクエストを送信する場合には、先のメモリコントローラ230〜233に対してダミーリードリクエストを送信することができる。同一のメモリコントローラ230〜233に対するリクエストは同一の経路を通って送信されるので、ポステッドアクセスによるライトリクエストの後に、ノンポステッドアクセスによるダミーリードリクエストを送信することにより、先に発行されたライトリクエストに係るデータの書込みを確定することができる。したがって、内部データ転送パス101,102において、書き込みの完了応答がなされないプロトコルを用いている場合にも、ライトリクエストの発行経路をパケットごとに記憶することなく、メモリへの書込みを確定することができる。加えて、パケット毎の経路記憶領域が不要となり実装の小型化を図ることができる。また、本実施形態ではDMA210〜212が、書込み先のメモリM0〜M7が切り替わるタイミングおよび書込みが終了するタイミングにおいて自動的にダミーリードリクエストを送信することができるので、管理端末31やホスト計算機20において実行される制御ソフトウェアなどによりダミーリードリクエストを発行する等の追加の処理を行う必要がないため、システム全体として性能の高速化を図る事ができる。
(本実施例1の変形例1)
本実施形態では書込みの確定を行うため、メモリM0〜M7に対するダミーのリードリクエストを発行したが、代わりにメモリコントローラ230〜233のレジスタに対するリードリクエストを発行するように変形しても良い。なお、レジスタに対するリードリクエストもノンポステッドアクセスであるものとする。本変形例の場合、書込みを確定するためにメモリM0〜M7にアクセスしないため、より高速に書込みの確定を行うことが可能となり、メモリ利用効率を向上させるという追加の効果がある。また、上記メモリコントローラ230〜233のレジスタには、ライトリクエストの個数を記録する機能を持たせてもよい。この場合、DMA210〜212はレジスタからリードした値と発行したライトリクエストの数との差を比較することによって転送の正常/異常を判定することができる。したがって、より書込み確定の信頼性を高めることができるという追加の効果がある。前記レジスタはDMAやその他のメモリへアクセスを行う資源ごとに設けても良いし、アクセスエリアごとに設けても良い。また、メモリコントローラ230〜233がライトリクエスト以外にもリードリクエストの数やその他の統計情報を保持するレジスタを備えていても良い。
本実施形態では書込みの確定を行うため、メモリM0〜M7に対するダミーのリードリクエストを発行したが、代わりにメモリコントローラ230〜233のレジスタに対するリードリクエストを発行するように変形しても良い。なお、レジスタに対するリードリクエストもノンポステッドアクセスであるものとする。本変形例の場合、書込みを確定するためにメモリM0〜M7にアクセスしないため、より高速に書込みの確定を行うことが可能となり、メモリ利用効率を向上させるという追加の効果がある。また、上記メモリコントローラ230〜233のレジスタには、ライトリクエストの個数を記録する機能を持たせてもよい。この場合、DMA210〜212はレジスタからリードした値と発行したライトリクエストの数との差を比較することによって転送の正常/異常を判定することができる。したがって、より書込み確定の信頼性を高めることができるという追加の効果がある。前記レジスタはDMAやその他のメモリへアクセスを行う資源ごとに設けても良いし、アクセスエリアごとに設けても良い。また、メモリコントローラ230〜233がライトリクエスト以外にもリードリクエストの数やその他の統計情報を保持するレジスタを備えていても良い。
(本実施例1の変形例2)
本実施形態ではメモリへの書込みの確定を行うため、ダミーリードリクエスト(ノンポステッドアクセス)を発行したが、この代わりに、先行するライトリクエストを追い抜かないポステッドアクセスの専用命令(書込み確認要求)を定義して発行するように変形しても良い。例えば、図10のようなフォーマットのTLP(Transaction Layer Packet)を書込み確認要求として定義し、この書込み確認要求を送信すると、メモリコントローラ230〜233はバッファ中のデータをメモリへフラッシュし、非同期で図11のようなポステッドアクセスによる応答(書込み確認応答)を返すようにする。この場合のシーケンスは図12のようになる。本変形例の場合、ノンポステッドアクセスと異なりDMA210〜212は、応答データ(リードレスポンス)受信用のバッファを確保して待つ必要がなくなる。これにより、動作の並列性が高まり性能改善する事ができるという追加の効果がある。なお、通常のPCI Expressでは未定義のリクエスト(TLP)は破棄されてしまうため、上記のリクエストや応答を受理するようにPCIコア221,223に前記定義を実装する。
本実施形態ではメモリへの書込みの確定を行うため、ダミーリードリクエスト(ノンポステッドアクセス)を発行したが、この代わりに、先行するライトリクエストを追い抜かないポステッドアクセスの専用命令(書込み確認要求)を定義して発行するように変形しても良い。例えば、図10のようなフォーマットのTLP(Transaction Layer Packet)を書込み確認要求として定義し、この書込み確認要求を送信すると、メモリコントローラ230〜233はバッファ中のデータをメモリへフラッシュし、非同期で図11のようなポステッドアクセスによる応答(書込み確認応答)を返すようにする。この場合のシーケンスは図12のようになる。本変形例の場合、ノンポステッドアクセスと異なりDMA210〜212は、応答データ(リードレスポンス)受信用のバッファを確保して待つ必要がなくなる。これにより、動作の並列性が高まり性能改善する事ができるという追加の効果がある。なお、通常のPCI Expressでは未定義のリクエスト(TLP)は破棄されてしまうため、上記のリクエストや応答を受理するようにPCIコア221,223に前記定義を実装する。
(本実施例1の変形例3)
本実施形態ではメモリへの書込みの確定を行うため、メモリへダミーのリードリクエストを発行したが、ASIC200内の実装および内部データ転送パス101,102の経路上に、書込み確定要求のための専用信号線を設けてもよい。図13はこの実装例を示したものである。DMA210〜212は、書込みの確定が必要になると、信号コントローラ280に、書込み確定の必要なメモリコントローラ230〜233に信号を送るよう指示する。信号は例えば、DMA210〜212からの書込み転送数等の情報を含むものであり、メモリコントローラ230〜233は要求された転送数が到着すると、確定完了信号を返すようにする。DMA210〜212は信号コントローラ280を通じて書込みが確定したことを確認することができる。本変形例の場合、書込み確定用のリクエストおよび応答がデータ転送経路を通らないので、データ転送への影響がなくなり転送効率が改善するという追加の効果がある。
本実施形態ではメモリへの書込みの確定を行うため、メモリへダミーのリードリクエストを発行したが、ASIC200内の実装および内部データ転送パス101,102の経路上に、書込み確定要求のための専用信号線を設けてもよい。図13はこの実装例を示したものである。DMA210〜212は、書込みの確定が必要になると、信号コントローラ280に、書込み確定の必要なメモリコントローラ230〜233に信号を送るよう指示する。信号は例えば、DMA210〜212からの書込み転送数等の情報を含むものであり、メモリコントローラ230〜233は要求された転送数が到着すると、確定完了信号を返すようにする。DMA210〜212は信号コントローラ280を通じて書込みが確定したことを確認することができる。本変形例の場合、書込み確定用のリクエストおよび応答がデータ転送経路を通らないので、データ転送への影響がなくなり転送効率が改善するという追加の効果がある。
(本実施例1の変形例4)
本実施形態では書込みの確定をメモリコントローラ230〜233が切り替わる点を契機として実行したが、メモリコントローラ230〜233ではなく、その先に実装されるDIMM単位としても良い。この場合、メモリコントローラ230〜233ごとのアドレス範囲の代わりにDIMMごとのアドレス範囲を管理し、図7のS8050にてアクセス先のDIMMが前回と異なるか否かを判定するように変更すれば実現可能である。また通常DIMMは、複数のメモリチップで構成され、バンクという単位で管理される。従い、同様にして、DIMM内のバンクが切り替わる点を書き込み確定の契機としても良い。この場合、バンクごとのアドレス範囲を管理することとなる。
本実施形態では書込みの確定をメモリコントローラ230〜233が切り替わる点を契機として実行したが、メモリコントローラ230〜233ではなく、その先に実装されるDIMM単位としても良い。この場合、メモリコントローラ230〜233ごとのアドレス範囲の代わりにDIMMごとのアドレス範囲を管理し、図7のS8050にてアクセス先のDIMMが前回と異なるか否かを判定するように変更すれば実現可能である。また通常DIMMは、複数のメモリチップで構成され、バンクという単位で管理される。従い、同様にして、DIMM内のバンクが切り替わる点を書き込み確定の契機としても良い。この場合、バンクごとのアドレス範囲を管理することとなる。
(本実施例1の変形例5)
本実施形態では、メモリ面が切り替わるのを契機に書込みの確定処理を行うようにしたが、メモリ面が切り替わる前にも一定転送回数毎に定期的に行うようにしてもよい。本変形例の場合、非常に大きな転送長のデータを書き込む際、定期的に書込みを確定させることができるので、データの書込みの確実性を向上させることができるほか、細かく書込み確定処理を行うので、エラー発生時のリカバリ処理が容易になるといった追加の効果がある。また、転送パラメータ300にてプロセッサ760,761が明示的に書込み確定処理の必要性の有無や頻度を指定できるようにしても良い。あるいは、DMA210〜212の起動トリガレジスタを2種設け、一方のトリガレジスタによって起動された場合には書込み確定処理付きで動作し、他方のトリガレジスタによって起動された場合には書込み確定処理を行わないようにしてもよい。この場合、不要な書込み確定動作を削減させることができるので処理性能を向上させるといった追加の効果がある。
本実施形態では、メモリ面が切り替わるのを契機に書込みの確定処理を行うようにしたが、メモリ面が切り替わる前にも一定転送回数毎に定期的に行うようにしてもよい。本変形例の場合、非常に大きな転送長のデータを書き込む際、定期的に書込みを確定させることができるので、データの書込みの確実性を向上させることができるほか、細かく書込み確定処理を行うので、エラー発生時のリカバリ処理が容易になるといった追加の効果がある。また、転送パラメータ300にてプロセッサ760,761が明示的に書込み確定処理の必要性の有無や頻度を指定できるようにしても良い。あるいは、DMA210〜212の起動トリガレジスタを2種設け、一方のトリガレジスタによって起動された場合には書込み確定処理付きで動作し、他方のトリガレジスタによって起動された場合には書込み確定処理を行わないようにしてもよい。この場合、不要な書込み確定動作を削減させることができるので処理性能を向上させるといった追加の効果がある。
(本実施例1の変形例6)
本実施形態では、DMA210〜212はパラメータ300をリードし、その指示によってメモリ間のデータ転送を実行するが、バッファまたはレジスタに書かれた小データを、ライト確定処理を実行しつつメモリに転送するための別のDMAを設けても良い。また、レジスタのサイズおよびアドレスからデータの転送長および転送元アドレスを知ることができるので、パラメータ300の構築を省略し、転送先アドレスをトリガレジスタにセットするように変形しても良い。更に、データ転送が正常終了の場合には、転送終了通知の送信を省略してもよい。本変形例の場合、データ転送におけるパラメータ作成や転送ステータスチェックのオーバーヘッドを削減できるので、小データ単位でのデータ転送においても処理性能を向上させる追加の効果がある。
なお上記の変形例1〜6は、必要に応じて組み合わせても構わない。
本実施形態では、DMA210〜212はパラメータ300をリードし、その指示によってメモリ間のデータ転送を実行するが、バッファまたはレジスタに書かれた小データを、ライト確定処理を実行しつつメモリに転送するための別のDMAを設けても良い。また、レジスタのサイズおよびアドレスからデータの転送長および転送元アドレスを知ることができるので、パラメータ300の構築を省略し、転送先アドレスをトリガレジスタにセットするように変形しても良い。更に、データ転送が正常終了の場合には、転送終了通知の送信を省略してもよい。本変形例の場合、データ転送におけるパラメータ作成や転送ステータスチェックのオーバーヘッドを削減できるので、小データ単位でのデータ転送においても処理性能を向上させる追加の効果がある。
なお上記の変形例1〜6は、必要に応じて組み合わせても構わない。
<実施例2>
実施例2を図14〜図15を参照して説明する。
実施例2における装置の基本構成は図1に示すストレージ装置であり、ストレージコントローラの構成も図3と同じだが、ASIC200が備える機能が異なる。以降の説明では主に実施例1と異なる部分を説明し、同様の部分については説明を割愛する。なお、ASIC200A,ASIC200Bとも構成は同一であるため、以降の説明では末尾のアルファベット符号は省略する。
実施例2を図14〜図15を参照して説明する。
実施例2における装置の基本構成は図1に示すストレージ装置であり、ストレージコントローラの構成も図3と同じだが、ASIC200が備える機能が異なる。以降の説明では主に実施例1と異なる部分を説明し、同様の部分については説明を割愛する。なお、ASIC200A,ASIC200Bとも構成は同一であるため、以降の説明では末尾のアルファベット符号は省略する。
図14は、実施例2のストレージコントローラにおけるASIC200の機能ブロックを示したものである。ASIC200には、DMA210〜212の状態管理を行うDMAステータスブロック400が設けられている。DMA210〜212には自己の状態管理と他のDMA210〜212の情報を取得するための状態管理部(SM)2104が設けられる。
DMAステータスブロック400は各DMA210〜212の転送状態を示すテーブル401を持つ。テーブル401の詳細は図15を用いて後述する。各DMA210〜212の状態管理部2104は、スイッチブロック250を通じて、このDMAステータスブロック400にアクセスし、自己の情報の記録や、他のDMA210〜212の情報を取得して、パス選択の判断に利用する。
図15は、実施例2のASIC200内のテーブル401の一例を示したものである。テーブル401には、各DMA210〜212の番号(DMA番号)4010、現在の状態4020、転送元のメモリコントローラ番号4030、転送先のメモリコントローラ番号4040、使用中の内部データ転送パス番号4050、リクエスト種別4060などのフィールドがある。
DMA番号4010はASIC200A,200B内のDMA210〜212を識別する番号が格納されるフィールドである。現在の状態4020は、各DMAがデータ転送中(BUSY)なのか、停止中(IDLE)なのかを示すフィールドである。転送元メモリコントローラ番号4030は、DMA210〜212内のパラメータ解析により特定された転送元メモリコントローラ230〜233を識別する番号である。同様に転送先メモリコントローラ番号4040は、DMA210〜212内のパラメータ解析によって特定された転送先メモリコントローラ230〜233を識別する番号である。内部データ転送パス番号4050は、内部データ転送パス101,102を介してデータを転送している場合に使用している内部データ転送パス101,102を識別する番号である。リクエスト種別4060は、読み出し(RX)に使用しているのか、書き込み(TX)に使用しているのか、あるいは両方(TX/RX)に使用しているのかを示す。なお、本実施例では転送先メモリコントローラ番号4040を示すフィールドは1つとしたが、DMAが1つの転送元から同時に複数の転送先に転送する機能を持つ場合、テーブル401はその数に応じた複数の転送先メモリコントローラ番号フィールドを備える。
図16は、本実施形態におけるDMA210がデータ転送動作する際のフローチャート例である。なお、DMA211,212もDMA210と同様の動作を行う。DMA210のパラメータフェッチ部2103は図7に示したのと同様の方法によってパラメータ300を解析し、転送元および転送先メモリコントローラ230〜233を特定する(S8010,S8040)。その結果、もし転送元あるいは転送先のメモリコントローラ230〜233に内部データ転送パス101,102を使ってアクセスする必要がある場合(すなわち、別パッケージのメモリM4〜M7へアクセスする場合)、DMA210の状態管理部2104はDMAステータスブロック400にアクセスし、どの内部データ転送パス101,102を使うべきかを決定する。具体的には、状態管理部2104はテーブル401を参照して、各内部データ転送パス101,102について、リクエスト種別4060ごとのレコードの数を集計する。内部データ転送パス101,102を使ったアクセスが読出しだった場合(すなわち転送元メモリコントローラ230〜233のみが別パッケージのメモリM4〜M7に対応する場合)(S9020:Yes)、状態管理部2104はリクエスト種別4060に「RX」が含まれているレコードの数を内部データ転送パス101,102ごとにカウントする(S9030)。一方、内部データ転送パス101,102を使ったアクセスが書込みだった場合(すなわち転送先メモリコントローラ230〜233のみが別パッケージのメモリM4〜M7に対応する場合)(S9040:Yes)、状態管理部2104は、リクエスト種別4060に「TX」が含まれているレコードの数を内部データ転送パス101,102ごとにカウントする(S9050)。内部データ転送パス101,102を使ったアクセスが読出しと書込みの両方だった場合(すなわち転送元および転送先のメモリコントローラ230〜233の両方が別パッケージのメモリM4〜M7に対応する場合)、状態管理部2104は、レコードの数を内部データ転送パス101,102ごとにカウントする(S9060)。状態管理部2104は、リクエスト種別4060についてカウントしたレコード数が最も小さい内部データ転送パス101,102を選択する(S9070)。そして、状態管理部2104は、利用するメモリコントローラ230〜233や利用する内部データ転送パス番号など自DMA210に対応するレコードの情報を更新する。例えば、自DMA210の番号は「0」で、DMA210と同じパッケージのメモリコントローラ0から別パッケージのメモリコントローラ5へ、内部データ転送パス0(101)を使用してデータ転送する場合、状態管理部2104は、DMA番号4010が「0」のレコードについて、状態4020に「BUSY」、転送元メモリコントローラ番号4030に「0」、転送先メモリコントローラ番号4040に「5」、内部データパス番号4050に「0」、リクエスト種別4060に「TX」をそれぞれ設定する。
パラメータ300に応じたデータの転送が終了すると(図7のS8020〜S8030またはS8050〜S8110)、DMA210の状態管理部2104はテーブル401の状態を再び更新する(S9090)。すなわち自DMA210に対応する状態4020を「IDLE」とし、転送元メモリコントローラ番号4030、転送先メモリコントローラ番号4040、内部データ転送パス番号4050、リクエスト種別4060をクリアする。
(実施例2の効果)
本実施例2によれば、内部データ転送パス101,102が複数ある場合、他の資源(DMA)による内部データ転送パス101,102の利用状況を踏まえて、データの転送に用いる内部データ転送パス101,102を選択することができるようになり、効率的な転送が可能となる。従来よく使われる手法としてネットワークパスの転送バッファ空き状況を見て選択する方法があるが、複数のDMA210〜212がわずかな時間差で空き状況を見た場合、全てのDMA210〜212が同じパスを選択する可能性があり効率的な転送が行えない。本実施例2では、テーブル401を参照したDMA210〜212は選択結果をテーブル401に反映する。次のDMA210〜212は前のDMA210〜212の選択結果も踏まえてデータの転送に用いる内部データ転送パス101,102を決定することができるので、全てのDMA210〜212が同じ内部データ転送パス101,102を選択してしまう可能性が減り、より効率的なパス選択が可能となる。
本実施例2によれば、内部データ転送パス101,102が複数ある場合、他の資源(DMA)による内部データ転送パス101,102の利用状況を踏まえて、データの転送に用いる内部データ転送パス101,102を選択することができるようになり、効率的な転送が可能となる。従来よく使われる手法としてネットワークパスの転送バッファ空き状況を見て選択する方法があるが、複数のDMA210〜212がわずかな時間差で空き状況を見た場合、全てのDMA210〜212が同じパスを選択する可能性があり効率的な転送が行えない。本実施例2では、テーブル401を参照したDMA210〜212は選択結果をテーブル401に反映する。次のDMA210〜212は前のDMA210〜212の選択結果も踏まえてデータの転送に用いる内部データ転送パス101,102を決定することができるので、全てのDMA210〜212が同じ内部データ転送パス101,102を選択してしまう可能性が減り、より効率的なパス選択が可能となる。
(実施例2における変形例1)
本実施例2では個々のDMA210〜212が他のDMA210〜212の情報を見てパス選択につき判定していたが、ステータスブロック400に判定論理を設け、DMA210〜212がステータスブロック400に問い合わせるようにしても良い。この場合、ステータスブロック400にはパス選択部を設け、DMA210〜212が転送元および転送先のメモリコントローラ230〜233を含むリクエストをパス選択部に送信し、パス選択部は、このリクエストに応じて、図16のS9000〜S9070の処理を行い、選択した内部データ転送パス101,102を応答する。本変形例1の場合、パス選択論理を一箇所に集約できるので実装効率が向上する可能性があるほか、テーブル401のレコードの更新タイミングをステータスブロック400で調整できるので、データ読取り中の書込みなどによる情報不正合を防止しやすくなるという追加の効果がある。
本実施例2では個々のDMA210〜212が他のDMA210〜212の情報を見てパス選択につき判定していたが、ステータスブロック400に判定論理を設け、DMA210〜212がステータスブロック400に問い合わせるようにしても良い。この場合、ステータスブロック400にはパス選択部を設け、DMA210〜212が転送元および転送先のメモリコントローラ230〜233を含むリクエストをパス選択部に送信し、パス選択部は、このリクエストに応じて、図16のS9000〜S9070の処理を行い、選択した内部データ転送パス101,102を応答する。本変形例1の場合、パス選択論理を一箇所に集約できるので実装効率が向上する可能性があるほか、テーブル401のレコードの更新タイミングをステータスブロック400で調整できるので、データ読取り中の書込みなどによる情報不正合を防止しやすくなるという追加の効果がある。
(実施例2における変形例2)
本実施例2では各DMA210〜212による内部データ転送パス101,102の選択状況を見てパス選択につき判断するようにしたが、これに加え内部データ転送パス101,102のバッファの空き状況やPCI Expressの転送クレジット残数などを加味して判断するようにしても良い。例えば内部データ転送パス0(101)の利用は少ないが対応バッファに空きがない場合、内部データ転送パス1(102)を選択するといった判断が可能になる。一例としては、内部データ転送パスアービタ220,222に、内部データ転送パス101,102で使用されているバッファ量をモニタする機能や、PCI Expressコア221,223に転送クレジット残数をモニタする機能を加えることで実現が可能となる。本変形例2では、ステータスブロック400には、転送クレジット残数などを記憶する図17に示すようなテーブル402を記憶しておくようにする。図17の例では、ヘッダやデータなどのより詳細なバッファのクレジット、すなわちポステッドヘッダバッファのクレジット(PH_CREDITS; Posted Header buffer CREDITS)や、ポステッドデータバッファのクレジット(PD_CREDITS; Posted Data buffer CREDITS)、ノンポステッドヘッダバッファのクレジット(NPH_CREDITS: Non-Posted Header buffer CREDITS)、ノンポステッドデータバッファのクレジット(NPD_CREDITS; Non-Posted Data buffer CREDITS)、完了応答ヘッダバッファのクレジット(CPLH_CREDITS; ComPLetion Header buffer CREDITS)、および完了応答データバッファのクレジット(CPLD_CREDITS; ComPLetion Data buffer CREDITS)を記憶するようにしている。メモリライトリクエストのようなポステッドアクセスの場合には、PH_CREDITSやPD_CREDITSの残数を、メモリリードリクエストのようなノンポステッドアクセスの場合には、NPH_CREDITSやNPD_CREDITSの残数を比較することで参照すればよい。本変形例の場合、内部データ転送パス101,102の混雑状況を加味できるのでより精度の高いパス選択が可能となる追加の効果がある。
本実施例2では各DMA210〜212による内部データ転送パス101,102の選択状況を見てパス選択につき判断するようにしたが、これに加え内部データ転送パス101,102のバッファの空き状況やPCI Expressの転送クレジット残数などを加味して判断するようにしても良い。例えば内部データ転送パス0(101)の利用は少ないが対応バッファに空きがない場合、内部データ転送パス1(102)を選択するといった判断が可能になる。一例としては、内部データ転送パスアービタ220,222に、内部データ転送パス101,102で使用されているバッファ量をモニタする機能や、PCI Expressコア221,223に転送クレジット残数をモニタする機能を加えることで実現が可能となる。本変形例2では、ステータスブロック400には、転送クレジット残数などを記憶する図17に示すようなテーブル402を記憶しておくようにする。図17の例では、ヘッダやデータなどのより詳細なバッファのクレジット、すなわちポステッドヘッダバッファのクレジット(PH_CREDITS; Posted Header buffer CREDITS)や、ポステッドデータバッファのクレジット(PD_CREDITS; Posted Data buffer CREDITS)、ノンポステッドヘッダバッファのクレジット(NPH_CREDITS: Non-Posted Header buffer CREDITS)、ノンポステッドデータバッファのクレジット(NPD_CREDITS; Non-Posted Data buffer CREDITS)、完了応答ヘッダバッファのクレジット(CPLH_CREDITS; ComPLetion Header buffer CREDITS)、および完了応答データバッファのクレジット(CPLD_CREDITS; ComPLetion Data buffer CREDITS)を記憶するようにしている。メモリライトリクエストのようなポステッドアクセスの場合には、PH_CREDITSやPD_CREDITSの残数を、メモリリードリクエストのようなノンポステッドアクセスの場合には、NPH_CREDITSやNPD_CREDITSの残数を比較することで参照すればよい。本変形例の場合、内部データ転送パス101,102の混雑状況を加味できるのでより精度の高いパス選択が可能となる追加の効果がある。
(実施例2における変形例3)
本実施例2では各DMA210〜212による内部データ転送パス101,102の選択状況を見て判断するようにしたが、これに加えテーブル401の転送元/転送先メモリコントローラ番号4030,4040の利用状況を加味して判断するようにしても良い。内部データ転送パス101,102を通じてメモリコントローラ231にアクセスすることを想定する。例えば、内部データ転送パス0(101)の方がDMAの数が少ないが、アクセス先がみな同じメモリコントローラ230だった場合、当該メモリコントローラ230のバッファがあふれ、内部データ転送パス0上にある後続のパケットが滞留している可能性がある。そこで選択しているDMAの数が多くても内部データ転送パス1(102)を選択する、といったケースが考えられる。本変形例3では、状態管理部2104は、各内部データ転送パス101,102について、例えば宛先メモリコントローラを231とするDMAに限定し、S9030,S9050,S9060に示すカウントを行うことで実現できる。本変形例3の場合、内部データ転送パス101,102の混雑状況に加え、アクセス先のメモリコントローラ230〜233の混雑状況を加味できるのでより精度の高いパス選択が可能となる追加の効果がある。
本実施例2では各DMA210〜212による内部データ転送パス101,102の選択状況を見て判断するようにしたが、これに加えテーブル401の転送元/転送先メモリコントローラ番号4030,4040の利用状況を加味して判断するようにしても良い。内部データ転送パス101,102を通じてメモリコントローラ231にアクセスすることを想定する。例えば、内部データ転送パス0(101)の方がDMAの数が少ないが、アクセス先がみな同じメモリコントローラ230だった場合、当該メモリコントローラ230のバッファがあふれ、内部データ転送パス0上にある後続のパケットが滞留している可能性がある。そこで選択しているDMAの数が多くても内部データ転送パス1(102)を選択する、といったケースが考えられる。本変形例3では、状態管理部2104は、各内部データ転送パス101,102について、例えば宛先メモリコントローラを231とするDMAに限定し、S9030,S9050,S9060に示すカウントを行うことで実現できる。本変形例3の場合、内部データ転送パス101,102の混雑状況に加え、アクセス先のメモリコントローラ230〜233の混雑状況を加味できるのでより精度の高いパス選択が可能となる追加の効果がある。
(実施例2における変形例4)
本実施例2では各DMA210〜212による内部データ転送パス101,102の選択状況を見て判断するようにしたが、これに加え、転送長や、転送ブロック数、あるいは、残転送ブロック数などのより詳細な情報をテーブル401に加え、判断に利用しても良い。本変形例の場合、パス選択する上での精度を高めることができ、より効率的な判断が可能となる追加の効果がある。
本実施例2では各DMA210〜212による内部データ転送パス101,102の選択状況を見て判断するようにしたが、これに加え、転送長や、転送ブロック数、あるいは、残転送ブロック数などのより詳細な情報をテーブル401に加え、判断に利用しても良い。本変形例の場合、パス選択する上での精度を高めることができ、より効率的な判断が可能となる追加の効果がある。
なお上記の実施例2の変形例1〜4は、必要に応じて組み合わせても構わない。
<実施例3>
実施例3を図18〜図20を参照して説明する。
実施例3における装置の基本構成は図1に示すストレージ装置であり、ストレージコントローラの構成も図3に同じであるが、プロセッサ760,761がDMA210〜212の転送指示に使うパラメータ300のフォーマット、およびプロセッサ760,761がASIC200にメモリM0〜M7の利用レイアウト情報を通知/設定できる点が異なる。以降の説明では主に先の実施例1、2と異なる部分のみ説明し、同様の部分については説明を割愛する。
図18は実施例3におけるプロセッサ760,761がDMA210〜212への転送指示を行うために作成するパラメータ300のフォーマットの一例である。本実施例3のパラメータ300には、先の実施例のパラメータ300が備えるフィールド3001〜3006に加え、当該転送のI/Oの種別や処理の優先度を指定するフィールド(I/O種別)3007がある。I/O種別フィールド3007は8ビットのフィールドで、上位4ビットがI/Oの種別、下位4ビットが優先度を示す。例えばI/Oの種別としては、ホストからのランダムなI/Oは1000b(2進数)、ホストからのシーケンシャルなI/Oは0100b、ストレージが備えるボリューム間の同期機能などの転送は0110bないし0111bなど種別毎に設定するものとする。一方、優先度は、最優先の転送は1000b、最低で良いものは0001bなどであり、プロセッサ760,761はパラメータ300を作成する際、これらの組合せによって値を指定する。
実施例3を図18〜図20を参照して説明する。
実施例3における装置の基本構成は図1に示すストレージ装置であり、ストレージコントローラの構成も図3に同じであるが、プロセッサ760,761がDMA210〜212の転送指示に使うパラメータ300のフォーマット、およびプロセッサ760,761がASIC200にメモリM0〜M7の利用レイアウト情報を通知/設定できる点が異なる。以降の説明では主に先の実施例1、2と異なる部分のみ説明し、同様の部分については説明を割愛する。
図18は実施例3におけるプロセッサ760,761がDMA210〜212への転送指示を行うために作成するパラメータ300のフォーマットの一例である。本実施例3のパラメータ300には、先の実施例のパラメータ300が備えるフィールド3001〜3006に加え、当該転送のI/Oの種別や処理の優先度を指定するフィールド(I/O種別)3007がある。I/O種別フィールド3007は8ビットのフィールドで、上位4ビットがI/Oの種別、下位4ビットが優先度を示す。例えばI/Oの種別としては、ホストからのランダムなI/Oは1000b(2進数)、ホストからのシーケンシャルなI/Oは0100b、ストレージが備えるボリューム間の同期機能などの転送は0110bないし0111bなど種別毎に設定するものとする。一方、優先度は、最優先の転送は1000b、最低で良いものは0001bなどであり、プロセッサ760,761はパラメータ300を作成する際、これらの組合せによって値を指定する。
図19は本実施例3におけるメモリレイアウト情報設定テーブル800である。このテーブルはASIC200内の内部データ転送パスアービタ220,222用の設定レジスタに設けられる。なお、このメモリレイアウト情報設定テーブル800の情報は、内部データ転送パスアービタ220,222が利用できれば良く、同等の効果が得られるのであれば別の場所に配してもよい。例えばローカルメモリ770,771やメモリM0〜M7などにメモリレイアウト情報設定テーブル800を配置することもできる。
メモリレイアウト情報設定テーブル800には、DMA210〜212がメモリ転送に利用するメモリ範囲を指定する。一般にメモリM0〜M7の全領域がストレージのキャシュメモリ領域として利用できるわけではなく、メモリM0〜M7の一部はプロトコルチップの制御情報格納エリアや、プロセッサ760,761のキャッシュ管理情報格納エリア等して利用される。そこで、それ以外の領域をこのテーブル800で指定することで、ASIC200、特に内部データ転送パス101,102のデータ通過を制御する内部データ転送パスアービタ220,222にどのメモリコントローラ230〜233へのアクセスが多く発生するか知らせることができる。
メモリレイアウト情報テーブル800の構成について説明する。メモリ番号フィールド8010には、メモリ面の番号が記録される。本実施例3では、メモリ番号8010はメモリM0〜M7である。開始アドレスフィールド8020はDMA210〜212によるアクセス有効範囲の開始アドレスである。終了アドレスフィールド8030はDMA210〜212によるアクセス有効範囲の終了アドレスである。比率フィールド8040は、ASIC200が各メモリコントローラ230〜233にアクセスする回数比率を設定するフィールドである。比率は、プロセッサ760,761から指定されたアドレス範囲の広さに応じた値となる。本実施例3では、あるアドレス空間を単位に、その空間がいくつ存在するかで示している。図19の例では、アドレス空間1000h(0000h番地〜0FFFh番地)を単位としており、メモリM2およびメモリM3がともに10000hの空間を提供しているので(16)、メモリM0が5000hの空間を提供していることから5となっている。カウンタフィールド8050はアービタが調停比率の変更を管理するために用いる動作カウンタであり、初期値は比率フィールド8040と同じ値が設定される。
図20は、本実施形態におけるDMA210と内部データ転送パスアービタ220とのデータのやり取りを模式的に示した図である。DMA210〜213および内部データ転送パスアービタ220,221間のデータのやり取りはいずれも同じであるから、ここではDMA210と内部データ転送パスアービタ220とを用いて説明する。DMA210と内部データ転送パスアービタ220との間には、DMA210から内部データ転送パスアービタ220へパス利用権を要求するREQ信号線601、要求時にアクセス先メモリコントローラ番号を伝えるREQ_MEM_NO信号線602、内部データ転送パスアービタ220からDMA210へパス利用権の許可を伝えるACT信号線603、および両者のデータの送受信や同期のための信号、エラーステータス信号等を通信するための各種信号線60nが設けられている。内部データ転送パスアービタ220はこれらの信号線群を用いて、スイッチブロック250を介してパスを利用する同コントローラ内ASIC200の全てのDMA210〜213やその他資源と通信することができる。
図21は本実施形態における内部データ転送パスアービタ220,222の動作を示したフローチャートである。以降では内部データ転送パスアービタは単にアービタと称する。また、アービタ220とアービタ222とは同じ動作を行うので、ここではアービタ220についてのみ説明する。
DMA210〜212は先の図5と同様の手順によって起動されると、図7の手順と同様にしてパラメータ300の解析を行いアクセス先メモリコントローラ230〜233を特定する。アクセス先メモリコントローラ230〜233に内部データ転送パス101,102を通じてアクセスする場合、DMA210〜212はアクセス先メモリコントローラ番号を示す信号と共にパス利用権を取得するための要求信号をREQ信号線601およびREQ_MEM_NO信号線602を通じてアービタ220に発行する。
アービタ220はDMA210〜220から要求信号を受領すると(S9000)、順に利用権の調停動作を開始する。
受領した要求信号が1つの場合(S9010:Yes)、アービタ220は当該要求信号に利用権を与え(S9100)、ACT信号603を通じてACT信号を返す。当該DMAはACT信号を受領するとメモリコントローラ230〜233との間でデータの転送を行い、終了するとREQ信号線601のREQ信号を取り下げて(信号をネゲートして)、利用権を解放する。アービタ220は利用権が解放されるのを待ち(S9110)、再び要求信号待ちに入る。
受領した要求信号が1つの場合(S9010:Yes)、アービタ220は当該要求信号に利用権を与え(S9100)、ACT信号603を通じてACT信号を返す。当該DMAはACT信号を受領するとメモリコントローラ230〜233との間でデータの転送を行い、終了するとREQ信号線601のREQ信号を取り下げて(信号をネゲートして)、利用権を解放する。アービタ220は利用権が解放されるのを待ち(S9110)、再び要求信号待ちに入る。
もし、同時に複数の要求信号を受けていた場合、もしくは待たせている要求が複数ある場合(S9010:No)、アービタ220はREQ信号と共にREQ_MEM_NO信号線602を通じて受領しているアクセス先メモリコントローラ番号をチェックする(S9020)。そして、メモリレイアウト情報設定テーブル800を参照して各メモリコントローラ番号に対応するカウンタフィールド8050の値を比較する(S9030)。そして、アクセス先として要求されているメモリコントローラ230〜233の中でカウンタフィールド8050の値が最も大きいメモリコントローラ番号を選択し、その番号を指定しているDMA210〜212にパス利用権を与える(S9040)。なお、複数のDMA210〜212が該当する場合には、アービタ220は、ラウンドロビンで利用権を調停するものとする。そして、当該メモリコントローラ番号に対応するカウンタ値を1減じて、優先度を1つ落とす処理を行う(S9050)。全てのカウンタ値が0となった場合(S9060:Yes)、アービタ220は比率フィールド8040を参照して各メモリのカウンタ値を比率フィールド8040の値と一致するようリセットする(S9070)。そして与えたパス利用権が解放されるのを待って(S9080)、再び信号待ちに入る。
(実施例3の効果)
本実施例3によれば、プロセッサ760,761、すなわち制御ソフトウェアから設定されるメモリ資源利用情報を活用することにより、単にハードウェアのみで調停するよりも効率良く内部データ転送パス101,102の利用調停を行うことができ、内部データ転送パス101,102のデータ転送を効率化することができる。
本実施例3によれば、プロセッサ760,761、すなわち制御ソフトウェアから設定されるメモリ資源利用情報を活用することにより、単にハードウェアのみで調停するよりも効率良く内部データ転送パス101,102の利用調停を行うことができ、内部データ転送パス101,102のデータ転送を効率化することができる。
以上3つの実施例、およびそれに付随する変形例について説明したが、本実施例は本発明で挙げる課題の少なくとも1つ解決するための手段の一例を説明するためのものであり、その構成についてはこれを限定するものではない。また、上記実施例は個別に適用することも、また組み合わせて適用することも可能である。
本発明は、上記実施例1ないし3に記載した1または複数のストレージ装置に適用できるのはもちろんのこと、PCI Expressに限らず、書込みが完了した旨の応答のない1または複数のネットワークを用いて接続されたデータ転送装置であれば広く適用することが可能である。
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
Claims (14)
- データの転送元となる第1のメモリの転送元アドレスと、データの転送先となる第2のメモリの転送先アドレスと、データの転送長と、を記憶部から取得する取得部と、
前記転送元アドレスに基づき、前記第1のメモリのデータを取得する読み出し部と、
前記転送先アドレスに基づき、前記第2のメモリへデータの書き込みを行うメモリコントローラに、前記取得したデータを転送し、
転送が終了すると、前記転送したデータの量が前記データの転送長に達しているか否かを判定し、
前記判定の結果、前記転送したデータの量が前記データの転送長に達している場合、前記メモリコントローラに読み出し要求を送信する書き込み部と、
を備えるデータ転送装置。 - 前記データ転送装置は、前記メモリコントローラからの応答を受信して、データ転送の終了をプロセッサに通知する
請求項1に記載のデータ転送装置。 - 前記データ転送装置は、前記プロセッサによる指示に基づき、前記データ転送の処理を開始する
請求項2に記載のデータ転送装置。 - 前記データ転送装置は、前記メモリコントローラからの応答にエラーがない場合、前記データ転送の終了を前記プロセッサに通知する
請求項3に記載のデータ転送装置。 - 前記データ転送装置は、前記判定の結果、前記転送したデータの量が前記データの転送長に達していない場合、前記データの転送長に達するまでデータ転送をする
請求項4に記載のデータ転送装置。 - 前記書き込み部は、前記メモリコントローラに、書き込み要求を送信した後に前記読み出し要求を送信し、
前記メモリコントローラは、前記書き込み要求に基づき、前記第2のメモリに前記転送したデータの書き込みを行い、前記書き込みが終了した後に、前記読み出し要求に基づく処理をする
請求項1乃至5のいずれか1項に記載のデータ転送装置。 - 前記書き込み部は、前記書き込み要求と前記読み出し要求を、前記メモリコントローラに、同一のバスを介して送信する
請求項6に記載のデータ転送装置。 - 前記書き込み部が前記読み出し要求を送信することで、前記メモリコントローラが有するレジスタにアクセスする
請求項6に記載のデータ転送装置。 - 前記レジスタは、書き込み要求の数を記録する
請求項8に記載のデータ転送装置。 - 前記データ転送装置は、
前記読み出し要求により取得した、前記レジスタに記録された書き込み要求の数と、前記書き込み部から送信した前記書き込み要求の数に基づき、
前記データ転送が正常に行われたか否かを判定する
請求項9に記載のデータ転送装置。 - 第1のメモリから第2のメモリにデータを転送するデータ転送装置のデータ転送方法であって、
前記第1のメモリの転送元アドレスと、前記第2のメモリの転送先アドレスと、データの転送長と、を記憶部から取得するステップと、
前記転送元アドレスに基づき、前記第1のメモリのデータを取得するステップと、
前記転送先アドレスに基づき、前記第2のメモリへデータの書き込みを行うメモリコントローラに、前記取得したデータを転送するステップと、
転送が終了すると、前記転送したデータの量が前記データの転送長に達しているか否かを判定するステップと、
前記判定の結果、前記転送したデータの量が前記データの転送長に達している場合、前記メモリコントローラに読み出し要求を送信するステップと、
を有するデータ転送方法。 - 前記メモリコントローラからの応答を受信して、データ転送の終了をプロセッサに通知するステップを有する
請求項11に記載のデータ転送方法。 - 前記プロセッサによる指示に基づき、前記データ転送の処理を開始するステップを有する
請求項12に記載のデータ転送方法。 - データ転送装置は、前記メモリコントローラに、書き込み要求を送信した後に前記読み出し要求を送信し、
前記メモリコントローラは、前記書き込み要求に基づき、前記第2のメモリに前記転送したデータの書き込みを行い、前記書き込みが終了した後に、前記読み出し要求に基づく処理をする
請求項11乃至13のいずれか1項に記載のデータ転送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014098713A JP2014167818A (ja) | 2014-05-12 | 2014-05-12 | データ転送装置およびデータ転送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014098713A JP2014167818A (ja) | 2014-05-12 | 2014-05-12 | データ転送装置およびデータ転送方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012530010A Division JP5546635B2 (ja) | 2010-06-01 | 2010-06-01 | データ転送装置およびその制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014167818A true JP2014167818A (ja) | 2014-09-11 |
Family
ID=51617433
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014098713A Pending JP2014167818A (ja) | 2014-05-12 | 2014-05-12 | データ転送装置およびデータ転送方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2014167818A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017208075A (ja) * | 2015-06-08 | 2017-11-24 | 新唐科技股▲ふん▼有限公司 | バスを介して周辺デバイスに安全にアクセスするための装置、システム及び方法 |
US10552088B2 (en) | 2016-04-19 | 2020-02-04 | Hitachi, Ltd. | Computer system and method for redundantizing nonvolatile memory |
US11334508B2 (en) | 2018-11-08 | 2022-05-17 | Hitachi, Ltd. | Storage system, data management method, and data management program |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0567024A (ja) * | 1991-09-06 | 1993-03-19 | Nec Corp | データ処理システム |
JP2000010909A (ja) * | 1998-06-19 | 2000-01-14 | Fujitsu Ltd | データ転送制御装置 |
JP2005070992A (ja) * | 2003-08-22 | 2005-03-17 | Fujitsu Ltd | モジュール間データ転送確認機能を有する装置並びにストレージ制御装置および同装置用インターフェイスモジュール |
JP2005149082A (ja) * | 2003-11-14 | 2005-06-09 | Hitachi Ltd | ストレージ制御装置、及びストレージ制御装置の制御方法 |
JP2006215873A (ja) * | 2005-02-04 | 2006-08-17 | Toshiba Corp | 制御装置、情報処理装置、及び転送処理方法 |
JP2009199266A (ja) * | 2008-02-20 | 2009-09-03 | Hitachi Ltd | データ転送制御装置、データ整合性判定方法及び記憶制御装置 |
JP2010015350A (ja) * | 2008-07-03 | 2010-01-21 | Seiko Epson Corp | データ転送制御装置、データ転送制御システム、データ転送制御プログラム、ドライブレコーダ、及びデータ転送制御方法 |
-
2014
- 2014-05-12 JP JP2014098713A patent/JP2014167818A/ja active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0567024A (ja) * | 1991-09-06 | 1993-03-19 | Nec Corp | データ処理システム |
JP2000010909A (ja) * | 1998-06-19 | 2000-01-14 | Fujitsu Ltd | データ転送制御装置 |
JP2005070992A (ja) * | 2003-08-22 | 2005-03-17 | Fujitsu Ltd | モジュール間データ転送確認機能を有する装置並びにストレージ制御装置および同装置用インターフェイスモジュール |
JP2005149082A (ja) * | 2003-11-14 | 2005-06-09 | Hitachi Ltd | ストレージ制御装置、及びストレージ制御装置の制御方法 |
JP2006215873A (ja) * | 2005-02-04 | 2006-08-17 | Toshiba Corp | 制御装置、情報処理装置、及び転送処理方法 |
JP2009199266A (ja) * | 2008-02-20 | 2009-09-03 | Hitachi Ltd | データ転送制御装置、データ整合性判定方法及び記憶制御装置 |
JP2010015350A (ja) * | 2008-07-03 | 2010-01-21 | Seiko Epson Corp | データ転送制御装置、データ転送制御システム、データ転送制御プログラム、ドライブレコーダ、及びデータ転送制御方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017208075A (ja) * | 2015-06-08 | 2017-11-24 | 新唐科技股▲ふん▼有限公司 | バスを介して周辺デバイスに安全にアクセスするための装置、システム及び方法 |
JP2019023896A (ja) * | 2015-06-08 | 2019-02-14 | 新唐科技股▲ふん▼有限公司 | バスを介して周辺デバイスを安全にアクセスするための方法 |
US10552088B2 (en) | 2016-04-19 | 2020-02-04 | Hitachi, Ltd. | Computer system and method for redundantizing nonvolatile memory |
US11334508B2 (en) | 2018-11-08 | 2022-05-17 | Hitachi, Ltd. | Storage system, data management method, and data management program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5546635B2 (ja) | データ転送装置およびその制御方法 | |
EP3796179A1 (en) | System, apparatus and method for processing remote direct memory access operations with a device-attached memory | |
US7664909B2 (en) | Method and apparatus for a shared I/O serial ATA controller | |
CN100595720C (zh) | 用于基于集线器的存储***中直接存储器访问的设备和方法 | |
TWI507866B (zh) | 儲存系統之冗餘儲存控制器間之映射資料 | |
US9336173B1 (en) | Method and switch for transferring transactions between switch domains | |
WO2011010352A1 (en) | Storage apparatus and its data transfer method | |
US20080155163A1 (en) | Serial advanced technology attachment (SATA) and serial attached small computer system interface (SCSI) (SAS) bridging | |
US9244877B2 (en) | Link layer virtualization in SATA controller | |
US20140082234A1 (en) | Communication via a memory interface | |
US8694698B2 (en) | Storage system and method for prioritizing data transfer access | |
JP2006309579A (ja) | 記憶制御装置及びストレージシステム | |
JP4100256B2 (ja) | 通信方法および情報処理装置 | |
EP3716084A1 (en) | Apparatus and method for sharing a flash device among multiple masters of a computing platform | |
CN107430584B (zh) | 经由具有完全连接网格拓扑的pci express结构从存储读取数据 | |
CN107533526B (zh) | 经由具有完全连接网格拓扑的pci express结构向存储写入数据 | |
US8667199B2 (en) | Data processing apparatus and method for performing multi-cycle arbitration | |
JP2014167818A (ja) | データ転送装置およびデータ転送方法 | |
US7409486B2 (en) | Storage system, and storage control method | |
US9146693B2 (en) | Storage control device, storage system, and storage control method | |
US9858222B2 (en) | Register access control among multiple devices | |
JP4936088B2 (ja) | ディスクアレイ装置、ディスクアレイシステム、及びキャッシュ制御方法 | |
WO2007039933A1 (ja) | 演算処理装置 | |
CN114238156A (zh) | 处理***以及操作处理***的方法 | |
US8775687B1 (en) | Method to ensure data coherency in a scalable aggregate neighbor-device interface |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150227 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20150303 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20150430 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20150526 |