説明

テープ媒体にデータを書き込むための装置

【課題】 RABFにおけるリライト時に同期を行えるようにすることにある。
【解決手段】 本発明のテープドライブ10では、コントローラ16が、バッファ12に蓄積されたデータを、テープ14a上のABFラップへ書き込んだ後に、テープ14a上の通常ラップへリライトする。また、コントローラ16は、リライトの間にインタフェース11がホスト20からデータの同期要求を受け取ると、そのデータを、リライトされているデータと一緒に記録チャネル13を介してテープ14a上の通常ラップに書き込み、ホスト20に同期応答を返す。その後、コントローラ16は、そのデータを通常のRABFの手順に従い、ABFラップに書き込んだ後、通常ラップに書き込む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、磁気テープ等のテープ媒体にデータを書き込むための装置等に関する。
【背景技術】
【0002】
磁気テープ等のテープ媒体にデータを書き込むテープドライブでは、データを一旦バッファに蓄積しておき、所定のタイミングでバッファからテープ媒体へデータを書き込むのが一般的である。このようなバッファからテープ媒体への書込みを、「書込みの同期」又は「バッファフラッシュ」という(以下では、単に「同期」という)。
ところで、テープ媒体を停止させずに同期を行った場合、先行する同期にて書き込まれたデータと、次の同期にて書き込まれたデータとの間に、長いギャップが生じる。その結果、テープ媒体の記録領域が無駄になってしまう。そのため、先行する同期にて書き込まれたデータの後にそれほど長いギャップを伴わずに次の同期にてデータが書き込まれるよう、バックヒッチを行う必要がある。バックヒッチとは、テープ媒体の走行速度を減速して一旦停止し、書き込むべき位置まで戻る、という動作のことである。従って、このバックヒッチのために、同期に多くの時間が費やされるという状況が生じていた。
【0003】
そこで、かかる状況を回避するための技術として、RABF(Recursive Accumulating Backhitchless Flush)が提案されている(例えば、特許文献1、2参照)。
この特許文献1、2からも分かるように、RABFは次のような手法と捉えることができる。
即ち、まず、テープドライブが、同期要求を受けた際に、テープにまだ書かれていないバッファ内のデータを、テープ媒体の走行を継続させたまま、テープ媒体上に予約されている一時記録領域(ABFラップ)に書き出す。尚、この書出しは、先行する同期にて書き込まれたデータと次の同期にて書き込まれたデータとの間のギャップが問題とならないため、バックヒッチを行わないバッファフラッシュ(Backhitchless Flush)である。一方で、テープドライブは、データをバッファに蓄積し(Accumulate)、バッファ又は一時記録領域に空きがなくなった際に通常の記録領域(通常ラップ)に書き戻す(リライトする)動作を反復的に(Recursive)行う。
このように、RABFでは、同期を行う際に、次の同期に備えてバックヒッチを行うことが必要とならないため、同期に要する時間の短縮が図れる。特に、データ量に対する同期要求の頻度が高い場合において、大幅なパフォーマンス向上を実現するものである。
【0004】
【特許文献1】米国特許第6856479号明細書
【特許文献2】米国特許第6865043号明細書
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、同期要求に対して直ぐに反応できない状態は依然として存在する。
大別すると、以下の2種類の場合である。
1つは、リニア記録方式に特有の場合であるが、ラップチェンジ、ラップターンと呼ばれる、記録位置(テープ幅方向)の変更や、これに伴う記録方向の変更が行われている場合である。尚、ラップとは、複数(例えば、8つ)のトラックの一まとまりで、ヘッドが同時に読み書きする単位である。
そしてもう1つは、書き戻し(リライト)が行われている場合である。リライト中には同期要求を受け付けられないため、パフォーマンスを伸ばせない原因になる。
ここで、前者の場合においては、ヘッドの移動を伴うため、所定のトラック位置にヘッドがなく、ライトや同期を行うことはできない。一方、後者の場合においては、書き戻し(リライト)の際に同期を受け付けることを可能にすることにより、パフォーマンスを更に向上させる余地はある。
【0006】
本発明は、以上のような技術的課題を解決するためになされたものであって、その目的は、RABFにおけるパフォーマンスを向上させることにある。
本発明の他の目的は、RABFにおけるリライト時に同期を行えるようにすることにある。
【課題を解決するための手段】
【0007】
かかる目的のもと、本発明では、リライト中にデータを受けた場合でもバッファの空き領域にデータを受け入れるようにした。即ち、本発明の装置において、バッファは、テープ媒体に書き込むべきデータを蓄積し、コントローラは、バッファに蓄積されたデータのテープ媒体への書込みを制御し、その書込みの間に受け取ったデータをバッファ内の一定の領域に蓄積する。ここで、バッファ内の一定の領域とは、現時点ではアクセスされていないが、そのうちその書込みのためにアクセスされる領域である。具体的には、第一に、バッファを構成する複数のセグメントのうちの任意のセグメントの予めリザーブされた領域であり、第二に、バッファを構成する複数のセグメントのうちの予めリザーブされたセグメントの任意の領域である。
また、この装置において、コントローラが、書込みの間に受け取ったデータを、その書込みのためにアクセスされない領域にコピーするように構成することもできる。
【0008】
更に、本発明は、リライト中に同期要求されたデータを、リライトを行っているデータと合わせてテープに書き込むための装置として捉えることもできる。その場合、本発明の装置において、バッファは、テープ媒体に書き込むべきデータを蓄積し、コントローラは、バッファに蓄積された第1のデータのテープ媒体上の一時記録領域への第1の書込みの後に、第1のデータのテープ媒体上の通常の記録領域への第2の書込みを制御し、その第2の書込みの間に受け取った第2のデータを、その第2の書込みの対象の一部として通常の記録領域に書き込む。尚、一時記録領域とは、テープ媒体を走行させたままデータを書き込むのに用いられる領域である。
【0009】
また、この装置において、コントローラが、第1の書込みの後、かつ、第2の書込みの前の所定の時点で、第1の書込みのステータスを出力するように構成することもできる。
更に、コントローラが、第2の書込みの後に第2のデータを受け取った場合と同様の手順で、第2のデータを通常の記録領域に書き込むように構成することもできる。
また、コントローラが、第2のデータの読出し要求に応じて、第2の書込みの対象の一部として通常の記録領域に書き込まれた第2のデータを読み出すように構成することもできる。
【0010】
更にまた、本発明は、リライト中に同期要求されたデータを、リライトを行っているデータと合わせてテープに書き込むための方法として捉えることもできる。その場合、本発明の方法では、バッファに蓄積された第1のデータをテープ媒体上の一時記録領域に書き込み、第1のデータをテープ媒体上の通常の記録領域に書き込む際に第2のデータを受け取ると、その第2のデータを第1のデータと同じ記録単位に含めて通常の記録領域に書き込む。
【0011】
一方、本発明は、コンピュータに所定の機能を実現させるコンピュータプログラムとして捉えることもできる。その場合、本発明のコンピュータプログラムは、次の2つの機能をコンピュータに実現させる。1つは、バッファに蓄積された第1のデータのテープ媒体上の一時記録領域への書込みを制御する機能であり、もう1つは、第1のデータをテープ媒体上の通常の記録領域に書き込む際に第2のデータを受け取ると、その第2のデータが第1のデータと同じ記録単位として通常の記録領域に書き込まれるよう制御する機能である。
【発明の効果】
【0012】
本発明によれば、RABFにおけるパフォーマンスを向上させることができる。
【発明を実施するための最良の形態】
【0013】
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、「実施の形態」という)について詳細に説明する。
図1は、本実施の形態が適用されるテープドライブ10の構成を示した図である。このテープドライブ10は、インタフェース11と、バッファ12と、記録チャネル13とを含む。また、テープ14aと、ヘッド14bと、リール14c及び14dと、カートリッジ14eと、モータ15とを含む。更に、コントローラ16と、ヘッド位置制御システム17と、モータドライバ18とを含む。
【0014】
このうち、インタフェース11は、ホスト20との通信を行う。例えば、ホスト20から、バッファ12へのデータの書込みを指示するコマンドや、バッファ12からテープ14aへのデータの書込みを指示するコマンドを受け取る。尚、このインタフェース11で用いる通信規格としては、SCSI(Small Computer System Interface)が例示される。SCSIの場合、前者のコマンドは、Writeコマンドに相当する。また、後者のコマンド(同期コマンド)は、WriteFilemark(WriteFM)コマンドに相当する。また、インタフェース11は、ホスト20に対し、これらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【0015】
バッファ12は、テープ14aに書き込むべきデータを蓄積するメモリである。例えば、DRAM(Dynamic Random Access Memory)によって構成される。また、バッファ12は、複数のバッファセグメント(以下、単に「セグメント」という)からなり、各セグメントが、テープ14aに対する読み書きの単位であるデータセットを格納している。
記録チャネル13は、バッファ12に蓄積されたデータをテープ14aに書き出すために用いられる通信経路である。
【0016】
テープ14aは、データの記録手段としてのテープ媒体であり、記録チャネル13を介して渡されたデータがヘッド14bによりテープ14aに書き込まれる。また、テープ14aは、リール14c及び14dに巻かれ、これらの回転に伴い、リール14cからリール14dの方向へ、又は、リール14dからリール14cの方向へ、縦方向に移動する。カートリッジ14eは、テープ14aが巻きつけてあるリール14cを収容する容器であるが、リール14dを収容するものを設けてもよい。
また、モータ15は、リール14c及び14dを回転させる。尚、図では、1つの矩形でモータ15を表しているが、モータ15としては、リール14c及び14dの各々に1つずつ、合計2個設けるのが好ましい。
【0017】
一方、コントローラ16は、テープドライブ10の全体を制御する。例えば、インタフェース11で受け付けたコマンドに従って、データのテープ14aへの書込みを制御する。また、ヘッド位置制御システム17やモータドライバ18の制御も行う。
ヘッド位置制御システム17は、所望の1つ又は複数のラップを追跡するシステムである。ここで、ラップとは、テープ14a上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド14bを電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム17で行う。
モータドライバ18は、モータ15を駆動する。尚、上述したように、モータ15を2個使用する場合であれば、モータドライバ18も2個設けられる。また、ここでは、作図の都合上、モータドライバ18は、ヘッド位置制御システム17を介してコントローラ16に接続されているが、直接コントローラ16に接続されていてもよい。
【0018】
次に、本実施の形態におけるテープドライブ10について詳細に説明する。尚、本実施の形態におけるコマンドとしては、SCSIのコマンドを例示する。また、本実施の形態では、LTO(Linear Tape-Open)規格を例示して説明する。用語についてもLTO規格に準拠し、例えば、バッファ12の1つのセグメントに格納されるデータのまとまりを「データセット」とし、データセット中のデータの最後を示すための制御用データを「EndMarker」とする。
まず、本実施の形態の概要について説明しておく。
従来のRABFでは、リライト時にバッファ12にデータを受け付ける空きがなかった。また、リライトが行われているため、Writeコマンドで送られたデータをバッファ12に蓄積し、同期要求に応じてテープ14a上に書き出すことができなかった。
そこで、本実施の形態では、この従来のRABFに対し、次のような変更を行った。
【0019】
・データの蓄積時
従来のRABFでは、各セグメントに空きがなくなるまでデータを書き込んでいた。これに対し、本実施の形態では、例えば、セグメントに空きがあるうちに次のセグメントを使い始める。IBMの3592−J1Aでは、1つのセグメントは約400KBであるが、このうち、例えば7/8、つまり約350KBに達した時点で、次のセグメントに切り換える。こうすることで、各セグメントに約50KBの領域がリザーブされ、これをリライト時に受け付けたデータの格納領域として使用することができる。また、350KBの領域の最後には、「EndMarker」を記録する。これにより、ABFラップからのリカバリのための読出し時、又は、リライトされたデータの通常の読出し時に、このリザーブされた領域を自動的に読み飛ばすことができる。
或いは、一部のセグメントをリザーブしておき、リライト中に受けたデータをそのリザーブされたセグメントに格納する構成としてもよい。
【0020】
・同期終了後
従来のRABFでは、リライトが完了するまで、直前の同期要求に対するステータスをホスト20に返さない構成となっていた。これに対し、本実施の形態では、テープドライブ10にてリライトが行われていてもホスト20が同期を要求できるようにするために、リライトに移行する直前のデータセットをABFラップに書き終わった時点でステータスをホスト20に返すようにした。
【0021】
・リライト時
リライト中に同期要求が来た場合は、リザーブされた領域にその同期に必要なデータを書き込み、これとリライトを行っているデータとを合わせてテープ14aに書き込むようにした。その際、1つのセグメントにリザーブされている領域ではサイズが不十分の場合がある。そのような場合に、自動的に次のセグメントのリザーブされた領域にデータを流し入れることができるようにした。
【0022】
・リライト終了後
従来のRABFには存在しない処理を、本実施の形態では行うようにした。即ち、リザーブされた領域を使って同期が行われたデータを、次にRABFが行われるセグメントにコピーする処理である。例えば、約400KBのセグメントのうち約50KBをリザーブした場合であれば、次のセグメントの350KBの側にコピーを行う。即ち、リライトを行っているデータと合わせてテープ14aに書き込まれたデータも、バッファ12に蓄積された形にしておき、それに続けて次の蓄積処理を行うようにしている。
【0023】
以下、本実施の形態について、より詳しく説明する。
(第1の実施の形態)
図2〜4は、ホスト20から送られたデータが一時記録領域に書き込まれ、その後、所定のタイミングで通常の記録領域にリライトされる様子を示した図である。
各図では、中央左寄りに縦長の矩形でバッファ12が示されている。バッファ12を構成するセグメントの数は、特に限定されるものではないが、ここでは8個とし、上から順に「S1」、「S2」、「S3」、「S4」、「S5」、「S6」、「S7」、「S8」とする。
また、各図において、上側の帯は、通常の記録領域(データが本来記録されるべき領域)を示している。データの記録領域を、テープ14a上の複数のトラックからなるラップと捉えると、この通常の記録領域は、通常ラップである。
一方、各図において、下側の帯は、テープ14aを走行させたままデータを記録するのに用いられる一時記録領域を示している。データの記録領域を、テープ14a上の複数のトラックからなるラップと捉えると、この一時記録領域は、ABFラップである。
【0024】
図2は、ホスト20からのWriteコマンドによりデータがバッファ12に蓄積され、ホスト20からのWriteFMコマンドによりデータがバッファ12からABFラップへ書き込まれる際の状況を示す。
尚、ここでは、1つのWriteコマンドにより、1つのデータ要素(斜線を施した最小の単位)がバッファ12に書き込まれるものとする。また、図示するように、ホスト20は、3つのWriteコマンドを送った後、1つのWriteFMコマンドを送るものとする。そして、このWriteFMコマンドによりABFラップにデータを書き込む際には、前回のABFラップへの書込み以降にデータが蓄積されたセグメント内の全てのデータがABFラップに書き込まれるものとする。
【0025】
まず、1番目から3番目までのWriteコマンドを受けると、1番目から3番目までのデータ要素がバッファに書き込まれる。尚、図2では、この3つのデータ要素をまとめて「D1」と表示している。その後、WriteFMコマンドにより、前回のABFラップへの書込み以降にデータが蓄積されたセグメント内の全てのデータがABFラップに書き込まれる。この場合は、セグメントS1内のデータD1がABFラップに書き込まれる。
【0026】
以下、同様に、4番目から6番目までのWriteコマンドにより、4番目から6番目までのデータD2がバッファ12に書き込まれ、WriteFMコマンドにより、セグメントS1及びS2内のデータセットがABFラップに書き込まれる。
また、7番目から9番目までのWriteコマンドにより、7番目から9番目までのデータD3がバッファ12に書き込まれ、WriteFMコマンドにより、セグメントS2内のデータセットがABFラップに書き込まれる。
更に、10番目から12番目までのWriteコマンドにより、10番目から12番目までのデータD4がバッファ12に書き込まれ、WriteFMコマンドにより、セグメントS2及びS3内のデータセットがABFラップに書き込まれる。
尚、本実施の形態では、各セグメントの一定割合の領域を、リライト中にホスト20から受けたデータを格納するためのリザーブ領域としている。図2〜4では、バッファ12の右側の隙間により、このリザーブ領域を表している。
【0027】
その後、バッファ12から通常ラップへのリライトが行われる。
図3は、セグメントS1内のデータセットが通常ラップにリライトされている際に、ホスト20からWriteコマンド及びWriteFMコマンドが送られたときの状態を示している。
この場合、ホスト20から送られたデータは、リライトのためにアクセスされていないセグメントS2のリザーブ領域に格納されている(灰色部分)。
【0028】
図4は、セグメントS2及びS3内のデータセットがリライトされる際の状態を示している。
まず、セグメントS2内のデータセットは、図示するように、通常ラップのセグメントS1の隣に書き込まれている。その際、リライト中に書き込まれたデータ(セグメントS2の灰色部分)も、通常ラップに書き込まれる(通常ラップの灰色部分)。
また、セグメントS3内のデータセットも、通常ラップのその隣に書き込まれている。
そして、本実施の形態では、リライト中に書き込まれたデータ(セグメントS2の灰色部分)を、次にABFラップに書き込まれるセグメントにコピーしている(セグメントS4の灰色部分)。このように、リライト中にリザーブ領域に書かれたデータを、これからRABFが行われるセグメントにコピーすることにより、そのデータは、通常のRABFの手順に従い、通常ラップに再度書き込まれることになる。
【0029】
尚、図2〜4では、各セグメント内部の具体的なデータ構造について示していないが、例えば、図5に示すようなデータ構造を前提としている。
即ち、テープ14aに記録されるデータとしては、ユーザデータにその誤り訂正のためのC1パリティとC2パリティが付加された積符号データブロックが採用される。ここで、C1パリティとは、ユーザデータの行方向の誤りを訂正するために用いられるパリティ符号であり、例えば、図示するように、偶数番目のバイトからなるデータに対するパリティ符号と、奇数番目のバイトからなるデータに対するパリティ符号とを含むものであってもよい。また、C2パリティとは、ユーザデータの列方向の誤りを訂正するために用いられるパリティ符号である。
【0030】
このうち、各セグメントには、図5のユーザデータの部分(468バイト×54バイト)が格納される。尚、図2〜4では、各セグメントにおけるリザーブ領域をバッファ12の右側の隙間で表しているが、これは、リザーブ領域の存在を分かり易くするためであり、実際には、例えば、図5の網掛けの部分がリザーブ領域に相当する。
【0031】
次に、図6〜8を参照して、本実施の形態におけるテープドライブ10の動作を説明する。尚、本実施の形態では、リライト中でないときのバッファ12内のデータの書き込み位置を第1のバッファポインタで指し、リライト中におけるバッファ12内のデータの書き込み位置を第2のバッファポインタで指すものとする。
【0032】
まず、ホスト20からWriteコマンドを受けたときのコントローラ16の動作について説明する。
図6は、そのときのコントローラ16の動作を示したフローチャートである。
まず、コントローラ16は、インタフェース11からWriteコマンドを受け取る(ステップ101)。そして、バッファ12から記録チャネル13へリライトのためのデータ転送が行われているかどうかを判定する(ステップ102)。尚、ここでの判定は、例えば、コントローラ16が参照可能なメモリにリライト中かどうかのフラグを保持しておくことで実現できる。
【0033】
その結果、リライト中でないと判定された場合、コントローラ16は、バッファ12内の第1のバッファポインタが指す位置にデータを書き込む(ステップ103)。そして、現在のセグメントに予め定めた量のデータが書き込まれたかどうかを判定する(ステップ104)。ここで、予め定めた量のデータが書き込まれたと判定されれば、「EndMarker」を書き込み、第1のバッファポインタを次のセグメントの先頭に進める(ステップ105)。また、予め定めた量のデータが書き込まれていないと判定された場合は、第1のバッファポインタを、書き込んだデータの分だけ進める(ステップ109)。
【0034】
一方、ステップ102でリライト中と判定された場合、コントローラ16は、バッファ12内の第2のバッファポインタが指す位置(リザーブ領域内の位置)にデータを書き込む(ステップ106)。そして、セグメントの最後までデータが書き込まれたかどうかを判定する(ステップ107)。ここで、最後まで書き込まれたと判定されれば、第2のバッファポインタを次のセグメントの「EndMarker」の直後に進める(ステップ108)。また、最後まで書き込まれていないと判定されれば、第2のバッファポインタを、書き込んだデータの分だけ進める(ステップ109)。
【0035】
次に、ホスト20からWriteFMコマンドを受けたときのコントローラ16の動作について説明する。
図7は、そのときのコントローラ16の動作を示したフローチャートである。
まず、コントローラ16は、インタフェース11からWriteFMコマンドを受け取る(ステップ111)。そして、バッファ12から記録チャネル13へリライトのためのデータ転送が行われているかどうかを判定する(ステップ112)。尚、ここでの判定は、例えば、コントローラ16が参照可能なメモリにリライト中かどうかのフラグを保持しておくことで実現できる。
【0036】
その結果、リライト中でないと判定された場合、コントローラ16は、まず、第1のバッファポインタの位置に「FileMark」を、コマンドで指定された個数(0個を含む)書き込む(ステップ113)。次に、新たにバッファ12に書き込まれたデータと「FileMark」とをABFラップに書き込む(ステップ114)。そして、最後に、テープ14aに対する書き込みが完了した旨のステータスをホスト20に返す(ステップ115)。
【0037】
一方、リライト中であると判定された場合、コントローラ16は、まず、第2のバッファポインタの位置に「FileMark」を、コマンドで指定された個数(0個を含む)書き込む(ステップ116)。次に、「FileMark」が書き込まれたデータセットがリライトされるのを待つ(ステップ117)。そして、最後に、リライト結果に基づいてホスト20にステータスを返す(ステップ118)。
【0038】
また、このようにABFラップに書き込まれたデータセットは、その後の所定のタイミングで通常ラップにリライトされる。
図8は、そのときのコントローラ16の動作を示したフローチャートである。
まず、コントローラ16は、リライトをすべき旨の指示を受ける(ステップ121)。このリライトすべき旨の指示は、例えば、バッファ12に空き容量がなくなった場合や、ABFラップを使い切った場合になされる。前者の場合は、バッファ12の空き容量を監視する手段から指示を受ける。また、後者の場合は、ABFラップの使用状況を監視する手段から指示を受ける。
【0039】
リライトの指示を受けると、コントローラ16は、1番目のセグメント(図2〜4のセグメントS1)内のデータセットのリライトの準備をする(ステップ122)。ここで、先に述べたように、ホスト20から送られたデータには、誤り訂正を行うためのパリティ符号を付加してテープ14aに記録するので、リライトの準備としては、そのようなパリティ符号の計算等がある。
また、リライト中のセグメントにはホスト20から送られたデータを書き込むことはできないので、リライト中のデータの書込み位置を指す第2のバッファポインタを、2番目のセグメント(図2〜4のセグメントS2)の「EndMarker」の直後に進める(ステップ123)。尚、図2〜4の例では、この状態でホスト20からデータが送られ、図6のステップ106で、セグメントS2のリザーブ領域に書き込まれている。
【0040】
次いで、コントローラ16は、次のデータセット、即ち、3番目のセグメント内のデータセットが存在するかどうかを判定する(ステップ124)。
その結果、3番目のセグメント内のデータセットが存在すると判定された場合は、リライトの準備ができた1番目のセグメント内のデータセットを通常ラップに書き込み、それと並行して、2番目のセグメント内のデータセットのリライトの準備をする(ステップ125)。そして、第2のバッファポインタを、3番目のセグメントの「EndMarker」の直後に進める(ステップ126)。図2〜4の例では、セグメントS3にデータが存在するので、セグメントS1内のデータを通常ラップに書き込み、セグメントS2内のデータのリライトの準備をし、第2のバッファポインタをセグメントS3の「EndMarker」の直後に進めている。
【0041】
以下、同様に、(N+2)番目のセグメント内にデータが存在すれば、N番目のセグメント内のデータを通常ラップに書き込み、それと並行して、(N+1)番目のセグメント内のデータのリライトの準備をし、第2のバッファポインタを(N+2)番目のセグメントの「EndMarker」の直後に進める、という処理を繰り返す(N=2,3,…)。
【0042】
一方、(N+2)番目のセグメント内にデータセットが存在しないと判定された場合は、N番目のセグメント内のデータセットを通常ラップに書き込み、それと並行して、(N+1)番目のセグメント内のデータセットのリライトの準備をし、そして、この(N+1)番目のセグメント内のデータセットも通常ラップに書き込む(ステップ127)。図2〜4の例の場合、セグメントS4内にデータが存在しないので、セグメントS2内のデータを通常ラップに書き込んだ後、セグメントS3内のデータも通常ラップに書き込んでいる。
【0043】
その後、このリライト中にホスト20から送られリザーブ領域に格納されたデータが存在すれば、それらを順次、次のセグメント、即ち、リライト対象となった最後のセグメントの次のセグメントにコピーする(ステップ128)。そして、第1のバッファポインタをそのコピーしたデータの直後に進める(ステップ129)。図2〜4の例の場合、セグメントS2のリザーブ領域に格納されたデータを、セグメントS4にコピーしている。
以上により、本実施の形態におけるデータの記録の動作は終了する。
【0044】
即ち、本実施の形態では、同期要求があった場合にリライト中でなければ、データをABFラップに書き込んで同期応答を返し、その後、通常ラップにも書き込むようにしている。また、同期要求があった場合にリライト中であれば、送られたデータをリライト中のデータと合わせて通常ラップに書き込んで同期応答を返し、その後、通常のRABFの手順に従い、ABFラップに書き込んだ後、通常ラップに書き込んでいる。
【0045】
このように、本実施の形態において、ホスト20から同期要求があった場合、テープ14aへの書込みが成功したかどうかは、ホスト20に報告されるようになっている。
一方、リライトが成功したかどうかは、コントローラ16は認識しているものの、SCSIの仕様により、すぐにはホスト20に送信されないようになっている。例えば、リライトの失敗後にホスト20からWriteコマンドやWriteFMコマンドが来れば、その応答としてリライトの失敗を報告することはできる。しかしながら、リライトの失敗後にホスト20からWriteコマンドやWriteFMコマンドが来ないことも考えられる。このような場合、ホスト20としては、データがその本来記録されるべき通常ラップに書かれたと認識しているにもかかわらず、実際には、通常ラップにデータが正常に記録されていないという事態が生ずる。そこで、このような正常に記録されていないデータの読出し要求があった場合、テープドライブ10は、本来記録されるべき場所からデータを読み出す代わりに、他の場所に記録されたデータを読み出してホスト20に返すというリカバリ処理を行う必要がある。
【0046】
以下、このリカバリ処理を含むRead処理について説明する。
ここでは、テープ14a上に、図9に示すような形式でデータが記録されているものとして説明を行う。尚、データセットZ及びEには、既存のアルゴリズムにより、次のデータセットからRABFが行われることを示すフラグがセットされているものとする。また、データセットEには、既存のアルゴリズムにより、リライト単位の最後であることを示すフラグがセットされているものとする。
【0047】
図10は、この場合のRead処理の動作を示したフローチャートである。
まず、コントローラ16は、ホスト20からReadコマンドを受け取る(ステップ131)。これにより、コントローラ16は、記録チャネル13を介してテープ14aから通常のデータの読出しを行う(ステップ132)。尚、その際、データセットB及びDの灰色部分のデータは、あくまで同期のために書かれたデータであるので、「EndMarker」を検出することで自動的に読み飛ばされるようになっている。
その後、コントローラ16は、データの読出しに成功したかどうかを判定し(ステップ133)、成功していれば、そのまま処理を終了する。
一方、データの読出しに成功していなければ、読出しに失敗したデータセットの種類を判別する(ステップ134)。
【0048】
ここで判別されるデータセットの種類としては、第一に、図9のデータセットA〜Eのように、リライト中の同期後の通常のRABFにより書き込まれたデータ(Fの灰色部分)を含まないデータセットがある。このようなデータセットについては、リライトが行われていないときに同期されたデータについて、既存のアルゴリズムによりリカバリを行う(ステップ135)。つまり、図9のデータセットA〜Eの斜線部分のデータをABFラップから読み出してホスト20に送信する。
【0049】
その後、ホスト20に送るべき全てのデータの送信が完了しかたどうかを判定する(ステップ136)。その結果、送るべき全てのデータの送信が完了していると判定されれば、そのまま処理を終了する。一方、送るべき全てのデータの送信が完了していないと判定されれば、リライト中の同期要求により通常ラップに書き込まれたデータのリカバリを行う(ステップ137)。つまり、図9のデータセットB及びDの灰色部分のデータを読み出してホスト20に送信する。テープドライブ10は、図9のデータセットB及びDの灰色部分のデータについて、通常ラップに書き込むことで同期が成功した旨をホスト20に返しているため、ホスト20からの読出し要求に対し、これらのデータも読み出して返す必要があるからである。
【0050】
また、ステップ134で判別されるデータセットの種類としては、第二に、図9のデータセットFのように、リライト中の同期後に通常のRABFにより書き込まれたデータ(灰色部分)を含むデータセットがある。このようなデータセットについては、既存のアルゴリズムによりリカバリを行う(ステップ138)。つまり、図9のデータセットFの灰色部分及び斜線部分のデータをABFラップから読み出してホスト20に送信する。そして、特に、リライト中の同期後の通常のRABFにより書き込まれたデータ(灰色部分)について、リカバリが成功したかどうかを判定する(ステップ139)。その結果、リカバリが成功していれば、そのまま処理を終了し、リカバリが成功していなければ、1つ前のリライト単位のデータを用いてリカバリを行う(ステップ140)。つまり、図9のデータセットFの1番左の灰色部分のデータの読出しに失敗したのであれば、データセットBの灰色部分のデータを読み出して送信し、図9のデータセットFのその右隣の灰色部分のデータの読出しに失敗したのであれば、データセットDの灰色部分のデータを読み出して送信する。
以上により、本実施の形態の動作は終了する。
【0051】
尚、本実施の形態では、N番目のセグメント内のデータセットをリライトしている間に、(N+1)番目のセグメントについてリライトの準備をし、(N+2)番目のセグメントのリザーブ領域にホストからのデータを受け入れるようにしたが、このような形態には限られない。即ち、リライト中にホストから受け付けたデータを格納するセグメントは、リライトのために現にアクセスされているセグメント以外のセグメントで、そのうち今回のリライトのためにアクセスされるセグメントであれば、どの位置にあるセグメントでもよい。
また、本実施の形態では、リライト中に受け付けたデータを、リライト対象のセグメントのリザーブ領域に格納して通常ラップに書き込んだ後、現時点ではリライト対象ではないセグメントにコピーするようにした。しかしながら、リライト中に受け付けたデータを、その時点で、リライト対象のセグメントのリザーブ領域とリライト対象ではないセグメントの両方に格納する構成を採用することも考えられる。
【0052】
このように、本実施の形態では、リライト中に同期要求が来た場合に、その同期要求に係るデータを各セグメント内のリザーブ領域に格納した後、リライトを行っているデータと合わせてテープに書き込むようにした。これにより、RABFにおけるパフォーマンスを更に向上することができる。
【0053】
(第2の実施の形態)
図11〜13は、ホスト20から送られたデータが一時記録領域に書き込まれ、その後、所定のタイミングで通常の記録領域にリライトされる様子を示した図である。
これらの図においても、中央左寄りに縦長の矩形でバッファ12が示されている。バッファ12を構成するセグメントの数は、特に限定されるものではないが、ここでも8個とし、上から順に「S1」、「S2」、「S3」、「S4」、「S5」、「S6」、「S7」、「S8」とする。
また、図2〜4と同様、上側の帯が、データが本来記録されるべき通常の記録領域(通常ラップ)を表し、下側の帯が、テープ14aを走行させたままデータを記録するのに用いられる一時記録領域(ABFラップ)を表している。
【0054】
図11は、ホスト20からのWriteコマンドによりデータがバッファ12に蓄積され、ホスト20からのWriteFMコマンドによりデータがバッファ12からABFラップへ書き込まれる際の状況を示す。
尚、ここでも、1つのWriteコマンドにより、1つのデータ要素(斜線を施した最小の単位)がバッファ12に書き込まれるものとする。また、図示するように、ホスト20は、3つのWriteコマンドを送った後、1つのWriteFMコマンドを送るものとする。そして、このWriteFMコマンドによりABFラップにデータを書き込む際には、前回のABFラップへの書込み以降にデータが蓄積されたセグメント内の全てのデータがABFラップに書き込まれるものとする。
【0055】
まず、1番目から3番目までのWriteコマンドを受けると、1番目から3番目までのデータ要素がバッファに書き込まれる。尚、図11でも、この3つのデータ要素をまとめて「D1」と表示している。その後、WriteFMコマンドにより、前回のABFラップへの書込み以降にデータが蓄積されたセグメント内の全てのデータがABFラップに書き込まれる。この場合は、セグメントS1内のデータD1がABFラップに書き込まれる。
【0056】
以下、同様に、4番目から6番目までのWriteコマンドにより、4番目から6番目までのデータD2がバッファ12に書き込まれ、WriteFMコマンドにより、セグメントS1及びS2内のデータセットがABFラップに書き込まれる。
また、7番目から9番目までのWriteコマンドにより、7番目から9番目までのデータD3がバッファ12に書き込まれ、WriteFMコマンドにより、セグメントS2内のデータセットがABFラップに書き込まれる。
更に、10番目から12番目までのWriteコマンドにより、10番目から12番目までのデータD4がバッファ12に書き込まれ、WriteFMコマンドにより、セグメントS2及びS3内のデータセットがABFラップに書き込まれる。
尚、本実施の形態では、バッファ12を構成する複数のセグメントの一部を、リライト中にホスト20から受けたデータを格納するためのリザーブセグメントとしている。具体的には、セグメントS7及びS8をリザーブセグメントとして確保している(図11〜13の網掛け部分)。
【0057】
その後、バッファ12から通常ラップへのリライトが行われる。
図12は、セグメントS1内のデータセットが通常ラップにリライトされている際に、ホスト20からWriteコマンド及びWriteFMコマンドが送られたときの状態を示している。
この場合、ホスト20から送られたデータは、リザーブセグメントS7に格納されている(灰色部分)。
【0058】
図13は、セグメントS2及びS3内のデータセットがリライトされる際の状態を示している。
まず、セグメントS2内のデータセットは、図示するように、通常ラップのセグメントS1の隣に書き込まれている。
次いで、リザーブセグメントであるセグメントS7内のデータセット(セグメントS7の灰色部分)が、その隣に書き込まれている(通常ラップの灰色部分)。バッファ12の上から順にリライトが行われるのであれば、このような順序の逆転は生じないが、本実施の形態では、リライトの準備が整ったものからリライトするようにしているので、リザーブセグメント内のデータセットが先にリライトされることも起こり得るようになっている。
その後、セグメントS3内のデータセットが、通常ラップのセグメントS7の隣に書き込まれている。
そして、本実施の形態では、リライト中に書き込まれたデータ(セグメントS7の灰色部分)を、次にABFラップに書き込まれるセグメントにコピーしている(セグメントS4の灰色部分)。このように、リライト中にリザーブ領域に書かれたデータを、これからRABFが行われるセグメントにコピーすることにより、そのデータは、通常のRABFの手順に従い、通常ラップに再度書き込まれることになる。
【0059】
次に、図14及び15を参照して、本実施の形態におけるテープドライブ10の動作を説明する。尚、本実施の形態では、リライト中でないときのデータの書き込み位置も、リライト中におけるデータの書き込み位置も同じバッファポインタで指すものとする。
まず、ホスト20からWriteコマンドを受けたときのコントローラ16の動作について説明する。
図14は、そのときのコントローラ16の動作を示したフローチャートである。
まず、コントローラ16は、インタフェース11からWriteコマンドを受け取る(ステップ141)。そして、バッファ12から記録チャネル13へリライトのためのデータ転送が行われているかどうかを判定する(ステップ142)。尚、ここでの判定は、例えば、コントローラ16が参照可能なメモリにリライト中かどうかのフラグを保持しておくことで実現できる。
【0060】
その結果、リライト中でないと判定された場合、コントローラ16は、バッファ12内のバッファポインタが指す位置にデータを書き込む(ステップ143)。そして、バッファポインタを、書き込んだデータの分だけ進める(ステップ144)。
一方、リライト中と判定された場合、コントローラ16は、バッファ12内のバッファポインタが指す位置(リザーブセグメント内の位置)にデータを書き込む(ステップ145)。そして、セグメントの最後までデータが書き込まれたかどうかを判定する(ステップ146)。ここで、最後まで書き込まれていないと判定されれば、バッファポインタを、書き込んだデータの分だけ進める(ステップ144)。また、最後まで書き込まれたと判定されれば、このリザーブセグメントにリライト可能(リライトされるデータセットと合わせて書き込むことが可能)の印を付け(ステップ147)、バッファポインタを、書き込んだデータの分だけ進める(ステップ144)。
【0061】
次に、ホスト20からWriteFMコマンドを受けると、コントローラ16は、リライト中でなければ、バッファ12内のデータをABFラップに書き込み、ホスト20にステータスを返す。一方、リライト中であれば、ホスト20から受け取ったデータが通常ラップにリライトされるのを待ち、リライトのステータスをホスト20に返す。尚、この動作は、図7と同様であるので、詳細な説明は省略する。但し、本実施の形態では、「FileMark」をバッファ12にコマンドで指定された個数(0個を含む)書き込んだ後、そのセグメントに最後までデータが書かれていなくても、リライトされるデータに混ぜて書き出す必要がある。そこで、図7のステップ117において、途中まで書かれていたセグメントに、ステップ147で付けたのと同様の印を付ける処理も行う。
【0062】
また、このようにABFラップに書き込まれたデータセットは、その後の所定のタイミングで通常ラップにリライトされる。
図15は、そのときのコントローラ16の動作を示したフローチャートである。
まず、コントローラ16は、リライトをすべき旨の指示を受ける(ステップ151)。このリライトすべき旨の指示は、例えば、バッファ12に空き容量がなくなった場合や、ABFラップを使い切った場合になされる。前者の場合は、バッファ12の空き容量を監視する手段から指示を受ける。また、後者の場合は、ABFラップの使用状況を監視する手段から指示を受ける。
【0063】
リライトの指示を受けると、コントローラ16は、バッファポインタをリザーブセグメント(図11〜13のセグメントS7)の先頭に切り換える(ステップ152)。本実施の形態において、バッファポインタは、通常のセグメントとリザーブセグメントに共通に用いているためである。
また、コントローラ16は、1番目のセグメント(図11〜13のセグメントS1)内のデータセットのリライトの準備をする(ステップ153)。ここで、先に述べたように、ホスト20から送られたデータには、誤り訂正を行うためのパリティ符号を付加してテープ14aに記録するので、リライトの準備としては、そのようなパリティ符号の計算等がある。
【0064】
次いで、コントローラ16は、次のデータセット、即ち、2番目のセグメント内のデータセットが存在するかどうかを判定する(ステップ154)。尚、この判定の対象となるセグメントには、リザーブセグメントも含まれる。
その結果、2番目のセグメント内のデータセットが存在すると判定された場合は、リライトの準備ができた1番目のセグメント内のデータセットを通常ラップに書き込み、それと並行して、2番目のセグメント内のデータセットのリライトの準備をする(ステップ155)。
そして、現在バッファポインタが位置づけられているリザーブセグメントがリライト可能かどうかを、ステップ147で付けられた印に基づいて判定する(ステップ156)。ここで、リザーブセグメントがリライト可能でなければ、そのまま処理はステップ154に進む。また、リザーブセグメントがリライト可能であれば、バッファポインタを次のリザーブセグメント(図11〜13のセグメントS8)の先頭に進め(ステップ157)、処理は154に進む。図11〜13の例では、セグメントS2にデータが存在するので、セグメントS1内のデータを通常ラップに書き込み、セグメントS2内のデータのリライトの準備をしている。
【0065】
以下、同様に、(N+1)番目のセグメント内にデータが存在すれば、N番目のセグメント内のデータを通常ラップに書き込み、それと並行して、(N+1)番目のセグメント内のデータのリライトの準備をし、リザーブセグメントがリライト可能になっていれば、バッファポインタを次のリザーブセグメントの先頭に進める、という処理を繰り返す(N=2,3,…)。図11〜14の例では、この時点でセグメントS7がリライト可能になっているとし、これを3番目のセグメントとしている。そして、セグメントS2内のデータを通常ラップに書き込み、セグメントS7内のデータのリライトの準備をしている(N=2の場合)。また、4番目のセグメントとなるセグメントS3にデータが存在するので、セグメントS7内のデータを通常ラップに書き込み、セグメントS3内のデータのリライトの準備をしている(N=3の場合)。
【0066】
一方、(N+1)番目のセグメント内にデータセットが存在しないと判定された場合は、N番目のセグメント内のデータセットを通常ラップに書き込む(ステップ158)。図11〜13の例の場合、セグメントS4内にデータが存在しないので、セグメントS3内のデータを通常ラップに書き込んでいる。
【0067】
その後、このリライト中にホスト20から送られリザーブセグメントに格納されたデータが存在すれば、それらを順次、リライト対象となった最後のセグメント(リザーブセグメントを除く)の次のセグメントにコピーする(ステップ159)。そして、バッファポインタをそのコピーしたデータの直後に進める(ステップ160)。図11〜13の例の場合、セグメントS7に格納されたデータを、セグメントS4にコピーしている。
以上により、本実施の形態におけるデータの記録の動作は終了する。
【0068】
即ち、本実施の形態でも、同期要求があった場合にリライト中でなければ、データをABFラップに書き込んで同期応答を返し、その後、通常ラップにも書き込むようにしている。また、同期要求があった場合にリライト中であれば、送られたデータをリライト中のデータと合わせて通常ラップに書き込んで同期応答を返し、その後、通常のRABFの手順に従い、ABFラップに書き込んだ後、通常ラップに書き込んでいる。
【0069】
このように、本実施の形態において、ホスト20から同期要求があった場合、テープ14aへの書込みが成功したかどうかは、ホスト20に報告されるようになっている。
一方、リライトが成功したかどうかは、コントローラ16は認識しているものの、SCSIの仕様により、すぐにはホスト20に送信されないようになっている。例えば、リライトの失敗後にホスト20からWriteコマンドやWriteFMコマンドが来れば、その応答としてリライトの失敗を報告することはできる。しかしながら、リライトの失敗後にホスト20からWriteコマンドやWriteFMコマンドが来ないことも考えられる。このような場合、ホスト20としては、データがその本来記録されるべき通常ラップに書かれたと認識しているにもかかわらず、実際には、通常ラップにデータが正常に記録されていないという事態が生ずる。そこで、このような正常に記録されていないデータの読出し要求があった場合、テープドライブ10は、本来記録されるべき場所からデータを読み出す代わりに、他の場所に記録されたデータを読み出してホスト20に返すというリカバリ処理を行う必要がある。
【0070】
以下、このリカバリ処理を含むRead処理について説明する。
ここでは、テープ14a上に、図16に示すような形式でデータが記録されているものとして説明を行う。尚、各データセットには、データセット番号及びライトパス番号が付加されているものとする。ここで、データセット番号とは、書かれた順(読み出す順)を示す連続値である。その際、リライト中の同期で書かれたデータセットが読み飛ばされるよう、同期で書かれたデータセットと通常のデータセットとには同じデータセット番号を振っておき、ライトパス番号で区別するようにする。また、データセットB及びDには、リライト中の同期で書かれたデータセットであることを示すフラグがセットされているものとする。
【0071】
図17は、この場合のRead処理の動作を示したフローチャートである。
まず、コントローラ16は、ホスト20からReadコマンドを受け取る(ステップ161)。これにより、コントローラ16は、記録チャネル13を介して磁気テープから通常のデータの読出しを行う(ステップ162)。尚、その際、データセットB及びDは、あくまで同期のために書かれたデータセットであるので、通常は、データセット番号及びライトパス番号を参照することで自動的に読み飛ばされるようになっている。
その後、コントローラ16は、データの読出しに成功したかどうかを判定し(ステップ163)、成功していれば、そのまま処理は終了する。
一方、データの読出しに成功していなければ、読出しに失敗したデータセットの種類を判別する(ステップ164)。
【0072】
ここで判別されるデータセットの種類としては、第一に、図16のデータセットAのように、リライト中の同期で書かれたデータセットの直後のデータセット以外のデータセットがある。このようなデータセットについては、既存のアルゴリズムによりリカバリを行う(ステップ166)。
【0073】
その後、ホスト20に送るべき全てのデータの送信が完了しかたどうかを判定する(ステップ167)。その結果、送るべき全てのデータの送信が完了していると判定されれば、そのまま処理を終了する。一方、送るべき全てのデータの送信が完了していないと判定されれば、リライト中の同期要求により通常ラップに書き込まれたデータのリカバリを行う(ステップ168)。つまり、図16のデータセットB及びDの灰色部分のデータを読み出してホスト20に送信する。テープドライブ10は、図16のデータセットB及びDの灰色部分のデータについて、通常ラップに書き込むことで同期が成功した旨をホスト20に返しているため、ホスト20からの読出し要求に対し、これらのデータも読み出して返す必要があるからである。
【0074】
また、ステップ164で判別されるデータセットの種類としては、第二に、図16のデータセットC、Eのように、リライト中の同期で書かれたデータセットの直後のデータセットがある。この場合、直前のデータセットB、Dは、上述したように、通常は、読み飛ばされるのであるが、データセットC、Eの読出しに失敗したことにより、データセットB、DをデータセットC、Eであると誤認してしまうことが考えられる。そこで、コントローラ16は、リライト中の同期で書かれたデータセットであることを示すフラグを参照して、直前のデータセットが目的のデータセットではないことを判別する(ステップ165)。そして、データセットC、Eについて、既存のアルゴリズムによりリカバリを行う(ステップ166)。
【0075】
その後、ホスト20に送るべき全てのデータの送信が完了しかたどうかを判定する(ステップ167)。その結果、送るべき全てのデータの送信が完了していると判定されれば、そのまま処理を終了する。一方、送るべき全てのデータの送信が完了していないと判定されれば、リライト中の同期要求により通常ラップに書き込まれたデータのリカバリを行う(ステップ168)。つまり、図16のデータセットB及びDの灰色部分のデータを読み出してホスト20に送信する。テープドライブ10は、図16のデータセットB及びDの灰色部分のデータについて、通常ラップに書き込むことで同期が成功した旨をホスト20に返しているため、ホスト20からの読出し要求に対し、これらのデータも読み出して返す必要があるからである。
【0076】
更に、ステップ164で判別されるデータセットの種類としては、第三に、図16のデータセットFのように、リライト中の同期後に通常のRABFにより書き込まれたデータ(灰色部分)を含むデータセットがある。このようなデータセットについては、既存のアルゴリズムによりリカバリを行う(ステップ169)。つまり、図16のデータセットFの灰色部分及び斜線部分のデータをABFラップから読み出してホスト20に送信する。そして、特に、リライト中の同期後の通常のRABFにより書き込まれたデータ(灰色部分)について、リカバリが成功したかどうかを判定する(ステップ170)。その結果、リカバリが成功していれば、そのまま処理を終了し、リカバリが成功していなければ、1つ前のリライト単位のデータを用いてリカバリを行う(ステップ171)。つまり、図16のデータセットFの1番左の灰色部分のデータの読出しに失敗したのであれば、データセットBの灰色部分のデータを読み出して送信し、図16のデータセットFのその右隣の灰色部分のデータの読出しに失敗したのであれば、データセットDの灰色部分のデータを読み出して送信する。
以上により、本実施の形態の動作は終了する。
【0077】
尚、本実施の形態では、リライト中に受け付けたデータを、リザーブセグメントに格納して通常ラップに書き込んだ後、現時点ではリライト対象ではないセグメントにコピーするようにした。しかしながら、リライト中に受け付けたデータを、その時点で、リザーブセグメントとリライト対象ではないセグメントの両方に格納する構成を採用することも考えられる。
【0078】
このように、本実施の形態では、リライト中に同期要求が来た場合に、その同期要求に係るデータをリザーブセグメントに格納した後、リライトを行っているデータと合わせてテープに書き込むようにした。これにより、RABFにおけるパフォーマンスを更に向上することができる。
【0079】
尚、同期要求がホストから送られる間隔が長い場合は、リライト中に同期要求が送られる確率も低くなる。従って、本実施の形態は、同期要求の間隔が短い場合において特に有効である。
また、データの読出しの際のレートは、同期のために記録されたデータが読み出されない分、通常の方式で記録した場合よりも悪くなる。例えば、先に述べた、400KBのうちの50KBをリザーブ領域として確保する場合であれば、通常の方式で記録した場合のレートが約40MB/sとすると、本実施の形態の方式を用いた場合、約35MB/sとなってしまう。従って、本実施の形態は、書込みが読出しよりも多い場合、即ち、データの重要度が高い場合に、特に有効と言える。このようなものとして、例えば、一般的なBackup/Restoreアプリケーションが想定できる。このようなアプリケーションにおいては、通常、バックアップのみが行われ、リストアはまれにしか行われないため、読出しのパフォーマンスの低下はあまり問題とならない。
【0080】
同じ理由で、カートリッジの容量が減ることになる。しかしながら、現在の製品の使われ方をみると、同期を頻繁に要求するアプリケーションは、従来からの所謂大型機をホストとするものが大半であり、これらのアプリケーションは、カートリッジの容量を使い切らずに、次のカートリッジを利用することが多い。このため、本実施の形態では、カートリッジ容量の減少は問題にはならない。
また、同期の頻度が低い場合にはRABFが起動されないので、パフォーマンスの低下やカートリッジ容量の減少は、必ず起こるというものでもない。
【0081】
このように、本発明では、書込みの際のパフォーマンスが向上する代わりに、キャパシティのロスが発生する可能性がある。
しかしながら、これに対しては、データセットサイズを可変長とする技術(1/Nを単位としてデータセットサイズをその1〜N倍にできる技術)を用いることで、問題を大幅に緩和できる。
【0082】
具体的には、次のような手法を採用することができる。
第1の実施の形態では、例えば、各セグメントの1/Nをリザーブ領域とする。そして、リライト中の同期によるデータの追加が生じなかったデータセットは、(N−1)/Nのサイズとし、リライト中の同期によるデータの追加が生じたデータセットは、N/Nのサイズとする。これにより、キャパシティの減少や、読出し時のデータレートの低下を緩和することができる。
また、第2の実施の形態では、挿入されるデータセット(リザーブセグメントに格納されていたデータセット)のサイズを、同期のためのデータのサイズよりも少し大きなサイズとすればよい。これにより、上記と同様、キャパシティの減少や、読出し時のデータレートの低下を緩和することができる。
【0083】
尚、モデルによる性能評価を行ったので、以下に記す。
ここでは、セグメントサイズ(データセットサイズ)を400KB、バッファ内のセグメント数を1000、一度に同期するデータの量を48KB〜384KBとした。
第1の実施の形態の方式を用いた場合、リザーブ領域のサイズを50KBとすると、最大12.5%のキャパシティロスはあったものの、従来のRABFの103%〜107%のパフォーマンスが認められた。
また、第2の実施の形態の方式を用いた場合、24%〜17%のキャパシティロスはあったものの、従来のRABFの102%〜113%のパフォーマンスが認められた。
【0084】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。
また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
【図面の簡単な説明】
【0085】
【図1】本発明の実施の形態が適用されるテープドライブの構成を示したブロック図である。
【図2】本発明の第1の実施の形態におけるバッファからテープへの書込みの第1段階について説明するための図である。
【図3】本発明の第1の実施の形態におけるバッファからテープへの書込みの第2段階について説明するための図である。
【図4】本発明の第1の実施の形態におけるバッファからテープへの書込みの第3段階について説明するための図である。
【図5】本発明の実施の形態におけるデータセットの構造について説明するための図である。
【図6】本発明の第1の実施の形態におけるテープドライブのコントローラのWriteコマンド受付け時の動作を示したフローチャートである。
【図7】本発明の第1の実施の形態におけるテープドライブのコントローラのWriteFMコマンド受付け時の動作を示したフローチャートである。
【図8】本発明の第1の実施の形態におけるテープドライブのコントローラのリライト時の動作を示したフローチャートである。
【図9】本発明の第1の実施の形態におけるRead処理の説明に用いるテープ上のデータセットの配置例である。
【図10】本発明の第1の実施の形態におけるテープドライブのコントローラのRead処理の動作を示したフローチャートである。
【図11】本発明の第2の実施の形態におけるバッファからテープへの書込みの第1段階について説明するための図である。
【図12】本発明の第2の実施の形態におけるバッファからテープへの書込みの第2段階について説明するための図である。
【図13】本発明の第2の実施の形態におけるバッファからテープへの書込みの第3段階について説明するための図である。
【図14】本発明の第2の実施の形態におけるテープドライブのコントローラのWriteコマンド受付け時の動作を示したフローチャートである。
【図15】本発明の第2の実施の形態におけるテープドライブのコントローラのリライト時の動作を示したフローチャートである。
【図16】本発明の第2の実施の形態におけるRead処理の説明に用いるテープ上のデータセットの配置例である。
【図17】本発明の第2の実施の形態におけるテープドライブのコントローラのRead処理の動作を示したフローチャートである。
【符号の説明】
【0086】
10…テープドライブ、11…インタフェース、12…バッファ、13…記録チャネル、14a…テープ、14b…ヘッド、14c,14d…リール、14e…カートリッジ、15…モータ、16…コントローラ、17…ヘッド位置制御システム、18…モータドライバ

【特許請求の範囲】
【請求項1】
テープ媒体にデータを書き込むための装置であって、
前記テープ媒体に書き込むべきデータを蓄積するバッファと、
前記バッファに蓄積されたデータの前記テープ媒体への書込みを制御し、当該書込みの間に受け取ったデータを、当該バッファ内の、現時点ではアクセスされていないが、そのうち当該書込みのためにアクセスされる領域に蓄積するコントローラと
を含む、装置。
【請求項2】
前記領域は、前記バッファを構成する複数のセグメントのうちの任意のセグメントの予めリザーブされた領域である、請求項1記載の装置。
【請求項3】
前記領域は、前記バッファを構成する複数のセグメントのうちの予めリザーブされたセグメントの任意の領域である、請求項1記載の装置。
【請求項4】
前記書込みは、前記テープ媒体を走行させたままデータを書き込むのに用いられる一時記録領域に前記バッファに蓄積されたデータを書き込んだ後になされる、通常の記録領域への書込みである、請求項1記載の装置。
【請求項5】
前記コントローラは、前記バッファに蓄積されたデータを前記一時記録領域に書き込んだ際に、書込みのステータスを出力する、請求項4記載の装置。
【請求項6】
前記コントローラは、前記書込みの間に受け取ったデータを、当該書込みのためにアクセスされない領域にコピーする、請求項1記載の装置。
【請求項7】
テープ媒体にデータを書き込むための装置であって、
前記テープ媒体に書き込むべきデータを蓄積するバッファと、
前記バッファに蓄積された第1のデータの前記テープ媒体上の一時記録領域への第1の書込みの後に、当該第1のデータの当該テープ媒体上の通常の記録領域への第2の書込みを制御し、当該第2の書込みの間に受け取った第2のデータを、当該第2の書込みの対象の一部として当該通常の記録領域に書き込むコントローラと
を含む、装置。
【請求項8】
前記一時記録領域は、前記テープ媒体を走行させたままデータを書き込むのに用いられる領域である、請求項7記載の装置。
【請求項9】
前記コントローラは、前記第2のデータを、前記バッファを構成する複数のセグメントのうちの所定のセグメントの予めリザーブされた領域を経由して、前記通常の記録領域に書き込む、請求項7記載の装置。
【請求項10】
前記コントローラは、前記第2のデータを、前記バッファを構成する複数のセグメントのうちの予めリザーブされたセグメントを経由して、前記通常の記録領域に書き込む、請求項7記載の装置。
【請求項11】
前記コントローラは、前記第1の書込みの後、かつ、前記第2の書込みの前の所定の時点で、当該第1の書込みのステータスを出力する、請求項7記載の装置。
【請求項12】
前記コントローラは、前記第2の書込みの後に前記第2のデータを受け取った場合と同様の手順で、当該第2のデータを前記通常の記録領域に書き込む、請求項7記載の装置。
【請求項13】
前記コントローラは、前記第2のデータの読出し要求に応じて、前記第2の書込みの対象の一部として前記通常の記録領域に書き込まれた当該第2のデータを読み出す、請求項7記載の装置。
【請求項14】
テープ媒体にデータを書き込むための方法であって、
バッファに蓄積された第1のデータを前記テープ媒体上の一時記録領域に書き込み、
前記第1のデータを前記テープ媒体上の通常の記録領域に書き込む際に第2のデータを受け取ると、当該第2のデータを当該第1のデータと同じ記録単位に含めて当該通常の記録領域に書き込む、方法。
【請求項15】
前記第2のデータは、前記バッファを構成する複数のセグメントのうちの所定のセグメントの予めリザーブされた領域を経由して、前記通常の記録領域に書き込まれる、請求項14記載の方法。
【請求項16】
前記第2のデータは、前記バッファを構成する複数のセグメントのうちの予めリザーブされたセグメントを経由して、前記通常の記録領域に書き込まれる、請求項14記載の方法。
【請求項17】
前記第1のデータを前記一時記録領域に書き込んだ際に、書込みのステータスを出力する、請求項14記載の方法。
【請求項18】
前記第1のデータの前記通常の記録領域への書込みの後に前記第2のデータを受け取った場合と同様の手順で、当該第2のデータを前記通常の記録領域に書き込む、請求項14記載の方法。
【請求項19】
前記第2のデータの読出し要求に応じて、前記第1のデータと同じ記録単位に含めて前記通常の記録領域に書き込まれた当該第2のデータを読み出す、請求項14記載の方法。
【請求項20】
テープ媒体へのデータの書込みを制御するためのコンピュータプログラムであって、コンピュータに、
バッファに蓄積された第1のデータの前記テープ媒体上の一時記録領域への書込みを制御する機能と、
前記第1のデータを前記テープ媒体上の通常の記録領域に書き込む際に第2のデータを受け取ると、当該第2のデータが当該第1のデータと同じ記録単位として当該通常の記録領域に書き込まれるよう制御する機能と
を実現させるためのコンピュータプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate


【公開番号】特開2007−73108(P2007−73108A)
【公開日】平成19年3月22日(2007.3.22)
【国際特許分類】
【出願番号】特願2005−257388(P2005−257388)
【出願日】平成17年9月6日(2005.9.6)
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレーション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION
【復代理人】
【識別番号】100104880
【弁理士】
【氏名又は名称】古部 次郎
【復代理人】
【識別番号】100118201
【弁理士】
【氏名又は名称】千田 武
【復代理人】
【識別番号】100118108
【弁理士】
【氏名又は名称】久保 洋之
【Fターム(参考)】