以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理装置の構成および処理例を示す図である。図1に示す情報処理装置10は、転送制御回路11a,11bと制御回路12を有する。
転送制御回路11a,11bはいずれも、制御回路12からの指示に応じて、記憶装置13からのデータ転送を実行する。なお、図1の例では記憶装置13は情報処理装置10の内部に搭載されているが、記憶装置13は情報処理装置10の外部に設置されていてもよい。また、ここでは例として、転送制御回路11a,11bは、記憶装置13から記憶装置20へのデータ転送を実行するものとする。ただし、転送制御回路11a,11bは、記憶装置13に格納されたデータを記憶装置13内の別の記憶領域に格納するようなデータ転送を実行してもよい。
転送制御回路11aは、その内部の回路構成を更新可能となっている。例えば、転送制御回路11aは、FPGAとして実現される。転送制御回路11aは、第1のフォーマットで記述された指示情報に基づいて、記憶装置13からのデータ転送を実行する。転送制御回路11bは、第2のフォーマットで記述された指示情報に基づいて、記憶装置13からのデータ転送を実行する。
指示情報とは、データ転送を指示するための情報であり、例えば、転送元アドレス、転送先アドレスなど、データ転送の処理内容に関する情報が記述される。また、指示情報は、制御回路12によって記憶領域13aに格納される。転送制御回路11a,11bは、記憶領域13aに格納された指示情報を参照することによって、その指示情報に基づくデータ転送を実行する。なお、図1では例として、記憶領域13aは記憶装置13の内部に確保されているが、記憶領域13aは記憶装置13以外の他の記憶装置に確保されてもよい。
情報処理装置10では、制御回路12の制御により、通常時には、転送制御回路11a,11bのうち転送制御回路11aを使用して、記憶装置13からのデータ転送が実行される。また、転送制御回路11aの回路構成を更新する際には、転送制御回路11bを使用して記憶装置13からのデータ転送が実行される。このように、転送制御回路11aの回路構成が更新される際には、転送制御回路11aに代わって転送制御回路11bがデータ転送を実行することで、情報処理装置10の動作を停止させずに転送制御回路11aの回路構成を更新できる。
制御回路12は、通常時には、データ転送要求を受けるたびに、そのデータ転送を指示する指示情報を第1のフォーマットを用いて作成して記憶領域13aに格納した後、作成した指示情報に基づくデータ転送の実行を転送制御回路11aに指示する。
例えば、図1の右上に示すように、制御回路12は、あるデータの転送要求を受けると、そのデータ転送を指示する指示情報I1を作成し、記憶領域13aに格納する。その後、制御回路12は、指示情報I1に基づくデータ転送の実行を転送制御回路11aに指示する。指示を受けた転送制御回路11aは、指示情報I1に基づいてデータ転送を実行する。
また、制御回路12は、別のデータの転送要求を受けると、そのデータ転送を指示する指示情報I2を作成し、記憶領域13aに格納する。その後、制御回路12は、指示情報I2に基づくデータ転送の実行を転送制御回路11aに指示する。指示を受けた転送制御回路11aは、指示情報I2に基づいてデータ転送を実行する。
制御回路12は、転送制御回路11aの回路構成を変更する際には、次のような処理を実行する。まず、制御回路12は、記憶領域13aに格納された指示情報の中に、データ転送の実行を転送制御回路11aに指示していない指示情報があるかを判定する。ここで、上記のように、制御回路12は、作成した指示情報を記憶領域13aに格納した後、その指示情報に基づくデータ転送の実行を転送制御回路11aに指示する。このため、指示情報が記憶領域13aに格納されてから、その指示情報に基づくデータ転送の実行が指示されるまでには、タイムラグがある。このようなタイムラグにより、転送制御回路11aの回路構成を変更するタイミングで、記憶領域13aに格納された指示情報の中に、データ転送の実行を転送制御回路11aに指示していない指示情報が存在する場合がある。
ここでは例として、図1の右上に示すように、転送制御回路11aの回路構成を変更するタイミングで、記憶領域13aに格納された指示情報I3,I4について、データ転送の実行が指示されていなかったものとする。この場合、制御回路12は、指示情報I3,I4を第2のフォーマットに変換して、指示情報I3a,I4aをそれぞれ作成する。図1の右下に示すように、制御回路12は、作成した指示情報I3a,I4aを記憶領域13aに格納した後、指示情報I3a,I4aにそれぞれ基づくデータ転送の実行を、転送制御回路11bに指示する。これとともに、制御回路12は、転送制御回路11aの回路構成の更新処理を開始させる。
指示情報I3a,I4aは第2のフォーマットに変換されているので、指示を受けた転送制御回路11bは、指示情報I3a,I4aを参照することで、それらに基づくデータ転送を実行できる。したがって、転送制御回路11bにより、フォーマット変換前の指示情報I3,I4で指示されていた内容のデータ転送処理が実行される。
以上の処理により、指示情報I3,I4に基づくデータ転送の実行が指示される前に転送制御回路11aの回路構成を変更するタイミングになった場合でも、指示情報I3,I4で指示されていた内容のデータ転送処理が転送制御回路11bに確実に引き継がれる。したがって、転送制御回路11aの回路構成を更新する際に、データ転送処理を確実に継続できるようになる。
換言すると、どのようなタイミングで転送制御回路11aの回路構成を更新しようとしても、制御回路12に対して要求されたデータ転送を正しく継続することができる。したがって、情報処理装置10の動作を停止させずに、任意のタイミングで転送制御回路11aの回路構成を更新することができる。
〔第2の実施の形態〕
次に、図1に示した情報処理装置10の一例としてストレージ制御装置を示し、このストレージ制御装置を含むストレージシステムについて説明する。
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステムは、CM(Controller Module)100,200およびドライブ部300を備えたストレージ装置50と、ホスト装置410,420とを含む。ホスト装置410,420は、例えばSAN(Storage Area Network)430を介して、CM100,200と接続されている。
CM100,200は、ホスト装置410またはホスト装置420からの要求に応じて、ドライブ部300に搭載された記憶装置に対するアクセスを制御するストレージ制御装置である。CM100は、CM100の内部のキャッシュを用いて、ドライブ部300内の記憶装置に対するアクセスを制御する。CM200も同様に、CM200の内部のキャッシュを用いて、ドライブ部300内の記憶装置に対するアクセスを制御する。
また、CM100とCM200は、互いに接続され、データを互いに送受信することができる。特に、後述するように、CM100とCM200との間では、それぞれが備えるDMAコントローラにより、一方が備えるRAM(Random Access Memory)から他方が備えるRAMへのデータの転送が可能になっている。
このようなCM100とCM200との間のデータ転送は、例えば、キャッシュのミラーリングに利用される。例えば、CM100,200のうち、一方が運用状態に設定され、他方がスタンバイ状態に設定される。運用状態のCMは、その内部のキャッシュのデータを他方のCM内のミラーリング領域に書き込むことで、キャッシュのデータを二重化する。これにより、運用状態のCMが異常停止した場合に、他方のCMが運用状態に遷移し、ドライブ部300内の記憶装置へのアクセス制御を引き継ぐことができる。
ドライブ部300には、ホスト装置410,420からのアクセス対象となる複数台の記憶装置が搭載されている。本実施の形態では例として、ドライブ部300は、このような記憶装置としてHDD(Hard Disk Drive)301,302,303,・・・が搭載されたディスクアレイ装置であるものとする。なお、ホスト装置410,420からのアクセス対象となる記憶装置は、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置であってもよい。
図3は、CMのハードウェア構成例を示す図である。
CM100は、CPU110、RAM120、SSD130、PCIe(PCI express,PCI:Peripheral Component Interconnect)スイッチ(SW)140、DMAコントローラ(DMAC)150、ROM(Read Only Memory)160、ホストインタフェース(I/F)170およびドライブインタフェース(I/F)180を備える。
CPU110は、CM100全体を統括的に制御する。CPU110は、例えば、1または複数のプロセッサコアを備える。また、CPU110には、DMAコントローラ(DMAC)111が内蔵されている。DMAコントローラ111は、RAM120と他方のCM200のRAM220との間のデータ転送、および、RAM120内のある記憶領域から別の記憶領域へのデータ転送を制御する。
なお、図示しないが、CPU110は、メモリコントローラを備えている。メモリコントローラにより、DMAコントローラ150,111からRAM120に対するデータの読み書きが、CPU110のプロセッサコアを介さずに実行可能となる。
RAM120は、CM100の主記憶装置として使用される。RAM120には、CPU110に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM120には、CPU110による処理に必要な各種データが格納される。例えば、RAM120には、ホスト装置410,420からの要求に応じたドライブ部300内の記憶装置へのアクセス制御の際に用いられるキャッシュの領域が確保される。
SSD130は、CM100の補助記憶装置として使用される。SSD130には、OSプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、HDDなどの他の種類の不揮発性記憶装置が用いられてもよい。また、SSD130は、バスコントローラが搭載されたチップセットなどを介してCPU110と接続されていてもよい。
CPU110とホストインタフェース170、ドライブインタフェース180、他方のCM200との間は、PCIeスイッチ140を介してPCIeバスによって接続されている。PCIeスイッチ140は、CPU110とホストインタフェース170、ドライブインタフェース180、他方のCM200との間のデータ送受信を制御する。
DMAコントローラ150は、RAM120と他方のCM200のRAM220との間のデータ転送、および、RAM120内のある記憶領域から別の記憶領域へのデータ転送を制御する。DMAコントローラ150は、FPGAによって実現される。ROM160は、例えばフラッシュROMなどの書き替え可能な記憶装置であり、DMAコントローラ150に接続されている。ROM160には、DMAコントローラの内部論理回路の構成を指示するためのプログラムが記憶されている。
ROM160に記憶されたプログラムが更新され、更新後のプログラムがDMAコントローラ150に適用されることで、DMAコントローラ150の内部論理回路の構成がそのプログラムに基づいて更新される。このような回路構成の更新により、例えば、DMAコントローラ150の既存処理機能の性能や確実性を向上させることができる。また、例えば、DMAコントローラ150に新たな処理機能を追加することもできる。
なお、以下の説明では、DMAコントローラ150の回路構成を更新することを「再構成する」と記載する。
ホストインタフェース170は、SAN430を介してホスト装置410,420と通信するためのインタフェースである。ホストインタフェース170は、例えば、FC(Fibre Channel)インタフェースである。ドライブインタフェース180は、ドライブ部300内の記憶装置と通信するためのインタフェースである。ドライブインタフェース180は、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)インタフェースである。
CM200は、CM100と同様のハードウェア構成を有する。すなわち、CM200は、CPU210、RAM220、SSD230、PCIeスイッチ(SW)240、DMAコントローラ(DMAC)250、ROM260、ホストインタフェース(I/F)270およびドライブインタフェース(I/F)280を備える。CPU210、RAM220、SSD230、PCIeスイッチ240、DMAコントローラ250、ROM260、ホストインタフェース270およびドライブインタフェース280は、CPU110、RAM120、SSD130、PCIeスイッチ140、DMAコントローラ150、ROM160、ホストインタフェース170およびドライブインタフェース180にそれぞれ対応する構成要素であるので、ここでは説明を省略する。
なお、PCIeスイッチ240は、他方のCM100のPCIeスイッチ140とPCIeバスを介して接続されている。したがって、PCIeスイッチ140とPCIeスイッチ240との通信により、CM100とCM200との間のデータ転送が実現される。
また、DMAコントローラ250は、RAM220と他方のCM100のRAM120との間のデータ転送、および、RAM220内のある記憶領域から別の記憶領域へのデータ転送を制御する。さらに、CPU210には、DMAコントローラ(DMAC)211が内蔵されている。DMAコントローラ211も、RAM220と他方のCM100のRAM120との間のデータ転送、および、RAM220内のある記憶領域から別の記憶領域へのデータ転送を制御することが可能である。
なお、以上の構成において、CM100,200は、図1の情報処理装置10の一例である。CM100を情報処理装置10の一例とした場合、CPU110は、図1の制御回路12の一例である。また、RAM120,220は、それぞれ図1の記憶装置13,20の一例である。さらに、DMAコントローラ150,111は、それぞれ図1の転送制御回路11a,11bの一例である。
ところで、CM100では、DMAコントローラ150,111により、RAM120と他方のCM200のRAM220との間のデータ転送、および、RAM120内のある記憶領域から別の記憶領域へのデータ転送が、CPU110のプロセッサコアを介さずに実行される。本実施の形態では、通常時には、DMAコントローラ150の動作によって上記データ転送が実行され、DMAコントローラ111は使用されない。そして、DMAコントローラ150を再構成する際には、DMAコントローラ111を使用して上記データ転送が実行される。すなわち、DMAコントローラ150の最構成の際には、DMAコントローラ150によるデータ転送処理がDMAコントローラ111によって肩代わりされる。これにより、CM100の処理(例えば、ホスト装置410,420からのI/O要求に応じたI/O制御処理)を停止させずにDMAコントローラ150を再構成する「動的再構成」を実現できる。
また、DMAコントローラ150は、RAM間のデータ転送機能だけでなく、データ転送に関係する付加的な処理の実行機能も備える。例えば、DMAコントローラ150は、転送データにBCC(Block Check Character)などのエラーチェック用のチェックコードを付加する処理や、転送データを圧縮する処理を実行できる。以下、このような付加的な処理を「オプション処理」と記載する。また、DMAコントローラ150はFPGAであるので、DMAコントローラ150に対してオプション処理機能を後から追加することもできる。
DMAコントローラ150がこのようなオプション処理を実行することで、データ転送の際にCPU110がこのようなオプション処理を実行しなくてよくなり、その分だけCPU110の処理負荷を軽減できる。その結果、CPU110に他の処理を割り当てて実行させることができ、CM100全体としての処理性能が向上する。したがって、通常時にはDMAコントローラ150によってデータ転送が行われることで、CM100全体の処理性能を向上させることができる。
一方、DMAコントローラ111の例のように、近年のCPUの中にはDMAコントローラが内蔵されているものがある。ただし、CPUに内蔵されたDMAコントローラは、基本的なデータ転送機能だけを備えているものが多く、DMAコントローラ150のような各種のオプション処理の実行機能を備えていないものが多い。
本実施の形態のDMAコントローラ111も、オプション処理の実行機能を備えていない。このため、通常時にはデータ転送をDMAコントローラ111ではなくDMAコントローラ150に実行させることで、上記のようにCM100全体の処理性能を向上させることができる。一方、DMAコントローラ150の再構成の実行時には、データ転送をDMAコントローラ111が肩代わりする。これにより、データ転送の肩代わりのために新たなDMAコントローラを搭載させずに、既存の資源を用いてDMAコントローラ111の動的再構成を実現できる。すなわち、動的再構成の実現のための装置コストを抑制できる。ただし、後述するように、DMAコントローラ111がデータ転送を実行する際には、オプション処理がCPU110によって実行される。
なお、CM200でも同様に、通常時には、DMAコントローラ250の動作によってデータ転送が実行され、DMAコントローラ211は使用されない。そして、DMAコントローラ250を再構成する際には、DMAコントローラ211を使用してデータ転送が実行される。すなわち、DMAコントローラ250の再構成の際には、DMAコントローラ250によるデータ転送がDMAコントローラ211によって肩代わりされる。
これにより、CM200の処理(例えば、ホスト装置410,420からのI/O要求に応じたI/O制御処理)を停止させずに、DMAコントローラ250を再構成することができる。また、通常時にはCM200全体の処理性能を向上させることができるとともに、DMAコントローラ250の動的再構成を低コストで実現できる。
以下、CM100,200における上記のようなDMAコントローラ150,250の動的再構成の制御処理について、詳しく説明する。以下の説明では、例としてCM100について説明するが、CM200もCM100と同様の処理を実行可能である。
図4は、CMが備える処理機能の構成例を示すブロック図である。まず、CM100のCPU110は、前述のDMAコントローラ111の他、プロセッサコア112を備える。プロセッサコア112は、RAM120から読み込んだプログラムにしたがって各種の演算処理を実行するための演算回路である。なお、CPU110は、複数のプロセッサコア112を備えていてもよい。
また、CM100は、I/O制御部113、DMA制御部114、再構成制御部115およびディスクリプタ記憶部121,122を備える。I/O制御部113、DMA制御部114および再構成制御部115の処理は、プロセッサコア112が所定のプログラムを実行することで実現される。ディスクリプタ記憶部121,122は、RAM120の記憶領域の一部として実現される。
I/O制御部113は、ホスト装置410,420からのI/O要求に応じて、ドライブ部300内のHDDのI/O制御処理を実行する。このI/O制御処理において、I/O制御部113は、RAM120に確保されたキャッシュ領域(図示せず)を使用する。
例えば、I/O制御部113は、ホスト装置410からデータの読み出しが要求されたとき、要求されたデータがキャッシュ領域に格納されている場合には、そのデータをキャッシュ領域から読み出してホスト装置410に送信する。一方、要求されたデータがキャッシュ領域に格納されていない場合、I/O制御部113は、要求されたデータをドライブ部300内のHDDから読み出してキャッシュ領域に格納し、そのデータをホスト装置410に送信する。
また、I/O制御部113は、ホスト装置410,420からドライブ部300へのデータの書き込みをライトバック方式で制御する。例えば、ホスト装置410からデータの書き込みが要求された場合、I/O制御部113は、ホスト装置410から受信した書き込みデータをRAM120のキャッシュ領域に書き込む。また、I/O制御部113は、その書き込みデータをCM200のRAM220にも書き込む。書き込みデータのRAM220への書き込みは、通常状態では、DMAコントローラ150にRAM間のデータ転送を依頼することで実行される。I/O制御部113は、書き込みデータがRAM120,220の両方に書き込まれた後、ホスト装置410に書き込み完了応答を送信する。また、I/O制御部113は、その後の所定のタイミングで、RAM120のキャッシュ領域に書き込まれた書き込みデータを、ドライブ部300内の対応するHDDに書き込む。
なお、I/O制御部113は、プロセッサコア112によって実現され、かつ、RAM間のデータ転送をDMAコントローラ150に依頼する処理機能の中のあくまで一例である。プロセッサコア112は、ホスト装置410またはホスト装置420からドライブ部300へのI/O処理以外の処理過程において、RAM間のデータ転送をDMAコントローラ150に依頼してもよい。なお、ここで言うRAM間のデータ転送とは、RAM220と他方のCM100のRAM120との間のデータ転送であっても、RAM220内のある記憶領域から別の記憶領域へのデータ転送であってもよい。
DMA制御部114は、I/O制御部113などの依頼元からの依頼に応じて、DMAコントローラ150またはDMAコントローラ111に対して、RAM間のデータ転送を指示する。データ転送の指示は、ディスクリプタを用いて行われる。ディスクリプタとは、DMAコントローラ150,111に実行させるRAM間のデータ転送処理の内容を示す命令セットが記述されるデータ構造体である。
あるDMAコントローラにデータ転送を指示する場合、DMA制御部114は、データ転送処理の内容を記述したディスクリプタをディスクリプタ記憶部121に格納する。そして、DMA制御部114は、そのディスクリプタのRAM120上のアドレスをDMAコントローラに通知して、データ転送の実行を指示する。DMAコントローラは、通知されたRAM120上のアドレスにアクセスしてディスクリプタを読み出し、そのディスクリプタの内容にしたがってデータ転送処理を実行する。
DMA制御部114は、DMAコントローラ150にデータ転送を指示する場合、ディスクリプタをディスクリプタ記憶部121に格納する。一方、DMA制御部114は、DMAコントローラ111にデータ転送を指示する場合、ディスクリプタをディスクリプタ記憶部122に格納する。したがって、ディスクリプタ記憶部121は、DMAコントローラ150にデータ転送を指示するためのディスクリプタが格納される専用の記憶領域である。また、ディスクリプタ記憶部122は、DMAコントローラ111にデータ転送を指示するためのディスクリプタが格納される専用の記憶領域である。
ディスクリプタ記憶部121には、DMAコントローラ150にデータ転送を指示するためのディスクリプタが、FIFO(First In First Out)方式で格納される。DMAコントローラ150によるデータ転送が完了すると、それに対応するディスクリプタはディスクリプタ記憶部121から消去される。また、ディスクリプタ記憶部122には、DMAコントローラ111にデータ転送を指示するためのディスクリプタが、FIFO方式で格納される。DMAコントローラ111によるデータ転送が完了すると、それに対応するディスクリプタはディスクリプタ記憶部122から消去される。
再構成制御部115は、DMAコントローラ150の再構成処理を制御する。例えば、再構成制御部115は、DMAコントローラ150に再構成処理を実行させる前に、DMA制御部114によるデータ転送の指示先をDMAコントローラ150からDMAコントローラ111に切り替えるための処理を実行する。切り替えが完了すると、再構成制御部115は、DMAコントローラ150に再構成処理を実行させる。そして、再構成制御部115は、DMAコントローラ150の再構成処理が完了すると、DMA制御部114によるデータ転送の指示先をDMAコントローラ111からDMAコントローラ150に切り替えるための処理を実行する。
次に、DMAコントローラ150についてさらに説明する。DMAコントローラ150は、転送制御回路151とオプション処理回路152を備える。
転送制御回路151は、DMA制御部114からの指示に応じてRAM間のデータ転送を実行する。オプション処理回路152は、データ転送に関係する付加的な処理であるオプション処理を実行する。例えば、オプション処理としては、転送データにBCCなどのチェックコードを付加する処理や、転送データを圧縮する処理などがある。
次に、DMAコントローラを用いたRAM間のデータ転送処理について説明する。まず、図5、図6を用いて、通常時におけるRAM間のデータ転送処理について説明する。
図5は、通常時におけるデータ転送処理の第1の例を示す図である。この図5では、CM100のRAM120からCM200のRAM220に対してデータDT1を転送する場合について例示する。
DMA制御部114は、データDT1の転送依頼を受けると、データDT1の転送処理内容を記述したディスクリプタDSC1を作成し、DMAコントローラ150用のディスクリプタ記憶部121に格納する(ステップS11)。ディスクリプタDSC1には、転送元アドレス、転送先アドレス、オプション処理の指示情報などが含まれる。そして、DMA制御部114は、RAM120におけるディスクリプタDSC1のアドレスをDMAコントローラ150に通知して、データ転送の実行を指示する(ステップS12)。
DMAコントローラ150の転送制御回路151は、通知されたアドレスに基づいてRAM120にアクセスし、ディスクリプタDSC1を読み出す(ステップS13)。転送制御回路151は、ディスクリプタDSC1の内容に基づいて、RAM120からデータDT1を読み出す(ステップS14a)。ここで、ディスクリプタDSC1においてオプション処理の実行が指示されていた場合、DMAコントローラ150のオプション処理回路152は、読み込まれたデータDT1に対するオプション処理を実行する(ステップS14b)。転送制御回路151は、オプション処理が施されたデータDT1を、PCIeスイッチ140,240を介してCM200のRAM220に書き込む(ステップS14c)。転送制御回路151が転送完了をDMA制御部114に通知することで、データ転送処理が完了する。
図6は、通常時におけるデータ転送処理の第2の例を示す図である。この図6では、CM100のRAM120に格納されたデータDT2を、RAM120内の別の領域に書き込む場合について例示する。
DMA制御部114は、データDT2の転送依頼を受けると、データDT2の転送処理内容を記述したディスクリプタDSC2を作成し、DMAコントローラ150用のディスクリプタ記憶部121に格納する(ステップS21)。そして、DMA制御部114は、RAM120におけるディスクリプタDSC2のアドレスをDMAコントローラ150に通知して、データ転送の実行を指示する(ステップS22)。
DMAコントローラ150の転送制御回路151は、通知されたアドレスに基づいてRAM120にアクセスし、ディスクリプタDSC2を読み出す(ステップS23)。転送制御回路151は、ディスクリプタDSC2の内容に基づいて、RAM120からデータDT2を読み出す(ステップS24a)。ここで、ディスクリプタDSC2においてオプション処理の実行が指示されていた場合、DMAコントローラ150のオプション処理回路152は、読み込まれたデータDT2に対するオプション処理を実行する(ステップS24b)。転送制御回路151は、オプション処理が施されたデータDT2を、ディスクリプタDSC2に記述された転送先アドレスが示すRAM120の領域に書き込む(ステップS24c)。転送制御回路151が転送完了をDMA制御部114に通知することで、データ転送処理が完了する。
次に、図7、図8を用いて、DMAコントローラ150の再構成が行われる場合のRAM間のデータ転送処理について説明する。
図7は、DMAコントローラの再構成時におけるデータ転送処理の第1の例を示す図である。この図7では、DMAコントローラ150の再構成が行われている間に、CM100のRAM120からCM200のRAM220に対してデータDT3を転送する場合について例示する。
DMA制御部114は、データDT3の転送依頼を受ける。このとき、オプション処理の実行が指示されていた場合、DMA制御部114は、データDT3に対するオプション処理を実行する(ステップS31)。DMA制御部114は、データDT3の転送処理内容を記述したディスクリプタDSC3を作成し、DMAコントローラ111用のディスクリプタ記憶部122に格納する(ステップS32)。そして、DMA制御部114は、RAM120におけるディスクリプタDSC3のアドレスをDMAコントローラ111に通知して、データ転送の実行を指示する(ステップS33)。
DMAコントローラ111は、通知されたアドレスに基づいてRAM120にアクセスし、ディスクリプタDSC3を読み出す(ステップS34)。DMAコントローラ111は、ディスクリプタDSC3の内容に基づいて、オプション処理が施されたデータDT3をRAM120から読み出し、PCIeスイッチ140,240を介してCM200のRAM220に書き込む(ステップS35)。DMAコントローラ111が転送完了をDMA制御部114に通知することで、データ転送処理が完了する。
図8は、DMAコントローラの再構成時におけるデータ転送処理の第2の例を示す図である。この図8では、DMAコントローラ150の再構成が行われている間に、CM100のRAM120に格納されたデータDT4を、RAM120内の別の領域に書き込む場合について例示する。
DMA制御部114は、データDT4の転送依頼を受ける。このとき、オプション処理の実行が指示されていた場合、DMA制御部114は、データDT4に対するオプション処理を実行する(ステップS41)。DMA制御部114は、データDT4の転送処理内容を記述したディスクリプタDSC4を作成し、DMAコントローラ111用のディスクリプタ記憶部122に格納する(ステップS42)。そして、DMA制御部114は、RAM120におけるディスクリプタDSC4のアドレスをDMAコントローラ111に通知して、データ転送の実行を指示する(ステップS43)。
DMAコントローラ111は、通知されたアドレスに基づいてRAM120にアクセスし、ディスクリプタDSC4を読み出す(ステップS44)。DMAコントローラ111は、ディスクリプタDSC4の内容に基づいて、オプション処理が施されたデータDT3をRAM120から読み出し、ディスクリプタDSC4に記述された転送先アドレスが示すRAM120の領域に書き込む(ステップS45)。DMAコントローラ111が転送完了をDMA制御部114に通知することで、データ転送処理が完了する。
以上の図7、図8に示すように、DMAコントローラ150の再構成が行われている期間では、DMAコントローラ111によってRAM間のデータ転送が実行される。これにより、例えばホスト装置410,420からのI/O要求に応じたI/O制御処理など、CM100の処理を停止させずに、DMAコントローラ150の回路構成を更新できる。
次に、ディスクリプタのフォーマットについて説明する。
図9は、ディスクリプタのフォーマットの例を示す図である。図9(A)は、外付けDMAコントローラ(DMAコントローラ150)用のフォーマットの例を示し、図9(B)は、CPU110の内蔵DMAコントローラ(DMAコントローラ111)用のフォーマットの例を示す。
図9(A)に示すように、DMAコントローラ150用のディスクリプタには、処理モード、サイズ、転送元アドレス、転送先アドレス、チェックコード、次ディスクリプタアドレスの順に情報が記述される。
処理モードは、どのオプション処理かを示す指示情報である。例えば、処理モードの欄には、エラーチェック用のチェックコードを付加するか、データを圧縮するか、これらのいずれも実行しないかを識別する値が登録される。サイズは、転送対象のデータのサイズを示し、転送元アドレスは、データの転送元のアドレスを示し、転送先アドレスは、データの転送先のアドレスを示す。チェックコードの欄には、処理モードがチェックコードの付加を指示している場合に、転送対象のデータに基づいて算出されたチェックコードが登録される。次ディスクリプタアドレスは、ディスクリプタ記憶部121において次に登録されたディスクリプタの位置(例えば先頭アドレス)を示す。
一方、図9(B)に示すように、DMAコントローラ111用のディスクリプタには、処理モード、リザーブ、サイズ、転送元アドレス、転送先アドレス、次ディスクリプタアドレス、チェックコードの順に情報が登録される。
これらのうち、処理モード、サイズ、転送元アドレス、転送先アドレス、チェックコードの各情報は、DMAコントローラ150用のディスクリプタ内の同名の情報と同じ内容を示す。リザーブは、所定の情報を登録可能な予約領域である。次ディスクリプタアドレスは、ディスクリプタ記憶部122において次に登録されたディスクリプタの位置(例えば先頭アドレス)を示す。
以上の図9の例のように、DMAコントローラ150用のディスクリプタのフォーマットと、DMAコントローラ111用のディスクリプタのフォーマットとは異なる。例えば、DMAコントローラ150を供給するベンダと、DMAコントローラ111が内蔵されたCPU110を供給するベンダとは異なる場合がある。このような場合において、使用されるディスクリプタのフォーマットが異なる場合がある。
次に、DMA制御部114の動作モードについて説明する。
図10は、DMA制御部の動作モードを説明するための図である。図10(A)は、外付けDMAコントローラ(DMAコントローラ150)が使用される場合を示し、図10(B)は、CPU110の内蔵DMAコントローラ(DMAコントローラ111)が使用される場合を示す。
DMA制御部114には、「ディスクリプタモード」「DMAモード」という2つの動作モードが設定される。
ディスクリプタモードは、DMAコントローラ150用とDMAコントローラ111用のどちらのディスクリプタを作成するかを示す動作モードである。ここでは、ディスクリプタモードが「1」の場合、DMAコントローラ150用のディスクリプタを作成し、ディスクリプタモードが「2」の場合、DMAコントローラ111用のディスクリプタを作成するものとする。
DMAモードは、DMAコントローラ150とDMAコントローラ111のどちらに対してデータ転送の実行を指示するかを示す動作モードである。ここでは、DMAモードが「1」の場合、DMAコントローラ150にデータ転送の実行を指示し、DMAモードが「2」の場合、DMAコントローラ111にデータ転送の実行を指示するものとする。
なお、ディスクリプタモードの設定値と、DMAモードの設定値は、例えば、RAM120に登録される。
図10(A)に示すように、DMAコントローラ150を使用してデータ転送が行われる場合、ディスクリプタモードは「1」に設定され、DMAモードも「1」に設定される。DMA制御部114は、データ転送依頼を受けると、ディスクリプタモードが「1」であることから、DMAコントローラ150用のフォーマットでディスクリプタ(ここでは「ディスクリプタDSC5」とする)を作成する。そして、DMA制御部114は、DMAコントローラ150用のディスクリプタ記憶部121に、ディスクリプタDSC5を格納する。また、DMA制御部114は、DMAモードが「1」であることから、RAM120におけるディスクリプタDSC5のアドレスをDMAコントローラ150に通知し、DMAコントローラ150に対してデータ転送の実行を指示する。
一方、図10(B)に示すように、DMAコントローラ111を使用してデータ転送が行われる場合、ディスクリプタモードは「2」に設定され、DMAモードも「2」に設定される。DMA制御部114は、データ転送依頼を受けると、ディスクリプタモードが「2」であることから、DMAコントローラ111用のフォーマットでディスクリプタ(ここでは「ディスクリプタDSC6」とする)を作成する。そして、DMA制御部114は、DMAコントローラ111用のディスクリプタ記憶部122に、ディスクリプタDSC6を格納する。また、DMA制御部114は、DMAモードが「2」であることから、RAM120におけるディスクリプタDSC6のアドレスをDMAコントローラ111に通知し、DMAコントローラ111に対してデータ転送の実行を指示する。
以上の図10に示したように、ディスクリプタモードとDMAモードの設定により、DMAコントローラ150とDMAコントローラ111のどちらを使用してデータ転送を行うかが決定される。したがって、使用するDMAコントローラを切り替える場合には、ディスクリプタモードとDMAモードが変更される。
ところで、DMAコントローラ150の再構成が必要となる契機は、不定期に発生する可能性がある。それは、再構成の目的が、不具合の修正のように緊急性の高いものである場合があるからである。そこで、本実施の形態では、DMAコントローラ150の再構成を、CM100で実行されている処理に関係なく、任意のタイミングで実行できるようにする。しかし、再構成を任意のタイミングで実行できるようにするためには、CM100で実行されている処理を正しく継続させながら、使用するDMAコントローラを切り替えられるようにすることが求められる。
一方、ここまで説明したように、DMAコントローラ150にデータ転送の実行を指示する場合には、まずディスクリプタが作成されてディスクリプタ記憶部121に格納され、その後にDMAコントローラ150に対してデータ転送の実行が指示される。このため、ディスクリプタがディスクリプタ記憶部121に格納されてから、そのディスクリプタに基づくデータ転送の実行がDMAコントローラ150に指示されるまでには、タイムラグがある。
このようなタイムラグの存在により、DMAコントローラ150の再構成が指示されて、DMAコントローラ111を使用してデータ転送を行うように切り替えられたとき、ディスクリプタ記憶部121には、DMAコントローラ150に実行が指示されていないディスクリプタが存在する可能性がある。前述のように、DMAコントローラ150用のディスクリプタとDMAコントローラ111用のディスクリプタとは、フォーマットが異なる。このため、実行が指示されていない上記のディスクリプタを、切り替え先のDMAコントローラ111に参照させてデータ転送を実行させることはできない。したがって、このままではこのディスクリプタに基づくデータ転送の実行が不可能になり、CM100の処理を正しく継続できなくなる。すなわち、DMAコントローラ150の再構成の実行が、CM100の処理の正確性に悪影響を与えてしまう。
そこで、DMA制御部114は、実行が指示されていないディスクリプタがディスクリプタ記憶部121に残っている場合、そのディスクリプタをDMAコントローラ111用のフォーマットに変換する。そして、DMA制御部114は、変換されたディスクリプタをディスクリプタ記憶部122に格納し直し、そのディスクリプタに基づくデータ転送の実行をDMAコントローラ111に指示する。これにより、上記のディスクリプタに基づくデータ転送が切り替え先のDMAコントローラ111によって確実に実行され、その結果、CM100の処理を正確に継続できるようになる。
図11は、ディスクリプタのフォーマット変換について説明するための図である。図11の例では、ディスクリプタ記憶部121に対してディスクリプタDSC11,DSC12,DSC13,DSC14がこの順序で格納されたとする。また、DMA制御部114からDMAコントローラ150に対して、ディスクリプタDSC11,DSC12にそれぞれ基づくデータ転送の実行が指示され、このタイミングでDMAコントローラ150の再構成が指示されたとする。すなわち、この状態では、ディスクリプタDSC11,DSC12は、実行指示済みのディスクリプタであり、ディスクリプタDSC13,DSC14は、実行指示が未実施のディスクリプタとなっている。
この場合、DMA制御部114は、DMAコントローラ111によるデータ転送を開始させる前に、ディスクリプタDSC13,DSC14をDMAコントローラ111用のフォーマットのディスクリプタDSC13a,DSC14aにそれぞれ変換する。DMA制御部114は、変換により得られたディスクリプタDSC13a,DSC14aを、DMAコントローラ111用のディスクリプタ記憶部122に格納する。以上の処理が完了すると、DMA制御部114は、DMAコントローラ111によるデータ転送を開始させる。このとき、DMA制御部114はまず、実行指示が未実施であるディスクリプタDSC13a,DSC14aにそれぞれ基づくデータ転送の実行を、DMAコントローラ111に指示する。
これにより、変換前のディスクリプタDSC13,DSC14によって指示された内容のデータ転送を、切り替え先のDMAコントローラ111によって確実に実行させることができる。その結果、CM100の処理を正確に継続させながら、DMAコントローラ150の再構成を行うことが可能となる。
次に、CM100の処理についてシーケンス図およびフローチャートを用いて説明する。
図12、図13は、使用するDMAコントローラの切り替え処理を示すシーケンス図の例である。
通常状態では、DMA制御部114は、DMAコントローラ150にRAM間のデータ転送を実行させる(ステップS101)。すなわち、DMA制御部114は、データ転送が依頼されると、そのデータ転送処理の内容を記述したディスクリプタをディスクリプタ記憶部121に格納する。そして、DMA制御部114は、そのディスクリプタのRAM120上のアドレスをDMAコントローラ150に通知して、データ転送の実行を指示する。
この状態から、再構成制御部115がDMAコントローラ150を再構成するための処理を開始する。再構成制御部115は、まず、再構成のための準備処理を開始するようにDMA制御部114に指示し(ステップS111)、準備処理の完了応答に対する待ち状態となる(ステップS112)。
DMA制御部114は、準備処理の開始指示を受けると、まず、ディスクリプタモードを「1」から「2」へ切り替える(ステップS102)。次に、DMA制御部114は、仕掛かり中のデータ転送処理があるかを判定する(ステップS103)。仕掛かり中のデータ転送処理とは、ディスクリプタ記憶部121に格納したディスクリプタのうち、DMAコントローラ150へデータ転送を指示済みであるものの、そのデータ転送が完了していないディスクリプタに基づくデータ転送処理である。
仕掛かり中のデータ転送処理がある場合、DMA制御部114は、その処理の実行が完了するまで待ち状態となる(ステップS104)。そして、仕掛かり中のデータ転送処理が完了したとき、あるいは仕掛かり中の処理がなかった場合、DMA制御部114は、ディスクリプタ記憶部121に格納したディスクリプタのうち、実行を指示していないディスクリプタがあるかを判定する(ステップS105)。
実行を指示していないディスクリプタがある場合、DMA制御部114は、そのディスクリプタをディスクリプタ記憶部121から読み出して、DMAコントローラ111用のフォーマットに変換する。DMA制御部114は、変換されたディスクリプタを、DMAコントローラ111用のディスクリプタ記憶部122に格納する(ステップS106)。そして、DMA制御部114は、DMAモードを「1」から「2」へ切り替える(ステップS107)。また、ステップS105で実行を指示していないディスクリプタがなかった場合にも、DMA制御部114は、DMAモードを「1」から「2」へ切り替える(ステップS107)。
DMA制御部114は、準備処理の完了応答を再構成制御部115に通知する(ステップS108)。そして、DMAコントローラ111によるデータ転送が開始される(ステップS109)。このとき、DMAモードが「2」に設定されている。このため、ステップS106でディスクリプタがディスクリプタ記憶部122に格納された場合、DMA制御部114はまず、そのディスクリプタのアドレスをDMAコントローラ111に通知して、このディスクリプタに基づくデータ転送の実行を指示する。また、ディスクリプタモードおよびDMAモードがともに「2」に設定された状態であるので、RAM間のデータ転送が新たに依頼されたとき、DMA制御部114は、DMAコントローラ111にデータ転送を実行させるようになる。すなわち、DMA制御部114は、データ転送が依頼されると、そのデータ転送処理の内容を記述したディスクリプタをディスクリプタ記憶部122に格納する。そして、DMA制御部114は、そのディスクリプタのRAM120上のアドレスをDMAコントローラ111に通知して、データ転送の実行を指示する。
なお、ステップS102では、DMA制御部114が、ディスクリプタ記憶部121に格納済みのディスクリプタに基づくデータ転送の実行をDMAコントローラ150に指示する処理は、停止される。ステップS103,S104の処理により、DMAコントローラ150の再構成が開始されるまでの間、DMAコントローラ150に対して実行指示済みのデータ転送だけが実行される。これにより、データ転送を確実に継続できる。
一方、ステップS102でディスクリプタモードが「2」に変更された後、DMA制御部114は、新たなデータ転送依頼の受け付けを継続してもよい。この場合、DMA制御部114は、新たに依頼されたデータ転送の内容を示すディスクリプタをDMAコントローラ111用のフォーマットで作成し、ディスクリプタ記憶部122に格納する。格納されたディスクリプタに基づくデータ転送の実行は、ステップS109において、ステップS106で格納されたディスクリプタに基づくデータ転送の次に、DMAコントローラ111に指示される。このような処理により、DMAコントローラ150の再構成が開始されるまでの間にも新たなデータ転送依頼の受け付けが継続されることで、依頼元(例えばI/O制御部113)の処理を継続させることができる。
次に、再構成制御部115は、準備処理の完了応答を受け付けると(ステップS112)、DMAコントローラ150の再構成処理を開始する(ステップS113)。具体的には、再構成制御部115は、ROM160内のプログラムを新たなプログラムによって更新し、更新後のプログラムをDMAコントローラ150に適用する。これによって、DMAコントローラ150の回路構成が更新される。
再構成制御部115は、DMAコントローラ150の再構成が完了するまで待ち状態となる(ステップS121)。その間、DMA制御部114は、RAM間のデータ転送が依頼されると、DMAコントローラ111にデータ転送を実行させる(ステップS109)。そして、DMAコントローラ150の再構成が完了すると、再構成制御部115は、終了処理を開始するようにDMA制御部114に指示し(ステップS122)、終了処理の完了応答に対する待ち状態となる(ステップS123)。
DMA制御部114は、準備処理の開始指示を受けると、まず、ディスクリプタモードを「2」から「1」へ切り替える(ステップS131)。次に、DMA制御部114は、仕掛かり中のデータ転送処理があるかを判定する(ステップS132)。仕掛かり中のデータ転送処理とは、ディスクリプタ記憶部122に格納したディスクリプタのうち、DMAコントローラ111へデータ転送を指示済みであるものの、そのデータ転送が完了していないディスクリプタに基づくデータ転送処理である。
仕掛かり中のデータ転送処理がある場合、DMA制御部114は、その処理の実行が完了するまで待ち状態となる(ステップS133)。そして、仕掛かり中のデータ転送処理が完了したとき、あるいは仕掛かり中の処理がなかった場合、DMA制御部114は、ディスクリプタ記憶部122に格納したディスクリプタのうち、実行を指示していないディスクリプタがあるかを判定する(ステップS134)。
実行を指示していないディスクリプタがある場合、DMA制御部114は、そのディスクリプタをディスクリプタ記憶部122から読み出して、DMAコントローラ150用のフォーマットに変換する。DMA制御部114は、変換されたディスクリプタを、DMAコントローラ150用のディスクリプタ記憶部121に格納する(ステップS135)。そして、DMA制御部114は、DMAモードを「2」から「3」へ切り替える(ステップS136)。また、ステップS134で実行を指示していないディスクリプタがなかった場合にも、DMA制御部114は、DMAモードを「2」から「1」へ切り替える(ステップS136)。
DMA制御部114は、終了処理の完了応答を再構成制御部115に通知する(ステップS137)。そして、DMAコントローラ150によるデータ転送が開始される(ステップS138)。このとき、DMAモードが「1」に設定されている。このため、ステップS135でディスクリプタがディスクリプタ記憶部121に格納された場合、DMA制御部114はまず、そのディスクリプタのアドレスをDMAコントローラ150に通知して、このディスクリプタに基づくデータ転送の実行を指示する。また、ディスクリプタモードおよびDMAモードがともに「1」に設定された状態であるので、RAM間のデータ転送が新たに依頼されたとき、DMA制御部114は、DMAコントローラ150にデータ転送を実行させるようになる。すなわち、DMA制御部114は、データ転送が依頼されると、そのデータ転送処理の内容を記述したディスクリプタをディスクリプタ記憶部121に格納する。そして、DMA制御部114は、そのディスクリプタのRAM120上のアドレスをDMAコントローラ150に通知して、データ転送の実行を指示する。
再構成制御部115は、終了処理の完了応答を受け付けると(ステップS123)、処理を終了する。
図14は、内蔵DMAコントローラを使用する場合のデータ転送制御処理を示すフローチャートの例である。この図14の処理は、図12のステップS109においてRAM間のデータ転送が依頼されたときのDMA制御部114の処理に対応する。
[ステップS141]DMA制御部114は、オプション処理を実行するように指定されているかを判定する。DMA制御部114は、オプション処理を実行するように指定されている場合、ステップS142の処理を実行し、指定されていない場合、ステップS145の処理を実行する。
[ステップS142]DMA制御部114は、実行が指定されているオプション処理の内容を判定する。DMA制御部114は、チェックコードの付加が指定されている場合、ステップS143の処理を実行し、データの圧縮が指定されている場合、ステップS144の処理を実行する。
[ステップS143]DMA制御部114は、転送対象のデータをRAM120から読み出し、そのデータに基づいてエラーチェック用のチェックコードを算出する。DMA制御部114は、チェックコードを付加したデータをRAM120に格納し直す。
[ステップS144]DMA制御部114は、転送対象のデータをRAM120から読み出し、そのデータを圧縮する。DMA制御部114は、圧縮されたデータをRAM120に格納し直す。
[ステップS145]DMA制御部114は、データ転送を指示するためのディスクリプタを作成し、DMAコントローラ111用のディスクリプタ記憶部122に格納する。 [ステップS146]DMA制御部114は、ステップS145で作成したディスクリプタのRAM120におけるアドレスをDMAコントローラ111に通知して、このディスクリプタに基づくデータ転送の実行を指示する。
このように、DMAコントローラ150の再構成が行われている期間では、転送データに対するオプション処理はプログラムに基づくプロセッサコア112の処理によって実行される。
なお、上記の各実施の形態に示した装置(例えば、情報処理装置10、CM100,200)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。