(57)【要約】【課題】第１メモリから第２メモリへのデータ転送を効率的に行なう。【解決手段】第１データサイズの第１データブロック単位でデータを格納する第１メモリ１２から第２メモリ１２に、第２データサイズ幅の通信路を介して転送データを転送するデータ転送装置１０において、第１メモリ１２から読み出された転送データを格納する格納部１５３と、この格納部１５３に格納された転送データを、第１メモリ１２から第２メモリ１２に、第２データサイズの整数倍単位で転送する転送制御部１４７２とを備える。【選択図】図３
2019095844.tif 000002
【特許請求の範囲】
【請求項１】
第１データサイズの第１データブロック単位でデータを格納する第１メモリから第２メモリに、第２データサイズ幅の通信路を介して転送データを転送するデータ転送装置において、
前記第１メモリから読み出された前記転送データを格納する格納部と、
前記格納部に格納された前記転送データを、前記第１メモリから前記第２メモリに、前記第２データサイズの整数倍単位で転送する転送制御部と
を備えることを特徴とする、データ転送装置。
【請求項２】
前記第１データブロックが整合情報を有し、  
転送元である前記第１メモリから転送データをリードし、転送先である前記第２メモリに前記転送データをライトすることで、前記転送データの転送を実行する転送実行部と、
前記転送実行部に前記転送データの転送を指示し、前記転送実行部よりも多く備えられた複数の転送指示部と、
前記複数の転送指示部のうち、前記転送実行部を占有して転送指示を行なう前記転送指示部を切り替える切替制御部と、
前記整合情報を用いて前記転送データの整合性確認を行なう整合性確認部と、
前記切替制御部が、前記転送実行部を占有する前記転送指示部を切替える際に、切替前に前記転送指示部が記憶部に保存した、前記整合性確認部による前記整合性確認の中断時に算出された整合性確認演算途中値と、前記整合性確認の進捗情報とを、前記転送実行部への転送再開指示とともに、切替後の前記転送の再開時に前記整合性確認部に通知する通知部と
をそなえ、
前記整合性確認部が、通知された前記整合性確認演算途中値および進捗情報に基づいて、前記整合性確認を再開する
ことを特徴とする、請求項１記載のデータ転送装置。
【請求項３】
第１データサイズの第１データブロック単位でデータを格納する第１メモリから第２メモリに、第２データサイズ幅の通信路を介して転送データを転送するデータ転送装置において、
前記第１メモリから読み出された前記転送データを格納部に格納する処理と、
前記格納部に格納された前記転送データを、前記第１メモリから前記第２メモリに、前記第２データサイズの整数倍単位で転送する処理と
を備えることを特徴とする、データ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置およびデータ転送方法に関する。
【背景技術】
【０００２】
例えば、複数のＣＭ（Controller Module）を備えるストレージ装置においては、一のＣＭのメモリのデータを、ＤＭＡ（Direct Memory Access）を用いて他のＣＭに転送することが行なわれる。
【０００３】
また、ＣＭに備えられるＣＰＵ（Central Processing Unit）としては、複数のコアを有するマルチコアプロセッサが用いられる場合がある。
【０００４】
図１１はマルチコアプロセッサを搭載したＣＭを備えたストレージ装置におけるＤＭＡを用いた従来のデータ転送を説明するための図である。
【０００５】
図１１に示すストレージ装置５００は、２つのＣＭ５０１−１，５０１−２を備える。これらのＣＭ５０１−１，５０１−２は同様の構成を有する。なお、以下、ＣＭを示す符号としては、複数のＣＭのうち１つを特定する必要があるときには符号５０１−１，５０１−２を用いるが、任意のＣＭを指すときには符号５０１を用いる。
【０００６】
各ＣＭ５０１は、それぞれ、ＣＰＵ５０２，メモリ５０３，スイッチ５０４およびＤＭＡコントローラ５０５を備える。
【０００７】
ＣＰＵ５０２は複数のコア５０１１を有するマルチコアプロセッサであり、このＣＰＵ５０２にメモリ５０３が接続されている。図１１に示すストレージ装置５００においては、各ＣＭ５０１はそれぞれ４つのコア５０１１を有する。以下、これらのコア５０１１を符号＃０〜＃３を用いて表す場合がある。
【０００８】
ＣＰＵ５０２にはスイッチ５０４が接続されており、このスイッチ５０４には他のＣＭ５０１のスイッチ５０４が接続される。すなわち、ＣＭ５０１−１とＣＭ５０１−２とはスイッチ５０４，５０４を介して通信可能に接続されている。これらのスイッチ５０４間は、例えば、ＰＣＩｅ（Peripheral Component Interconnect Express）の規格に従った通信路を介して接続されている。
【０００９】
また、各ＣＭ５０１において、スイッチ５０４にはＤＭＡコントローラ５０５が接続されている。ＤＭＡコントローラ５０５は、例えば、ＣＭ５０１−１のメモリ５０３とＣＭ５０１−２のメモリ５０３との間でデータを転送する。
【００１０】
マルチコアプロセッサであるＣＰＵ５０２においては、複数のＣＰＵコア５０１１に対して１つのＤＭＡコントローラ５０４が備えられている。
【００１１】
また、転送元ＣＭ５０１のＣＰＵ５０２は、ストレージデータの整合性確認も行なう。整合性確認は、データブロック毎に行なわれ、個々のデータブロックには整合性確認に用いられるチェックコードが付加される。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１６−１８１１２６号公報
【特許文献２】特開２００８−１９７８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ストレージ装置５００において、整合性確認のチェックコード付きのデータブロックは、512B（Byte）のユーザデータに、8Bのチェックコードを付加された520Bのデータサイズを有する。以下、整合性確認のチェックコード付きのデータブロックをチェックコード付きデータブロックという場合がある。以下、データサイズの単位“Byte”を単に“B”と表す場合がある。
【００１４】
一方、ＣＭ５０１間の通信に用いられているＰＣＩｅのＭＰＳ（Max Payload Size）は256Bであり、ＰＣＩｅにおいて最も転送効率の良いデータサイズは256Bの整数倍である。
【００１５】
このように、チェックコード付きデータブロックとＰＣＩｅの規格とでは取り扱われるデータの単位サイズが不一致である。
【００１６】
例えば、チェックコード付きデータブロックにとって効率の良いデータ転送を行なう場合、すなわち520B単位でのデータ転送は、ＰＣＩｅにとって効率が悪く、バス性能を最大限に発揮することができない。
【００１７】
520B のデータサイズを有する整合性確認済みデータブロックは、ＣＭ５０１間において、256B‐256B‐8Bの各データサイズで３回に分けてデータ転送される。これにより、特に最後の8Bのデータサイズの分のデータ転送時に、ＰＣＩｅのバス使用効率が悪くなる。
【課題を解決するための手段】
【００１８】
このため、このデータ転送装置は、第１データサイズの第１データブロック単位でデータを格納する第１メモリから第２メモリに、第２データサイズ幅の通信路を介して転送データを転送するデータ転送装置において、前記第１メモリから読み出された前記転送データを格納する格納部と、前記格納部に格納された前記転送データを、前記第１メモリから前記第２メモリに、前記第２データサイズの整数倍単位で転送処理する転送制御部とを備える。
【発明の効果】
【００１９】
一実施形態によれば、第１メモリから第２メモリへのデータ転送を効率的に行なうことができる。
【図面の簡単な説明】
【００２０】
【図１】実施形態の一例としてのストレージ装置のハードウェア構成を示す図である。
【図２】実施形態一例としてのストレージ装置におけるメモリ間のデータ転送を例示する図である。
【図３】実施形態の一例としてのストレージ装置のＤＭＡコントローラの機能構成を示す図である。
【図４】実施形態の一例としてのストレージ装置におけるＤＭＡコントローラにより転送されるデータの処理方法を説明するための図である。
【図５】実施形態の一例としてのストレージ装置のＤＭＡコントローラ内において転送されるデータの流れを説明するための図である。
【図６】実施形態の一例としてのストレージ装置のＤＭＡコントローラ内において転送されるデータの流れを説明するための図である。
【図７】実施形態の一例としてのストレージ装置におけるデータ転送時のＣＰＵ，ＤＭＡブロックおよびシーケンサによる処理を説明するためのシーケンス図である。
【図８】実施形態の一例としてのストレージ装置のＤＭＡコントローラ内において転送されるデータの流れを説明するための図である。
【図９】実施形態の一例としてのストレージ装置のＤＭＡコントローラ内において転送されるデータの流れを説明するための図である。
【図１０】実施形態の一例としてのストレージ装置のＤＭＡコントローラ内において転送されるデータの流れを説明するための図である。
【図１１】マルチコアプロセッサを搭載したＣＭを備えたストレージ装置におけるＤＭＡを用いた従来のデータ転送を説明するための図である。
【発明を実施するための形態】
【００２１】
以下、図面を参照して本データ転送装置およびデータ転送方法に係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００２２】
（Ａ）構成
まず、図１を参照しながら、本実施形態のストレージ制御装置（ＣＭ）１０−１，１０−２を含むストレージ装置１のハードウェア構成について説明する。なお、図１は、本実施形態のストレージ制御装置１０−１，１０−２を含むストレージ装置１のハードウェア構成の一例を示すブロック図である。
【００２３】
本ストレージ装置１は、ＨＤＤ（Hard Disk Drive）等の図示しない記憶装置を仮想化して、仮想ストレージ環境を形成する。そして、ストレージ装置１は、仮想ボリュームを、上位装置であるホスト装置（図示省略）に提供する。
【００２４】
本ストレージ装置１は、１以上のホスト装置に対して通信可能に接続されている。ホスト装置は、例えば、サーバ機能を備えた情報処理装置であり、本ストレージ装置１との間において、ＮＡＳ（Network Attached Storage）やＳＡＮ（Storage Area Network）のコマンドを送受信する。ホスト装置は、例えば、ストレージ装置１に対してＮＡＳにおけるリード／ライト等のストレージアクセスコマンドを送信することにより、ストレージ装置１が提供するボリュームにデータの書込または読出を行なう。
【００２５】
ストレージ装置１の記憶装置には、データが512Bのブロックデータ毎に、当該ブロックデータに基づいて算出された8Bの整合情報を付加して、ブロックサイズ520Bのストレージブロックとして格納される。以下、整合情報を、ＢＣＣ（Block Check Code）という場合がある。
【００２６】
本ストレージ装置１は、ホスト装置からボリュームに対して行なわれる入出力要求（例えば、ライト要求やリード要求）に応じて、このボリュームに対応する記憶装置に対して、データのライトやリード等の処理を行なう。ホスト装置からの入出力要求のことをＩ／Ｏ要求といってもよい。
【００２７】
本ストレージ装置１は、図１に示すように、複数（本実施形態では２つ）のＣＭ１０−１，１０−２を備える。これらのＣＭ１０−１，１０−２は、図示しないコントローラエンクロージャ（Controller Enclosure：ＣＥ）に搭載されてもよい。
【００２８】
ＣＭ１０−１，１０−２は、ストレージ装置１内の動作を制御する制御装置（コントローラ，ストレージ制御装置）であり、ホスト装置から送信されるＩ／Ｏ要求に従って、記憶装置へのデータアクセス制御等、各種制御を行なう。また、ＣＭ１０−１，１０−２は互いに同様の構成を有している。以下、ＣＭを示す符号としては、複数のＣＭのうち１つを特定する場合には符号１０−１，１０−２を用い、任意のＣＭを指すときには符号１０を用いる。また、ＣＭ１０−１をＣＭ＃０と、ＣＭ１０−２をＣＭ＃１と、それぞれ表す場合がある。
【００２９】
ＣＭ１０−１，１０−２は冗長化されている。本ストレージ装置１に備えられたこれらの複数のＣＭ１０のうち、一つのＣＭ１０（例えば、ＣＭ１０−１）がマスター（プライマリ）として各種制御を行なう。また、残りのＣＭ１０（例えば、ＣＭ１０−２）がスレーブとして機能する。マスターのＣＭ１０の故障時には、スレーブのＣＭ１０がマスターとしての動作を引き継ぐ。
【００３０】
各ＣＭ１０は、それぞれ、ＣＰＵ１１，メモリ１２，スイッチ１３およびＤＭＡコントローラ１４を備える。
【００３１】
メモリ１２は、例えば、ＲＡＭ（Random Access Memory）であり、本ストレージ装置１の記憶装置のデータ等が一時的に格納される。従って、メモリ１２は、第１データサイズ（520B）のストレージブロック（第１データブロック）単位でデータを格納する。
【００３２】
ＣＰＵ１１は複数のコア１１１を有するマルチコアプロセッサであり、このＣＰＵ１１にメモリ１２が接続されている。図１に示すストレージ装置１においては、各ＣＭ１０はそれぞれ４つのコア１１１を有する。以下、これらのコア１１１を＃０〜＃３を付して表す場合がある。
【００３３】
各コア１１１は、後述するＤＭＡコントローラ１４に備えられたシーケンサ（sequencer：ＳＥＱ）１４５−１〜１４５−４に対してリクエストを発行する。例えば、コア１１１は、ＤＭＡコントローラ１４において、各コア１１１に対応して備えられたシーケンサ１４５に対して、一のＣＭ１０に備えられたメモリ１２から、他のＣＭ１０に備えられたメモリ１２へのデータ転送を指示するリクエストを発行する。
【００３４】
コア１１１は、例えば、アプリケーションが用意するディスクリプタ（指示書）に基づき、シーケンサ１４５に対してリクエストの発行を行なう。
【００３５】
ＣＰＵ１１にはスイッチ（ＳＷ）１３が接続されており、このスイッチ１３は他のＣＭ１０のスイッチ１３と接続される。すなわち、ＣＭ１０−１とＣＭ１０−２とはスイッチ１３を介して通信可能に接続されている。スイッチ１３とＣＰＵ１１との間，スイッチ１３とＤＭＡコントローラ１４との間およびスイッチ１３間は、例えば、ＰＣＩｅの規格に従った通信路（ＰＣＩｅバス）を介してそれぞれ接続されている。
【００３６】
また、各ＣＭ１０において、スイッチ１３にはＤＭＡコントローラ１４が接続されている。ＤＭＡコントローラ１４は、例えば、ＣＭ１０−１のメモリ１２とＣＭ１０−２のメモリ１２との間でデータを転送する。すなわち、ＤＭＡコントローラ１４は、転送元（リード元）のＣＭ１０−１のメモリ１２のデータをリードし、このリードしたデータを、転送先（ライト先）のＣＭ１０−２のメモリ１２にライトする制御を行なう。
【００３７】
ＤＭＡコントローラ１４は、図１に示すように、複数（図１に示す例では４つ）のシーケンサ１４５−１〜１４５−４と、１つ以上（図１に示す例では２つ）のＤＭＡブロック１４１−１，１４１−２とを備える。
【００３８】
なお、以下、シーケンサを示す符号としては、複数のシーケンサのうち１つを特定する必要があるときには符号１４５−１〜１４５−４を用いるが、任意のシーケンサを指すときには符号１４５を用いる。また、以下、ＤＭＡブロックを示す符号としては、複数のＤＭＡブロックのうち１つを特定する必要があるときには符号１４１−１，１４１−２を用いるが、任意のＤＭＡブロックを指すときには符号１４１を用いる。また、以下、ＤＭＡブロック１４１をＤＭＡ＿ＢＬＫと表す場合がある。
【００３９】
以下、シーケンサ１４５をＳＥＱ１４５と表す場合がある。また、以下、シーケンサ１４５−１をシーケンサ＃０もしくはＳＥＱ＃０と表す場合がある。同様に、シーケンサ１４５−２〜４をシーケンサ＃１〜＃３もしくはＳＥＱ＃１〜＃３と表す場合がある。
【００４０】
本ストレージ装置１においては、ＤＭＡコントローラ１４において、ＣＰＵ１１のＣＰＵコア１１１と同数のシーケンサ１４５が備えられ、シーケンサ＃０〜＃３は、コア＃０〜＃３にそれぞれ対応する処理を行なう。
【００４１】
シーケンサ１４５は、所定の処理サイズ単位でデータを取り扱う。例えば、データ転送を行なうに際して、シーケンサ１４５は、後述するリードＤＭＡ１４３（図３参照）によってリードされたデータを所定の処理サイズ（例えば、2KB〜4KB）単位で取扱う。また、シーケンサ１４５においては、所定の処理サイズ（例えば、1KB）単位でライトデータを取り扱い、このライトデータを所定の転送サイズ（例えば、ＭＰＳの整数倍）に分割して、後述するライトＤＭＡ１４２（図３参照）を介して送出（ライト）させる。
【００４２】
例えば、シーケンサ１４５は、アドレス0x0000_0100から4KB（0x0001 _0000）サイズのデータを転送する場合には、アドレス4KBで２つのデータに分けて転送する。すなわち、第１のデータ転送として、アドレス0x0000_0100から0x0000_FF00サイズのデータを転送した後に、第２のデータ転送として0x0001_0000から0x0000_0100サイズのデータを転送する。
【００４３】
シーケンサ１４５は、この転送データを、例えば、所定サイズ（ＭＰＳ（= 256B））単位に分割してライトＤＭＡ１４２に送信し、このライトＤＭＡ１４２に対して、転送サイズ（ＭＰＳの整数倍）単位で分割して転送（送出）させる。
【００４４】
また、ＤＭＡコントローラ１４においては、シーケンサ１４５よりも少ない数のＤＭＡブロック１４１を備えることにより、製造コストの低減や装置の小型化を実現している。
【００４５】
図２は実施形態一例としてのストレージ装置１におけるメモリ１２間のデータ転送を例示する図である。
【００４６】
この図２に示す例においては、ＣＭ（転送元ＣＭ）１０−１のメモリ１２のデータを、ＣＭ（転送先ＣＭ）１０−２のメモリ１２に転送する例を示す。
【００４７】
転送元ＣＭ１０−１においては、コア＃０がシーケンサ１４５−１（シーケンサ＃０）にデータ転送のリクエストを転送する。このデータ転送リクエストを受信したシーケンサ１４５−１は、ＤＭＡブロック１４１−１にメモリ１２からデータをリードさせる。その後、シーケンサ１４５−１は、ＤＭＡブロック１４１−１にこのリードされたデータを転送先ＣＭ１０−２のメモリ１２にライトさせる。
【００４８】
同様に、コア＃１がシーケンサ１４５−２（シーケンサ＃１）にデータ転送のリクエストを転送する。このデータ転送リクエストを受信したシーケンサ１４５−２は、ＤＭＡブロック１４１−２にメモリ１２からデータをリードさせる。その後、シーケンサ１４５−２は、ＤＭＡブロック１４１−２にこのリードされたデータを転送先ＣＭ１０−２のメモリ１２にライトさせる。
【００４９】
本ストレージ装置１において、ＣＰＵ１１，メモリ１２，スイッチ１３，ＤＭＡコントローラ１４の各間は、ＰＣＩｅの規格に沿った通信路で接続されている。すなわち、ＣＭ１０は、第２データサイズ（256B）幅の通信路を介して転送データを転送するデータ転送装置として機能する。
【００５０】
図３は実施形態の一例としてのストレージ装置１のＤＭＡコントローラ１４の機能構成を示す図である。
【００５１】
なお、この図３中においては、便宜上、シーケンサ＃０についてのみ、その構成を図示しているが、他のシーケンサ１４５においても同様の構成を有する。同様に、図３中においては、便宜上、一つのＤＭＡブロック１４１についてのみ、その構成を図示しているが、他のＤＭＡブロック１４１においても同様の構成を有する。
【００５２】
各ＤＭＡブロック１４１は、図３に示すように、調停回路（ＡＲＢ：arbiter）１４９を介して各シーケンサ１４５と接続されている。また、各ＤＭＡブロック１４１は、ＰＣＩｅコントローラ１６０を介してスイッチ１３と接続されており、これにより、各ＤＭＡブロック１４１は、ＰＣＩｅコントローラ１６０を介して、ＣＭ＃０およびＣＭ＃１の各メモリ１２と接続されている。
【００５３】
調停回路１４９は、複数のシーケンサ１４５とＤＭＡブロック１４１との接続を制御する調停回路であり、ＤＭＡブロック１４１に接続するシーケンサ１４５を切り替える。
【００５４】
上述の如く、本ストレージ装置１の各ＤＭＡコントローラ１４において、ＤＭＡブロック１４１の数はシーケンサ１４５の数よりも少ない。調停回路１４９が、ＤＭＡブロック１４１に対して接続されるシーケンサ１４５を切り替えることで、各シーケンサ１４５がそれぞれＤＭＡブロック１４１を介してメモリ１２間のデータ転送を実現することができる。
【００５５】
以下、ＤＭＡブロック１４１に接続された状態のシーケンサ１４５をＤＭＡ接続中のシーケンサ１４５という場合がある。また、調停回路１４９がＤＭＡブロック１４１に接続されるシーケンサ１４５を切り替えることにより、ＤＭＡ接続中の状態からＤＭＡブロック１４１に接続されなくなった状態のシーケンサ１４５をＤＭＡ接続解除されたシーケンサ１４５という場合がある。
【００５６】
なお、図３に示す例においては、便宜上、１つの調停回路１４９を示しているが、これに限定されるものではない。例えば、ＤＭＡブロック１４１毎に調停回路１４９を備えてもよく、適宜変更して実施することができる。
【００５７】
調停回路１４９は、例えば、一のシーケンサ１４５が一のＤＭＡブロック１４１を介して所定サイズ（例えば、4KB）のデータを転送した場合に、当該ＤＭＡブロック１４１に接続されるシーケンサ１４５の切り替えを行なう。
【００５８】
ＤＭＡコントローラ１４において、ＳＥＱ＃０〜＃３，調停回路１４９およびＤＭＡブロック１４１は、同一ＬＳＩ（Large Scale Integration）１４０上に備えられてもよい。
【００５９】
調停回路１４９は、複数のシーケンサ１４５のうち、ＤＭＡブロック１４１を占有して転送指示を行なうシーケンサ１４５を切り替える切替制御部として機能する。
【００６０】
ＤＭＡブロック１４１は、図３に示すように、ライトＤＭＡ１４２およびリードＤＭＡ１４３を備える。なお、ライトＤＭＡをＷＴ＿ＤＭＡと表す場合があり、リードＤＭＡをＲＤ＿ＤＭＡと表す場合がある。
【００６１】
リードＤＭＡ１４３は、転送元（リード元）のメモリ１２からデータのリード処理を行なう。リードＤＭＡ１４３は、シーケンサ１４５からの指示に従って、転送元（リード元）のメモリ１２からデータのリード処理を行なう。なお、リードＤＭＡ１４３によるメモリ１２からのデータのリードには既知の種々の手法を用いることができ、その詳細な説明は省略する。
【００６２】
リードＤＭＡ１４３は、シーケンサ１４５の転送制御部１４７２からの指示に従い、転送元メモリ１２から、データ転送経路であるＰＣＩｅバスにおける転送効率のよいデータサイズ単位でデータの転送（リード）を行なう。ここで、ＰＣＩｅバスにおける転送効率のよいデータサイズとは、例えば、ＰＣＩｅにおいて一度にデータ転送できるデータサイズである最大ペイロードサイズ（Max Payload Size；ＭＰＳ）であり、具体的には、256Bである。
【００６３】
以下、ＰＣＩｅバスにおける転送効率のよいデータサイズ単位をＰＣＩｅ転送好適サイズという場合があり、256Bの整数倍であるものとする。
【００６４】
リードＤＭＡ１４３は、転送元メモリ１２との間を接続するデータ転送経路において、ＰＣＩｅ転送好適サイズである256Bの整数倍（第２のデータサイズ）単位で転送処理を行なう。
【００６５】
リードＤＭＡ１４３は、図示しないメモリ（バッファメモリ）を備え、転送元メモリ１２からリードしたデータをこのメモリに格納する。リードＤＭＡ１４３は、後述するシーケンサ１４５からの指示に従って、転送元メモリ１２からデータのリードを行なう。
【００６６】
また、リードＤＭＡ１４３は、整合性チェック部１４３１および進捗管理部１４３２を備える。
【００６７】
整合性チェック部１４３１は、所定サイズ（例えば、520B）単位で受信されるデータ（ストレージブロック）に対して、順次、当該ストレージブロックに含まれるＢＣＣの値の整合性を確認する演算処理を行なう。例えば、ＢＣＣは、データブロックを整数値の列とみなして和を求め、これをある定数で割った余り（余剰）を用いて算出されるチェックサム手法によって他の記憶装置等によって設定されてもよい。このような場合に、整合性チェック部１４３１は、ストレージブロックに含まれるデータブロックを用いてチェックサム手法を用いて、ＢＣＣを算出し、ストレージブロックに含まれているＢＣＣと一致するか、整合性（妥当性）の確認を行なう。
【００６８】
以下、ストレージブロックについて、当該ストレージブロックに含まれるＢＣＣの値の整合性を確認することを、整合性チェックもしくはＢＣＣチェックという場合がある。
【００６９】
整合性チェック部１４３１は、米国規格協会（ＡＮＳＩ）Ｔ１０ データ保全性フィールド（ＤＩＦ）標準に準拠した既知の手法を用いてＢＣＣチェックを行なってもよい。なお、整合性チェック部１４３１によるＢＣＣチェックは既知の種々の手法を用いて行なってもよく、その詳細な説明は省略する。
【００７０】
整合性チェック部１４３１は、ＢＣＣ（整合情報）を用いて転送データの整合性確認を行なう整合性確認部として機能する。
【００７１】
このように、転送されるデータに対して、整合性チェック部１４３１がＢＣＣチェックを行なうことにより、ストレージ内でのデータ破壊やデータ化けなどが発生した場合においてもデータの誤りを検出することを可能とする。
【００７２】
以下、整合性チェック部１４３１がＢＣＣチェックを行なう過程において算出される値、すなわち、ＢＣＣチェックを行なうためのＢＣＣチェック用計算の過程で生成される演算値をＢＣＣチェック演算途中値という場合がある。ＢＣＣチェック演算途中値は、データの転送の進捗に応じて随時変化する。
【００７３】
整合性チェック部１４３１は、整合性チェックの過程で算出されるＢＣＣチェック演算途中値を、上述した図示しないメモリの所定の領域に格納する。また、整合性チェック部１４３１は、ＢＣＣチェック演算を行なうに際して、ＢＣＣチェック演算の進捗を示すカウント値を図示しないメモリの所定の領域に格納する。このカウント値は、ＢＣＣチェック演算の進捗に応じて随時更新される。従って、ＢＣＣチェック演算途中値は、カウント値に対応して変化する。
【００７４】
進捗管理部１４３２は、整合性チェック部１４３１によるＢＣＣチェックの進捗を管理する。例えば、進捗管理部１４３２は、整合性チェック部１４３１により整合性の確認ができたデータ量をカウントする。このように進捗管理部１４３２によりカウントされた値（カウント値）を参照することで、整合性チェック部１４３１がＢＣＣチェックを行ない整合性が確認できたデータサイズを把握することができる。
【００７５】
進捗管理部１４３２は、計数したカウント値（進捗情報）を、図示しないメモリの所定の領域に格納する。
【００７６】
リードＤＭＡ１４３は、シーケンサ１４５からの指示に従って、リード（受信）したストレージブロック（520B；第１のデータサイズ）をシーケンサ１４５に転送する。このリードＤＭＡ１４３からシーケンサ１４５へのリードデータの転送は、ＰＣＩｅの規格に沿ったデータサイズ（例えば、256Bの整数倍；第２のデータサイズ）単位で行なわれる。
【００７７】
また、リードＤＭＡ１４３からシーケンサ１４５への520Bのストレージブロックの転送の途中において、調停回路１４９により、当該ＤＭＡブロック１４１に対して接続されるシーケンサ１４５が切り替えられる場合がある。
【００７８】
このように、ストレージブロックの転送途中で、当該ＤＭＡブロック１４１に接続されるシーケンサ１４５の切り替えが行なわれた場合には、ＤＭＡブロック１４１は、整合性チェック部１４３１により実行中のＢＣＣチェックを中断する。そして、ＤＭＡブロック１４１は、整合性チェック部１４３１により算出されたＢＣＣチェック演算途中値を、切替前のシーケンサ１４５（ＤＭＡ接続解除されるシーケンサ１４５）に対して送信する。また、この際、リードＤＭＡ１４３は、ＢＣＣチェック演算途中値とともに、このＢＣＣチェック演算途中値の算出位置を示すカウント値も、切替前のシーケンサ１４５に対して送信する。
【００７９】
この送信されるカウント値は、ともに送信されるＢＣＣチェック演算途中値に対応するものであり、そのＢＣＣチェック演算途中値が算出されるまでのＢＣＣチェック用計算の進捗を表す進捗情報である。
【００８０】
リードＤＭＡ１４３は、当該ＤＭＡブロック１４１に接続されるシーケンサ１４５の切り替えが行なわれた場合に、新たにＤＭＡ接続されたシーケンサ１４５からＢＣＣチェック演算途中値およびカウント値を受信した場合には、受信したカウント値を用いて、残りのデータのリードを行なう。また、整合性チェック部１４３１は、ＢＣＣチェック演算途中値を用いて、リードを再開したデータについて整合性チェック用計算を再開し、残りのＢＣＣを計算する。
【００８１】
ライトＤＭＡ１４２は、転送先（ライト先）のメモリ１２に対するデータのライト処理を行なう。ライトＤＭＡ１４２は、リードＤＭＡ１４３が転送元メモリ１２からリードした転送データを、シーケンサ１４５の指示に従って、転送先（ライト先）のメモリ１２に対するデータのライト処理を行なう。なお、ライトＤＭＡ１４２によるメモリ１２に対するデータのライト処理は既知であり、その詳細な説明は省略する。
【００８２】
シーケンサ１４５は、ＣＰＵ１１のコア１１１から発行されるデータ転送指示を受信し、この指示に従って、ＤＭＡブロック１４１に対して、転送元メモリ１２からデータのリード指示を発行する。また、ＤＭＡコントローラ１４において、シーケンサ１４５の数は、ＤＭＡブロック１４１よりも多く備えられている。マルチコアシステムにおいて、コア１１１の数に対応してシーケンサ１４５を設けることができる。ただし、ＤＭＡブロック１４１を多く設けるとコストアップや回路規模が大きくなるため、本ストレージ装置１においては、各ＤＭＡブロック１４１は、複数のシーケンサ１４５に対して資源共有により利用される。
【００８３】
シーケンサ１４５は、ＤＭＡブロック１４１に転送データの転送を指示する転送指示部として機能する。
【００８４】
シーケンサ１４５は、ＤＭＡブロック１４１に対して、メモリ１２間の転送路において転送効率がプロトコルとして効率が最大になるデータサイズ（例えば、256Bの整数倍）単位でデータ転送を指示する。
【００８５】
図３に示すように、シーケンサ１４５は、プロセッサ１４７およびメモリ１４６を備える。
【００８６】
シーケンサ１４５は、リードＤＭＡ１４３からＢＣＣチェック演算途中値およびカウント値を受け取ると、これらの受信したＢＣＣチェック演算途中値およびカウント値を、メモリ１４６にＢＣＣチェック演算途中値１５１およびカウント値１５２として格納する。
【００８７】
ＤＭＡ接続解除された状態のシーケンサ１４５が、再度、ＤＭＡ接続される際に、このシーケンサ１４５は、新たに接続されるＤＭＡブロック１４１のリードＤＭＡ１４３に次のデータリード指示を出す際に、メモリ１４６から読み出したＢＣＣチェック演算途中値１５１およびカウント値１５２をデータリード指示に付加して渡す。
【００８８】
また、シーケンサ１４５は、転送元メモリ１２からリードされたデータを転送先メモリ１２へ転送するために、ＤＭＡブロック１４１のライトＤＭＡ１４２に対してデータライト指示を発行する。この際、シーケンサ１４５は、ＢＣＣチェックにより整合性が確認できたデータのみを転送させることが望ましい。
【００８９】
メモリ１４６の記憶領域には、ＢＣＣチェック演算途中値１５１およびカウント値１５２が格納される。また、メモリ１４６の記憶領域の一部はバッファ領域１５３として機能する。
【００９０】
ＢＣＣチェック演算途中値１５１は、ＤＭＡブロック１４１（リードＤＭＡ１４３）から通知されたＢＣＣチェック演算途中値であり、保存制御部１４７１によって格納される。
【００９１】
カウント値１５２は、ＤＭＡブロック１４１（リードＤＭＡ１４３）から通知されたカウント値（進捗情報）であり、保存制御部１４７１によって格納される。
【００９２】
バッファ領域１５３には、転送元メモリ１２からリードされた転送対象のデータが格納される。後述する転送制御部１４７２が、転送元メモリ１２からリードされた転送対象のデータをこのバッファ領域１５３に格納する。
【００９３】
プロセッサ１４７は、シーケンサ１４５全体を制御する。プロセッサ１４７は、マルチプロセッサであってもよい。プロセッサ１４７は、例えばＣＰＵ，ＭＰＵ（Micro Processing Unit），ＤＳＰ（Digital Signal Processor），ＡＳＩＣ（Application Specific Integrated Circuit），ＰＬＤ（Programmable Logic Device），ＦＰＧＡ（Field Programmable Gate Array）のいずれか一つであってもよい。また、プロセッサ１４７は、ＣＰＵ，ＭＰＵ，ＤＳＰ，ＡＳＩＣ，ＰＬＤ，ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【００９４】
プロセッサ１４７は、保存制御部１４７１および転送制御部１４７２としての機能を実現する。
【００９５】
保存制御部１４７１は、メモリ１４６へのカウント値１５２およびＢＣＣチェック演算途中値１５１の保存を制御する。保存制御部１４７１は、自身が実行されるシーケンサ１４５（自シーケンサ１４５といってもよい）がＤＭＡブロック１４１を用いたデータ転送中（ＤＭＡ接続中）に、調停回路１４９によりＤＭＡ接続解除される際に、ＤＭＡブロック１４１から送信されるカウント値およびＢＣＣチェック演算途中値をメモリ１４６に格納する制御を行なう。
【００９６】
保存制御部１４７１は、ＤＭＡブロック１４１から送信されたカウント値をメモリ１４６にカウント値１５２として格納する。また、保存制御部１４７１は、ＤＭＡブロック１４１から送信されたＢＣＣチェック演算途中値をメモリ１４６にＢＣＣチェック演算途中値１５１として格納する。
【００９７】
転送制御部１４７２は、リードＤＭＡ１４３およびライトＤＭＡ１４２に対して指示を発行することで、転送先メモリ１２へのデータ転送を実行させる。例えば、転送制御部１４７２は、リードＤＭＡ１４３に対して、転送元メモリ１２の所定の領域からデータをリードさせるリード指示を発行する。
【００９８】
転送制御部１４７２は、メモリ１４６のバッファ領域１５３に格納された転送データを、転送元メモリ１２から転送先メモリ１２に、ＰＣＩｅ転送好適サイズで転送する転送制御部として機能する。
【００９９】
転送制御部１４７２は、リードＤＭＡ１４３によって転送元メモリ１２からリードされたデータ（転送データ）を、メモリ１４６のバッファ領域１５３に格納する。
【０１００】
また、転送制御部１４７２は、ライトＤＭＡ１４２に対して、リードＤＭＡ１４３によって転送元メモリ１２からリードされたデータ（転送データ）を、転送先メモリ１２の所定の領域にライトさせるライト指示を発行する。
【０１０１】
転送制御部１４７２は、ＰＣＩｅバスにおける転送効率のよいデータサイズ（転送サイズ：例えば、ＭＰＳである256Bの整数倍）単位で、メモリ１２間のデータ転送を行なわせる。
【０１０２】
例えば、転送制御部１４７２は、メモリ１４６のバッファ領域１５３に1KB以上のデータが格納された場合に、1KB単位（処理サイズ単位）でライトＤＭＡ１４２に送出し、ライトＤＭＡ１４２を介してＭＰＳ（= 256B）の整数倍単位（転送サイズ単位：例えば1KB）で分割してデータの送出を行なわせる。
【０１０３】
また、転送制御部１４７２は、ＤＭＡ接続解除されたシーケンサ１４５が、再度、ＤＭＡコントローラ１４に接続（ＤＭＡ接続状態）され、データ転送を再開する際には、メモリ１４６に格納されているカウント値１５２およびＢＣＣチェック演算途中値１５１を読み出して、データリード指示とともにＤＭＡブロック１４１（リードＤＭＡ１４３）に送信する。
【０１０４】
これにより、リードＤＭＡ１４３は、ＤＭＡ接続解除されることで中断していた、ＤＭＡ接続解除される前に行なっていたデータリード（データ転送）を、ＤＭＡ接続解除される前と同じ位置から再開することができる。
【０１０５】
転送制御部１４７２は、調停回路１４９が、ＤＭＡブロック１４１を占有するシーケンサ１４５を切替える際に、切替前にシーケンサ１４５がメモリ１４６に保存した、整合性チェック部１４３１によるＢＣＣチェックの中断時に算出されたＢＣＣチェック演算途中値１５１とカウント値１５２とを、ＤＭＡブロック１４１への転送再開指示とともに、切替後の転送の再開時に整合性チェック部１４３１に通知する通知部として機能する。
【０１０６】
（Ｂ）動作
上述の如く構成された本実施形態の一例としてのストレージ装置１におけるデータ転送方法を、図４を参照しながら、図５および図６を用いて説明する。
【０１０７】
図４は実施形態の一例としてのストレージ装置１におけるＤＭＡコントローラ１４により転送されるデータの処理方法を説明するための図である。また、図５および図６はそれぞれＤＭＡコントローラ１４内において転送されるデータの流れを説明するための図である。
【０１０８】
先ず、図５および図６を用いて、一つのシーケンサ１４５（シーケンサ＃０）により行なわれるデータ転送時の処理方法について説明する。
【０１０９】
以下に示す例においては、転送元メモリ１２から転送先メモリ１２へ４ストレージブロック分（520B×4=2080B）のデータを転送する例について示す。
【０１１０】
また、以下に示す例においては、シーケンサ１４５が、2KB単位でリードデータの受信を行ない、１KB単位でライトデータの送信を行なう例について示す。図４中、ＢＣＣにはハッチング（斜線）を付して示す。
【０１１１】
リードＤＭＡ１４３は、シーケンサ＃０からの指示に従い、先ず、転送元メモリ１２から、2080B の転送データのうち、256Bの整数倍である2KB（=2048B）のデータをリードする（図５の符号Ｓ１）。
【０１１２】
図４においては、転送される４ストレージブロック分のデータ（符号Ｐ１参照）のうち最初に転送元メモリ１２からリードされる2KBの転送データを示す。
【０１１３】
図４に示すように、2KBの転送データは、３つの520Bのストレージブロックと488Bのデータブロックとをそなえる。３つのストレージブロックには、それぞれ8BのＢＣＣが付加されている。
【０１１４】
転送元メモリ１２からリードされたデータは、リードＤＭＡ１４３において整合性チェック部１４３１に入力される。
【０１１５】
整合性チェック部１４３１は、リードされたデータについて、その先頭から、順次、ＢＣＣチェックを行なう。また、整合性チェック部１４３１は、このＢＣＣチェックを行なうに際して、転送するデータのうちＢＣＣチェックを完了した量を示すカウント値を更新（インクリメント）しながらＢＣＣチェックを行なう。
【０１１６】
リードＤＭＡ１４３は、ＢＣＣチェックが完了し整合性が確認された520B×3（＝1560B）のデータサイズの転送データと（図４の符号Ｐ２参照）、端数の488Bのサイズの転送データと（図４の符号Ｐ３参照）の合計、2KB（正確には2048B ＝ 520B×3＋488B）分のデータを、シーケンサ＃０に送信する（図５の符号Ｓ２参照）。なお、端数の488Bのサイズの転送データには、整合性チェック部１４３１によるＢＣＣチェックはまだ完了していない。
【０１１７】
また、この際、リードＤＭＡ１４３は、整合性チェック部１４３１によるＢＣＣチェック演算途中値および進捗管理部１４３２によるカウント値も、シーケンサ＃０に渡す。
【０１１８】
シーケンサ＃０において、保存制御部１４７１が、ＤＭＡブロック１４１の整合性チェック部１４３１により整合性が確認された1560B（= 520B×3）のデータと、整合性が確認されていない488B（= 2048B - 520B×3）のデータとをメモリ１４６のバッファ領域１５３に格納する。また、保存制御部１４７１は、ＤＭＡブロック１４１から送信されたＢＣＣチェック演算途中値をメモリ１４６にＢＣＣチェック演算途中値１５１として格納する。また、保存制御部１４７１は、ＤＭＡブロック１４１から送信されたカウント値をメモリ１４６にカウント値１５２として格納する（図５の符号Ｓ３参照）。
【０１１９】
シーケンサ＃０は、ライトＤＭＡ１４２に対して、整合性が確認された520B×3のデータのうち、1KB分のデータを、転送先メモリ１２にライトさせるべく、ライトＤＭＡ１４２にデータ転送を行なわせる（図４の符号Ｐ４，図５の符号Ｓ４参照）。すなわち、ライトＤＭＡ１４２は、ＰＣＩｅバスにおける転送効率のよいデータサイズ（1KBは正確には1024B = 256B×4）単位でデータのライトを行なう。また、これにより、シーケンサ＃０のバッファ領域１５３には、整合性が確認された536B（= 1560B - 1024B）のデータと、整合性が確認されていない488Bのデータとの合計1024Bのデータが残る。
【０１２０】
次に、シーケンサ＃０は、ＤＭＡブロック１４１のリードＤＭＡ１４３に対して、リード指示とともに、シーケンサ＃０において保存されていたカウント値およびＢＣＣチェック演算途中値を通知する（図６の符号Ｓ５参照）。
【０１２１】
リードＤＭＡ１４３は、シーケンサ＃０からの指示に従い、転送元メモリ１２から、2080B（= 520Ｂ×４）の転送データのうち、残りの32B（=2080B - 2048B）のデータをリードする（図６の符号Ｓ６）。
【０１２２】
転送元メモリ１２からリードされたデータは、リードＤＭＡ１４３において整合性チェック部１４３１に入力される。
【０１２３】
整合性チェック部１４３１は、リードされたデータについて、シーケンサ＃０から通知されたカウント値とＢＣＣチェック演算途中値とを用いて、ＢＣＣチェックを行なう（図６の符号Ｓ７参照）。これにより、ＢＣＣチェックが完了していないかった端数の488Bのサイズの転送データについても、ＢＣＣチェックが完了する。リードＤＭＡ１４３は、シーケンサ＃０に、ＢＣＣチェックの結果とともに、リードした32Bのデータを転送する（図６の符号Ｓ８参照）。
【０１２４】
シーケンサ＃０は、バッファ領域１５３に格納されていた1024Bのデータと新たにリードされた32BのデータとをライトＤＭＡ１４２にデータ転送させる（図６の符号Ｓ９参照）。この指示に従い、ライトＤＭＡ１４２は、1056Bのデータを転送先メモリ１２に転送する（図６の符号Ｓ１０参照）。なお、この1056Bのデータを、例えば1024Bと32Bとの２回に分けて転送先メモリ１２に転送してもよい。
上記例においては、2KBという比較的小さなデータの転送であるので、ライトＤＭＡ１４２からの、ＰＣＩｅバスにおける転送効率のよいデータサイズ単位でのデータのライトが１回だけ行なわれる（図５の符号Ｓ４参照）。しかしながら、より大きなデータ転送を行なう際には、このような転送効率のよいデータサイズ単位でのデータのライトが複数回発生し、これにより、全体のデータ転送効率がより向上する。
【０１２５】
次に、上述の如く構成された実施形態の一例としてのストレージ装置１におけるデータ転送時のＣＰＵ１１，ＤＭＡブロック１４１およびシーケンサ１４５による処理を、図８〜図１０を参照しながら、図７に示すシーケンス図に従って説明する。図８〜図１０はそれぞれＤＭＡコントローラ１４内において転送されるデータの流れを説明するための図である。
【０１２６】
これらの図７〜図１０に示す例においても、転送元メモリ１２から転送先メモリ１２へ４ストレージブロック分（520B×4 = 2080B）のデータを転送する例について示す。そして、これらの図７〜図１０に示す例においては、2KBのデータ転送を行なった時点で、調停回路１４９によるシーケンサ１４５の切替が行なわれる例について示す。
【０１２７】
ＣＰＵ１１は、シーケンサ＃０およびシーケンサ＃１に対して、それぞれ所定のレジスタにライト（レジスタＷＴ）を行なうことで起動させる（ＳＥＱキック：符号Ｂ１，Ｂ２参照）。
【０１２８】
シーケンサ＃０およびシーケンサ＃１は、それぞれＣＰＵ１１に対してディスクリプタを要求（符号Ｂ３，Ｂ５参照）する。ＣＰＵ１１は、これらの要求に応じてシーケンサ＃０，＃１にそれぞれディスクリプタを応答する（ディスクリプタリード：符号Ｂ４，Ｂ７参照）。
【０１２９】
シーケンサ＃０は、ディスクリプタに従い、2KBのデータ転送を開始する。すなわち、シーケンサ＃０は、リードＤＭＡ１４３に対して、転送元メモリ１２からの2KBのデータリードを指示（リード要求を発行）する（図７の符号Ｂ６，図８の符号Ｓ１１参照）。
【０１３０】
リードＤＭＡ１４３は、ＣＰＵ１１に対して、転送元メモリ１２からの2KBの転送データのリードを要求する（図７の符号Ｂ８参照）。このリード要求に応じて、ＣＰＵ１１を介して、転送元メモリ１２からの転送データのリードが行なわれる（図７の符号Ｂ９，図８の符号Ｓ１２参照）。
【０１３１】
リードＤＭＡ１４３の整合性チェック部１４３１は、受信した2KB分の転送データに対してＢＣＣチェックを行なう（図７の符号Ｂ１０）。上述の如く、この2KBの転送データには、３つの520Bのストレージブロックおよび488BというＰＣＩｅバスにおける転送効率の観点からは中途半端なデータサイズの端数のデータブロックが含まれている。このＢＣＣチェックの結果、３つの520Bのストレージブロックの整合性が確認される（図４の符号Ｐ２参照）。488Bの端数のデータブロックについては整合性の確認がされない（図４の符号Ｐ３参照）。
【０１３２】
リードＤＭＡ１４３は、ＢＣＣチェックが完了し整合性が確認された520B×3（＝1560B）のデータサイズの転送データと、端数の488Bのサイズの転送データとの合計、2KB（正確には2048B ＝ 520B×3＋488B）分のデータを、シーケンサ＃０に送信する（図７の符号Ｂ１１，図８の符号Ｓ１３参照）。
【０１３３】
リードＤＭＡ１４３は、ＢＣＣチェック演算途中値およびカウント値をシーケンサ＃０へ渡す（図７の符号Ｂ１２，図８の符号Ｓ１４参照）。なお、本例においては、このカウント値は、488Bを表す値である。また、この時、520Bのデータを受け取った３つのストレージブロックに関しては、整合性チェック部１４３１によるＢＣＣチェックの結果、整合性のあるデータであるか否かを示す判断結果も合わせてシーケンサ＃０に渡される。
【０１３４】
シーケンサ＃０において、保存制御部１４７１が、ＤＭＡブロック１４１の整合性チェック部１４３１により整合性が確認された1560B（= 520B×3）のデータと、整合性が確認されていない488B（= 2048B - 520B×3）のデータとをメモリ１４６のバッファ領域１５３に格納する。また、保存制御部１４７１は、ＤＭＡブロック１４１から送信されたＢＣＣチェック演算途中値をメモリ１４６にＢＣＣチェック演算途中値１５１として格納する。また、保存制御部１４７１は、ＤＭＡブロック１４１から送信されたカウント値をメモリ１４６にカウント値１５２として格納する。
【０１３５】
シーケンサ＃０によるデータ転送量が所定量（2KB）に達したことにより、調停回路１４９によりシーケンサ１４５の切替が行なわれる。リードＤＭＡ１４３のリソース解放が行なわれる。リードＤＭＡ１４３のリソースが解放されると、シーケンサ＃１によるリードＤＭＡ１４３の使用が開始される。
【０１３６】
シーケンサ＃１は、リードＤＭＡ１４３に対してリード要求を発行する（図７の符号Ｂ１３，図９の符号Ｓ１５参照）。リードＤＭＡ１４３は、ＣＰＵ１１に対して、転送元メモリ１２からの転送データのリードを要求する（図７の符号Ｂ１４参照）。このリード要求に応じて、ＣＰＵ１１を介して、転送元メモリ１２からの転送データのリードが行なわれる（図７の符号Ｂ１５，図９の符号Ｓ１６参照）。リードされた転送データは、リードＤＭＡ１４３からシーケンサ＃１に転送される（図７の符号Ｂ１６，図９の符号Ｓ１７参照）。
【０１３７】
シーケンサ＃０は、ライトＤＭＡ１４２に対して、整合性が確認された520B×3のデータのうち、1KB分のデータを、転送先メモリ１２にライトさせるべく、ライトＤＭＡ１４２にデータ転送を行なわせる（図９の符号Ｓ１８参照）。すなわち、ライトＤＭＡ１４２は、ＰＣＩｅバスにおける転送効率のよいデータサイズ（1KBは正確には1024B = 256B×4）単位でデータのライトを行なう。また、これにより、シーケンサ＃０のバッファ領域１５３には、整合性が確認された536B（= 1560B - 1024B）のデータと、整合性が確認されていない488Bのデータとの合計1024Bのデータが残る。
【０１３８】
残りの1024Bの転送データは、シーケンサ＃０でバッファしておく。この残りの1024Bの転送データは次のデータ転送時に転送されるデータとともに転送することで、通信路の利用効率を向上させる。
【０１３９】
ライトＤＭＡ１４２は、転送先メモリ１２に対して、ライトデータを転送してライトさせる（図７の符号Ｂ１８，図９の符号Ｓ１９参照）。
【０１４０】
シーケンサ＃１において転送データのリードが完了することで、リードＤＭＡ１４３のリソースを解放する（図７の符号Ｂ１９）。リードＤＭＡ１４３のリソースが解放されると、シーケンサ＃０によるリードＤＭＡ１４３の使用が開始される。
【０１４１】
シーケンサ＃０は、リードＤＭＡ１４３に対して、2080Bのうちの残りの32Bの転送データのリード要求を発行する（図７の符号Ｂ２０，図１０の符号Ｓ２０参照）。また、シーケンサ＃０は、このリード要求ともに、ＢＣＣチェック演算途中値とカウント値とをリードＤＭＡ１４３に送信する（図７の符号Ｂ２１，図１０の符号Ｓ２１参照）。
【０１４２】
リードＤＭＡ１４３は、ＣＰＵ１１に対して、転送元メモリ１２からの転送データのリードを要求する（図７の符号Ｂ２２参照）。このリード要求に応じて、ＣＰＵ１１を介して、転送元メモリ１２から2080B（= 520Ｂ×４）の転送データのうち、残りの32B（=2080B - 2048B）のデータをリードする（図７の符号Ｂ２３，図１０の符号Ｓ２２参照）。転送元メモリ１２からリードされた32Bのデータは、リードＤＭＡ１４３において整合性チェック部１４３１に入力される。
【０１４３】
リードＤＭＡ１４３の整合性チェック部１４３１は、受信した32Bの転送データに対してＢＣＣチェックを行なう（図７の符号Ｂ２４）。整合性チェック部１４３１は、このＢＣＣチェックを行なうに際して、シーケンサ＃０から受信したＢＣＣ演算途中値およびカウント値を用いて整合性チェック用計算を再開し、残りのＢＣＣを計算する。整合性チェック部１４３１は、受信した32Bのデータを用いて算出したＢＣＣの整合性をチェックする。これにより、ＢＣＣチェックが完了していないかった端数の488Bのサイズの転送データについても、ＢＣＣチェックが完了する。
【０１４４】
リードＤＭＡ１４３は、32Bの転送データをシーケンサ＃０に転送する（図７の符号Ｂ２５，図１０の符号Ｓ２３参照）。この際、リードＤＭＡ１４３は、シーケンサ＃０に対して、残りの４つ目のストレージブロックについてのＢＣＣの整合性のチェック結果も通知する。
【０１４５】
シーケンサ＃０は、バッファ領域１５３に格納されていた1024Bのデータと新たにリードされた32BのデータとをライトＤＭＡ１４２にデータ転送させる（図７の符号Ｂ２６，図１０の符号Ｓ２４参照）。この指示に従い、ライトＤＭＡ１４２は、1056B（= 1024B + 32B）のデータを転送先メモリ１２に転送する。なお、この1056Bのデータを、例えば1024Bと32Bとの２回に分けて転送先メモリ１２に転送してもよい。
【０１４６】
ライトＤＭＡ１４２は、転送先メモリ１２に対して、転送データを転送してライトさせ（図７の符号Ｂ２７，図１０の符号Ｓ２５参照）、処理を終了する。
上記例においては、2KBという比較的小さなデータの転送であるので、シーケンサ＃０による、ライトＤＭＡ１４２からのＰＣＩｅバスにおける転送効率のよいデータサイズ単位でのデータのライトが１回だけ行なわれる（図７の符号Ｂ１８参照）。しかしながら、より大きなデータ転送を行なう際には、このような転送効率のよいデータサイズ単位でのデータのライトが複数回発生し、これにより、全体のデータ転送効率がより向上する。
【０１４７】
（Ｃ）効果
このように、本発明の一実施形態としてのストレージ装置１によれば、転送元メモリ１２から転送先メモリ１２へのデータ転送を行なうに際して、ＤＭＡブロック１４１が、ＰＣＩｅ転送好適サイズである256B（= ＭＰＳ）の整数倍のサイズ（転送サイズ）単位で分割してデータの転送を行なう。これにより、転送元メモリ１２から転送先メモリ１２へのデータ転送路におけるデータの転送効率を向上させることができ、ＤＭＡにおけるデータ転送性能を向上させることができる。
【０１４８】
シーケンサ１４５において、転送制御部１４７２は、リードＤＭＡ１４３に対して、転送元メモリ１２から転送データをＰＣＩｅ転送好適サイズ（例えば、ＭＰＳの整数倍）単位で分割して転送（リード）させる。
【０１４９】
これにより、転送元メモリ１２からＤＭＡブロック１４１までのデータ転送路におけるデータの転送効率を向上させることができ、ＤＭＡにおけるデータ転送性能を向上させることができる。
【０１５０】
シーケンサ１４５において、保存制御部１４７１が、ＤＭＡブロック１４１の整合性チェック部１４３１によりＢＣＣチェックが行なわれた整合性確認済みの転送データをメモリ１４６のバッファ領域１５３に格納する。そして、転送制御部１４７２は、ライトＤＭＡ１４２に対して、バッファ領域１５３に格納された転送データをＰＣＩｅ転送好適サイズ単位で転送させる。
【０１５１】
これにより、ＤＭＡブロック１４１から転送先メモリ１２へのデータ転送路におけるデータの転送効率を向上させることができ、ＤＭＡにおけるデータ転送性能を向上させることができる。
【０１５２】
調停回路１４９がＤＭＡブロック１４１に接続するシーケンサ１４５を切り替えることで、シーケンサ１４５に比べて数の少ないＤＭＡブロック１４１を効率的に用いることができる。また、ＤＭＡブロック１４１の数をシーケンサ１４５に比べて少なくすることで、消費電力や製造コストを削減することができ、また、装置の小型化にも貢献することができる。
【０１５３】
ストレージブロックの転送途中で、調停回路１４９によりＤＭＡブロック１４１に接続されるシーケンサ１４５の切り替えが行なわれる場合には、ＤＭＡブロック１４１は、整合性チェック部１４３１により実行中のＢＣＣチェックを中断する。そして、ＤＭＡブロック１４１は、整合性チェック部１４３１により算出されたＢＣＣチェック演算途中値を、切替前のシーケンサ１４５（ＤＭＡ接続解除されるシーケンサ１４５）に対して送信する。また、この際、リードＤＭＡ１４３は、ＢＣＣチェック演算途中値とともに、このＢＣＣチェック演算途中値に対応するカウント値も、切替前のシーケンサ１４５に対して送信する。
【０１５４】
シーケンサ１４５において、保存制御部１４７１は、通知されたカウント値およびＢＣＣチェック演算途中値をメモリ１４６にカウント値１５２およびＢＣＣチェック演算途中値１５１として格納する。
【０１５５】
そして、転送制御部１４７２は、調停回路１４９によりシーケンサ１４５の切替が行なわれ、当該シーケンサ１４５にＤＭＡブロック１４１が再度接続された場合に、そのＤＭＡブロック１４１のリードＤＭＡ１４３に次のデータリード指示を出す際に、ＢＣＣチェック演算途中値１５１およびカウント値１５２をデータリード指示に付加して渡す。
【０１５６】
これにより、リードＤＭＡ１４３は、ＤＭＡ接続解除される前に行なっており、ＤＭＡ接続解除されることで中断していたデータリード（データ転送）を、ＤＭＡ接続解除される前と同じ位置から再開することができる。
【０１５７】
すなわち、本ストレージ装置１においては、転送元メモリ１２から転送先メモリ１２へのデータ転送の途中で、任意のタイミングでデータ転送を中止しても、ＢＣＣ演算途中値およびカウント値を用いることで、データ転送の再開時に、データ転送を再開することができる。
【０１５８】
そして、これにより、ＤＭＡブロック１４１によるＰＣＩｅ転送好適サイズでのデータの転送が行なわれたタイミングで、調停回路１４９によるシーケンサ１４５の切替を行なっても、データ転送を最初からやり直す必要がなく、データ転送を効率的に行なうことができる。
【０１５９】
ストレージ装置における処理サイズである520Bと、ＰＣＩｅにとって伝送効率の用いデータサイズである256Bの整数倍とに鑑みると、256Bと520Bとの最小公倍数である65KB単位でのデータ転送を行なうことが考えられる。しかしながら、このような大きなデータサイズ単位でのデータ転送は、１つのデータ転送に対して、ＤＭＡ資源が占有される事態を招くこととなり非効率的である。例えば、転送データサイズが小さく本来ならすぐに終了するデータ転送にＤＭＡ資源が占有され、他のデータ転送が無駄に待たされることになり、システム全体として性能低下につながる。本ストレージ装置１においては、ＤＭＡブロック１４１が、ＰＣＩｅ転送好適サイズである256Bの整数倍（例えば、転送サイズが1KBの場合では４倍）でデータの転送を行なうことで、ＤＭＡ資源が占有されることなく効率的なデータ転送を実現することができる。
【０１６０】
ＰＣＩｅの規格においては、一度にリードできるデータサイズの上限が4KBに規定されているので、リードに関しては、転送サイズを4KB以下にすることが望ましい。転送サイズを4KB以下にすることで、ＤＭＡ資源の占有を回避することも期待される。
【０１６１】
また、ライトに関しては、ＣＰＵ等の他のデバイスにおけるデータ転送上の制約を考慮して、適宜、転送サイズを決定することが望ましい。
【０１６２】
（Ｄ）その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成および各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０１６３】
例えば、上述した実施形態においては、ストレージ装置１が２つのＣＭ１０を備えているが、これに限定されるものではなく、１つもしくは３つ以上のＣＭ１０を備えてもよい。
【０１６４】
また、各ＣＭ１０において、ＣＰＵ１１に備えられるコア１１１の数や、ＤＭＡコントローラ１４に備えられるＤＭＡブロック１４１の数およびシーケンサ１４５の数も適宜変更して実施することができる。
【０１６５】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【０１６６】
（Ｅ）付記
以上の実施形態に関し、さらに以下の付記を開示する。
【０１６７】
（付記１）
第１データサイズの第１データブロック単位でデータを格納する第１メモリから第２メモリに、第２データサイズ幅の通信路を介して転送データを転送するデータ転送装置において、
前記第１メモリから読み出された前記転送データを格納する格納部と、
前記格納部に格納された前記転送データを、前記第１メモリから前記第２メモリに、前記第２データサイズの整数倍単位で転送する転送制御部と
を備えることを特徴とする、データ転送装置。
【０１６８】
（付記２）
前記第１データブロックが整合情報を有し、
転送元である前記第１メモリから転送データをリードし、転送先である前記第２メモリに前記転送データをライトすることで、前記転送データの転送を実行する転送実行部と、
前記転送実行部に前記転送データの転送を指示し、前記転送実行部よりも多く備えられた複数の転送指示部と、
前記複数の転送指示部のうち、前記転送実行部を占有して転送指示を行なう前記転送指示部を切り替える切替制御部と、
前記整合情報を用いて前記転送データの整合性確認を行なう整合性確認部と、
前記切替制御部が、前記転送実行部を占有する前記転送指示部を切替える際に、切替前に前記転送指示部が記憶部に保存した、前記整合性確認部による前記整合性確認の中断時に算出された整合性確認演算途中値と、前記整合性確認の進捗情報とを、前記転送実行部への転送再開指示とともに、切替後の前記転送の再開時に前記整合性確認部に通知する通知部と
をそなえ、
前記整合性確認部が、通知された前記整合性確認演算途中値および進捗情報に基づいて、前記整合性確認を再開する
ことを特徴とする、付記１記載のデータ転送装置。
【０１６９】
（付記３）
第１データサイズの第１データブロック単位でデータを格納する第１メモリから第２メモリに、第２データサイズ幅の通信路を介して転送データを転送するデータ転送装置において、
前記第１メモリから読み出された前記転送データを格納部に格納する処理と、
前記格納部に格納された前記転送データを、前記第１メモリから前記第２メモリに、前記第２データサイズの整数倍単位で転送する処理と
を備えることを特徴とする、データ転送方法。
【０１７０】
（付記４）
前記第１データブロックが整合情報を有し、
前記データ転送装置が、
転送元である前記第１メモリから転送データをリードし、転送先である前記第２メモリに前記転送データをライトすることで、前記転送データの転送を実行する転送実行部と、
前記転送実行部に前記転送データの転送を指示し、前記転送実行部よりも多く備えられた複数の転送指示部と、
前記複数の転送指示部のうち、前記転送実行部を占有して転送指示を行なう前記転送指示部を切り替える切替制御部と、
前記整合情報を用いて前記転送データの整合性確認を行なう整合性確認部とをそなえ、
前記切替制御部が、前記転送実行部を占有する前記転送指示部を切替える際に、切替前に前記転送指示部が記憶部に保存した、前記整合性確認部による前記整合性確認の中断時に算出された整合性確認演算途中値と、前記整合性確認の進捗情報とを、前記転送実行部への転送再開指示とともに、切替後の前記転送の再開時に前記整合性確認部に通知する処理と、
前記整合性確認部が、通知された前記整合性確認演算途中値および進捗情報に基づいて、前記整合性確認を再開する処理と
を備えることを特徴とする、付記３記載のデータ転送方法。
【符号の説明】
【０１７１】
１    ストレージ装置
１０，１０−１，１０−２    ＣＭ
１１    ＣＰＵ
１２    メモリ
１３    スイッチ
１４    ＤＭＡコントローラ
１４１    ＤＭＡブロック
１４２    ライトＤＭＡ
１４３    リードＤＭＡ
１４３１    整合性チェック部
１４３２    進捗管理部
１４５    シーケンサ
１４６    メモリ
１４７    プロセッサ
１４７１    保存制御部
１４７２    転送制御部
１４９    調停回路
１５１    ＢＣＣチェック演算途中値
１５２    カウント値
１５３    バッファ領域
１６０    ＰＣＩｅコントローラ
【図１】
2019095844.tif 000003
【図２】
2019095844.tif 000004
【図３】
2019095844.tif 000005
【図４】
2019095844.tif 000006
【図５】
2019095844.tif 000007
【図６】
2019095844.tif 000008
【図７】
2019095844.tif 000009
【図８】
2019095844.tif 000010
【図９】
2019095844.tif 000011
【図１０】
2019095844.tif 000012
【図１１】
2019095844.tif 000013