(57)【特許請求の範囲】
【請求項１】
上位装置から送られたデータをバッファに蓄積し、当該上位装置から送られたコマンドに応じて、当該バッファに蓄積された当該データをテープ媒体上の通常記録領域にバックヒッチを伴わずに書き込む第１の動作、及び、当該バッファに蓄積された当該データを当該テープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、当該一時記録領域に書き込まれた当該データを含むデータ群であって各データ間のギャップを削減したデータ群を通常記録領域に書き込む第２の動作の何れかを選択的に行う装置において、
前記コマンドに応じて前記第１の動作及び前記第２の動作の何れかが行われたことにより第１のデータが前記通常記録領域に書き込まれた際に、当該第１のデータの容量である第１の容量を取得する取得部と、
前記第１のデータが前記通常記録領域に書き込まれた後に送られる前記コマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測する予測部と、
前記取得部により取得された前記第１の容量が第１の閾値を超えているかどうか、及び、前記予測部により予測された前記第２の容量が当該第１の閾値よりも小さい第２の閾値を超えているかどうかを判定する判定部と、
前記判定部により前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていると判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第１の動作が行われるように制御し、前記判定部により前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていないと判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第２の動作が行われるように制御する制御部と
を含む、装置。
【請求項２】
前記制御部は、前記判定部により前記第１の容量が前記第１の閾値を超えていないと判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第２の動作が行われるように制御する、請求項１の装置。
【請求項３】
前記判定部は、前記予測部により予測された前記第２の容量が前記第２の閾値よりも大きい第３の閾値を超えているかどうかを更に判定し、
前記制御部は、前記判定部により前記第２の容量が前記第３の閾値を超えていると判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第１の動作が行われるように制御する、請求項１又は請求項２の装置。
【請求項４】
上位装置から送られたデータをバッファに蓄積し、当該上位装置から送られたコマンドに応じて、当該バッファに蓄積された当該データをテープ媒体上の通常記録領域にバックヒッチを伴わずに書き込む第１の動作、及び、当該バッファに蓄積された当該データを当該テープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、当該一時記録領域に書き込まれた当該データを含むデータ群であって各データ間のギャップを削減したデータ群を通常記録領域に書き込む第２の動作の何れかを選択的に行う装置において、
前記コマンドに応じて前記第１の動作及び前記第２の動作の何れかが行われたことにより第１のデータが前記通常記録領域に書き込まれた際に、当該第１のデータの容量である第１の容量を取得する取得部と、
前記第１のデータが前記通常記録領域に書き込まれた後に送られる前記コマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測する予測部と、
前記取得部により取得された前記第１の容量が第１の閾値を超えているかどうか、前記予測部により予測された前記第２の容量が当該第１の閾値を超えているかどうか、及び、前記予測部により予測された前記第２の容量が当該第１の閾値よりも小さい第２の閾値を超えているかどうかを判定する判定部と、
前記判定部により前記第２の容量が前記第１の閾値を超えていると判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第１の動作が行われるように制御し、
前記判定部により前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第１の閾値を超えておらず前記第２の閾値を超えていると判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第１の動作が行われるように制御し、
前記判定部により前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていないと判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第２の動作が行われるように制御し、
前記判定部により前記第１の容量が前記第１の閾値を超えておらず前記第２の容量が前記第１の閾値を超えていないと判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第２の動作が行われるように制御する制御部と
を含む、装置。
【請求項５】
上位装置から送られたデータをバッファに蓄積し、当該上位装置から送られたコマンドに応じて、当該バッファに蓄積された当該データをテープ媒体に書き込む装置における、当該データを書き込む方法であって、
前記コマンドに応じて、前記バッファに蓄積された第１のデータを前記テープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、当該一時記録領域に書き込まれた当該第１のデータを含むデータ群であって各データ間のギャップを削減したデータ群である第１のデータ群を当該テープ媒体上の通常記録領域に書き込むステップと、
前記第１のデータ群が前記通常記録領域に書き込まれた際に、当該第１のデータ群の総容量である第１の容量を取得するステップと、
前記第１のデータ群が前記通常記録領域に書き込まれた後に送られる前記コマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測するステップと、
取得された前記第１の容量が第１の閾値を超えているかどうかを判定するステップと、
予測された前記第２の容量が前記第１の閾値よりも小さい第２の閾値を超えているかどうかを判定するステップと、
前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていると判定された場合に、前記第１のデータ群が前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータを当該通常記録領域にバックヒッチを伴わずに書き込むステップと、
前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていないと判定された場合に、前記第１のデータ群が前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータを前記一時記録領域にバックヒッチを伴わずに書き込んだ後、当該一時記録領域に書き込まれた当該第２のデータを含むデータ群であって各データ間のギャップを削減したデータ群である第２のデータ群を当該通常記録領域に書き込むステップと
を含む、方法。
【請求項６】
前記第２のデータが前記通常記録領域に書き込まれた際に、前記第２の容量を取得するステップと、
前記第２のデータが前記通常記録領域に書き込まれた後に送られる前記コマンドに応じて書き込まれる第３のデータの容量である第３の容量を予測するステップと、
取得された前記第２の容量が前記第１の閾値を超えているかどうかを判定するステップと、
予測された前記第３の容量が前記第２の閾値を超えているかどうかを判定するステップと、
前記第２の容量が前記第１の閾値を超えており前記第３の容量が前記第２の閾値を超えていると判定された場合に、前記第２のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第３のデータを当該通常記録領域にバックヒッチを伴わずに書き込むステップと、
前記第２の容量が前記第１の閾値を超えており前記第３の容量が前記第２の閾値を超えていないと判定された場合に、前記第２のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第３のデータを前記一時記録領域に記録した後、当該一時記録領域に記録された当該第３のデータを含むデータ群であって各データ間のギャップを削減したデータ群である第３のデータ群を当該通常記録領域に書き込むステップとを更に含む、請求項５の方法。
【請求項７】
前記第１の容量が前記第１の閾値を超えていないと判定された場合に、前記第１のデータ群が前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータを前記一時記録領域にバックヒッチを伴わずに書き込んだ後、前記第２のデータ群を当該通常記録領域に書き込むステップを更に含む、請求項５又は請求項６の方法。
【請求項８】
予測された前記第２の容量が、前記第２の閾値よりも大きい第３の閾値を超えているかどうかを判定するステップと、
前記第２の容量が前記第３の閾値を超えていると判定された場合に、前記第１のデータ群が前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータを当該通常記録領域にバックヒッチを伴わずに書き込むステップと
を更に含む、請求項５乃至請求項７の何れかの方法。
【請求項９】
上位装置から送られたデータをバッファに蓄積し、当該上位装置から送られたコマンドに応じて、当該バッファに蓄積された当該データをテープ媒体上の通常記録領域にバックヒッチを伴わずに書き込む第１の動作、及び、当該バッファに蓄積された当該データを当該テープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、当該一時記録領域に書き込まれた当該データを含むデータ群であって各データ間のギャップを削減したデータ群を通常記録領域に書き込む第２の動作の何れかを選択的に行うコンピュータにおけるプログラムであって、
前記コンピュータを、
前記コマンドに応じて前記第１の動作及び前記第２の動作の何れかが行われたことにより第１のデータが前記通常記録領域に書き込まれた際に、当該第１のデータの容量である第１の容量を取得する取得部と、
前記第１のデータが前記通常記録領域に書き込まれた後に送られる前記コマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測する予測部と、
前記取得部により取得された前記第１の容量が第１の閾値を超えているかどうか、及び、前記予測部により予測された前記第２の容量が当該第１の閾値よりも小さい第２の閾値を超えているかどうかを判定する判定部と、
前記判定部により前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていると判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第１の動作が行われるように制御し、前記判定部により前記第１の容量が前記第１の閾値を超えており前記第２の容量が前記第２の閾値を超えていないと判定された場合に、前記第１のデータが前記通常記録領域に書き込まれた後に送られた前記コマンドに応じて、前記第２のデータについて前記第２の動作が行われるように制御する制御部と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを書き込む装置及び方法に関する。特に、本発明は、上位装置から送られたデータをバッファに蓄積し、上位装置から送られたコマンドに応じて、バッファに蓄積されたデータをテープ媒体に書き込む装置、及び、その装置におけるデータを書き込む方法に関する。
【背景技術】
【０００２】
磁気テープ等のテープ媒体にデータを書き込むテープドライブでは、データを一旦バッファに蓄積しておき、ドライブの都合の良いタイミングでバッファからテープ媒体へデータを書き込むのが一般的である。ホストは、ドライブに送ったデータが全てテープ媒体上に書き出されていることを保証するため、強制的にデータを書き込むためのコマンド（ＷｒｉｔｅＦＭ  Ｎｏｎ  Ｉｍｍｅｄｉａｔｅコマンド）をドライブに送る。このようなバッファからテープ媒体への強制書込みを「同期」という。
ところで、同期が発生した後にテープ媒体を停止させないと、テープ媒体上で、先行する同期にて書き込まれたデータと次に書き込まれたデータとの間にギャップが生じる。その結果、テープ媒体の記録領域が無駄になってしまう。そのため、バックヒッチを行う必要がある。バックヒッチとは、テープ媒体の走行速度を減速して一旦停止し、逆方向に走行し、その後、再度元の方向に走行して書き込むべき位置に達して次のデータを書く、という一連の動作のことである。次のデータは、このバックヒッチが完了するまで書き込むことができない。バックヒッチには約２〜３秒程度の時間を要するため、バックヒッチの発生は、パフォーマンスに大きな影響を与える。
【０００３】
そこで、かかる状況を回避するための技術として、ＲＡＢＦ（Recursive Accumulating Backhitchless Flush）が提案されている（例えば、特許文献１参照）。
この特許文献１からも分かるように、ＲＡＢＦとは、テープドライブが、トランザクション（同期の間に書き込まれるデータ）を、バックヒッチを行うことなく磁気テープに書き込み、その際、トランザクションをバッファに蓄積し、その後で、蓄積したトランザクションをバッファから磁気テープに反復的に順次書き込む手法である。ＲＡＢＦでは、蓄積したトランザクションを磁気テープに反復的に書き込むときにしかバックヒッチが行われないので、反復的に書き込むトランザクションを先行するデータに続けて配置することができ、性能及び容量が最大になる。
【０００４】
但し、ＲＡＢＦは、トランザクションサイズ（同期の間に書き込まれるデータの量）が小さい場合に同期パフォーマンスを向上させる手法である。トランザクションサイズが一定以上になると、一時的にデータを違う場所に書いてそれを反復的に書き込む作業のオーバーヘッドの方が大きくなる。
【０００５】
そこで、トランザクションサイズが大きい場合に同期パフォーマンスを向上させる技術として、ＳＷＢＦ（Same Wrap Backhitchless Flush）が提案されている（例えば、特許文献２参照）。
この特許文献２からも分かるように、ＳＷＢＦとは、テープ媒体の公称の記憶容量に悪影響を行えることなく、テープ媒体の停止や反対方向への移動がないバックヒッチなしの書き込みを行う手法である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第６８５６４７９号明細書
【特許文献２】米国特許第７９０３３６３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
このように、特許文献１のＲＡＢＦはトランザクションサイズが小さい場合に有効な技術であり、特許文献２のＳＷＢＦはトランザクションサイズが大きい場合に有効な技術である。従って、トランザクションサイズが閾値を超えなければＲＡＢＦを起動し、トランザクションサイズが閾値を超えればＳＷＢＦを実行することは考えられる。
しかしながら、トランザクションサイズが、ＲＡＢＦが有効なサイズであったとしても、その中で比較的大きいサイズである場合には、一時的にデータを違う場所に書いてそれを本来書くべき場所に書き直す作業の回数（ＲＡＢＦサイクルの数）が多くなり、この作業のオーバーヘッドによってパフォーマンスが低下する。こうしたことから、ＲＡＢＦサイクルの数を減少させることによってパフォーマンスを向上する手法が求められていた。
【０００８】
本発明の目的は、データをテープ媒体に書き込む際に、ＲＡＢＦサイクルの数を減少させることによってパフォーマンスを向上することにある。
【課題を解決するための手段】
【０００９】
かかる目的のもと、本発明は、上位装置から送られたデータをバッファに蓄積し、上位装置から送られたコマンドに応じて、バッファに蓄積されたデータをテープ媒体上の通常記録領域にバックヒッチを伴わずに書き込む第１の動作、及び、バッファに蓄積されたデータをテープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、一時記録領域に書き込まれたデータを含むデータ群であって各データ間のギャップを削減したデータ群を通常記録領域に書き込む第２の動作の何れかを選択的に行う装置において、コマンドに応じて第１の動作及び第２の動作の何れかが行われたことにより第１のデータが通常記録領域に書き込まれた際に、第１のデータの容量である第１の容量を取得する取得部と、第１のデータが通常記録領域に書き込まれた後に送られるコマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測する予測部と、取得部により取得された第１の容量が第１の閾値を超えているかどうか、及び、予測部により予測された第２の容量が第２の閾値を超えているかどうかを判定する判定部と、判定部により第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていると判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第１の動作が行われるように制御し、判定部により第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていないと判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第２の動作が行われるように制御する制御部とを含む、装置を提供する。
【００１０】
ここで、この装置において、制御部は、判定部により第１の容量が第１の閾値を超えていないと判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第２の動作が行われるように制御する、ものであってよい。
また、この装置において、判定部は、予測部により予測された第２の容量が第２の閾値よりも大きい第３の閾値を超えているかどうかを更に判定し、制御部は、判定部により第２の容量が第３の閾値を超えていると判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第１の動作が行われるように制御する、ものであってよい。
【００１１】
また、本発明は、上位装置から送られたデータをバッファに蓄積し、上位装置から送られたコマンドに応じて、バッファに蓄積されたデータをテープ媒体上の通常記録領域にバックヒッチを伴わずに書き込む第１の動作、及び、バッファに蓄積されたデータをテープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、一時記録領域に書き込まれたデータを含むデータ群であって各データ間のギャップを削減したデータ群を通常記録領域に書き込む第２の動作の何れかを選択的に行う装置において、コマンドに応じて第１の動作及び第２の動作の何れかが行われたことにより第１のデータが通常記録領域に書き込まれた際に、第１のデータの容量である第１の容量を取得する取得部と、第１のデータが通常記録領域に書き込まれた後に送られるコマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測する予測部と、取得部により取得された第１の容量が第１の閾値を超えているかどうか、予測部により予測された第２の容量が第１の閾値を超えているかどうか、及び、予測部により予測された第２の容量が第１の閾値よりも小さい第２の閾値を超えているかどうかを判定する判定部と、判定部により第２の容量が第１の閾値を超えていると判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第１の動作が行われるように制御し、判定部により第１の容量が第１の閾値を超えており第２の容量が第１の閾値を超えておらず第２の閾値を超えていると判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第１の動作が行われるように制御し、判定部により第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていないと判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第２の動作が行われるように制御し、判定部により第１の容量が第１の閾値を超えておらず第２の容量が第１の閾値を超えていないと判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第２の動作が行われるように制御する制御部とを含む、装置も提供する。
【００１２】
また、本発明は、上位装置から送られたデータをバッファに蓄積し、上位装置から送られたコマンドに応じて、バッファに蓄積されたデータをテープ媒体に書き込む装置における、データを書き込む方法であって、コマンドに応じて、バッファに蓄積された第１のデータをテープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、一時記録領域に書き込まれた第１のデータを含むデータ群であって各データ間のギャップを削減したデータ群である第１のデータ群をテープ媒体上の通常記録領域に書き込むステップと、第１のデータ群が通常記録領域に書き込まれた際に、第１のデータ群の総容量である第１の容量を取得するステップと、第１のデータ群が通常記録領域に書き込まれた後に送られるコマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測するステップと、取得された第１の容量が第１の閾値を超えているかどうかを判定するステップと、予測された第２の容量が第２の閾値を超えているかどうかを判定するステップと、第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていると判定された場合に、第１のデータ群が通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータを通常記録領域にバックヒッチを伴わずに書き込むステップと、第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていないと判定された場合に、第１のデータ群が通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータを一時記録領域にバックヒッチを伴わずに書き込んだ後、一時記録領域に書き込まれた第２のデータを含むデータ群であって各データ間のギャップを削減したデータ群である第２のデータ群を通常記録領域に書き込むステップとを含む、方法も提供する。
【００１３】
ここで、この方法は、第２のデータが通常記録領域に書き込まれた際に、第２の容量を取得するステップと、第２のデータが通常記録領域に書き込まれた後に送られるコマンドに応じて書き込まれる第３のデータの容量である第３の容量を予測するステップと、取得された第２の容量が第１の閾値を超えているかどうかを判定するステップと、予測された第３の容量が第２の閾値を超えているかどうかを判定するステップと、第２の容量が第１の閾値を超えており第３の容量が第２の閾値を超えていると判定された場合に、第２のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第３のデータを通常記録領域にバックヒッチを伴わずに書き込むステップと、第２の容量が第１の閾値を超えており第３の容量が第２の閾値を超えていないと判定された場合に、第２のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第３のデータを一時記録領域に記録した後、一時記録領域に記録された第３のデータを含むデータ群であって各データ間のギャップを削減したデータ群である第３のデータ群を通常記録領域に書き込むステップとを更に含む、ものであってよい。
【００１４】
更にまた、本発明は、上位装置から送られたデータをバッファに蓄積し、上位装置から送られたコマンドに応じて、バッファに蓄積されたデータをテープ媒体上の通常記録領域にバックヒッチを伴わずに書き込む第１の動作、及び、バッファに蓄積されたデータをテープ媒体上の一時記録領域にバックヒッチを伴わずに書き込んだ後、一時記録領域に書き込まれたデータを含むデータ群であって各データ間のギャップを削減したデータ群を通常記録領域に書き込む第２の動作の何れかを選択的に行うコンピュータにおけるプログラムであって、コンピュータを、コマンドに応じて第１の動作及び第２の動作の何れかが行われたことにより第１のデータが通常記録領域に書き込まれた際に、第１のデータの容量である第１の容量を取得する取得部と、第１のデータが通常記録領域に書き込まれた後に送られるコマンドに応じて書き込まれる第２のデータの容量である第２の容量を予測する予測部と、取得部により取得された第１の容量が第１の閾値を超えているかどうか、及び、予測部により予測された第２の容量が第２の閾値を超えているかどうかを判定する判定部と、判定部により第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていると判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第１の動作が行われるように制御し、判定部により第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていないと判定された場合に、第１のデータが通常記録領域に書き込まれた後に送られたコマンドに応じて、第２のデータについて第２の動作が行われるように制御する制御部として機能させる、プログラムも提供する。
【発明の効果】
【００１５】
本発明によれば、データをテープ媒体に書き込む際に、ＲＡＢＦサイクルの数を減少させることによってパフォーマンスを向上することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態が適用されるテープドライブの構成を示したブロック図である。
【図２】一般的なＲＡＢＦの動きを模式的に示した図である。
【図３】本発明の実施の形態における手法の動きを模式的に示した図である。
【図４】本発明の実施の形態におけるコントローラの機能構成例を示したブロック図である。
【図５】本発明の実施の形態のコントローラにおける各サイズ収集時の動作例を示したフローチャートである。
【図６】本発明の実施の形態のコントローラにおける動作決定時の動作例を示したフローチャートである。
【発明を実施するための形態】
【００１７】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
図１は、本実施の形態が適用されるテープドライブ１０の構成例を示した図である。このテープドライブ１０は、ホストインターフェイス（以下、「ホストＩ／Ｆ」という）１１と、バッファ１２と、チャネル１３と、ヘッド１４と、モータ１５とを含む。また、コントローラ１６と、ヘッド位置制御システム１７と、モータドライバ１８とを含む。更に、テープドライブ１０には、テープカートリッジ２０が挿入されることにより装填可能となっているので、ここでは、テープカートリッジ２０も図示している。このテープカートリッジ２０は、リール２１、２２に巻かれたテープ２３を含む。テープ２３は、リール２１、２２の回転に伴い、リール２１からリール２２の方向へ、又は、リール２２からリール２１の方向へ、長手方向に移動する。尚、テープ２３としては、磁気テープが例示されるが、磁気テープ以外のテープ媒体でもよい。
【００１８】
ここで、ホストＩ／Ｆ１１は、上位装置の一例であるホスト３０との通信を行う。例えば、ホスト３０から、テープ２３へのデータの書込みを指示するコマンド、テープ２３を目的の位置に移動させるコマンド、テープ２３からのデータの読出しを指示するコマンドを受け取る。尚、このホストＩ／Ｆ１１で用いる通信規格としては、ＳＣＳＩが例示される。ＳＣＳＩの場合、１つ目のコマンドは、Ｗｒｉｔｅコマンドに相当し、２つ目のコマンドは、ＬｏｃａｔｅコマンドやＳｐａｃｅコマンドに相当し、３つ目のコマンドは、Ｒｅａｄコマンドに相当する。また、ホストＩ／Ｆ１１は、ホスト３０に対し、これらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【００１９】
バッファ１２は、テープ２３に書き込むべきデータやテープ２３から読み出されたデータを蓄積するメモリである。例えば、ＤＲＡＭ（Dynamic Random Access Memory）によって構成される。また、バッファ１２は、複数のバッファセグメントからなり、各バッファセグメントが、テープ２３に対する読み書きの単位であるデータセットを格納している。
チャネル１３は、テープ２３に書き込むべきデータをヘッド１４に送ったり、テープ２３から読み出されたデータをヘッド１４から受け取ったりするために用いられる通信経路である。
ヘッド１４は、テープ２３が長手方向に移動するとき、テープ２３に対して情報を書き込んだり、テープ２３から情報を読み出したりする。
モータ１５は、リール２１、２２を回転させる。尚、図では、１つの矩形でモータ１５を表しているが、モータ１５としては、リール２１、２２の各々に１つずつ、合計２個設けるのが好ましい。
【００２０】
一方、コントローラ１６は、テープドライブ１０の全体を制御する。例えば、ホストＩ／Ｆ１１で受け付けたコマンドに従って、データのテープ２３への書込みやテープ２３からの読出しを制御する。また、ヘッド位置制御システム１７やモータドライバ１８の制御も行う。
ヘッド位置制御システム１７は、所望の１つ又は複数のラップを追跡するシステムである。ここで、ラップとは、テープ２３上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド１４を電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム１７で行う。
モータドライバ１８は、モータ１５を駆動する。尚、上述したように、モータ１５を２個使用する場合であれば、モータドライバ１８も２個設けられる。
【００２１】
かかる構成を有するテープドライブ１０において、トランザクションサイズが閾値を超えていなければＲＡＢＦを起動し、トランザクションサイズが閾値を超えていればＳＷＢＦを起動する場合を考える。この場合、トランザクションサイズが閾値を超えた辺りから、ＳＷＢＦに切り替わることによりパフォーマンスは著しく向上する。しかしながら、ＲＡＢＦからＳＷＢＦに切り替わるときのトランザクションサイズの近傍では、パフォーマンスを向上するための改善の余地があった。
そこで、本実施の形態では、トランザクションサイズが、ＲＡＢＦが起動されるときのサイズの中で比較的大きなものである場合に、ＲＡＢＦにおける本来書くべき場所でのバックヒッチの発生頻度を減らすことにより、パフォーマンスを向上する手法を提案する。
【００２２】
このように、本実施の形態はＲＡＢＦを改良したものであるので、まず、一般的なＲＡＢＦの動きについて説明する。
図２は、一般的なＲＡＢＦの動きを模式的に示した図である。尚、ここでは、同期の間に書き込まれるデータ（１回のトランザクション分のデータ）を矩形で表し、ｉ番目のデータを「Ｄ＃ｉ」と表記している。
図では、通常記録領域の一例である通常ラップ２０１にデータ「Ｄ＃Ｎ」を書き込んだ後、次のデータ「Ｄ＃Ｎ＋１」のサイズ（トランザクションサイズ）が閾値以下だったため、一時記録領域の一例であるＡＢＦラップ２０２にデータ「Ｄ＃Ｎ＋１」、「Ｄ＃Ｎ＋２」、「Ｄ＃Ｎ＋３」、「Ｄ＃Ｎ＋４」、・・・、「Ｄ＃Ｍ」を書き込んでいる。このとき、データ「Ｄ＃Ｎ＋１」、「Ｄ＃Ｎ＋２」、「Ｄ＃Ｎ＋３」、「Ｄ＃Ｎ＋４」、・・・、「Ｄ＃Ｍ」はバックヒッチなしで書き込まれるので、各データ間にはギャップが生じる。その後、一定の条件が満たされた場合に、ＡＢＦラップ２０２に書き込まれたデータを、ギャップを削減して（理想的にはギャップなしで）再帰的書込み（Recursive Write）データ２０３として通常ラップ２０１に書き込んでいる。
【００２３】
尚、この一定の条件には、次のような条件がある。
第１の条件は、バッファ１２に空き容量がなくなったという条件である。ＡＢＦラップ２０２に書き込まれるデータは通常ラップ２０１への再帰的書込みのためにバッファ１２に蓄積する必要があることから、このような条件が採用される。
第２の条件は、ＡＢＦラップ２０２にデータを書き込める領域がなくなったという条件である。
第３の条件は、ＡＢＦラップ２０２で書込みエラーが発生するという条件である。
第４の条件は、書込み処理そのものが終了し、例えばテープ２３の排出要求（Ｕｎｌｏａｄコマンド）を受け付けたという条件である。
一般的に、トランザクションサイズが比較的大きいデータを処理する場合には、第１の条件が満たされることで再帰的書込みが行われ、トランザクションサイズが比較的小さいデータを処理する場合には、第２の条件が満たされることで再帰的書込みが行われる。
【００２４】
このようにして再帰的書込みデータ２０３の書込みが終わると、この一般的なＲＡＢＦの場合、次のデータを、矢印２０４で示すように、再度ＡＢＦラップ２０２に書き込む。
【００２５】
次に、本実施の形態における手法の動きについて説明する。
図３は、本実施の形態における手法の動きを模式的に示した図である。尚、ここでも、同期の間に書き込まれるデータ（１回のトランザクション分のデータ）を矩形で表し、ｉ番目のデータを「Ｄ＃ｉ」と表記している。
図において、再帰的書込みデータ２０３を書き込むところまでは、図２と同様である。しかしながら、本実施の形態では、再帰的書込みデータ２０３の書込みが終わると、再帰的書込みデータ２０３の容量、及び、次のデータ「Ｄ＃Ｍ＋１」の予想されるトランザクションサイズによっては、次のデータ「Ｄ＃Ｍ＋１」をバックヒッチなしで通常ラップ２０１に書くＳＷＢＦに類似の動作を行う。そして、その次のデータからは、矢印２０５で示すように、図２と同様、ＡＢＦラップ２０２に書き込む。
【００２６】
このように、本実施の形態では、複数のＲＡＢＦサイクルごとに、１回のトランザクション分のデータをＡＢＦラップ２０２に書き込まなくなる。これにより、ＲＡＢＦサイクルの数が減少し、パフォーマンスが向上する。
また、本実施の形態では、ＳＷＢＦを起動するには少し小さなトランザクションサイズのデータをテープ２３に書き込む場合に、再帰的書き込みというまとめ書きの作業を１回のトランザクションとみなし、このまとめ書きの作業の後に限り、バックヒッチをスキップするようにした。これにより、不必要にバックヒッチがスキップされてテープ２３上の容量が低下することを防ぐことができる。
【００２７】
尚、図３において、データ「Ｄ＃Ｎ＋１」、「Ｄ＃Ｎ＋２」、「Ｄ＃Ｎ＋３」、「Ｄ＃Ｎ＋４」、・・・、「Ｄ＃Ｍ」は何れも第１のデータの一例であり、これらのデータを含む再帰的書込みデータ２０３は第１のデータ群の一例である。また、データ「Ｄ＃Ｍ＋１」は第２のデータの一例であり、仮にデータ「Ｄ＃Ｍ＋１」が再帰的書込みデータ２０３の容量及びデータ「Ｄ＃Ｍ＋１」のトランザクションサイズによってＡＢＦラップ２０２に書き込まれたとすると、その後に通常ラップ２０１に書き込まれるデータ「Ｄ＃Ｍ＋１」を含む再帰的書込みデータが第２のデータ群の一例である。更に、データ「Ｄ＃Ｍ＋１」が通常ラップ２０１に書き込まれた後にデータ「Ｄ＃Ｍ＋２」が書き込まれるとすると、このデータ「Ｄ＃Ｍ＋２」が第３のデータの一例であり、データ「Ｄ＃Ｍ＋２」がデータ「Ｄ＃Ｍ＋１」のトランザクションサイズによってＡＢＦラップ２０２に書き込まれたとすると、その後に通常ラップ２０１に書き込まれるデータ「Ｄ＃Ｍ＋２」を含む再帰的書込みデータが第３のデータ群の一例である。
【００２８】
次に、このような動作を実現するためのコントローラ１６の機能構成について説明する。
図４は、コントローラ１６の機能構成例を示したブロック図である。
図示するように、コントローラ１６は、コマンド処理部４１と、バッファ管理部４２と、チャネル入出力部４３とを備える。また、トランザクションサイズ取得部４４と、トランザクションサイズ記憶部４５と、書込みデータサイズ取得部４６と、書込みデータサイズ記憶部４７とを備える。更に、トランザクションサイズ予測部４８と、動作決定部４９と、動作信号出力部４０とを備える。
【００２９】
このうち、コマンド処理部４１は、ホストＩ／Ｆ１１からコマンドを受け取る。ここで、コマンドとしては、バッファ１２にデータを格納することを指示するＷｒｉｔｅコマンド、バッファ１２に格納されたデータをテープ２３に書き込む同期コマンド（ＷｒｉｔｅＦＭコマンド等）がある。
バッファ管理部４２は、コマンド処理部４１がＷｒｉｔｅコマンドを受け取った場合は、データをバッファ１２内に用意する。また、コマンド処理部４１が同期コマンドを受け取った場合は、データをバッファ１２から読み出してチャネル入出力部４３に出力する。
【００３０】
チャネル入出力部４３は、バッファ管理部４２がバッファ１２から読み出したデータをチャネル１３に出力したり、チャネル１３から受け取ったデータをバッファ１２に格納したりする。また、テープ２３にデータセットを書き込む都度、データセットに関する判定を行い、その判定結果に基づいて、トランザクションサイズ取得部４４に対するトランザクションサイズの取得の開始若しくは終了の指示、又は、書込みデータサイズ取得部４６に対する書込みデータサイズの取得の開始若しくは終了の指示を行う。
【００３１】
トランザクションサイズ取得部４４は、同期コマンドに応じてテープ２３にデータが書き込まれる都度、前回の同期コマンドに応じた書込み時又は最初の書込み時から今回の同期コマンドに応じた書込み時までに書き込まれたデータのサイズ（トランザクションサイズ）を取得する。
トランザクションサイズ記憶部４５は、トランザクションサイズ取得部４４が取得したトランザクションサイズを時系列に記憶する。
【００３２】
書込みデータサイズ取得部４６は、同期コマンドに応じてテープ２３にデータが書き込まれる都度、前回の同期コマンドに応じた書込み時若しくは最初の書込み時から今回の同期コマンドに応じた書込み時までに書き込まれたデータのサイズ、又は、再帰的書込みで書き込まれたデータのサイズを取得する。ここでは、これらの書き込まれたデータのサイズを総称して、「書込みデータサイズ」と呼ぶものとする。本実施の形態では、第１のデータの一例として、これらの書き込まれたデータを用いており、第１のデータの容量である第１の容量の一例として、書込みデータサイズを用いている。また、第１の容量を取得する取得部の一例として、書込みデータサイズ取得部４６を設けている。
書込みデータサイズ記憶部４７は、書込みデータサイズ取得部４６が取得した書込みデータサイズを記憶する。
【００３３】
トランザクションサイズ予測部４８は、トランザクションサイズ記憶部４５に記憶されたトランザクションサイズの履歴に基づいて、次の同期コマンドに応じてテープ２３に書き込まれるデータのサイズ（トランザクションサイズ）を予測する。本実施の形態では、第２のデータの一例として、次の同期コマンドに応じてテープ２３に書き込まれるデータを用いており、第２のデータの容量である第２の容量の一例として、そのデータのトランザクションサイズを用いている。また、第２の容量を予測する予測部の一例として、トランザクションサイズ予測部４８を設けている。
【００３４】
動作決定部４９は、トランザクションサイズ予測部４８が予測したトランザクションサイズが閾値を超えているか、及び、書込みデータサイズ記憶部４７に記憶された書込みデータサイズが閾値を超えているかに基づいて、バックヒッチせずに通常ラップ２０１で次のデータを待つ動作、及び、ＡＢＦラップ２０２に移動して次のデータを待つ動作の何れを行うかを決定する。本実施の形態では、第１の容量が第１の閾値を超えているかどうか、第２の容量が第１の閾値を超えているかどうか、及び、第２の容量が第２の閾値を超えているかどうかを判定する判定部の一例として、動作決定部４９を設けている。
【００３５】
動作信号出力部４０は、ヘッド位置制御システム１７及びモータドライバ１８に対して、動作決定部４９で決定された動作を行うことを指示する信号を出力する。本実施の形態では、第１の動作の一例として、バックヒッチせずに通常ラップ２０１で次のデータを待つ動作を用いており、第２の動作の一例として、ＡＢＦラップ２０２に移動して次のデータを待つ動作を用いている。また、第２の容量が第１の閾値を超えていると判定された場合、及び、第１の容量が第１の閾値を超えており第２の容量が第１の閾値を超えておらず第２の閾値を超えていると判定された場合に、第２のデータについて第１の動作が行われるように制御し、第１の容量が第１の閾値を超えており第２の容量が第２の閾値を超えていないと判定された場合、及び、第１の容量が第１の閾値を超えておらず第２の容量が第１の閾値を超えていないと判定された場合に、第２のデータについて第２の動作が行われるように制御する制御部の一例として、動作信号出力部４０を設けている。
【００３６】
次に、コントローラ１６の動作について説明する。
図５は、コントローラ１６がトランザクションサイズ及び書込みデータサイズを採取するときの動作例を示したフローチャートである。このフローチャートにおいて、Ｔｘ＿Ｓｉｚｅはトランザクションサイズを表し、Ｄは書込みデータサイズを表す。尚、ＤＳは、は、テープ２３に書かれるデータの最小単位であるデータセットを表し、ファームウエアはデータセットの書込みが完了した時点でこのフローチャートを実行し、Ｔｘ＿Ｓｉｚｅ及びＤを取得する。
【００３７】
コントローラ１６では、まず、チャネル入出力部４３が、書き込んだデータセットが書き始めのデータセットであるかどうかを判定する（ステップ４０１）。ここで、書き始めのデータセットとは、テープ２３をマウントして全く初めて書き込んだデータセット、テープ２３からデータを読み込む動作を行った後に初めて書き込んだデータセット等である。
チャネル入出力部４３が、書き込んだデータセットが書き始めのデータセットであると判定すると、チャネル入出力部４３からのＴｘ＿Ｓｉｚｅの取得の開始指示により、トランザクションサイズ取得部４４が、Ｔｘ＿Ｓｉｚｅのモニタを開始する（ステップ４０５）。また、チャネル入出力部４３からのＤの取得の開始指示により、書込みデータサイズ取得部４６が、Ｄのモニタを開始する（ステップ４０６）。
【００３８】
また、チャネル入出力部４３は、書き込んだデータセットが書き始めのデータセットでないと判定すると、次に、書き込んだデータセットが同期を行った直後の書込みにおける最初のデータセットであるかどうかを判定する（ステップ４０２）。ここで、同期を行った直後の書込みにおける最初のデータセットとは、テープ２３にデータが継続して書き込まれているときの同期直後のデータセット等である。尚、同期コマンドが来なくてもテープ２３にデータが書き込まれることはあるので、この同期を行った直後の書込みは、同期コマンドによらない書込みも含む。
チャネル入出力部４３が、書き込んだデータセットが同期を行った直後の書込みにおける最初のデータセットであると判定すると、チャネル入出力部４３からのＴｘ＿Ｓｉｚｅの取得の開始指示により、トランザクションサイズ取得部４４が、Ｔｘ＿Ｓｉｚｅのモニタを開始する（ステップ４０５）。また、チャネル入出力部４３からのＤの取得の開始指示により、書込みデータサイズ取得部４６が、Ｄのモニタを開始する（ステップ４０６）。
【００３９】
更に、チャネル入出力部４３は、書き込んだデータセットが同期を行った直後の書込みにおける最初のデータセットでないと判定すると、次に、書き込んだデータセットが再帰的書込みにおける最初のデータセットであるかどうかを判定する（ステップ４０３）。ここで、現在の書込みが再帰的書込みであるかどうかは、図示しない記憶部に記憶されたＲＡＢＦのステータス情報に基づいて判断することができる。
チャネル入出力部４３が、書き込んだデータセットが再帰的書込みにおける最初のデータセットであると判定すると、チャネル入出力部４３からのＤの取得の開始指示により、書込みデータサイズ取得部４６が、Ｄ（この場合は、再帰的書込みデータのサイズ）のモニタを開始する（ステップ４０６）。
【００４０】
更にまた、チャネル入出力部４３は、書き込んだデータセットが再帰的書込みにおける最初のデータセットでないと判定すると、次に、書き込んだデータセットが同期完了時のデータセットであるかどうかを判定する（ステップ４０４）。
チャネル入出力部４３が、書き込んだデータセットが同期完了時のデータセットであると判定すると、チャネル入出力部４３からのＴｘ＿Ｓｉｚｅの取得の終了指示により、トランザクションサイズ取得部４４が、Ｔｘ＿Ｓｉｚｅのモニタを終了し、Ｔｘ＿Ｓｉｚｅをトランザクションサイズ記憶部４５に記憶する（ステップ４０７）。また、チャネル入出力部４３からのＤの取得の終了指示により、書込みデータサイズ取得部４６が、Ｄのモニタを終了し、Ｄを書込みデータサイズ記憶部４７に記憶する（ステップ４０８）。
【００４１】
図６は、コントローラ１６が次のデータを書き込む際の動作を決定するときの動作例を示したフローチャートである。このフローチャートにおいて、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿Ｔｘは次のデータの予想されるトランザクションサイズを表し、Ｄは書込みデータサイズを表す。また、Ｔｈｒｅｓｈｏｌｄ＿ＡはＳＷＢＦとＲＡＢＦとの間で切り替えを行うための閾値を表し、Ｔｈｒｅｓｈｏｌｄ＿ＢはＤの値が大きくても効果が小さいためＳＷＢＦを行わないことを決定するための閾値を表す。ここで、Ｔｈｒｅｓｈｏｌｄ＿Ａ及びＴｈｒｅｓｈｏｌｄ＿Ｂには、「Ｔｈｒｅｓｈｏｌｄ＿Ａ＞Ｔｈｒｅｓｈｏｌｄ＿Ｂ」の関係が成り立つような値を設定するものとする。例えば、Ｔｈｒｅｓｈｏｌｄ＿Ａを２００Ｂとし、Ｔｈｒｅｓｈｏｌｄ＿Ｂを２０ＭＢとするとよい。尚、コマンド処理部４１が同期コマンドを受信すると、バッファ管理部４２がバッファ１２に蓄積されたデータを読み出し、チャネル入出力部４３が同期を行う。そして、チャネル入出力部４３が同期の完了を検知した時点で、このフローチャートは実行される。
【００４２】
コントローラ１６では、まず、チャネル入出力部４３からの指示により、トランザクションサイズ予測部４８が、トランザクションサイズ記憶部４５に記憶された過去のＴｘ＿Ｓｉｚｅの履歴に基づいて、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿Ｔｘを予測する（ステップ４５１）。例えば、過去の幾つかのＴｘ＿Ｓｉｚｅの平均値を算出することにより、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿Ｔｘを予測すればよい。
次に、チャネル入出力部４３が、同期完了時にヘッド１４が位置付けられているラップが通常ラップ２０１であるかＡＢＦラップ２０２であるかを判定する（ステップ４５２）。
【００４３】
まず、チャネル入出力部４３が同期完了時にヘッド１４が位置付けられているラップが通常ラップ２０１であると判定した場合の処理について説明する。
この場合、動作決定部４９が、トランザクションサイズ予測部４８が予測したＮｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ａを超えているかどうかを判定する（ステップ４５３）。
【００４４】
その結果、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ａを超えていると判定されれば、動作決定部４９が、ＳＷＢＦの動作、つまり、即座にバックヒッチを行わずに通常ラップ２０１で次のデータの書込みの準備が整うのを待つ動作を決定し、動作決定部４９からの指示により、動作信号出力部４０が、ヘッド位置制御システム１７及びモータドライバ１８に対してその動作を指示する（ステップ４５６）。具体的には、ヘッド位置制御システム１７に対してラップを切り替えることを指示せず、モータドライバ１８に対してバックヒッチを行わずにそのままの速度でテープ２３を走行させることを指示する。
【００４５】
一方、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ａを超えていないと判定されれば、動作決定部４９は、書込みデータサイズ記憶部４７に記憶されたＤがＴｈｒｅｓｈｏｌｄ＿Ａを超えているかどうかを判定する（ステップ４５４）。
ここで、ＤがＴｈｒｅｓｈｏｌｄ＿Ａを超えていると判定されれば、トランザクションサイズ予測部４８が予測したＮｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ｂを超えているかどうかを判定する（ステップ４５５）。
【００４６】
そして、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ｂを超えていると判定されれば、動作決定部４９が、ＳＷＢＦの動作、つまり、即座にバックヒッチを行わずに通常ラップ２０１で次のデータの書込みの準備が整うのを待つ動作を決定し、動作決定部４９からの指示により、動作信号出力部４０が、ヘッド位置制御システム１７及びモータドライバ１８に対してその動作を指示する（ステップ４５６）。具体的には、ヘッド位置制御システム１７に対してラップを切り替えることを指示せず、モータドライバ１８に対してバックヒッチを行わずにそのままの速度でテープ２３を走行させることを指示する。
【００４７】
また、Ｎｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ｂを超えていないと判定されれば、動作決定部４９が、ＲＡＢＦの動作、つまり、ＡＢＦラップ２０２に移動して次のデータの書込みの準備が整うのを待つ動作を決定し、動作決定部４９からの指示により、動作信号出力部４０が、ヘッド位置制御システム１７及びモータドライバ１８に対してその動作を指示する（ステップ４５７）。具体的には、ヘッド位置制御システム１７に対してラップをＡＢＦラップ２０２に切り替えることを指示し、モータドライバ１８に対してバックヒッチを行わずにそのままの速度でテープ２３を走行させることを指示する。
【００４８】
一方、ステップ４５４でＤがＴｈｒｅｓｈｏｌｄ＿Ａを超えていないと判定されれば、動作決定部４９が、ＲＡＢＦの動作、つまり、ＡＢＦラップ２０２に移動して次のデータの書込みの準備が整うのを待つ動作を決定し、動作決定部４９からの指示により、動作信号出力部４０が、ヘッド位置制御システム１７及びモータドライバ１８に対してその動作を指示する（ステップ４５７）。具体的には、ヘッド位置制御システム１７に対してラップをＡＢＦラップ２０２に切り替えることを指示し、モータドライバ１８に対してバックヒッチを行わずにそのままの速度でテープ２３を走行させることを指示する。
【００４９】
次に、チャネル入出力部４３が同期完了時にヘッド１４が位置付けられているラップがＡＢＦラップ２０２であると判定した場合の処理について説明する。
この場合、動作決定部４９が、ＲＡＢＦの動作、つまり、ＡＢＦラップ２０２で次のデータの書込みの準備が整うのを待つ動作を決定し、動作決定部４９からの指示により、動作信号出力部４０が、ヘッド位置制御システム１７及びモータドライバ１８に対してその動作を指示する（ステップ４５８）。具体的には、ヘッド位置制御システム１７に対してラップを切り替えることを指示せず、モータドライバ１８に対してバックヒッチを行わずにそのままの速度でテープ２３を走行させることを指示する。
【００５０】
尚、この動作例では、ステップ４５３で用いる閾値及びステップ４５４で用いる閾値を、何れもＴｈｒｅｓｈｏｌｄ＿Ａとしたが、この限りではない。例えば、ステップ４５３で用いる閾値を、Ｔｈｒｅｓｈｏｌｄ＿Ａとは異なり、Ｔｈｒｅｓｈｏｌｄ＿Ｂよりも大きいＴｈｒｅｓｈｏｌｄ＿Ｃとしてもよい。この場合、Ｔｈｒｅｓｈｏｌｄ＿Ｃは、第３の閾値の一例である。
【００５１】
また、この動作例では、ステップ４５３でＮｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ａを超えていると判定された場合にはステップ４５６を実行し、ステップ４５３でＮｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ａを超えていないと判定された場合にのみステップ４５４以降を実行するようにしたが、これには限らない。例えば、ステップ４５３でＮｅｘｔ＿Ｅｓｔｉｍａｔｅｄ＿ＴｘがＴｈｒｅｓｈｏｌｄ＿Ａを超えているかどうかを判定することなく、無条件にステップ４５４以降を実行するようにしてもよい。
【００５２】
更に、この動作例では、ステップ４５４でＤがＴｈｒｅｓｈｏｌｄ＿Ａを超えていないと判定された場合には無条件でステップ４５７を実行するようにしたが、これもこの限りではない。例えば、何らかの条件が満たされた場合にのみステップ４５７へ進み、その条件が満たされない場合はステップ４５５へ進むようにしてもよい。
【００５３】
最後に、本実施の形態による効果について、具体的な数値を用いて説明する。
ここでは、Ｔｈｒｅｓｈｏｌｄ＿Ａを２００［ＭＢ］とし、Ｔｈｒｅｓｈｏｌｄ＿Ｂを２０［ＭＢ］とし、バッファ１２のサイズを８００［ＭＢ］とする。そして、１つ目のＡＢＦラップ２０２から２つ目のＡＢＦラップ２０２へのラップターン時間（テープ２３の走行方向の変更に要する時間）を１．５［ｓｅｃ］とし、ホスト３０からの転送レートを１００［ＭＢ／ｓｅｃ］とし、テープ２３に書き込むときの転送レートを１６０［ＭＢ／ｓｅｃ］とし、トランザクションサイズを１００［ＭＢ］とする。
【００５４】
また、説明を簡単にするために、次のような状況を仮定する。
第一に、テープ２３が走行している場合、テープドライブ１０はホスト３０からデータを受け取ると同時にそのデータをテープ２３に書き込むことができるものとする。よって、ＲＡＢＦ中のオーバーヘッドは、バックヒッチ及びラップターン、再帰的書込みの実行のみであるとする。１回のＲＡＢＦサイクルにおけるオーバーヘッドは、ラップターン時間の２倍に再帰的書込みの時間を加えた時間であるので、上記の数値を用いると、８［ｓｅｃ］（＝１．５［ｓｅｃ］×２＋８００［ＭＢ］／１６０［ＭＢ／ｓｅｃ］）となる。
第二に、再帰的書込みを行うための条件は、先に述べた第１の条件（バッファ１２に空き容量がなくなったという条件）のみであるとする。
【００５５】
このような前提の下、一般的なＲＡＢＦで１００００［ＭＢ］のデータを書き込んだ場合と、本実施の形態における手法で同じサイズのデータを書き込んだ場合とを比較する。
まず、一般的なＲＡＢＦでデータを書き込んだ場合について説明する。
一般的なＲＡＢＦで１００００［ＭＢ］のデータを書くのに必要なＲＡＢＦサイクルの数は、１２．５（＝１００００［ＭＢ］／８００［ＭＢ］）であり、全体のオーバーヘッドは、１００［ｓｅｃ］（＝８［ｓｅｃ］×１２．５）となる。従って、テープドライブ１０がテープ２３にデータを書き込んだときの実際の転送レートは、５０［ＭＢ／ｓｅｃ］（＝１００００［ＭＢ］／（１００００［ＭＢ］／１００［ＭＢ／ｓｅｃ］＋１００［ｓｅｃ］））となる。
【００５６】
次に、本実施の形態における手法でデータを書き込んだ場合について説明する。
本実施の形態における手法で１００００［ＭＢ］のデータを書くのに必要なＲＡＢＦサイクルの数は、１１．１（＝１００００［ＭＢ］／（８００［ＭＢ］＋１００［ＭＢ］））であり、全体のオーバーヘッドは、８８．８［ｓｅｃ］（＝８［ｓｅｃ］×１１．１）となり、１１．２［ｓｅｃ］の改善が見込まれる。そして、一般的なＲＡＢＦと同様の計算を行うと、テープドライブ１０がテープ２３にデータを書き込んだときの実際の転送レートは、約５３［ＭＢ／ｓｅｃ］（＝１００００［ＭＢ］／（１００００［ＭＢ］／１００［ＭＢ／ｓｅｃ］＋８８．８［ｓｅｃ］））となり、約３［ＭＢ／ｓｅｃ］の転送レートの改善が見られる。
【００５７】
このように、本実施の形態では、ＲＡＢＦで再帰的書込みが行われた後、再帰的書込みデータと次のデータの予想されるトランザクションサイズとによっては、次のデータをバックヒッチレスで通常ラップ２０１に書き込むようにした。これにより、ＲＡＢＦサイクルの数が減少するので、データを書き込む際のパフォーマンスが向上した。
また、本実施の形態では、トランザクションサイズが小さいデータが連続する場合には、再帰的書込みデータの容量と組み合わせた判断に基づき、必要以上にバックヒッチをスキップしないようにした。これにより、むやみにバックヒッチをスキップすることによりテープ２３上の容量を必要以上に減らしてしまうことが抑制された。
【００５８】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００５９】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００６０】
１０…テープドライブ、１１…ホストＩ／Ｆ、１２…バッファ、１３…チャネル、１４…ヘッド、１５…モータ、１６…コントローラ、１７…ヘッド位置制御システム、１８…モータドライバ、４０…動作信号出力部、４１…コマンド処理部、４２…バッファ管理部、４３…チャネル入出力部、４４…トランザクションサイズ取得部、４５…トランザクションサイズ記憶部、４６…書込みデータサイズ取得部、４７…書込みデータサイズ記憶部、４８…トランザクションサイズ予測部、４９…動作決定部
【図１】
0005764050.tif 000002
【図２】
0005764050.tif 000003
【図３】
0005764050.tif 000004
【図４】
0005764050.tif 000005
【図５】
0005764050.tif 000006
【図６】
0005764050.tif 000007