JP4922442B2 - バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 - Google Patents
バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 Download PDFInfo
- Publication number
- JP4922442B2 JP4922442B2 JP2010171137A JP2010171137A JP4922442B2 JP 4922442 B2 JP4922442 B2 JP 4922442B2 JP 2010171137 A JP2010171137 A JP 2010171137A JP 2010171137 A JP2010171137 A JP 2010171137A JP 4922442 B2 JP4922442 B2 JP 4922442B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- buffer
- transfer
- sector
- frame
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/38—Universal adapter
- G06F2213/3808—Network interface controller
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
- Bus Control (AREA)
Description
本発明の実施形態は、バッファ転送を管理するバッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法に関する。
磁気ディスクドライブ(HDD)、或いはソリッドステートドライブ(SSD)のような記憶装置は、一般にホストインタフェース部を備えている。ホストインタフェース部は、ホストと記憶部との間のデータ転送を制御する。ホストインタフェース部と記憶部との間には、ホストと記憶部との間で転送されるデータを一時格納するバッファが備えられている。ホストインタフェース部とバッファとの間のデータ転送は、バッファ転送と呼ばれる。一方、ホストとホストインタフェース部との間のデータ転送は、フレームを用いて行われることから、フレーム転送と呼ばれる。
従来技術において、ホストから記憶装置に与えられたデータ転送コマンド、例えばリードコマンドで指定されたデータが、当該記憶装置の記憶部から読み出されて、バッファを介して転送されるものとする。つまり、ホストからのデータ転送コマンドに対応するバッファ転送が起動されるものとする。従来技術では、このように、或る1つのデータ転送コマンドに対応するバッファ転送が起動されると、そのデータ転送コマンドの実行が終了するまで、他のデータ転送コマンドに対応するバッファ転送を差し込むことは、想定されていない。
このため従来技術では、データ転送コマンドの実行が滞った場合、他のデータ転送コマンドに対応するバッファ転送は待たされる。この場合、バッファ転送効率の低下を招く。
本発明の目的は、起動されたバッファ転送に対応するデータ転送コマンドの実行が滞ってもバッファ転送効率が低下するのを防止できるバッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法を提供することにある。
実施形態によれば、ホストへフレーム単位で転送されるべきデータを格納する送信FIFO及び前記ホストからフレーム単位で転送されたデータを格納する受信FIFOと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理装置が提供される。このバッファ管理装置は、中間FIFOと、テーブルと、第1のシーケンサと、第2のシーケンサと、第3のシーケンサとを具備する。中間FIFOは、前記送信FIFOまたは前記受信FIFOと前記バッファとの間で転送されるデータを格納する。テーブルは、前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信FIFOまたは前記受信FIFOと前記バッファとの間の、前記中間FIFOを介してのデータ転送を管理するためのバッファ転送情報を保持する。第1のシーケンサは、前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間FIFOとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも1つのフレームを単位に起動する。第2のシーケンサは、前記バッファ転送の起動に応じて、前記送信FIFOまたは前記受信FIFOと前記中間FIFOとの間でフレーム単位でデータを転送し、前記バッファから前記中間FIFOにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でCRCデータを生成し、生成されたCRCデータと対応するセクタデータに付加されているCRCデータとを比較することによって当該セクタデータのエラーをチェックする。第3のシーケンサは、前記バッファ転送の起動に応じて、前記中間FIFOと前記バッファとの間でセクタ単位にデータを転送し、第1のフレームのためのバッファ転送において、前記第1のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送し、前記第1のフレームの終端が前記第1のセクタの終端に一致せず、且つ前記第1のフレームの次の第2のフレームのためのバッファ転送が前記第1のシーケンサによって起動された場合、前記第1のセクタの始端から前記第1のフレームの終端に対応する前記第1のセクタ内の位置までの第1のデータに後続する、前記第1のセクタ内の前記位置から前記第1のセクタの終端までの第2のデータを、前記バッファから前記中間FIFOに再度転送し、しかる後に前記第1のセクタに後続する第2のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送する。前記第2のシーケンサは、前記第1のフレームの終端が前記第1のセクタの終端に一致しない場合、前記第1のフレームの転送の完了後も、前記第1のデータに続いて転送される前記第2のデータに基づいて前記CRCデータの生成を継続し、前記CRCデータの生成の完了後に、前記第1のデータに続いて転送される前記第2のデータを破棄する。
以下、実施の形態につき図面を参照して説明する。
図1は一つの実施形態に係るバッファ管理装置(以下、バッファマネージャと称する)を備えたホストインタフェース部の構成を示すブロック図である。
図1は一つの実施形態に係るバッファ管理装置(以下、バッファマネージャと称する)を備えたホストインタフェース部の構成を示すブロック図である。
本実施形態において、図1に示すバッファマネージャ1は、磁気ディスクドライブ、或いはソリッドステートドライブのような記憶装置のホストインタフェース部2に備えられている。記憶装置は、ホストインタフェース部2の他に、バッファ3を備えている。
バッファ3は、図示しないホスト(Host)と記憶部との間で転送されるコマンド及びデータを一時格納する。バッファ3は、DDR(Double Data Rate) SDRAM(Synchronous Dynamic Random Access Memory)のような書き換え可能なメモリから構成される。ホストは、SAS(Serial Attached SCSI)を介して記憶装置との間でシリアルデータ転送(送受信)を行う。このシリアルデータ転送には、例えばフレーム(Frame)が用いられる。記憶部は、記憶装置が磁気ディスクドライブであれば、記憶(記録)メディアとして磁気記録メディアを含み、記憶装置がソリッドステートドライブであれば、記憶メディアとして書き換え可能な不揮発性メモリを含む。なお、ホストが、SATA(シリアルATA)、またはFC(ファイバーチャンネル)インタフェースを介して記憶装置との間でシリアルデータ転送を行ってもよい。
ホストインタフェース部2は、SASモジュール21と、ホスト−データパスモジュール22と、アービタ23とを備えている。
SASモジュール21は、物理層モジュール211と、リンク層モジュール212と、ポート層モジュール213と、受信FIFO(以下、RxFIFOと称する)214と、送信FIFO(以下、TxFIFOと称する)215と、トランスポート層モジュール216とを備えている。
SASモジュール21は、物理層モジュール211と、リンク層モジュール212と、ポート層モジュール213と、受信FIFO(以下、RxFIFOと称する)214と、送信FIFO(以下、TxFIFOと称する)215と、トランスポート層モジュール216とを備えている。
物理層モジュール211は、所定のSASポート(SAS Port)を介してホストとの間でフレーム(Frame)を用いてシリアルデータ転送(送受信)を行う。本実施形態において、所定のSASポートのポート番号(#)は0(#0)であるものとする。以下、この所定のSASポートを、SASポート#0と称する。物理層モジュール211は、シリアルの受信データ(受信フレーム)をパラレルの受信データ(受信フレーム)に変換し、パラレルの送信データ(送信フレーム)をシリアルの送信データ(送信フレーム)に変換する。
リンク層モジュール212は、物理層モジュール211から転送されるパラレルの受信フレームを、RxFIFO214を介してトランスポート層モジュール216に転送する。リンク層モジュール212はまた、トランスポート層モジュール216からTxFIFO215を介して転送されるパラレルの送信フレームを物理層モジュール211に転送する。
ポート層モジュール213は、リンク層モジュール212とトランスポート層モジュール216とのコネクション(Connection)を制御する。
ポート層モジュール213は、リンク層モジュール212とトランスポート層モジュール216とのコネクション(Connection)を制御する。
RxFIFO214は、リンク層モジュール212から転送された受信フレームを一時格納し、その格納順にトランスポート層モジュール216に出力するための先入れ先出し(FIFO)バッファである。TxFIFO215は、トランスポート層モジュール216から転送された送信フレームを一時格納し、その格納順にリンク層モジュール212に出力するための先入れ先出しバッファである。
トランスポート層モジュール216は、受信フレームをホスト−データパスモジュール22に転送する。トランスポート層モジュール216はまた、ホスト−データパスモジュール22から転送される送信フレームを、TxFIFO215を介してリンク層モジュール212に転送する。トランスポート層モジュール216はまた、受信フレームを解釈し、当該受信フレームが、リードコマンドまたはライトコマンドのようなコマンド(Command)を含む場合、当該コマンドをアプリケーション層モジュール4に転送する。
トランスポート層モジュール216は、後述するエクスチェンジテーブル216aを備えている。
トランスポート層モジュール216は、後述するエクスチェンジテーブル216aを備えている。
ホスト−データパスモジュール22は、中間FIFO(以下、AFIFOと称する)221を備えている。AFIFO221は、RxFIFO214及びRxFIFO214と、バッファ3との中間に存在する。AFIFO221は、受信フレームを順次格納し、その格納順にセクタ単位で出力するための先入れ先出しバッファである。セクタは、周知のように、記憶メディアへのアクセスの最小単位である。AFIFO221はまた、送信セクタを順次格納し、その格納順にフレーム単位で出力するための先入れ先出しバッファでもある。つまり、AFIFO221は、フレームデータからセクタデータへの変換及びセクタデータからフレームデータへの変換に用いられる中間バッファである。
アービタ23は、ホスト−データパスモジュール22(より詳細には、ホスト−データパスモジュール22内のAFIFO221)、メディアポート24、またはCPUポート25と、バッファ3との間のデータ転送を調停する。この転送をバッファ転送と称する。メディアポート24は、記憶メディア(Media)に対応するポートであり、CPUポート25はCPUに対応するポートである。CPUは、記憶装置の主コントローラとして機能する。
本実施形態において、バッファマネージャ1は、トランスポート層モジュール216(SASモジュール21内のトランスポート層モジュール216)と、ホスト−データパスモジュール22と、アービタ23とから構成されている。
図2は、バッファマネージャ1の詳細な構成を示すブロック図である。
バッファマネージャ1のトランスポート層モジュール216は、図1に示したエクスチェンジ(Exchange)テーブル216aに加えて、エクスチェンジシーケンサ216bを備えている。
エクスチェンジテーブル216aは、ホストからのコマンドに基づくRxFIFO214及びTxFIFO215とバッファ3との間のデータ転送(バッファ転送)を管理するために、コマンド毎に当該コマンドに対応付けて管理情報(以下、バッファ転送情報と称する)を保持する。以下の説明では、リードコマンドまたはライトコマンドのような、データ転送を伴うコマンドを、データ転送コマンドと称する。
エクスチェンジテーブル216aに保持されるバッファ転送情報は、バッファアドレス(Buffer Address)、セクタカウント(Sector Count)、バイトカウント(Byte Count)、LBA、巡回冗長検査データ(以下、BCRCと称する)、エラー訂正符号(以下、BECCと称する)を含む。
バッファアドレスは、バッファ転送(より詳細には、対応するデータ転送コマンドで指定されるバッファ転送)におけるバッファ3のアドレスを示し、当該バッファ転送の進行に応じて更新される。
セクタカウントは、バッファ転送における転送されるべき最初のセクタのセクタ位置を示し、当該バッファ転送の進行に応じて更新される。このセクタカウントは、次に開始すべきセクタ転送における相対的なセクタ位置をも示しており、セクタポインタとして用いられる。
セクタカウントは、バッファ転送における転送されるべき最初のセクタのセクタ位置を示し、当該バッファ転送の進行に応じて更新される。このセクタカウントは、次に開始すべきセクタ転送における相対的なセクタ位置をも示しており、セクタポインタとして用いられる。
バイトカウントは、バッファ転送における転送されるべき総バイト数を示し、当該バッファ転送の進行状況に応じて更新される。LBAは、バッファ転送における転送されるべきデータの論理アドレス(論理ブロックアドレス)を示し、当該バッファ転送の進行に応じて更新される。バイトカウント及びLBAの初期値は、対応するデータ転送コマンドによって指定される。また、上記セクタカウントの初期値は、対応するデータ転送コマンドの指定するバイトカウント及びセクタ当たりのバイト数に基づいて算出される。
BCRCはバッファ転送で転送されたセクタデータに付されているCRCデータ(CRC値)を示し、BECCは、当該セクタデータに含まれているECCを示す。
BCRCはバッファ転送で転送されたセクタデータに付されているCRCデータ(CRC値)を示し、BECCは、当該セクタデータに含まれているECCを示す。
このように、データ転送コマンド毎にエクスチェンジテーブル216aに保持(登録)されるバッファ転送情報は、対応するデータ転送コマンドで初期値が指定されるバイトカウント及びLBAに加えて、バッファアドレス、セクタカウント、BCRC及びBECCを含む。
エクスチェンジシーケンサ216bは、データ転送コマンド毎に、対応する転送データをフレームに分割してフレーム順にバッファ転送(つまり、シーケンシャルなフレーム転送)を行うために、例えばフレーム単位でバッファ転送を起動する。
エクスチェンジシーケンサ216bはまた、バッファ転送の方向(つまりバッファ3に対するリード/ライトの別)に左右されることなく、現在実行中のデータ転送コマンドとは別のデータ転送コマンドに対応するバッファ転送を差し込む。
ホスト−データパスモジュール22は、AFIFO221に加えて、SASインタフェースシーケンサ(以下、SASIFシーケンサと称する)222と、バッファインタフェースシーケンサ(以下、バッファIFシーケンサと称する)223と、レジスタファイル224,225及び226と、更新制御モジュール227とを備えている。
SASIFシーケンサ222は、AFIFO221からTxFIFO215へ、ホストからのリードコマンドで指定されたリードデータを、後述する内部制御用のバッファ転送情報に基づいてフレーム単位で転送する。SASIFシーケンサ222はまた、RxFIFO214からAFIFO221へ、ホストからのライトコマンドで指定されたライトデータを、内部制御用のバッファ転送情報に基づいてフレーム単位で転送する。
バッファIFシーケンサ223は、バッファ3からAFIFO221へ、ホストからのリードコマンドで指定されたリードデータを、内部制御用のバッファ転送情報に基づいてセクタ単位で転送する。バッファIFシーケンサ223はまた、AFIFO221からバッファ3へ、ホストからのライトコマンドで指定されたライトデータを、内部制御用のバッファ転送情報に基づいてセクタ単位で転送する。
内部制御用のバッファ転送情報は、フレーム単位のデータ転送(フレーム転送)及びセクタ単位のデータ転送(セクタ転送)の進行に応じて動的に更新される。ホスト−データパスモジュール22は、内部制御用のバッファ転送情報に加えて、後述する現(current)バッファ転送情報及び前(previous)バッファ転送情報も保持・管理する。以下の説明では、現バッファ転送情報及び前バッファ転送情報を、それぞれ現情報及び前情報と称する。
内部制御用のバッファ転送情報、現情報及び前バッファ管理情報は、それぞれ後述するレジスタファイル224,225及び226に保持される。つまりレジスタファイル224,225及び226には、データ転送コマンドに対応するバッファ転送の起動時に、当該データ転送コマンドに対応付けてエクスチェンジテーブル216aに登録されているバッファ転送情報が初期設定される。エクスチェンジシーケンサ216bからホスト−データパスモジュール22に対して後述するフレーム完了が通知された場合、現情報は内部制御用のバッファ転送情報に、前情報は現情報に、それぞれ更新される。これにより、フレーム完了通知時点における内部制御用のバッファ転送情報及び現情報が、それぞれ、新たな現情報及び前情報として用いられる。
更新制御モジュール227は、起動されたバッファ転送の完了時に、その時点における現情報を次のバッファ転送のためのバッファ転送情報の初期値として、エクスチェンジテーブル216aにフィードバックする。但し、SASIFシーケンサ222による後述するCRCチェックでエラーが検出された場合は、更新制御モジュール227は、現情報に代えて前情報をフィードバックする。これにより、エクスチェンジテーブル216aは、現フレームのバッファ転送が開始された時点の状態に更新され(戻され)、CPUによるファームウェア(FW)に従う処理(FW処理)を必要とすることなしに、バッファ転送をリトライできる。
ホスト−データパスモジュール22は、レジスタファイル224,225及び226と、更新制御モジュール227とを更に備えている。これらのレジスタファイル224,225及び226と、更新制御モジュール227とについては、図13を参照して後述する。
次に、本実施形態におけるリード時のデータ転送(リードデータ転送)について、図3の動作説明図を参照して説明する。
今、ホストからホストインタフェース部2にリードコマンドを含むフレームが転送されたものとする。このリードコマンドを含むフレームは、SASモジュール21で受信される。SASモジュール21内のトランスポート層モジュール216は、受信されたフレームから当該受信されたフレームに含まれているリードコマンド(つまりホストからのリードコマンド)を取り出す。
今、ホストからホストインタフェース部2にリードコマンドを含むフレームが転送されたものとする。このリードコマンドを含むフレームは、SASモジュール21で受信される。SASモジュール21内のトランスポート層モジュール216は、受信されたフレームから当該受信されたフレームに含まれているリードコマンド(つまりホストからのリードコマンド)を取り出す。
CPUは、ホストからのリードコマンドによって指定されるLBA(開始論理ブロックアドレス)及びバイトカウントを含むバッファ転送情報を、所定のFWに従って、当該リードコマンドに対応付けてエクスチェンジテーブル216aに登録する。このことは、CPUが、ホストからのリードコマンドを、FWに従ってトランスポート層モジュール216内のエクスチェンジテーブル216aに登録したことと等価である。但し、エクスチェンジテーブル216aに登録されるバッファ転送情報は、ホストからのデータ転送コマンド(ここではリードコマンド)によって指定されない、バッファアドレス、セクタカウント、BCRC及びBECCを含む。本実施形態において、バッファアドレス、BCRC及びBECCの初期値には、デフォルト値が用いられる。
またCPU(FW)は、リードコマンドで指定されたデータを記憶部からセクタ単位に読み出してバッファ3に一時格納するための制御を開始する。なお、この制御を開始した後に、CPU(FW)が、リードコマンドに対応したバッファ転送情報をエクスチェンジテーブル216aに登録してもよい。この場合、CPU(FW)は、バッファ転送情報中のバッファアドレスの初期値(初期バッファアドレス)として、上記制御の開始時に実際に先頭のセクタデータが格納されるバッファ3のアドレスを用いる。
その後CPUは、バッファマネージャ1のエクスチェンジシーケンサ216bに対して、リードコマンドのコミットを要求する(ステップ301)。この要求に応じて、エクスチェンジシーケンサ216bは、リードコマンドで指定されたデータの転送(バッファ転送)の制御のために、ホスト−データパスモジュール22に対して例えばフレーム単位でバッファ転送の起動を指示する(ステップ302)。
このとき、リードコマンドに対応付けてエクスチェンジテーブル216aに登録されているバッファ転送情報が、ホスト−データパスモジュール22内のレジスタファイル224,225及び226に初期設定される。レジスタファイル224に設定されたバッファ転送情報が、ホスト−データパスモジュール22内のSASIFシーケンサ222及びバッファIFシーケンサ223によるデータ転送制御に用いられる。このSASIFシーケンサ222及びバッファIFシーケンサ223によるデータ転送制御を内部制御と称する。
さて、ホスト−データパスモジュール22は、エクスチェンジシーケンサ216bからバッファ転送の起動が指示されると、レジスタファイル224に設定されたバッファ転送情報、即ちリードコマンドに対応する内部制御用のバッファ転送情報に基づき、当該リードコマンドで指定されたデータ(リードデータ)をバッファ3からTxFIFO215に、AFIFO221を介して転送する。以下、このバッファ3からTxFIFO215へのリードデータの転送について詳述する。
ホスト−データパスモジュール22のバッファIFシーケンサ223は、上述のリードコマンドに対応する内部制御用のバッファ転送情報中のバッファアドレス及びセクタカウントに基づき、バッファ3からAFIFO221へ、リードデータをセクタ単位で転送する(ステップ303)。このセクタ単位でバッファ3から取り出されるデータ(セクタデータ)には、CRCデータ(より詳細にはCRCデータ及びECC)が付加されている。
バッファIFシーケンサ223は、このセクタ単位のデータ転送に応じて、バッファアドレス及びセクタカウントを更新する。本実施形態において、セクタカウントは、セクタ単位のデータ転送に応じてディクリメントされる。
バッファIFシーケンサ223は、セクタ単位のデータ転送を、セクタカウントが「0」になるまで実行する。つまりバッファIFシーケンサ223は、セクタ単位のデータ転送を、内部制御用のバッファ転送情報中のバイトカウントを意識することなく実行する。
これにより、リードコマンドで指定されたバイトカウント(初期バイトカウント)の示すバイト数のデータの転送(或いは1フレーム分のデータの転送)が終了しても、セクタの境界(終端)に達しない場合には、バッファIFシーケンサ223は、当該セクタの最後までバッファ3からデータを取り出して、AFIFO221に転送することになる。バッファIFシーケンサ223は、このようなデータ転送により、SASIFシーケンサ222によるCRCチェック(CRC演算)を完結させることができる。つまりバッファIFシーケンサ223は、セクタ単位でバッファ3からAFIFO221に、CRCチェックに必要なCRCデータ(より詳細にはCRCデータ及びECC)が付加されたデータ(セクタデータ)を転送することができる。これにより、以下に述べるように、バッファ転送で生成されるフレーム全体のエラーチェックが保証される。
SASIFシーケンサ222は、AFIFO221からTxFIFO215へ、ホストからのリードコマンドで指定されたリードデータを、内部制御用のバッファ転送情報中のバイトカウントに基づいてフレーム単位で転送する(ステップ304)。
SASIFシーケンサ222は、このフレーム単位のデータ転送に応じて、セクタカウント、バイトカウント及びLBAを更新する。本実施形態において、バイトカウントは、フレーム単位のデータ転送に応じてディクリメントされる。
SASIFシーケンサ222はフレーム単位の転送において、転送されるフレームを構成するセクタデータ(つまりバッファ3からAFIFO221にセクタ単位で転送されたセクタデータ)に基づいてCRCデータ(CRCデータ及びECC)を生成するためのCRC演算を行う。そしてSASIFシーケンサ222は、CRC演算結果(生成されたCRCデータ)と対応するセクタデータ中のCRCデータ(CRCデータ及びECC)とに基づいて、当該セクタデータのエラーをチェックする(305)。このエラーチェックが、CRCチェックである。
本実施形態では、バイトカウントが0になっても、セクタの終端に達しない場合、その時点のセクタカウントをバッファ転送情報として記憶し、SASIFシーケンサ222は、バイトカウントが0となった位置から当該セクタの終端までのデータ、つまりCRCチェック(CRC演算)を完結させるために余分に転送されたデータを破棄する。なお、CRCチェックが、AFIFO221からTxFIFO215へのフレーム単位の転送時に行われる必要はない。例えば、バッファ3からセクタ単位に転送されたデータがAFIFO221に一時格納される際に、CRCチェックが行われてもよい。
SASIFシーケンサ222は、CRCチェックでエラーが検出されたならば、エクスチェンジシーケンサ216bにエラーを通知する(ステップ306)。これに対し、CRCチェックでエラーが検出されず、且つフレーム単位でのバッファ転送の起動(ステップ302)に対応した1フレームのAFIFO221からTxFIFO215への転送が完了したならば、SASIFシーケンサ222はエクスチェンジシーケンサ216bにバッファ転送の完了を通知する(ステップ307)。
エクスチェンジシーケンサ216bは、SASIFシーケンサ222からのバッファ転送完了の通知により1フレームの転送が確定したことを認識すると、ホスト−データパスモジュール22に対してフレーム完了を通知する。
ホスト−データパスモジュール22内の更新制御モジュール227は、このフレーム完了通知の後の、セクタ転送完了通知に応じて、現時点における更新されたバッファ転送情報(現情報)をエクスチェンジテーブル216aにフィードバックする。即ち更新制御モジュール227は、エクスチェンジテーブル216aに保持されているバッファ転送情報を、次のフレーム転送(バッファ転送)のために、現情報に更新する。更新されたバッファ転送情報は、次のフレーム転送(バッファ転送)の管理に用いられる。現情報のフィードバックの詳細については、図13を参照して後述する。
もし、SASIFシーケンサ222からフィードバックされたバッファ転送情報(更新されたバッファ転送情報)をエクスチェンジテーブル216aが更新後、バイトカウントが0になっていないならば、エクスチェンジシーケンサ216bは、ホスト−データパスモジュール22に対して、再びフレーム単位でバッファ転送の起動を指示する(ステップ302)。
一方、リードコマンドで指定されたバイト数のリードデータのうち、先頭のフレームのデータのAFIFO221からTxFIFO215への転送が完了すると、TxFIFO215からホストへの例えばコマンド単位のデータ転送(フレーム転送)がSASモジュール21によって開始される。
図4は、上述のリードデータ転送の例R1を示すタイミングチャートである。
例R1は、フレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。ここでは、フレーム単位でバッファ転送が起動され、3つのフレーム#0乃至#2が転送されるものとする。
例R1は、フレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。ここでは、フレーム単位でバッファ転送が起動され、3つのフレーム#0乃至#2が転送されるものとする。
例R1では、リードコマンドで指定されたリードデータをバッファ3からホストに転送するためのバッファ転送が、フレーム単位で起動される。このため、各フレーム転送の間に、他のリードコマンドまたはライトコマンドで指定されたデータを転送するためのバッファ転送(以下、他のリード/ライトのためのバッファ転送と称する)を挿入することができる。これにより、例えばリードデータ転送を伴うリードコマンドの実行が滞っても、バッファ転送効率が低下するのを防止できる。この効果は、各フレーム転送、例えばリードデータ転送のための各フレーム転送の間に、ライトコマンドで指定されたデータを転送するためのバッファ転送を優先的に挿入する場合に特に大きくなる。その理由は、リードデータの転送はバッファ3におけるデータ格納状況によって途中で途切れる可能性があるのに対し、ライトデータの転送はホストから要求があれば可能なことが保証されているためである。つまりライトデータ優先でバッファ3の領域を利用する方がバッファ転送効率を向上することができる。
図5は、上述のリードデータ転送の例R2を示すタイミングチャートである。
例R2は、例R1と同様にフレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。但し例R2では、3フレーム一括でバッファ転送が起動されるものとする。
例R2は、例R1と同様にフレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。但し例R2では、3フレーム一括でバッファ転送が起動されるものとする。
このように例R2では、リードコマンドで指定されたリードデータをバッファ3からホストに転送するためのバッファ転送が、3フレーム一括で起動される。この場合、他のリード/ライトのためのバッファ転送を、3フレームの転送終了後に行うことができる。また例R2では、1フレーム単位にバッファ転送を起動するよりも、起動回数が少なくなるため、効率のよいバッファ転送が可能となる。
なお、バッファ転送は、必ずしも、例R1のようにフレーム(1フレーム)単位で、或いは例2のように3フレーム一括で、起動される必要はない。例えば、バッファ転送が、2フレーム単位で、或いは4以上のフレームの単位で、起動されても構わない。つまり、バッファ転送は、少なくとも1つのフレームを単位に起動されればよい。
図6は、上述のリードデータ転送の例R3を示すタイミングチャートである。
例R3は、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例R1と同様に、フレーム単位でバッファ転送が起動される。但し、例R3では、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R3は、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例R1と同様に、フレーム単位でバッファ転送が起動される。但し、例R3では、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R3では、図6から明らかなように、先頭のセクタ#0のデータ(528B)と、次のセクタ#1の始端から496Bとから先頭のフレーム#0が構成される。しかし、バッファIFシーケンサ223は、フレーム#0の転送のために、セクタ#0のデータと、セクタ#1のデータとを、バッファ3からAFIFO221にセクタ単位で順次転送する。SASIFシーケンサ222は、フレーム#0のTxFIFO215への転送を、バッファ3からAFIFO221へのセクタ#0の転送に応じて開始する。
フレーム#0は、セクタ#1の始端から496Bの位置で終了する。しかしバッファIFシーケンサ223は、フレーム#0の転送が完了してもセクタ#1の転送が完了していない場合、セクタ#1の残りの32Bもバッファ3からリードしてAFIFO221に転送する。つまりバッファIFシーケンサ223は、フレーム#0に対応する、セクタ#0のデータ(528B)と次のセクタ#1の始端から496B(第1のデータ)とを、バッファ3からAFIFO221へ転送し終えても、セクタ#1の残りの32B(第2のデータ)も続けてバッファ3からリードしてAFIFO221へ転送する。その理由は、SASIFシーケンサ222によるセクタ#1のデータを対象とするCRCチェック(CRC演算)を完結させるためである。このように、CRCチェックのためにセクタの残りのデータをバッファ3からリードすることを、ダミーリードと称する。
SASIFシーケンサ222は、バッファIFシーケンサ223による上述のセクタ単位のデータ転送に応じて、AFIFO221からセクタ#0のデータをリードすることにより、フレーム#0のTxFIFO215への転送を開始する。SASIFシーケンサ222はまた、セクタ#0のデータをAFIFO221からリードした場合、当該セクタ#0のCRCチェックのためのCRC演算を実行する。そしてSASIFシーケンサ222は、CRC演算の結果とセクタ#0に含まれているCRCデータ及びECCとに基づいて、当該セクタ#0のCRCチェックを実行する。
もし、セクタ#0のCRCチェックでエラーが検出されないならば、SASIFシーケンサ222はフレーム#0の転送を継続するために、セクタ#1の始端から496Bをリードする。このときSASIFシーケンサ222は、セクタ#1のCRCチェックのためのCRC演算を開始する。SASIFシーケンサ222がセクタ#1の始端から496Bをリードした時点で、フレーム#0のTxFIFO215への転送は完了する。このように、フレーム#0の転送が完了すると、詳細を後述するように、エクスチェンジシーケンサ216bからホスト−データパスモジュール22に対してフレーム完了が通知され、現情報は内部制御用のバッファ転送情報に、前情報は現情報に、それぞれ更新される。
一方、SASIFシーケンサ222はフレーム#0の転送を完了しても、CRC演算を完結させるために、セクタ#1の残りの32BをAFIFO221からリードする。ここで、セクタ#1の始端から496BまでのCRC演算の途中結果、つまり演算途中のCRC値及びECC(以下、CRC中間データ及びECC中間データと称する)は、それぞれ内部制御用のバッファ転送情報中の更新されたBCRC及びBECCとして用いられる。
CRC演算がセクタ#1の残りの32Bまで完了すると、つまりCRC演算が確定すると、SASIFシーケンサ222はCRCチェックを実行する。即ちSASIFシーケンサ222は、CRC演算で生成されたCRCデータ及びECCと、セクタ#1に含まれているCRCデータ及びECCとに基づいて、当該セクタ#1のCRCチェックを実行する。
もし、CRCチェックでエラーが検出されなかった場合、SASIFシーケンサ222はセクタ転送完了通知を発行する。すると更新制御モジュール227は、更新されたバッファ転送情報(現情報)を、次のフレーム#1の転送のために、エクスチェンジテーブル216aにフィードバックする。これにより、フレーム#0の終端がセクタ#1の終端に一致しないバッファ転送時でも、エクスチェンジテーブル216aに保持されているバッファ転送情報を、次のフレーム#1の転送のためにCPUがFWに従って更新する必要がなくなる。
エクスチェンジテーブル216aにフィードバックされるバッファ転送情報は、ダミーリードを含めない時点の情報となる。例えば、バッファ転送情報中のバイトカウントは、セクタ#1の残りの32Bの先頭位置に対応し、バッファ転送情報中のBCRC及びBECC、つまり更新されたBCRC及びBECCは、それぞれ、上述のCRC中間データ及びECC中間データである。
一方、SASIFシーケンサ222は、エクスチェンジシーケンサ216bにバッファ転送完了通知を返す。するとエクスチェンジシーケンサ216bは、更新制御モジュール227からエクスチェンジテーブル216aにフィードバックされたバッファ転送情報(つまりセクタ#1の残りの32Bがリードされる直前の状態を示すバッファ転送情報)に基づいて、次のフレーム#1の転送のために、ホスト−データパスモジュール22に対してバッファ転送の起動を指示する。するとホスト−データパスモジュール22のバッファIFシーケンサ223は、バッファ転送情報のバイトカウントに基づき、セクタ#1の残り32Bをバッファ3からAFIFO221に再度転送する。バッファIFシーケンサ223は更に、後続のセクタ#2及びセクタ#3を、バッファ3からAFIFO221に転送する。
SASIFシーケンサ222は、セクタ#1の残り32Bと、セクタ#2と、セクタ#3の始端から464Bとから構成されるフレーム#1を、AFIFO221からTxFIFO215に転送する。フレーム#1の転送時に、SASIFシーケンサ222は、バッファ転送情報中のBCRC及びBECC(つまりセクタ#1の始端から496BまでのCRC演算の途中結果)と、セクタ#1の残り32Bとに基づいて、セクタ#1のデータのCRC演算を再開する。これによりSASIFシーケンサ222は、セクタ#1の途中からのデータ転送(バッファ転送の起動)であっても、セクタ#1全体を再度リードすることなく、またCRC演算を最初から実行することなく、当該セクタ#1のCRCチェックのためのCRC演算を正しく継続して完結することができる。
SASIFシーケンサ222は、セクタ#2及びセクタ#3についても、CRC演算を行って、そのCRC演算結果に基づいてCRCチェックを行う。これらのCRCチェックでエラーが検出されずに、TxFIFO215へのフレーム#1の転送が完了したならば、SASIFシーケンサ222は、エクスチェンジシーケンサ216bにバッファ転送完了通知を返す。
フレーム#1に後続するフレーム#2の生成・転送についても、当該フレーム#1と同様に行われる。但し、フレーム#1の終端は、セクタ#4の終端に一致する。本実施形態において、フレームの長さは1024Bである必要はなく、1024Bを超えない範囲で任意の長さに設定可能である。
例R3においても、リードコマンドで指定されたリードデータをバッファ3からホストに転送するためのバッファ転送が、フレーム単位で起動される。このため、各フレーム転送の間に、他のリード/ライトのためのバッファ転送を挿入することができる。しかも、例えばフレーム#0の転送とフレーム#1の転送との間に、他のリード/ライトのためのバッファ転送を挿入しても、フレーム#1の転送を、対応するバッファ転送情報中のバイトカウント、BCRC及びBECCに基づいて効率的に行うことができる。
図7は、上述のリードデータ転送の例R4を示すタイミングチャートである。
例R4は、例R3と同様に、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例R2と同様に、3フレーム一括でバッファ転送が起動され、例R3と同様に、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R4は、例R3と同様に、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例R2と同様に、3フレーム一括でバッファ転送が起動され、例R3と同様に、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R4では、例R3と同様に、先頭のセクタ#0のデータ(528B)と、次のセクタ#1の始端から496Bとで、先頭のフレーム#0が構成される。つまりフレーム#0はセクタ#1のバッファ転送が完了しなければ確定しない。
SASIFシーケンサ222は、セクタ#1のバッファ転送が完了すると、その旨をエクスチェンジシーケンサ216bに通知する。これによりエクスチェンジシーケンサ216bは、フレーム#0が確定したとして、ホスト−データパスモジュール22に対してフレーム完了を通知する。
SASIFシーケンサ222は、セクタ#1のバッファ転送が完了すると、その旨をエクスチェンジシーケンサ216bに通知する。これによりエクスチェンジシーケンサ216bは、フレーム#0が確定したとして、ホスト−データパスモジュール22に対してフレーム完了を通知する。
またSASIFシーケンサ222は、バッファIFシーケンサ223によるバッファ3からAFIFO221へのセクタ単位のデータ転送(セクタ転送)の完了毎に、セクタ転送完了通知を発行する。例えば、フレーム#0から除外される、セクタ#1の残りの32Bが、フレーム#1の転送のためにバッファ3からAFIFO221に転送された場合、SASIFシーケンサ222は、セクタ転送完了通知を発行する。
エクスチェンジシーケンサ216bは、フレーム完了をホスト−データパスモジュール22に通知した場合、SASIFシーケンサ222からセクタ転送完了通知が発行されるのを待って、対応するフレーム(ここではフレーム#0)がCRC値を含めて確定したと判断する。またエクスチェンジシーケンサ216bは、フレーム#2の転送のためにセクタ#4がバッファ3からAFIFO221に転送された結果、SASIFシーケンサ222からバッファ転送完了通知を受け取った場合には、全てのフレームが確定していると判断する。
例R4においても、例R2と同様に、他のリード/ライトのためのバッファ転送を、フレーム#0乃至#2の3フレームの転送終了後に行うことができる。
例R4においても、例R2と同様に、他のリード/ライトのためのバッファ転送を、フレーム#0乃至#2の3フレームの転送終了後に行うことができる。
次に、本実施形態におけるライト時のデータ転送(ライトデータ転送)について、図8の動作説明図を参照して説明する。
今、ホストからホストインタフェース部2にライトコマンドを含むフレームが転送されたものとする。このライトコマンドを含むフレームは、SASモジュール21で受信される。またライトコマンドで指定されるライトデータは、RxFIFO214に格納される。
今、ホストからホストインタフェース部2にライトコマンドを含むフレームが転送されたものとする。このライトコマンドを含むフレームは、SASモジュール21で受信される。またライトコマンドで指定されるライトデータは、RxFIFO214に格納される。
CPU(FW)は、SASモジュール21で受信されたフレームに含まれているライトコマンド(つまりホストからのライトコマンド)によって指定されるLBA及びバイトカウントを含むバッファ転送情報を、当該リードコマンドに対応付けてエクスチェンジテーブル216aに登録する。その後CPUは、バッファマネージャ1のエクスチェンジシーケンサ216bに対して、ライトコマンドのコミットを要求する(ステップ801)。この要求に応じて、エクスチェンジシーケンサ216bは、ライトコマンドで指定されたデータの転送(バッファ転送)の制御のために、ホスト−データパスモジュール22に対して例えばフレーム単位でバッファ転送の起動を指示する(ステップ802)。
このとき、ライトコマンドに対応付けてエクスチェンジテーブル216aに登録されているバッファ転送情報が、ホスト−データパスモジュール22内のレジスタファイル224,225及び226に初期設定される。ホスト−データパスモジュール22は、レジスタファイル224に設定されている、ライトコマンドに対応するバッファ転送情報(内部制御用のバッファ転送情報)に基づき、当該ライトコマンドで指定されたデータ(ライトデータ)をRxFIFO214からバッファ3に、AFIFO221を介して転送する。以下、このRxFIFO214からバッファ3へのライトデータの転送について詳述する。なお、前述したリードデータの転送の場合と等価な点については、説明を省略する。
SASIFシーケンサ222は、RxFIFO214からAFIFO221へ、ホストからのライトコマンドで指定されたライトデータを、バッファ転送情報中のバイトカウントに基づいてフレーム単位で転送する(ステップ803)。このときSASIFシーケンサ222は、RxFIFO214からAFIFO221にフレーム単位で転送されるデータに基づいて、セクタ単位でCRCデータ及びECCを生成するためのCRC演算を行う(ステップ804)。このCRC演算の進行に応じて、レジスタファイル224に保持されているBCRC及びBECCが更新される。フレーム単位でAFIFO221に転送されるデータ(つまりAFIFO221に一時格納されるデータ)には、セクタ単位で生成されたCRCデータ及びECCが付加される(ステップ805)。
一方、バッファIFシーケンサ223は、バッファ転送情報中のバッファアドレス及びセクタカウントに基づき、AFIFO221からバッファ3へ、ライトデータをセクタ単位で転送する(ステップ806)。バッファIFシーケンサ223は、セクタ単位のデータ転送において、ライトコマンドで指定されたバイトカウント(初期バイトカウント)の示すバイト数のデータの転送が終了した場合には、たとえセクタの終端に達していなくても、その時点でセクタ単位の転送を完了する。
図9は、上述のライトデータ転送の例W1を示すタイミングチャートである。
例W1は、フレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。ここでは、フレーム単位でバッファ転送が起動され、3フレームが転送されるものとする。
例W1は、フレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。ここでは、フレーム単位でバッファ転送が起動され、3フレームが転送されるものとする。
例W1では、ホストからのライトコマンドで指定されたホストからのライトデータを、バッファ3に転送するためのバッファ転送が、フレーム単位で起動される。このため、各フレーム転送の間に、他のリード/ライトのためのバッファ転送を挿入することができる。
図10は、上述のライトデータ転送の例W2を示すタイミングチャートである。
例W2は、例W1と同様にフレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。但し例W2では、例R2と同様に、3フレーム一括でバッファ転送が起動されるものとする。
例W2は、例W1と同様にフレームの終端がセクタの終端に一致し、1セクタの長さが512B(バイト)、1フレームの長さが最長で1024Bの場合である。但し例W2では、例R2と同様に、3フレーム一括でバッファ転送が起動されるものとする。
このように例W2では、ライトコマンドで指定されたホストからのライトデータを、バッファ3に転送するためのバッファ転送が、3フレーム一括で起動される。この場合、他のリード/ライトのためのバッファ転送を、3フレームの転送終了後に行うことができる。
図11は、上述のライトデータ転送の例3Wを示すタイミングチャートである。
例W3は、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例W1と同様に、フレーム単位でバッファ転送が起動される。但し、例W3では、3つのフレーム#0乃至#2の転送により、対応するデータが5つのセクタ#0乃至#4に分散されて転送される。
例W3は、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例W1と同様に、フレーム単位でバッファ転送が起動される。但し、例W3では、3つのフレーム#0乃至#2の転送により、対応するデータが5つのセクタ#0乃至#4に分散されて転送される。
例W3では、フレーム#0は、セクタ#0及びセクタ#1に分けられる。但し、セクタ#1は496Bであり、528Bに対して32B少ない。つまり、セクタ#1の途中でフレーム#0が終了する。そのため、バッファIFシーケンサ223は、AFIFO221からバッファ3へのセクタ単位のバッファ転送を、セクタ#1の始端から496Bを転送した時点で完了する。このとき更新制御モジュール227によってエクスチェンジテーブル216aにフィードバックされるバッファ転送情報は、セクタ#1の始端から496Bを転送した時点の内部制御情報に更新された現情報、つまりセクタ#1の残り32Bが転送されない状態の内部制御情報に更新された現情報である。
そこで、エクスチェンジシーケンサ216bは、更新制御モジュール227によってエクスチェンジテーブル216aにフィードバックされたバッファ転送情報に基づいて、次のフレーム#1のためのバッファ転送の起動をホスト−データパスモジュール22に対して指示する。これによりホスト−データパスモジュール22のバッファIFシーケンサ223は、AFIFO221からバッファ3へのセクタ単位のバッファ転送を、セクタ#1の残り32Bから再開する。
例W3では、ライトコマンドで指定されたライトデータを構成する3つのフレーム#0乃至#2の最後のフレーム#2の終端はセクタ#4の終端に一致する。前述したように、本実施形態において、フレームの長さは1024Bである必要はなく、1024Bを超えない範囲で任意の長さに設定可能である。
例W3においても、例W1と同様に、各フレーム転送の間に、他のリード/ライトのためのバッファ転送を挿入することができる。
例W3においても、例W1と同様に、各フレーム転送の間に、他のリード/ライトのためのバッファ転送を挿入することができる。
図12は、上述のライトデータ転送の例W4を示すタイミングチャートである。
例W4は、例W3と同様に、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例W2と同様に、3フレーム一括でバッファ転送が起動され、例W3と同様に、3つのフレーム#0乃至#2の転送により、対応するデータが5つのセクタ#0乃至#4に分散されて転送される。
例W4は、例W3と同様に、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、例W2と同様に、3フレーム一括でバッファ転送が起動され、例W3と同様に、3つのフレーム#0乃至#2の転送により、対応するデータが5つのセクタ#0乃至#4に分散されて転送される。
例W4では、SASIFシーケンサ222は、全てのフレーム#0乃至#2をRxFIFO214からAFIFO221にシーケンシャルに転送する。一方、バッファIFシーケンサ223は、AFIFO221に格納された全てのフレーム#0乃至#2をセクタ単位にシーケンシャルに転送する。
更新制御モジュール227は、バッファ転送完了後に、その時点におけるバッファ転送情報(つまり更新されたバッファ転送情報)をエクスチェンジテーブル216aにフィードバックする。
フレーム#0乃至#2(つまり複数のフレーム)のシーケンシャル転送であっても、各フレームの終端が対応するセクタの終端に一致するとは限らない。このような場合、更新されたバッファ転送情報中の、例えばCRCデータ(BCRC/BECC)及びセクタカウントが有益となる。
例W4においても、例W2と同様に、他のリード/ライトのためのバッファ転送を、3フレームの転送終了後に行うことができる。
例W4においても、例W2と同様に、他のリード/ライトのためのバッファ転送を、3フレームの転送終了後に行うことができる。
図13は、バッファマネージャ1のバッファ転送情報管理機能を中心とする構成を示すブロック図である。
トランスポート層モジュール216は、前述したように、バッファ転送情報を保持するエクスチェンジテーブル216aを備えている。このエクスチェンジテーブル216aに保持されるバッファ転送情報は、バッファ転送の起動に用いられる。
トランスポート層モジュール216は、前述したように、バッファ転送情報を保持するエクスチェンジテーブル216aを備えている。このエクスチェンジテーブル216aに保持されるバッファ転送情報は、バッファ転送の起動に用いられる。
一方、ホスト−データパスモジュール22は、前述したように、レジスタファイル224,225及び226と、更新制御モジュール227とを備えている。レジスタファイル224,225及び226は、バッファ転送の起動時に、エクスチェンジテーブル216aに保持されているバッファ転送情報に初期化される。
レジスタファイル224に保持されているバッファ転送情報は、ホスト−データパスモジュール22における転送シーケンスの制御(つまりホスト−データパスモジュール22内部の制御)に用いられる。そこで、レジスタファイル224に保持されているバッファ転送情報を、内部制御用のバッファ転送情報と称する。
レジスタファイル225に保持されているバッファ転送情報は、現在転送中のフレーム(現フレーム)に関する情報であり、転送の進行に応じて動的に更新される。レジスタファイル225に保持されているバッファ転送情報は、前述のフィードバックに用いられる。レジスタファイル225に保持されているバッファ転送情報を、現(current)情報と称することもある。
レジスタファイル225に保持されているバッファ転送情報(現情報)は、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、レジスタファイル224に保持されているバッファ転送情報(内部制御用のバッファ転送情報)に更新される。この更新後の現情報は、次のフレーム転送(バッファ転送)のためのバッファ転送情報を示す。
レジスタファイル226に保持されているバッファ転送情報(前情報)は、前回転送されたフレーム(前フレーム)に関する情報である。レジスタファイル226に保持されているバッファ転送情報(前情報)は、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、レジスタファイル225に保持されているバッファ転送情報(現情報)に更新される。なお、レジスタファイル226に保持されているバッファ転送情報(前情報)は、ライト動作時には用いられない。
更新制御モジュール227は、レジスタファイル225または226に保持されているバッファ転送情報(現情報または前情報)を選択して、当該選択されたバッファ転送情報でエクスチェンジテーブル216aに保持されているバッファ転送情報を更新する。即ち更新制御モジュール227は、レジスタファイル225または226に保持されているバッファ転送情報をエクスチェンジテーブル216aにフィードバックする。
本実施形態において更新制御モジュール227は、通常はレジスタファイル225に保持されているバッファ転送情報、つまり現情報を選択する。更新制御モジュール227はまた、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、レジスタファイル226に保持されているバッファ転送情報、つまり前情報を選択し、当該フレーム完了通知後のセクタ転送完了通知に応じて、現情報の選択に戻る。
本実施形態では、SASIFシーケンサ222によるCRCチェックでエラーが検出された場合、セクタ転送完了通知は発行されない。この場合、更新制御モジュール227は、エクスチェンジテーブル216aに保持されているバッファ転送情報を前情報に更新する。これにより、CRCチェックでエラーが検出された結果、リトライ処理が実行される場合に、エクスチェンジテーブル216aに保持されているバッファ転送情報を、CPUがFWに従って更新する必要がなくなる。
図14は、前述したリードデータ転送の例R1を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例R1では、前述したように、フレームの終端がセクタの終端に一致しており、フレーム単位でバッファ転送が起動される。このような例R1では、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
例R1では、前述したように、フレームの終端がセクタの終端に一致しており、フレーム単位でバッファ転送が起動される。このような例R1では、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
ここで、例えばフレーム#0の転送が完了した際に、レジスタファイル224に保持されている内部制御用のバッファ転送情報(フレーム#0情報)は、次のフレーム#1の転送のためのバッファ転送情報(フレーム#1情報)に更新されている点に注意すべきである。また、フレーム#0の転送の完了に対応する、エクスチェンジシーケンサ216bからホスト−データパスモジュール22へのフレーム完了通知に応じて、レジスタファイル225に保持されている現情報が、内部制御用のバッファ転送情報(フレーム#1情報)に更新され、レジスタファイル226に保持されている前情報が現情報(フレーム#0情報)に、それぞれ更新される点にも注意すべきである。更に、エクスチェンジテーブル216aに保持されているバッファ転送情報が、更新された現情報(フレーム#1情報)に更新される点にも注意すべきである。
図15は、前述したリードデータ転送の例R2を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例R2では、前述したように、フレームの終端がセクタの終端に一致しており、3フレーム一括でバッファ転送が起動される。このような例R2では、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
例R2では、前述したように、フレームの終端がセクタの終端に一致しており、3フレーム一括でバッファ転送が起動される。このような例R2では、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
図16は、前述したリードデータ転送の例R3を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例R3は、前述したように、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。また例R3では、フレーム単位でバッファ転送が起動され、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R3は、前述したように、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。また例R3では、フレーム単位でバッファ転送が起動され、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R3では、図16から明らかなように、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、レジスタファイル225及び226に保持されているバッファ転送情報が、それぞれレジスタファイル224及び225に保持されているバッファ転送情報に更新される。つまり、現情報及び前情報が、それぞれフレーム完了通知時点の内部制御用のバッファ転送情報及び現情報に更新される。
更新制御モジュール227は、フレーム完了通知に応じて、前情報(レジスタファイル226に保持されているバッファ転送情報)を選択する。更新制御モジュール227は、フレーム完了通知後のセクタ転送完了通知またはバッファ転送完了通知に応じて、現情報の選択に戻る。これによりセクタ転送完了通知またはバッファ転送完了通知時には、エクスチェンジテーブル216aに保持されているバッファ転送情報は、現情報に更新される。
例R3では、最終フレーム#2の場合、当該最終フレーム#2に対応するフレーム完了通知の直後にバッファ転送完了が通知される。このため、更新制御モジュール227が前情報を選択するのは一瞬である。
例R3では、フレーム#i(i=0,1,2)のバッファ転送時のCRCチェックでエラーが検出された場合、セクタ転送完了通知は発行されない。この場合、更新制御モジュール227は現情報の選択に戻さない(切り替えない)。つまり、CRCチェックでエラーが検出された結果、リトライ処理が実行される場合に、エクスチェンジテーブル216aに保持されているバッファ転送情報は現情報に更新されない。これにより、エラーが検出されたフレーム#iの転送のリトライ(つまりフレーム#iのリトライ転送)を、CPU(FW)によるバッファ転送情報の更新を必要とせずに実現できる。
図17は、前述したリードデータ転送の例R4を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例R4は、前述したように、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、3フレーム一括でバッファ転送が起動され、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R4は、前述したように、フレームの終端がセクタの終端に一致せず、1セクタの長さが528B、1フレームの長さが最長で1024Bの場合である。ここでは、3フレーム一括でバッファ転送が起動され、5つのセクタ#0乃至#4の転送により、対応するデータが3つのフレーム#0乃至#2に分けられて転送される。
例R4では、図17から明らかなように、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、レジスタファイル225及び226に保持されているバッファ転送情報(現情報及び前情報)が、それぞれレジスタファイル224及び225に保持されているバッファ転送情報に更新される。
更新制御モジュール227は、フレーム完了通知に応じて、前情報(レジスタファイル226に保持されているバッファ転送情報)を選択する。更新制御モジュール227は、フレーム完了通知後のセクタ転送完了通知またはバッファ転送完了通知に応じて、現情報の選択に戻る。これによりセクタ転送完了通知またはバッファ転送完了通知時には、エクスチェンジテーブル216aに保持されているバッファ転送情報は、現情報に更新される。
例R4では、最終フレーム#2の場合、当該最終フレーム#2に対応するフレーム完了通知の直後にバッファ転送完了が通知される。このため、更新制御モジュール227が前情報を選択するのは一瞬である。
例R4においても、フレーム#i(i=0,1,2)のバッファ転送時のCRCチェックでエラーが検出された場合、例R3と同様にセクタ転送完了通知は発行されない。この場合、更新制御モジュール227は現情報の選択に戻さない。つまり、CRCチェックでエラーが検出された結果、リトライ処理が実行される場合に、エクスチェンジテーブル216aに保持されているバッファ転送情報は現情報に戻されない。これにより、フレーム#iのリトライ転送を、CPU(FW)によるバッファ転送情報の更新を必要とせずに実現できる。
図18は、前述したライトデータ転送の例W1を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例W1では、前述したように、フレームの終端がセクタの終端に一致しており、フレーム単位でバッファ転送が起動される。このような例W1では、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
例W1では、前述したように、フレームの終端がセクタの終端に一致しており、フレーム単位でバッファ転送が起動される。このような例W1では、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
図19は、前述したライトデータ転送の例W2を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例W2では、前述したように、フレームの終端がセクタの終端に一致しており、3フレーム一括でバッファ転送が起動される。例W2においても、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
例W2では、前述したように、フレームの終端がセクタの終端に一致しており、3フレーム一括でバッファ転送が起動される。例W2においても、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
図20は、前述したライトデータ転送の例W3を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例W3では、前述したように、フレームの終端がセクタの終端に一致せず、フレーム単位でバッファ転送が起動される。例W3においても、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
例W3では、前述したように、フレームの終端がセクタの終端に一致せず、フレーム単位でバッファ転送が起動される。例W3においても、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
図21は、前述したライトデータ転送の例W4を、バッファ転送情報の転送と関連付けて示すタイミングチャートである。
例W4では、前述したように、フレームの終端がセクタの終端に一致せず、3フレーム一括でバッファ転送が起動される。例W3においても、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
このように、本実施形態におけるライトデータ転送では、レジスタファイル225に保持されているバッファ転送情報(現情報)が常に選択される。
例W4では、前述したように、フレームの終端がセクタの終端に一致せず、3フレーム一括でバッファ転送が起動される。例W3においても、レジスタファイル225に保持されているバッファ転送情報(現情報)が、更新制御モジュール227によって常に選択される。
このように、本実施形態におけるライトデータ転送では、レジスタファイル225に保持されているバッファ転送情報(現情報)が常に選択される。
次に、本実施形態におけるリードコマンド#RCによって指定されたリードデータ転送及びライトコマンド#WCによって指定されたライトデータ転送の切り替えについて、図22を参照して説明する。図22は、リードデータ転送及びライトデータ転送の切り替えを、バッファ転送情報の転送と関連付けて示すタイミングチャートである。図22の例では、フレーム単位でバッファ転送が起動され、且つリードデータ転送及びライトデータ転送が1フレーム毎に切り替えられる。
図22示すように、リードデータ転送では、フレーム#rd0及び#rd1がAFIFO221からTxFIFO215に逐次転送される。また、ライトデータ転送では、フレーム#wr0及び#wr1がRxFIFO214からAFIFO221に逐次転送される。
より詳細に述べるならば、図22の例では、リードデータ転送によるフレーム#rd0の転送の後、ライトデータ転送によるフレーム#wr0の転送に切り替えられる。また、このフレーム#wr0の転送の後、リードデータ転送によるフレーム#rd1の転送に切り替えられ、このフレーム#rd1の転送の後、ライトデータ転送によるフレーム#wr1の転送に切り替えられる。
さて、例えばフレーム#rd0の転送が完了した場合、ホスト−データパスモジュール22(レジスタファイル225及び226)によって保持・管理されている現情報及び前情報は、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、その時点における内部制御用のバッファ転送情報及び現情報に、それぞれ更新される。更新後の現情報及び前情報は、それぞれフレーム#rd1及びフレーム#rd0の転送のためのバッファ転送情報(フレーム#rd1情報及びフレーム#rd0情報)である。この場合、更新制御モジュール227は、更新後の現情報(フレーム#rd1情報)をエクスチェンジテーブル216aにフィードバックする。
これにより、エクスチェンジテーブル216aに保持されている、リードコマンド#RCに対応するバッファ転送情報は、フレーム#rd0情報からフレーム#rd1情報に更新される。
その後、CPUは、フレーム#rd0のリードデータ転送からフレーム#wr0のライトデータ転送に切り替えるために、ライトコマンド#WCに対応するバッファ転送情報(フレーム#wr0情報)をエクスチェンジテーブル216aに初期登録する。これにより、次のバッファ転送起動時には、ホスト−データパスモジュール22(レジスタファイル224,225及び226)によって保持・管理されている内部制御用のバッファ転送情報、現情報及び前情報が、その時点においてライトコマンド#WCに対応付けてエクスチェンジテーブル216aに保持されているバッファ転送情報(フレーム#wr0情報)に更新される。すると、フレーム#wr0情報に基づき、フレーム#wr0の転送が行われる。
フレーム#wr0の転送が完了すると、ホスト−データパスモジュール22(レジスタファイル225及び226)によって保持・管理されている現情報及び前情報は、エクスチェンジシーケンサ216bからのフレーム完了通知に応じて、その時点における内部制御用のバッファ転送情報及び現情報に、それぞれ更新される。更新後の現情報及び前情報は、それぞれフレーム#wr1及びフレーム#wr0のためのバッファ転送情報(フレーム#wr1情報及びフレーム#wr0情報)である。この場合、更新制御モジュール227は、更新後の現情報(フレーム#wr1情報)をエクスチェンジテーブル216aにフィードバックする。
これにより、エクスチェンジテーブル216aに保持されている、ライトコマンド#WCに対応するバッファ転送情報は、フレーム#wr0情報からフレーム#wr1情報に更新される。
次のバッファ転送起動時には、ホスト−データパスモジュール22(レジスタファイル224,225及び226)によって保持・管理されている内部制御用のバッファ転送情報、現情報及び前情報が、今度は、その時点においてリードコマンド#RCに対応付けてエクスチェンジテーブル216aに保持されているバッファ転送情報(フレーム#rd1情報)に更新される。すると、フレーム#rd1情報に基づき、フレーム#rd1の転送が行われる。以降の動作も同様である。
これにより、リードコマンド#RCによって指定されたリードデータ転送及びライトコマンド#WCによって指定されたライトデータ転送のためのバッファ転送を、リードコマンド#RC及びライトコマンド#WCのそれぞれについて、交互に1フレーム単位で切り替えて起動できる。
以上説明した少なくとも1つの実施形態によれば、起動されたバッファ転送に対応するデータ転送コマンドの実行が滞ってもバッファ転送効率が低下するのを防止できるバッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法を提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…バッファマネージャ(バッファ管理装置)、2…ホストインタフェース部、3…バッファ、21…SASモジュール、22…ホスト−データパスモジュール、23…アービタ、214…RxFIFO(受信FIFO)、215…TxFIFO(送信FIFO)、216…トランスポート層モジュール、216a…エクスチェンジテーブル、216b…エクスチェンジシーケンサ(第1のシーケンサ)、221…AFIFO(中間FIFO)、222…SASIFシーケンサ(第2のシーケンサ)、223…バッファIFシーケンサ(第3のシーケンサ)、224,225,226…レジスタファイル、227…更新制御モジュール。
Claims (9)
- ホストへフレーム単位で転送されるべきデータを格納する送信FIFO及び前記ホストからフレーム単位で転送されたデータを格納する受信FIFOと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理装置において、
前記送信FIFOまたは前記受信FIFOと前記バッファとの間で転送されるデータを格納する中間FIFOと、
前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信FIFOまたは前記受信FIFOと前記バッファとの間の、前記中間FIFOを介してのデータ転送を管理するためのバッファ転送情報を保持するテーブルと、
前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間FIFOとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも1つのフレームを単位に起動する第1のシーケンサと、
前記バッファ転送の起動に応じて、前記送信FIFOまたは前記受信FIFOと前記中間FIFOとの間でフレーム単位でデータを転送し、前記バッファから前記中間FIFOにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でCRCデータを生成し、生成されたCRCデータと対応するセクタデータに付加されているCRCデータとを比較することによって当該セクタデータのエラーをチェックする第2のシーケンサと、
前記バッファ転送の起動に応じて、前記中間FIFOと前記バッファとの間でセクタ単位にデータを転送し、第1のフレームのためのバッファ転送において、前記第1のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送し、前記第1のフレームの終端が前記第1のセクタの終端に一致せず、且つ前記第1のフレームの次の第2のフレームのためのバッファ転送が前記第1のシーケンサによって起動された場合、前記第1のセクタの始端から前記第1のフレームの終端に対応する前記第1のセクタ内の位置までの第1のデータに後続する、前記第1のセクタ内の前記位置から前記第1のセクタの終端までの第2のデータを、前記バッファから前記中間FIFOに再度転送し、しかる後に前記第1のセクタに後続する第2のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送する第3のシーケンサとを具備し、
前記第2のシーケンサは、前記第1のフレームの終端が前記第1のセクタの終端に一致しない場合、前記第1のフレームの転送の完了後も、前記第1のデータに続いて転送される前記第2のデータに基づいて前記CRCデータの生成を継続し、前記CRCデータの生成の完了後に、前記第1のデータに続いて転送される前記第2のデータを破棄する
バッファ管理装置。 - 前記バッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている対応するバッファ転送情報を、次のフレームの転送のために更新する更新制御手段を更に具備する請求項1記載のバッファ管理装置。
- 前記第1のシーケンサは、前記第2のフレームのためのバッファ転送を、前記第1のフレームの転送が完了した場合に更新された前記テーブルに保持されている前記対応するバッファ転送情報に基づいて起動する請求項2記載のバッファ管理装置。
- 前記更新制御手段は、前記セクタデータのエラーが検出された場合、前記テーブルに保持されている対応するバッファ転送情報を、当該セクタデータに対応するフレームの転送が開始された際の状態に戻す
請求項3記載のバッファ管理装置。 - 前記第1のシーケンサは第1のデータ転送コマンドに対応する第1のバッファ転送の起動後、前記第1のデータ転送コマンドとは別の第2のデータ転送コマンドに対応するバッファ転送情報に基づいて、当該第2のデータ転送コマンドで指定されたデータ転送のための第2のバッファ転送を、少なくとも1つのフレームを単位に起動する請求項1記載のバッファ管理装置。
- 前記第1のバッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている、前記第1のデータ転送コマンドに対応するバッファ転送情報を、次のフレームの転送のために更新し、前記第2のバッファ転送の起動によって実行されたフレームの転送が完了した場合に、前記テーブルに保持されている、前記第2のデータ転送コマンドに対応するバッファ転送情報を、次のフレームの転送のために更新する更新制御手段を更に具備する請求項5記載のバッファ管理装置。
- 前記第1のシーケンサは、前記バッファ転送を、複数のフレームを単位に起動する請求項1記載のバッファ管理装置。
- ホストへフレーム単位で転送されるべきデータを格納する送信FIFOと、
前記ホストからフレーム単位で転送されたデータを格納する受信FIFOと、
記憶部と、
前記記憶部からセクタ単位で読み出されるデータ及び前記記憶部にセクタ単位で書き込まれるデータを格納するバッファと、
前記送信FIFO及び前記受信FIFOと前記バッファとの間のデータ転送を管理するバッファ管理装置とを具備し、
前記バッファ管理装置は、
前記送信FIFOまたは前記受信FIFOと前記バッファとの間で転送されるデータを格納する中間FIFOと、
前記ホストからのデータ転送コマンド毎に、当該データ転送コマンドで指定された、前記送信FIFOまたは前記受信FIFOと前記バッファとの間の、前記中間FIFOを介してのデータ転送を管理するためのバッファ転送情報を保持するテーブルと、
前記テーブルに前記データ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間FIFOとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも1つのフレームを単位に起動する第1のシーケンサと、
前記バッファ転送の起動に応じて、前記送信FIFOまたは前記受信FIFOと前記中間FIFOとの間でフレーム単位でデータを転送し、前記バッファから前記中間FIFOにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でCRCデータを生成し、生成されたCRCデータと対応するセクタデータに付加されているCRCデータとを比較することによって当該セクタデータのエラーをチェックする第2のシーケンサと、
前記バッファ転送の起動に応じて、前記中間FIFOと前記バッファとの間でセクタ単位にデータを転送し、第1のフレームのためのバッファ転送において、前記第1のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送し、前記第1のフレームの終端が前記第1のセクタの終端に一致せず、且つ前記第1のフレームの次の第2のフレームのためのバッファ転送が前記第1のシーケンサによって起動された場合、前記第1のセクタの始端から前記第1のフレームの終端に対応する前記第1のセクタ内の位置までの第1のデータに後続する、前記第1のセクタ内の前記位置から前記第1のセクタの終端までの第2のデータを、前記バッファから前記中間FIFOに再度転送し、しかる後に前記第1のセクタに後続する第2のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送する第3のシーケンサとを具備し、
前記第2のシーケンサは、前記第1のフレームの終端が前記第1のセクタの終端に一致しない場合、前記第1のフレームの転送の完了後も、前記第1のデータに続いて転送される前記第2のデータに基づいて前記CRCデータの生成を継続し、前記CRCデータの生成の完了後に、前記第1のデータに続いて転送される前記第2のデータを破棄する
記憶装置。 - テーブル及び中間FIFOを備えたバッファ管理装置において、ホストへフレーム単位で転送されるべきデータを格納する送信FIFO及び前記ホストからフレーム単位で転送されたデータを格納する受信FIFOと、セクタ単位で転送されるデータを格納するバッファとの間のデータ転送を管理するバッファ管理方法であって、
前記テーブルに前記ホストからのデータ転送コマンド毎に保持されているバッファ転送情報に基づいて、当該データ転送コマンドで指定されたデータ転送のための、前記バッファと前記中間FIFOとの間のセクタ単位のデータ転送を含むバッファ転送を、少なくとも1つのフレームを単位に起動し、
前記バッファ転送の起動に応じて、前記送信FIFOまたは前記受信FIFOと前記中間FIFOとの間でフレーム単位でデータを転送し、
前記バッファから前記中間FIFOにデータが転送される場合、当該転送されるデータに基づいて、セクタ単位でCRCデータを生成し、生成されたCRCデータと対応するセクタデータに付加されているCRCデータとを比較することによって当該セクタデータのエラーをチェックし、
第1のフレームのためのバッファ転送において、前記第1のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送し、
前記第1のフレームの終端が前記第1のセクタの終端に一致しない場合、前記第1のフレームの転送の完了後も、前記第1のセクタの始端から前記第1のフレームの終端に対応する前記第1のセクタ内の位置までの第1のデータに続いて転送される、前記第1のセクタ内の前記位置から前記第1のセクタの終端までの第2のデータに基づいて前記CRCデータの生成を継続し、
前記CRCデータの生成の完了後に、前記第1のデータに続いて転送される前記第2のデータを破棄し、
前記第1のフレームの終端が前記第1のセクタの終端に一致せず、且つ前記第1のフレームの次の第2のフレームのためのバッファ転送が前記第1のシーケンサによって起動された場合、前記第2のデータを前記バッファから前記中間FIFOに再度転送し、
前記第2のデータを再度転送した後に前記第1のセクタに後続する第2のセクタの始端から終端までのデータを前記バッファから前記中間FIFOに転送する
バッファ管理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010171137A JP4922442B2 (ja) | 2010-07-29 | 2010-07-29 | バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 |
US13/100,047 US8327043B2 (en) | 2010-07-29 | 2011-05-03 | Buffer management device which manages buffer transfer, storage apparatus comprising the same device, and buffer management method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010171137A JP4922442B2 (ja) | 2010-07-29 | 2010-07-29 | バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2012032962A JP2012032962A (ja) | 2012-02-16 |
JP4922442B2 true JP4922442B2 (ja) | 2012-04-25 |
Family
ID=45527869
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010171137A Expired - Fee Related JP4922442B2 (ja) | 2010-07-29 | 2010-07-29 | バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8327043B2 (ja) |
JP (1) | JP4922442B2 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9503222B2 (en) * | 2011-12-08 | 2016-11-22 | Qualcomm Technologies, Inc. | Differential formatting between normal and retry data transmission |
US20140281147A1 (en) * | 2013-03-13 | 2014-09-18 | Kabushiki Kaisha Toshiba | Memory system |
US9280298B2 (en) | 2013-03-15 | 2016-03-08 | Kabushiki Kaisha Toshiba | Storage device and storage system |
US9952945B2 (en) | 2013-03-22 | 2018-04-24 | Toshiba Memory Corporation | Electronic equipment including storage device |
US20150261464A1 (en) * | 2014-03-11 | 2015-09-17 | Kabushiki Kaisha Toshiba | Memory system and method of controlling memory system |
KR102624808B1 (ko) | 2016-07-13 | 2024-01-17 | 삼성전자주식회사 | 멀티 랭크로 구성된 메모리와 인터페이싱을 수행하는 인터페이스 회로 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6304910B1 (en) | 1997-09-24 | 2001-10-16 | Emulex Corporation | Communication processor having buffer list modifier control bits |
WO1999026137A1 (en) | 1997-11-17 | 1999-05-27 | Seagate Technology, Inc. | Method and apparatus for using crc for data integrity in on-chip memory |
US6631484B1 (en) * | 1998-03-31 | 2003-10-07 | Lsi Logic Corporation | System for packet communication where received packet is stored either in a FIFO or in buffer storage based on size of received packet |
US6324604B1 (en) * | 1998-07-07 | 2001-11-27 | Emc Corporation | Magnetic disk storage for storing data in disk block size from fixed length of host block in non-integer multiple of the disk block size |
DE60026836T2 (de) * | 1999-05-05 | 2006-09-21 | Qlogic Corp., Aliso Viejo | Anordnungen und verfahren für eine plattensteuerungspeicher architektur |
JP2002023966A (ja) * | 2000-06-30 | 2002-01-25 | Toshiba Corp | 転送データを冗長化したディスクシステム |
US6877048B2 (en) * | 2002-03-12 | 2005-04-05 | International Business Machines Corporation | Dynamic memory allocation between inbound and outbound buffers in a protocol handler |
US7826466B2 (en) * | 2002-06-26 | 2010-11-02 | Atheros Communications, Inc. | Communication buffer scheme optimized for VoIP, QoS and data networking over a power line |
JP4112954B2 (ja) | 2002-11-21 | 2008-07-02 | 株式会社日立製作所 | 磁気ディスク記憶制御装置 |
TWI257790B (en) * | 2004-10-29 | 2006-07-01 | Ind Tech Res Inst | System for protocol processing engine |
KR100621631B1 (ko) * | 2005-01-11 | 2006-09-13 | 삼성전자주식회사 | 반도체 디스크 제어 장치 |
GB2423165B (en) * | 2005-02-14 | 2007-01-10 | Elan Digital Systems Ltd | Host controller device and method |
JP5031392B2 (ja) * | 2007-02-13 | 2012-09-19 | 株式会社日立製作所 | 記憶制御装置及びストレージシステム |
US20100272162A1 (en) * | 2009-04-27 | 2010-10-28 | Broadcom Corporation | Synchronous serial programmable interface |
US9063561B2 (en) * | 2009-05-06 | 2015-06-23 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Direct memory access for loopback transfers in a media controller architecture |
-
2010
- 2010-07-29 JP JP2010171137A patent/JP4922442B2/ja not_active Expired - Fee Related
-
2011
- 2011-05-03 US US13/100,047 patent/US8327043B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2012032962A (ja) | 2012-02-16 |
US20120030385A1 (en) | 2012-02-02 |
US8327043B2 (en) | 2012-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10019196B2 (en) | Efficient enforcement of command execution order in solid state drives | |
US8332579B2 (en) | Data storage apparatus and method of writing data | |
KR101086857B1 (ko) | 데이터 머지를 수행하는 반도체 스토리지 시스템의 제어 방법 | |
US9304685B2 (en) | Storage array system and non-transitory recording medium storing control program | |
JP4922442B2 (ja) | バッファ管理装置、同装置を備えた記憶装置、及びバッファ管理方法 | |
US9319067B2 (en) | Storage control apparatus, storage system, and storage control method | |
JP2008015769A (ja) | ストレージシステム及び書き込み分散方法 | |
JP4966404B2 (ja) | メモリ制御装置、記憶装置、及びメモリ制御方法 | |
JP2005063441A (ja) | 4kブロックサイズを用いてハードディスクドライブへの書き込みを行うハードディスクドライブコントローラおよびそれを用いたハードディスクドライブ | |
US9977626B2 (en) | Implementing scattered atomic I/O writes | |
US20150052329A1 (en) | Memory control device, host computer, information processing system and method of controlling memory control device | |
TW201643690A (zh) | 資料儲存系統及其特定指令執行方法 | |
JP2014096072A (ja) | ミラー構成を有するディスクアレイ及びそのリビルド方法 | |
JP6374108B2 (ja) | フラッシュメモリデバイス | |
US20100057978A1 (en) | Storage system and data guarantee method | |
TWI419169B (zh) | 用於快閃記憶體的資料存取方法及其儲存系統與控制器 | |
US8713410B2 (en) | Data storage apparatus, memory control apparatus and method for controlling flash memories | |
US8200888B2 (en) | Seek time emulation for solid state drives | |
US8418029B2 (en) | Storage control device and storage control method | |
US20110022793A1 (en) | Systems And Methods For Accessing Hard Disk Drives | |
JP2006072435A (ja) | ストレージシステムおよびデータ記録方法 | |
US8041850B2 (en) | Storage apparatus and data integrity assurance method | |
JP2007193886A (ja) | ディスク装置、データ書込み制御方法およびコマンド制御方法 | |
JP5910596B2 (ja) | ストレージ管理システム、ストレージ管理方法、プログラム、および、情報処理システム | |
JP2010122898A (ja) | 追記型メモリデバイス |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120110 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120203 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150210 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |