(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
以下、図面を参照しながら、本発明の実施形態について述べる。
【0015】
(第1の実施形態)
図1は、本発明の実施形態に係るブリッジ装置を示す。
【0016】
図1のブリッジ装置は、統御部11、転送情報記憶部12、通信処理部(第2処理部)13、パケット処理部14、メモリ処理部(第1処理部)15、及 び、データバッファ16を備える。尚、該ブリッジ装置にCPU(Central Processing Unit)あるいは MPU(Micro Processing Unit)が内蔵されて、これらの処理部の一部または全部の機能を担ってもよい。たとえば、CPUあるいはMPUが、これらの処理部のうちの1つまたは複数の機能を記述した命令を含むプログラムを実行することで、当該機能が実現されてもよい。プログラムは、ハードディスク、メモリ装置、CD-ROM等のコンピュータ読取可能記録媒体に記憶されてもよい。
【0017】
ここで、ブリッジ装置とは、あるバスセグメントと、別のバスセグメントを接続する装置を指す。例えば、 CPUが接続されるシステムバスと、周辺機器を収容する PCI(Peripheral Component Interconnect)バスとを接続する HBA(Host Bus Adaptor)や、 PCIバスと PCIバスとを接続する PCIバスブリッジなどが、ブリッジ装置に相当する。
【0018】
さらに、 HDD(Hard Disk Drive)や SSD(Solid State Drive)などのストレージ装置の中にもブリッジ装置が存在する。例えばシステムバスと、記憶媒体(HDDであればプラッタ、 SSDであれば NAND Flashメモリに相当する部位)とを接続する際には、両者間の仲介を担うブリッジ装置が配される。
【0019】
図1のブリッジ装置は、メモリコントローラ103と通信コントローラ104間のデータ転送をブリッジする。メモリコントローラ103は、図示しないデータ記憶装置(たとえば
図2のNANDフラッシュメモリ112参照)へのアクセス(読み出し/書き込み)を制御する。通信コントローラ103は、イーサーネットやIEEE802.11a/b/gや、ブルートゥースなどの通信コントローラでもよい。メモリコントローラ103および通信コントローラ104はそれぞれ、図示しないバスに接続されている。
【0020】
本ブリッジ装置の外部に、本ブリッジ装置専用のCPU102またはMPUが設けられている。
【0021】
統御部11は、 外部のCPU102あるいは MPUからの制御および設定を受け付けるための部位である。制御としては、該ブリッジ装置に対するデータ転送の開始/停止などがある。
【0022】
転送情報記憶部12は、該ブリッジ装置がファイル転送を遂行する際に必要となる各種の情報を含む転送情報を記憶するための部位である。転送情報は、CPU102あるいは MPUが作成し、ブリッジ装置へ供給する。統御部11は、この転送情報を受信する受信部を含み、受信した転送情報を、転送情報記憶部12に格納する。
【0025】
図4に示す転送情報は、表形式を有し、4つのフィールド、「転送方向」、「ブロックアドレス」、「バッファアドレス」、「転送サイズ」を有する。転送情報1行(1エントリ)で、1度のデータ転送の実行を表す。
【0026】
「転送方向」は、そのデータ転送が送信(データ記憶装置からの読み出し)なのか、受信(データ記憶装置への書き込み)なのかを示す。“R”が送信(読み出し)、“W”が受信(書き込み)を示す。
【0027】
「ブロックアドレス」は、データ記憶装置上に保存されたデータブロックの記録位置を示す。データ記憶装置では、ブロック単位で、データが記憶されている。
【0028】
「バッファアドレス」は、データブロックの転送元となるデータバッファ16のアドレス(転送方向が“R”の場合)、あるいは、転送先となるデータバッファ16のアドレス(転送方向が“W”の場合)を示す。
【0029】
「転送サイズ」は、1度のデータ転送にて送信または受信するデータ量を示す。
【0030】
たとえば、1行目のエントリは、データ記憶装置上のブロックアドレス500から10ブロック分のデータを読み出し、データバッファ16のアドレス0x10000000から書き込むことを示す。1ブロックのサイズは、たとえば32KBなど、任意に定めることが可能である。
【0031】
また、3行目のエントリは、データバッファ16のアドレス0x11000000から、10ブロック分のデータを読み出して、データ記憶装置上のブロックアドレス200から書き込むことを示す。
【0032】
該ブリッジ装置は、表の一番上のエントリから順番に処理し、転送情報1行(1エントリ)で、1度のデータ転送を実行する。新たに転送情報が追加されるときは、一番下に追加される。つまり、先に受信されたエントリほど、高い優先度が与えられる。本例では、優先度は、表の中の位置によって表現されているが、優先度のフィールドを追加して、ここに処理する順番を記入してもよい。
【0033】
図4に示した転送情報は一例であり、別の形式を採用することも可能である。
【0034】
たとえば転送サイズのフィールドを省略し、ブロックアドレスのフィールドに、読み出す/書き込むべきすべてのブロックアドレスを記入しても良い。または開始のブロックアドレスと終了のブロックアドレスを記入してもよい。
【0035】
さらに、バッファアドレスのフィールドを省略することも可能である。この場合、バッファアドレスを格納するレジスタを統御部11に設けてもよい。レジスタに格納するバッファアドレスは固定値でもよい。複数のバッファアドレスをレジスタに記憶させ、これらのバッファアドレスを循環的に使い回す構成も考えられる。
【0036】
通信処理部13は、データ転送に関わる通信コントローラ104の制御を担う部位である。例えば、通信コントローラ104から割り込み信号を受信すると、その割り込み信号の原因を、通信コントローラ104へ問い合わせ、その内容に応じた振る舞いを行う。また、通信コントローラ104内蔵の DMAコントローラ(
図12参照)がある場合には、その DMAコントローラの制御等も行う。
【0037】
パケット処理部14は、通信コントローラ104へ送信するパケットにヘッダを付加したり、通信コントローラ104から受信したパケットのヘッダを解析する部位である。受信したパケットが、ヘッダ解析によりデータ記憶装置へ書き込むデータを運ぶパケットであるときは、ヘッダを除去(廃棄)して、パケットのペイロード部に格納されているデータをデータバッファ16へ渡す。データバッファ16は、通信コントローラ104から指定される書き込み先へ当該データを書き込む。ヘッダ解析の結果、そのパケットのデータがデータ記憶装置へ書き込むデータでないときは、データバッファ16への書き込みを行わない。たとえば当該パケットが、CPU102宛と判断すれば、当該パケットをCPU102へ渡す。このような判断は、たとえばヘッダ内の所定フィールドの値に基づいて行うことができる。
【0038】
メモリ処理部15は、データ転送に関わるメモリコントローラ103の制御を担う部位である。例えば、メモリコントローラ103から割り込み信号を受信すると、その割り込み信号の原因をメモリコントローラ103へ問い合わせ、その内容に応じた振る舞いを行う。また、メモリコントローラ103内蔵 DMAコントローラ(
図12参照)がある場合には、その DMAコントローラの制御等も行う。
【0039】
データバッファ16は、通信コントローラ104および該ブリッジ装置間、ならびにメモリコントローラ103および該ブリッジ装置間で、データを入出力する際に用いるメモリ領域である。データバッファ16は、2ポートメモリなどのメモリを含み、当該メモリにデータを入出力する。
【0040】
例えば、送信モードの場合には、メモリコントローラ103によってデータ記憶装置から読み出したデータを、データバッファ16を書き込んでいき、通信コントローラ104は、データバッファ16からそのデータを読み出す。データバッファ16は、通信コントローラ104から指定されたバッファアドレスのデータを出力する出力部を含む。
【0041】
受信モードの場合は、通信コントローラ104は、パケット処理部14を介して、データバッファ16へデータを書き込んでいき、メモリコントローラ103はそのデータを読み出す。
【0042】
図5は、転送情報の作成手順を示すフローチャートである。
【0043】
まず、CPU102あるいは MPUは、送信対象あるいは受信対象のファイルのサイズを取得する(S101)。特に受信モードの場合、転送開始に先立って、そのファイルサイズ分の記録領域をデータ記憶装置上に割り当てておく必要がある。ファイルサイズの取得方法は様々であるが、例えば、送信側から受信側へ送信するファイルのファイルサイズの情報を知らせればよい。ファイルサイズとともに、ファイル名の情報を知らせても良い。
【0044】
一例として、
図1のブリッジ装置を含む通信装置と、相手先通信装置とがネットワークを介して接続されており、本ブリッジ装置が受信側、相手先通信装置が送信側の場合を想定する。送信側の装置も、本ブリッジ装置と同様の構成のブリッジ装置を搭載していてもよい。このとき、本ブリッジ装置を含む通信装置の通信コントローラ104およびCPU102と、相手先通信装置との間で通信を行うことで、CPU102が相手先通信先装置からファイルサイズを取得する。
【0045】
続いて、 CPU102あるいは MPUは、送信対象あるいは受信対象のファイルの管理情報を、ワーキングメモリ等の共有メモリ(図示せず)へ読み込む(S102)。共有メモリは、データ記憶装置とは異なる記憶装置であり、たとえば揮発性メモリである。1つのファイルは、データ記憶装置上の連続した領域に記録されているわけではなく、通常、複数のデータブロックがデータ記憶装置上に分散配置されている。ファイルの管理情報は、これら分散配置されたデータブロックを数珠つなぎ状に管理するための構造情報を指す。
【0046】
管理情報は、メモリコントローラ103によりアクセスされるデータ記憶装置に格納されている。管理情報は、データブロックを記憶するデータ領域とは別に設けられる管理領域に格納される。
【0047】
図6に、データ記憶装置の記憶領域構造および管理情報の一例を示す。管理情報が管理領域に格納されている。管理情報はリスト構造を有する。
図6の例では、0x0100,0x0500,0x1000のブロックアドレスに格納されたデータの集合体が、管理情報が表す1つのファイルに相当する。1つのブロックアドレスのデータサイズは、データ記憶装置をフォーマットした際に、予め定められるものである。
【0048】
送信の場合は、CPU102またはMPUが、データ記憶装置に直接アクセスして、管理情報を読み出し、共有メモリへ書き込む。受信の場合は、通信先の装置から管理情報を取得する。これにより、通信先からどのようなブロックサイズが送られてくるかを知ることができる。なお通信先の装置からの管理情報の取得は必須ではなく、ファイルサイズが分かれば本装置は動作可能である。
【0049】
続いて、そのワーキングメモリにバッファされた管理情報を参照しつつ、データ記憶装置におけるデータブロックの記録位置を調べていって、隣接するデータブロックであれば、それらを1つの連続領域として扱う。送信の場合は、送信するデータブロックが隣接するかを調べていけばよい。受信の場合であれば、空きのデータブロックを調べていき、それらが隣接するかを調べればよい。このようにして、連続領域の開始位置と終了位置とを取得する(S103)。
【0050】
そして、その連続領域の開始位置と終了位置に基づいて、ブロックアドレスと転送サイズを決定し、転送情報の1エントリを作成する(S104)。送信の場合であれば、転送情報のブロックアドレスは、連続領域の開始位置に対応し、転送サイズは、開始位置から終了位置までのデータサイズである。受信の場合であれば、受信ファイルサイズを、各連続領域に順番に割り当てることで、ブロックアドレスと転送サイズを決定する。なお、受信の場合に通信先装置から取得した管理情報に示される各ブロックサイズとそれぞれ同じサイズの連続領域を確保できる場合、同じサイズの連続領域を割り当てるように、転送情報エントリを作成してもよい。
【0051】
続いて、CPU102あるいは MPUは、完成した転送情報エントリを、ブリッジ装置の転送情報記憶部12へ書き込む(S105)。たとえば、統御部101に転送情報エントリの書き込みを指示し、統御部101が転送情報エントリを書き込む。
【0052】
バッファ済みのファイル管理情報に対する転送情報エントリを作成し得るまで、ステップS103〜S105を繰り返す(S106)。
【0053】
バッファ済みのファイル管理情報に対する転送情報エントリを全て作成したら、ファイルサイズ全体の管理情報に対する転送情報エントリを作成できたかを判断する。すなわち、まだワーキングメモリに読み込んでいない管理情報があれば、再度、管理情報の読み込み(バッファリング)を行って、これまでの手順を繰り返す(S107)。これは、ワーキングメモリの容量制約上、一度にすべての管理情報を読み込むことができるとは限らないためである。また、後述する実施例で述べるように、すべての管理情報のバッファリングを完了する前に、転送情報エントリに基づき転送開始を行う構成も考慮したものである。
【0054】
以下、
図7および
図8を参照して、送信モードにおけるファイル転送手順を示す。
図7のフローチャートは、メモリ処理部15とデータバッファ16間の手順について示したものである。
図8のフローチャートは、通信処理部13とデータバッファ16間の手順について示したものである。
【0055】
まずは、
図7のフローチャートを用いて、送信モードにおけるメモリ処理部15とデータバッファ16間の手順を説明する。
【0056】
送信モードのブリッジ装置によるファイル転送は、転送情報記憶部12にエントリがあることを契機に、メモリ処理部15の動作が、開始する(S201)。たとえば統御部11が、転送情報記憶部12にアクセスして、転送方向が送信(“R”)のエントリを検出することで、送信モードの動作が開始する。
【0057】
メモリ処理部15は、転送情報記憶部12のエントリを参照し、当該エントリの情報(ブロックアドレス、バッファアドレス、転送サイズ、転送方向)を取得する(S202)。
【0058】
メモリ処理部15は、当該エントリの情報を用いて、メモリコントローラ103へデータの出力コマンドを発行する(S203)。バッファアドレスが転送情報でなく、統御部11等のレジスタに格納されているときは、当該レジスタにアクセスしてバッファアドレスを取得する。
【0059】
ここでいう出力コマンドとは、メモリコントローラ103自体のレジスタ、メモリコントローラ103内蔵 DMAコントローラ、あるいは、同コントローラを通じてアクセスするデータ記憶装置に対して、データ転送を実行する際に行う一連の制御手順全体を指す。
【0060】
メモリコントローラ103へデータの出力コマンド(第1コマンド)を発行することによって、例えば、メモリコントローラ103内蔵 DMAコントローラは、出力コマンドで指定されたブロックアドレス(読み出しアドレス)にあるデータブロックを読み込みつつ、出力コマンドで指定されたバッファアドレス(書き込みアドレス)へ向けて書き込む処理を行う。バッファアドレスとして、データバッファ16のアドレスを指定することにより、ブリッジ装置は送信するデータを、自身のデータバッファ16へ読み込む形となる。
【0061】
続いて、データバッファ16は、メモリコントローラ103からデータを受け取ると、それを内部のメモリ(たとえば2ポートメモリ)へ書き込んでいく(S204)。
【0062】
データバッファ16へ入力したデータサイズが、転送情報エントリに示される転送サイズに到達すれば、1エントリ分のデータ転送は完了である(S205)。1エントリ分のデータ転送が完了すると、メモリコントローラ103はメモリ処理部15へ完了を通知する。
【0063】
以上の手順を、1つのファイルの各転送情報エントリ(転送方向が“R”)に対して繰り返していくことにより、メモリコントローラ103からデータバッファ16へのデータ転送が進められていく。
【0064】
次に、
図8のフローチャートを用いて、送信モードにおける通信処理部13とデータバッファ16間の手順を説明する。
【0065】
通信処理部13は、データバッファ16内に所定サイズのデータがあれば(S301)、通信コントローラ104へ入力コマンド(第2コマンド)を発行する(S302)。たとえば、該当する転送情報エントリに示されるバッファアドレス以降に格納されたデータ量が、所定サイズ以上であれば、入力コマンドを発行する。
【0066】
ここでいう入力コマンドとは、通信コントローラ104自体のレジスタ、通信コントローラ104内蔵 DMAコントローラ、あるいは、同コントローラを通じてアクセスする無線部に対し、データ転送を実行する際に行う一連の制御手順全体を指す。
【0067】
たとえば通信コントローラ104内蔵 DMAコントローラは、通信処理部13から指定されたバッファアドレス(読み出しアドレス)にあるデータを読み出す。ブリッジ装置は、データバッファ16のアドレスを指定した読み出し要求を受けることにより、該当するデータをデータバッファ16から読み出して、パケット処理部14を介して、通信コントローラ104へ送り出す形となる。
【0068】
ここで、所定サイズとは、例えば、データバッファ16のデータ充填量などにより、自由に決定するものであって、本発明の本質とは関わらない。また、ここではサイズという判断指標を例にとって説明したが、通信処理部13が動きはじめる契機は、この指標だけに限らなくてよい。
【0069】
続いて、パケット処理部14は、通信コントローラ104へ出力するデータが、パケットの先頭にあたるかを調べる(S303)。もし、当該データがパケットの先頭に該当するものであれば、データの直前にヘッダを挿入したうえで(S304)、当該データを出力する(S305)。もし、パケット先頭でなければ、パケット処理部14は、データを出力する(S305)。
【0070】
出力されたパケットデータは、通信コントローラ104へ渡される。通信コントローラ104は、送信フレームバッファ内のあらかじめ指定されたブロックアドレスへ、ヘッダおよびデータを書き込む処理を行う。送信フレームバッファは、共有メモリ内に設けられても良い。
【0071】
パケット処理部14は、パケットのペイロードサイズ分のデータを出力し終えるまで、出力を続ける(S306)。ヘッダに記入する情報や、ペイロードサイズの情報は、あらかじめ与えられている。これらの情報が、たとえば統御部11のレジスタに記憶されており、当該レジスタから読み出すことで、当該情報を取得してもよい。
【0072】
次に、通信処理部13が、通信コントローラ104から送信完了割込みを受信したかを判断する(S307)。例えば、通信処理部13が、パケットのヘッダサイズとペイロードサイズとを足し算したサイズを指定した上で、通信コントローラ104へ入力コマンドを発行したとする。この場合、ペイロードサイズ分のデータを出力し終えた時に、通信コントローラ104が送信完了割り込みを発行する。
【0073】
通信処理部13は、通信コントローラ104が発行した送信完了割り込みを受信すると、通信コントローラ104の状態を確認したり、割り込み状態のクリアを行う。そして、次のパケット送信、すなわち次のパケットのためのデータの読み出しに移る。
【0074】
以上の手順を繰り返していくことにより、データバッファ16から通信コントローラ13へのデータ転送が進められていく。
【0075】
このようにブリッジ装置が動作することで、従来成し得なかった効率的なファイルの送信処理が可能となる。すなわち、ブリッジ装置は、用意された転送情報を参照しさえすれば、CPUあるいは MPUの助けを借りずに、一連のデータ転送処理を遂行できる。ファイルのデータがデータ記憶装置内で分散して配置されていても、ファイルの先端から終端まで、送信処理を完遂できるようになる。
【0076】
以下、
図9および
図10を用いて、受信モードにおけるファイル転送手順を示す。
図9のフローチャートは、メモリ処理部15とデータバッファ16間の手順について示したものである。
図10のフローチャートは、通信処理部13とデータバッファ16間の手順について示したものである。
【0077】
まずは、
図10のフローチャートを用いて、受信モードにおけるメモリ処理部15とデータバッファ16間の手順について説明する。
【0078】
受信モードのブリッジ装置によるファイル転送は、転送情報記憶部12に転送方向が“W”のエントリがあり(S501)、かつ、通信コントローラ104が発行するパケット受信割り込みを契機に(S502)、通信処理部13の動作が開始する。
【0079】
通信処理部13は、転送情報記憶部12の転送方向が“W”のエントリを参照し、当該エントリの情報(ブロックアドレス、バッファアドレス、転送サイズ、転送方向)を取得する。
【0080】
通信処理部13は、当該エントリの情報を用いて、通信コントローラ104へデータの出力コマンド(第3コマンド)を発行する(S503)。バッファアドレスが転送情報でなく、統御部11等のレジスタに格納されているときは、当該レジスタにアクセスしてバッファアドレスを取得する。
【0081】
例えば、通信コントローラ104内蔵 DMAコントローラは、図示しない受信フレームバッファ内のあらかじめ指定されたブロックアドレスにあるデータブロックを読み込みつつ、上記転送情報エントリで指定されたバッファアドレス(書き込みアドレス)へ向けて、書き込む処理を行う。ブリッジ装置は、データバッファ16のアドレスを指定した書き込み要求を受けることにより、受信したデータを自身のメモリへ読み込む形となる。受信フレームバッファは共有メモリ内に設けられても良い。
【0082】
パケット処理部14は、通信コントローラ104から入力されるデータが、パケットの先頭にあたるものかを調べる(S504)。
【0083】
パケットの先頭にあたるものであれば、ヘッダの解析を行い(S505)、ブリッジ装置として想定するヘッダか否か、すなわち当該パケットがメモリへ書き込むデータを運ぶパケットか否かを調べる(S506)。ブリッジ装置として想定しないヘッダであると判断した場合、そのパケットの受信処理は行わない。想定するヘッダか否かの判断は、ヘッダの所定位置のフィールドの値で判断することが可能である。たとえばデータ受信中に、送信側で送信を途中でキャンセルした場合、送信停止の制御パケットが送出され、想定しないパケットとして受信され得る。このようなパケットに対しては、想定しないヘッダと判断される。当該パケットは、たとえばヘッダの内容に応じて処理すればよい。CPU宛のパケットであれば、当該パケットをCPUに転送する。
【0084】
想定するヘッダであれば、そのパケットのペイロードデータを、データバッファ16における通信コントローラ104が指定したバッファアドレスから書き込んでいく(S507)。なお、当該ヘッダは、データバッファ16へ書き込みせず、廃棄する。
【0085】
一方、通信コントローラ104から入力されるデータがパケットの先頭でなければ、パケット処理部14は、当該データをデータバッファ16へ書き込んでいく(S507)。
【0086】
以上の手順を、1つのファイルの各転送情報エントリ(転送方向が“W”)に対して繰り返していくことにより、通信コントローラ104からデータバッファ16へのデータ転送が進められていく。
【0087】
次に、
図9のフローチャートを用いて、メモリ処理部15とデータバッファ16間の手順について説明する。
【0088】
メモリ処理部15は、データバッファ16内に、所定サイズのデータがあるかを調べる。(S401)。たとえば、該当する転送情報エントリに示されるバッファアドレス以降に所定サイズ以上のデータがあるかを調べる。所定サイズのデータが存在すれば、転送情報エントリの情報を参照して(S402)、メモリコントローラ103への入力コマンド(第4コマンド)を発行する(S403)。
【0089】
所定サイズとは、例えば、データバッファ16のデータ充填量などにより、自由に決定するものであって、本発明の本質には関わらない。また、ここではサイズという判断指標を例にとって説明したが、メモリ処理部15が動きはじめる契機は、この指標だけに限らなくてよい。
【0090】
メモリコントローラ103は、入力コマンドを受信し、データバッファ16のバッファアドレス(読み出しアドレス)から、データを読み出していく(S404)。データバッファ16から出力されたデータサイズが、転送情報エントリから得た転送サイズに到達すれば、1エントリ分のデータ転送は完了である(S405)。
【0091】
以上の手順を繰り返していくことにより、データバッファ16からメモリコントローラ103へのデータ転送が進められていく。
【0092】
このようにブリッジ装置が動作することで、従来成し得なかった効率的なファイルの受信処理が可能となる。すなわち、あらかじめ用意された転送情報を参照しさえすれば、CPU102あるいは MPUの助けを借りずに、ブリッジ装置単体で、一連のデータ転送処理を遂行できる。
【0093】
従来から存在する MPEGなどの映像コーデックやグラフィクスアクセラレータは、何らかのメモリとメモリとの間を接続して、両者間における高速なデータ転送を実現するものである。しかしながら、これは、一続きの連続したデータ領域の間におけるデータ転送であった。これに対し、本ブリッジ装置は、もしデータ領域に不連続点があったとしても、それらを複数の転送情報として集約して表現し、それを解釈しつつ不連続なデータ領域のデータ転送を遂行できる。
【0094】
以上、本実施形態によれば、CPUや MPUに多くの負荷をかけることなく、ファイル転送を進められるようになり、スループットを最大限に高められる。
【0095】
(第2の実施形態)
図 2は、
図1に示したブリッジ装置を搭載したストレージ装置の一実施形態を示す。
【0096】
具体的なストレージ装置の例としては、 SDメモリカードや SSD等が挙げられる。
【0097】
図 1と異なり、CPU111、通信コントローラ104やメモリコントローラ103、NAND Flashメモリ(データ記憶装置)112を内蔵している。CPU111は、ホストCPUでも、ブリッジ装置の専用CPUでもよい。
【0098】
ホストCPUを用いて、
図1の専用CPUまたはMPUが担っていた機能をホストCPUに担わせれば、ブリッジ装置専用のCPUを不要にできる。転送情報の作成は、必ずしも 専用のCPUあるいは MPUが実施しなければならないわけではなく、ホスト CPUも同等に NAND Flashメモリ112へアクセスできるようにして、転送情報を作成可能にすればよい。
【0099】
このように本発明のブリッジ装置は、このような形で実施形態のバリエーションを広げられることができる。
【0100】
(第3の実施形態)
図 3は、本発明の第3の実施形態に係るブリッジ装置を示す。
【0101】
図 1に示した第1の実施形態との差分は、ブリッジ装置が制御する通信コントローラが、の複数になった点である。本例では、制御対象となる通信コントローラは、第1の通信コントローラ131と第2の通信コントローラ132との2つである。
【0102】
これらの通信コントローラ131,132を制御できるようにするために、通信コントローラ毎に、制御手順を用意する。すなわち、通信処理部13から参照可能な記憶部に、第1の通信コントローラ131用の第1のデータパス制御手順141、及び、第2の通信コントローラ132用の第2のデータパス制御手順142を記憶する。
【0103】
これにより、通信コントローラ104の種類が増えたとしても、通信処理部13が、使用する通信コントローラに応じた制御手順に従って、当該通信コントローラを制御することができる。よって、通信コントローラの種類毎に、ブリッジ装置を追加する必要はない。
【0104】
第1のデータパス制御手順、及び、第2のデータパス制御手順を電子回路にて用意し、それらを CPU102あるいは MPUが、統御部11を通じて切り替えるように構成してもよい。
【0105】
あるいは、ブリッジ装置内に追加のメモリを用意し、それらに CPUあるいは MPUが、第1のデータパス制御手順のマイクロコード、及び、第2のデータパス制御手順のマイクロコードを格納してもよい。この場合、通信処理部13が、使用する通信コントローラの種類に応じて、それらのマイクロコードを選択的に実行する。
【0106】
第3の実施形態では、通信コントローラが複数になった場合を説明したが、メモリコントローラが複数になった場合も、同様にして構成可能である。すなわち、メモリコントローラの種類毎の制御手順を用意し、使用するメモリコントローラに応じた制御手順を実行すればよい。
【0107】
(第4の実施形態)
図 11は、受信モードにおいて例外事象が発生し、非定常状態に陥った場合に行う動作手順を表すフローチャートである。
【0108】
図10に示した受信モードのフローチャートとの差分は、パケット処理部14による受信パケットのヘッダ解析(
図10のS505参照)で、受信パケットのヘッダが、想定しないヘッダであると判断された場合の処理である。
【0109】
まず前提として、本実施形態のブリッジ装置は
図12に示す構成を有する。通信コントローラ104がDMAコントローラ104aを内蔵し、メモリコントローラ103がDMAコントローラ103aを内蔵する。これらのDMAコントローラによるデータ転送は、いったんスタートさせると停止することは、できる限り避けたい制御である。
【0110】
DMA転送を中断させることは、コントローラが持つ機能として可能である。しかしながら、中断を指示した場合、動作再開のためにはコントローラ全体のリセットをかける等の手順を伴う場合があるため、動作再開には比較的長い時間を要してしまう。停止時間が長ければ、その分だけ転送速度が低下してしまう。以上が、いったんスタートさせた DMA転送を停止することに消極的な理由である。
【0111】
そこで、本実施形態では、いったんスタートした DMA転送後に、例外事象が発生した場合には、円滑にデータ転送を再開できるように、その DMA転送をデータバッファ16にて空転させる。コントローラから見ると、そのDMA転送が中断せずに、無事完了しように見える。再開したいときには、その DMA転送に用いた転送情報のエントリを再利用する。
DMA転送を空転させる手段としては、例えば、コントローラ(通信コントローラまたはメモリコントローラ)からデータバッファ16へのバスアクセスを成功させつつ、実際にはデータバッファ16へのデータ入出力を行わない、といった方法がある。なお、これは一例であり、この動作に限定されない。たとえば、データバッファ16へデータ(無関係なデータ)の入出力を行っても動作上、問題は生じない。
【0112】
また、本ブリッジ装置で例外事象が発生し、さらに、以上のような DMA転送の空転が行われた(データ記憶装置に書き込むべきデータが適正に受信されていない)ことを、 CPU102あるいは MPUへ知らしめる必要がある。このため、統御部11にレジスタ11aを設け、そこにブリッジ装置が例外事象と判断した要因や、その要因を捕捉したコントローラ(通信コントローラまたはメモリコントローラ)の識別情報等を格納する。レジスタ11aは、CPUまたはMPUへの通知手段として機能する。
【0113】
本ブリッジ装置は、CPUあるいは MPUの知らないところでデータ転送を進めていくため、こういったCPUあるいは MPUへの通知の仕組みの追加が必要となる。なお、従来では、CPUあるいは MPUが各コントローラを直接制御し、また、パケット解析処理を行っていたため、このような仕組みは不要であるが、CPUの負荷が増大し、転送性能が劣化する問題があった。
【0114】
上記を踏まえ、
図11のフローチャートについて説明する。
【0115】
ステップS601〜S606、S611は、
図10のステップS501〜S505、S507と同じであるため、説明を省略する。
【0116】
パケット処理部14が、ステップS605でパケットヘッダを解析した結果、想定しないヘッダであると判断する(S606)。このとき、データバッファ16は、通信コントローラ104が出力するデータを入力しつつも、実際にはそのデータをバッファせず、その DMA転送が完了するまで空転させる(S607)。通信コントローラ104には、(実際にはバッファしていないが)そのデータを正しく受信したとの通知を返す。通信コントローラ104としては、あたかも DMA転送が成功したように見える。よって、通信コントローラ104は、次の DMA転送を即座に受け付けられる状態となる。なお、本実施形態では実際にはデータをバッファしないが、実際にバッファしても動作に支障は生じない。通信コントローラ104は正しくDMA転送が完了したように見せかけつつ、ブリッジ装置内部では実際には当該DMA転送が適正に行われていないと判断できればよい。
【0117】
通信処理部13は、通信コントローラ104からDMA転送の完了割り込みを受けると、それを契機として統御部11へ例外事象が発生したことを通知する(S608)。通知を受けた統御部11は、 CPU102あるいは MPUへ割り込みを発行する。割り込みを受けたCPU102あるいはMPUは、割込内容に応じて動作する。たとえば、該当する転送情報エントリに基づくデータ転送をやり直すよう統御部11に指示することがある。
【0118】
パケットヘッダの解析で、想定するヘッダであった場合は、次にヘッダ以外の例外事象が発生しているかを調べる(S609)。通信コントローラ104の状態情報、メモリコントローラ103の状態情報、 NANDメモリへ発行したコマンドへの応答内容、パケット長、等々、ありとあらゆるものが考えられる。書き込み先のデータ記憶装置でCRCエラーが発生したような場合も、これに含まれ得る。
【0119】
このような想定外の事象が発生した場合も、通信コントローラ104からデータバッファ16へのDMA転送を空転させる(S610)。通信処理部13は、DMA転送の完了割り込みを受けたら、それを契機として、統御部11へ例外事象が発生したことを通知する(S608)。通知を受けた統御部11は、 CPU102あるいは MPUへ割り込みを発行する。割り込みを受けたCPU102あるいはMPUは、割込内容に応じて動作する。たとえば、該当する転送情報エントリに基づくデータ転送をやり直すよう、統御部11に指示する。
【0120】
(第5の実施形態)
これまで、転送情報記憶部12には、転送対象のファイル全体の転送を完遂できる転送情報エントリが、 CPU102あるいは MPUによって用意された上で、転送を開始する流れについて述べてきた。
【0121】
本実施形態では、転送情報エントリを作成する期間と、データ転送期間を並列化する構成を示す。これにより、転送開始までのタイムラグを軽減し、ファイル転送全体の伝送レートを向上させる。
【0122】
統御部11へ動作の開始フラグを示すレジスタフィールド(
図12のレジスタ11a参照)を追加し、このフラグが立っていて、且つ、転送情報エントリが転送情報記憶部12にあれば、直ちに転送が開始されるように構成する。
CPU102あるいは MPUは、転送対象のファイル全体ではなく、一部についての転送情報エントリの作成が終わった時点で、データ転送を開始させる。データ転送を行わせつつ、残りの転送情報エントリを作成する。転送情報エントリを作成するごとに、それぞれ転送情報記憶部12へ追記していく。
【0123】
こうすることで、転送情報エントリを作成する期間と、データ転送期間を並列化することができる。よって、転送開始までのタイムラグを軽減でき、結果、ファイル転送全体の伝送レートを向上させることが可能となる。
【0124】
ここで、転送情報エントリの個数に関する閾値を統御部11のレジスタに格納し、転送情報エントリの個数がその閾値を下回ったことを契機に、統御部11が割り込みを発行してもよい。これにより、転送情報エントリの追加を、 CPUあるいは MPUへ促す。
【0125】
本実施形態の並列化処理は、ワークメモリ容量が限られ、一度のすべての管理情報を読み込めない場合にも有効である。
【0126】
(第6の実施形態)
図13は、本発明の第6の実施形態に係るブリッジ装置を示す。
【0127】
図13に示すブリッジ装置は、通信コントローラやメモリコントローラのDMAコントローラが、N(Nは2以上の整数)チャネルのデータ転送を実行可能な場合に対応した構成を有する。この構成により、複数のチャネルを用いた同時転送を可能とする。
【0128】
図13に示す例では、2つ(N=2)のチャネルの場合の構成が示されている。2つのパケット処理部と、2つのデータバッファとが設けられている。具体的に、2つのパケット処理部は、第1のパケット処理部14Aおよび第2のパケット処理部14Bを含む。2つのデータバッファは、第1のデータバッファ16Aおよび第2のデータバッファ16Bを含む。
【0129】
転送情報エントリを2つ、同時に使う形で同時に、2チャネルの転送を行う。両エントリ(
図4の表の上位2つのエントリ)の転送方向が、RとW、あるいは、WとRという組み合わせであれば、これまで述べた通りの手法で実現可能である。
【0130】
一方、R→RとかW→Wという転送方向が揃った2エントリに対しては、追加の仕組みが必要となる。すなわち、どちらが先のエントリに属するデータブロックかを、受信側で混ざらないようにする必要がある。
【0131】
このため、送信側のブリッジ装置でパケットヘッダに、どちらが先のエントリに属するか、すなわちこれらのエントリ間の優先度の順位を表す識別情報を付加する。また各データバッファに順位をあらかじめ設定しておく。統御部11がこれらの順位を設定してもよい。送信側のブリッジ装置の具体的な動作例として、エントリの同じ順位のデータバッファにデータを書き込むようメモリ処理部15はメモリコントローラ103に指示する。メモリコントローラ103は、エントリに対応するコマンドに応じて読み出したデータを、当該エントリと同じ順位のデータバッファに書き込む。各パケット処理部は、自身に対応するデータバッファの順位の識別情報をヘッダに付加する。
【0132】
受信側のブリッジ装置の通信コントローラ104では、その識別情報に基づいて、各データバッファへデータを、識別情報が示す順位と同じデータバッファに振り分ける。また、メモリコントローラ103は、各データバッファから読み出したデータを、データバッファと同じ順位のエントリに指定されるブロックアドレスに書き込む。
【0133】
ここで、送信側および受信側の放送で、2チャネル同時送信・受信ができることを、データ転送を実行するに先立って、双方で確認した上でデータ転送を開始する手順を追加してもよい。
【0134】
なお、送信側のメモリにおけるデータブロックの配置と、受信側のメモリにおけるデータブロックの配置とが一致、すなわち、データブロックの個数とサイズが送受信側で一致するとは限らない。そこで、例えば、送信側と受信側間でデータ転送に先立って、送信側データ記憶装置のデータブロックサイズと、受信側データ記憶装置のデータブロックサイズを比較する。そして、小さい方のサイズを転送単位として、2チャネル送受をするように事前交渉を行ってもよい。送信側のデータブロックサイズが大きいと、受信側で同じサイズのブロックを確保できなくなる可能性があるが、事前交渉でデータブロックサイズの小さい方を転送単位とすることでこの問題を解決する。この場合、送信側のファイルの管理情報を、変更後のデータブロック配置に合わせて変更する。なお本段落で述べたことは、2チャネル転送のみならず、1チャネル転送の場合にも適用可能である。
【0135】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。