(57)【特許請求の範囲】
【請求項１】
上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおける当該テープ媒体の走行を制御する装置であって、
前記バッファに格納された第１のデータを前記テープ媒体に書き込んだ後、当該第１のデータの次の第２のデータを当該テープ媒体に書き込むのに先立ち、当該第２のデータが当該テープ媒体に書き込まれるまでに当該テープ媒体に書き込まれるデータの容量である第１の容量と、当該テープ媒体に最終的に公称の容量のデータが書き込まれるために当該テープ媒体上の現在位置までに書き込まれることが必要なデータの容量である第２の容量とを比較し、当該第１の容量が当該第２の容量よりも大きければ、バックヒッチを行わずに当該第２のデータを当該テープ媒体に書き込むと判定し、当該第１の容量が当該第２の容量よりも小さければ、バックヒッチを行ってから当該第２のデータを当該テープ媒体に書き込むと判定する判定部と、
前記判定部によりバックヒッチを行わずに前記第２のデータを前記テープ媒体に書き込むと判定された場合に、当該テープ媒体の速度を、前記上位装置から送られた所定サイズのデータを前記バッファに格納するのに要する時間よりも当該バッファに格納された当該所定サイズのデータを当該テープ媒体に書き込むのに要する時間が長くなるという条件を満たす特定の速度に変更する変更部と
を含む、装置。
【請求項２】
前記判定部は、前記第１のデータが前記テープ媒体に書き込まれるまでにバックヒッチを行わずにデータが書き込まれた回数である第１の回数と、バックヒッチを行わずにデータが書き込まれる回数として許容される予め設定された回数である第２の回数とを比較し、当該第１の回数が当該第２の回数よりも少なければ、バックヒッチを行わずに前記第２のデータを当該テープ媒体に書き込むと判定し、当該第１の回数が当該第２の回数よりも多ければ、バックヒッチを行ってから前記第２のデータを当該テープ媒体に書き込むと判定する、請求項１の装置。
【請求項３】
前記判定部は、前記第１のデータが前記テープ媒体に書き込まれるまでに発生したエラーの頻度である第１の頻度と、バックヒッチを行わずにデータを書き込む際に発生するエラーの頻度として許容される予め設定された頻度である第２の頻度とを比較し、当該第１の頻度が当該第２の頻度よりも低ければ、バックヒッチを行わずに前記第２のデータを当該テープ媒体に書き込むと判定し、当該第１の頻度が当該第２の頻度よりも高ければ、バックヒッチを行ってから前記第２のデータを当該テープ媒体に書き込むと判定する、請求項１の装置。
【請求項４】
前記判定部は、前記テープ媒体上の現在位置とバックヒッチを行わずにデータが書き込まれた直近の位置との間の当該テープ媒体の長さである第１の長さと、バックヒッチを行わずにデータが書き込まれる２つの位置の間の当該テープ媒体の長さとして許容される予め設定された最小の長さである第２の長さとを比較し、当該第１の長さが当該第２の長さよりも長ければ、バックヒッチを行わずに前記第２のデータを当該テープ媒体に書き込むと判定し、当該第１の長さが当該第２の長さよりも短ければ、バックヒッチを行ってから前記第２のデータを当該テープ媒体に書き込むと判定する、請求項１の装置。
【請求項５】
前記特定の速度は、前記テープ媒体の速度として予め用意された複数の速度のうち、前記条件を満たす最も速い速度である、請求項１の装置。
【請求項６】
過去の所定回数のデータの書込みと、各書込みを行ったときの前記テープ媒体の速度と、各書込みにおいてバックヒッチが発生したかどうかを示す情報とを対応付けて記憶する記憶部を更に備え、
前記特定の速度は、前記テープ媒体の速度として予め用意された複数の速度のうち、前記記憶部においてバックヒッチが発生していないことを示す情報に対応付けて記憶された前記テープ媒体の速度である、請求項１の装置。
【請求項７】
前記変更部は、バックヒッチを行った後、前記テープ媒体の速度を変更する、請求項１の装置。
【請求項８】
上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおける当該テープ媒体の走行を制御する装置であって、
前記バッファに格納された第１のデータを前記テープ媒体に書き込んだ後、当該第１のデータの次の第２のデータを当該テープ媒体に書き込むのに先立ち、当該第２のデータが当該テープ媒体に書き込まれるまでに当該テープ媒体に書き込まれるデータの容量である第１の容量と、当該テープ媒体に最終的に公称の容量のデータが書き込まれるために当該テープ媒体上の現在位置までに書き込まれることが必要なデータの容量である第２の容量とを比較し、当該第１の容量が当該第２の容量よりも大きければ、バックヒッチを行わずに当該第２のデータを当該テープ媒体に書き込むと判定し、当該第１の容量が当該第２の容量よりも小さければ、バックヒッチを行ってから当該第２のデータを当該テープ媒体に書き込むと判定する判定部と、
前記判定部によりバックヒッチを行わずに前記第２のデータを前記テープ媒体に書き込むと判定された場合に、当該テープ媒体の速度として予め用意された複数の速度のうち、前記上位装置から送られた所定サイズのデータを前記バッファに格納するのに要する時間よりも当該バッファに格納された当該所定サイズのデータを当該テープ媒体に書き込むのに要する時間が長くなるという条件を満たす最も速い速度である第１の速度を選択する第１の選択部と、
過去の所定回数のデータの書込みの何れかにおいて、前記第１の選択部により選択された前記第１の速度が用いられ、かつ、バックヒッチが発生している場合に、前記複数の速度のうち、当該第１の速度よりも遅い第２の速度を選択する第２の選択部と、
前記第２の選択部により選択された前記第２の速度が前記テープ媒体の現在の速度と異なる場合に、バックヒッチを行った後、当該テープ媒体の速度を当該第２の速度に変更する変更部と
を含む、装置。
【請求項９】
上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおける当該テープ媒体の走行を制御する方法であって、
前記バッファに格納された第１のデータを前記テープ媒体に書き込んだ後、当該第１のデータの次の第２のデータを当該テープ媒体に書き込むのに先立ち、当該第２のデータが当該テープ媒体に書き込まれるまでに当該テープ媒体に書き込まれるデータの容量である第１の容量と、当該テープ媒体に最終的に公称の容量のデータが書き込まれるために当該テープ媒体上の現在位置までに書き込まれることが必要なデータの容量である第２の容量とを比較し、当該第１の容量が当該第２の容量よりも大きければ、バックヒッチを行わずに当該第２のデータを当該テープ媒体に書き込むと判定し、当該第１の容量が当該第２の容量よりも小さければ、バックヒッチを行ってから当該第２のデータを当該テープ媒体に書き込むと判定するステップと、
バックヒッチを行わずに前記第２のデータを前記テープ媒体に書き込むと判定された場合に、当該テープ媒体の速度を、前記上位装置から送られた所定サイズのデータを前記バッファに格納するのに要する時間よりも当該バッファに格納された当該所定サイズのデータを当該テープ媒体に書き込むのに要する時間が長くなるという条件を満たす特定の速度に変更するステップと
を含む、方法。
【請求項１０】
上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおける当該テープ媒体の走行を制御する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
前記バッファに格納された第１のデータを前記テープ媒体に書き込んだ後、当該第１のデータの次の第２のデータを当該テープ媒体に書き込むのに先立ち、当該第２のデータが当該テープ媒体に書き込まれるまでに当該テープ媒体に書き込まれるデータの容量である第１の容量と、当該テープ媒体に最終的に公称の容量のデータが書き込まれるために当該テープ媒体上の現在位置までに書き込まれることが必要なデータの容量である第２の容量とを比較し、当該第１の容量が当該第２の容量よりも大きければ、バックヒッチを行わずに当該第２のデータを当該テープ媒体に書き込むと判定し、当該第１の容量が当該第２の容量よりも小さければ、バックヒッチを行ってから当該第２のデータを当該テープ媒体に書き込むと判定する手段と、
バックヒッチを行わずに前記第２のデータを前記テープ媒体に書き込むと判定された場合に、当該テープ媒体の速度を、前記上位装置から送られた所定サイズのデータを前記バッファに格納するのに要する時間よりも当該バッファに格納された当該所定サイズのデータを当該テープ媒体に書き込むのに要する時間が長くなるという条件を満たす特定の速度に変更する手段と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テープ媒体の走行を制御する装置及び方法に関する。特に、本発明は、上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおけるテープ媒体の走行を制御する装置及び方法に関する。
【背景技術】
【０００２】
磁気テープ等のテープ媒体にデータを書き込むテープドライブでは、データを一旦バッファに蓄積しておき、ドライブの都合の良いタイミングでバッファからテープ媒体へデータを書き込むのが一般的である。ホストは、ドライブに送ったデータが全てテープ媒体上に書き出されていることを保証するため、強制的にデータを書き込むためのコマンド（ＷｒｉｔｅＦＭ  Ｎｏｎ  Ｉｍｍｅｄｉａｔｅコマンド）をドライブに送る。このようなバッファからテープ媒体への強制書込みを「同期」という。
ところで、同期が発生した後にテープ媒体を停止させないと、テープ媒体上で、先行する同期にて書き込まれたデータと次に書き込まれたデータとの間にギャップが生じる。その結果、テープ媒体の記録領域が無駄になってしまう。そのため、バックヒッチを行う必要がある。バックヒッチとは、テープ媒体の走行速度を減速して一旦停止し、逆方向に走行し、その後、再度元の方向に走行して書き込むべき位置に達して次のデータを書く、という一連の動作のことである。次のデータは、このバックヒッチが完了するまで書き込むことができない。バックヒッチには約２〜３秒程度の時間を要するため、バックヒッチの発生は、パフォーマンスに大きな影響を与える。
【０００３】
そこで、かかる状況を回避するための技術として、ＲＡＢＦ（Recursive Accumulating Backhitchless Flush）が提案されている（例えば、特許文献１、２参照）。
この特許文献１、２からも分かるように、ＲＡＢＦは次のような手法と捉えることができる。
即ち、まず、テープドライブが、同期要求を受けた際に、テープにまだ書かれていないバッファ内のデータを、テープ媒体の走行を継続させたまま、テープ媒体上に予約されている一時記録領域（ＡＢＦラップ）に書き出す。尚、この書出しは、先行する同期にて書き込まれたデータと次の同期にて書き込まれたデータとの間のギャップが問題とならないため、バックヒッチを行わないバッファフラッシュ（Backhitchless Flush）である。一方で、テープドライブは、データをバッファに蓄積し（Accumulate）、バッファ又は一時記録領域に空きがなくなった際に通常の記録領域（通常ラップ）に書き戻す（リライトする）動作を反復的に（Recursive）行う。
このように、ＲＡＢＦでは、同期を行う際に、次の同期に備えてバックヒッチを行うことが必要とならないため、同期に要する時間の短縮が図れる。特に、データ量に対する同期要求の頻度が高い場合において、大幅なパフォーマンス向上を実現するものである。
【０００４】
【特許文献１】米国特許第６８５６４７９号明細書
【特許文献２】米国特許第６８６５０４３号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００５】
即ち、ＲＡＢＦは、同期要求の間にホストから送られてくるデータ量（以下、「トランザクションサイズ」という）が小さい場合に同期パフォーマンスを向上させるものである。トランザクションサイズが一定以上になると、一時的にデータを違う場所に書いてそれを書き戻す作業のオーバーヘッドは大きくなり、ＲＡＢＦを実行するよりもバックヒッチを行ってデータを書いた方が早くなる。こうしたことから、従来より、トランザクションサイズが大きい場合に同期パフォーマンスを向上させる手法が求められていた。
【０００６】
また、トランザクションサイズ分のデータをテープに書く前に、テープ上に書き出すデータがバッファ内になくなった場合も、そのままテープを動かし続けるのではなく、テープ上の容量を無駄にしないようにバックヒッチを行って、最後に書いたデータの後方から再度書き出す。従って、この場合のバックヒッチによるパフォーマンスの低下についても改善が望まれていた。
【０００７】
本発明の目的は、トランザクションサイズが大きい場合における同期時のバックヒッチ及びバッファが空になることによるバックヒッチによるパフォーマンスの低下を防止することにある。
【課題を解決するための手段】
【０００８】
かかる目的のもと、本発明は、上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおけるテープ媒体の走行を制御する装置であって、バッファに格納された第１のデータをテープ媒体に書き込んだ後にバックヒッチを行わずに第１のデータの次の第２のデータをテープ媒体に書き込むかどうかを、第１のデータがテープ媒体に書き込まれるまでの状況に基づいて判定する判定部と、判定部によりバックヒッチを行わずに第２のデータをテープ媒体に書き込むと判定された場合に、バッファ内にデータがなくなることによるバックヒッチが発生しないように、テープ媒体の速度を変更する変更部とを含む、装置を提供する。
【０００９】
ここで、判定部は、第１のデータがテープ媒体に書き込まれるまでにテープ媒体に書き込まれたデータの容量と、テープ媒体の第１のデータが書き込まれた位置までに書き込まれることが期待されるデータの容量との比較結果に基づいて、バックヒッチを行わずに第２のデータをテープ媒体に書き込むかどうかを判定する、ものであってよい。
また、第１のデータがテープ媒体に書き込まれるまでにバックヒッチを行わずにデータが書き込まれた回数と、バックヒッチを行わずにデータが書き込まれる回数として許容される予め設定された回数との比較結果に基づいて、バックヒッチを行わずに第２のデータをテープ媒体に書き込むかどうかを判定する、ものであってよい。
更に、第１のデータがテープ媒体に書き込まれるまでに発生したエラーの頻度と、バックヒッチを行わずにデータを書き込む際に発生するエラーの頻度として許容される予め設定された頻度との比較結果に基づいて、バックヒッチを行わずに第２のデータをテープ媒体に書き込むかどうかを判定する、ものであってよい。
更にまた、テープ媒体の第１のデータが書き込まれた位置と前回バックヒッチを行わずにデータが書き込まれた位置の間隔と、バックヒッチを行わずにデータが書き込まれる位置の間隔として許容される予め設定された間隔との比較結果に基づいて、バックヒッチを行わずに第２のデータをテープ媒体に書き込むかどうかを判定する、ものであってよい。
【００１０】
また、変更部は、テープ媒体の速度を、上位装置から送られた所定サイズのデータをバッファに格納するのに要する時間よりもバッファに格納された所定サイズのデータをテープ媒体に書き込むのに要する時間が長くなるという条件を満たす特定の速度に変更する、ものであってよい。
ここで、特定の速度は、テープ媒体の速度として予め用意された複数の速度のうち、条件を満たす最も速い速度であってよいし、テープ媒体の速度として予め用意された複数の速度のうち、過去の所定回数のデータの書込みにおいてバックヒッチを発生させていない速度であってもよい。
更に、変更部は、バックヒッチを行った後、テープ媒体の速度を変更する、ものであってよい。
【００１１】
また、本発明は、上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおけるテープ媒体の走行を制御する装置であって、バッファに格納された第１のデータをテープ媒体に書き込んだ後にバックヒッチを行わずに第１のデータの次の第２のデータをテープ媒体に書き込むかどうかを、第１のデータがテープ媒体に書き込まれるまでの状況に基づいて判定する判定部と、判定部によりバックヒッチを行わずに第２のデータをテープ媒体に書き込むと判定された場合に、テープ媒体の速度として予め用意された複数の速度のうち、上位装置から送られた所定サイズのデータをバッファに格納するのに要する時間よりもバッファに格納された所定サイズのデータをテープ媒体に書き込むのに要する時間が長くなるという条件を満たす最も速い速度である第１の速度を選択する第１の選択部と、過去の所定回数のデータの書込みの何れかにおいて、第１の選択部により選択された第１の速度が用いられ、かつ、バックヒッチが発生している場合に、複数の速度のうち、第１の速度よりも遅い第２の速度を選択する第２の選択部と、第２の選択部により選択された第２の速度がテープ媒体の現在の速度と異なる場合に、バックヒッチを行った後、テープ媒体の速度を第２の速度に変更する変更部とを含む、装置も提供する。
【００１２】
更に、本発明は、上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおけるテープ媒体の走行を制御する方法であって、バッファに格納された第１のデータをテープ媒体に書き込んだ後にバックヒッチを行わずに第１のデータの次の第２のデータをテープ媒体に書き込むかどうかを、第１のデータがテープ媒体に書き込まれるまでの状況に基づいて判定するステップと、バックヒッチを行わずに第２のデータをテープ媒体に書き込むと判定された場合に、バッファ内にデータがなくなることによるバックヒッチが発生しないように、テープ媒体の速度を変更するステップとを含む、方法も提供する。
【００１３】
更にまた、本発明は、上位装置から送られたデータを一時的にバッファに格納した後にテープ媒体に書き込むテープドライブにおけるテープ媒体の走行を制御する装置としてコンピュータを機能させるプログラムであって、コンピュータを、バッファに格納された第１のデータをテープ媒体に書き込んだ後にバックヒッチを行わずに第１のデータの次の第２のデータをテープ媒体に書き込むかどうかを、第１のデータがテープ媒体に書き込まれるまでの状況に基づいて判定する手段と、バックヒッチを行わずに第２のデータをテープ媒体に書き込むと判定された場合に、バッファ内にデータがなくなることによるバックヒッチが発生しないように、テープ媒体の速度を変更する手段として機能させる、プログラムも提供する。
【発明の効果】
【００１４】
本発明によれば、トランザクションサイズが大きい場合における同期時のバックヒッチ及びバッファが空になることによるバックヒッチによるパフォーマンスの低下を防止することができる。
【発明を実施するための最良の形態】
【００１５】
以下、添付図面を参照して、本発明を実施するための最良の形態（以下、「実施の形態」という）について詳細に説明する。
図１は、本実施の形態が適用されるテープドライブ１０の構成例を示した図である。このテープドライブ１０は、ホストインターフェイス（以下、「ホストＩ／Ｆ」という）１１と、バッファ１２と、チャネル１３と、ヘッド１４と、モータ１５とを含む。また、コントローラ１６と、ヘッド位置制御システム１７と、モータドライバ１８とを含む。更に、テープドライブ１０には、テープカートリッジ２０が挿入されることにより装填可能となっているので、ここでは、テープカートリッジ２０も図示している。このテープカートリッジ２０は、リール２１、２２に巻かれたテープ２３を含む。テープ２３は、リール２１、２２の回転に伴い、リール２１からリール２２の方向へ、又は、リール２２からリール２１の方向へ、長手方向に移動する。尚、テープ２３としては、磁気テープが例示されるが、磁気テープ以外のテープ媒体でもよい。
【００１６】
ここで、ホストＩ／Ｆ１１は、上位装置の一例であるホスト３０との通信を行う。例えば、ホスト３０から、テープ２３へのデータの書込みを指示するコマンド、テープ２３を目的の位置に移動させるコマンド、テープ２３からのデータの読出しを指示するコマンドを受け取る。尚、このホストＩ／Ｆ１１で用いる通信規格としては、ＳＣＳＩが例示される。ＳＣＳＩの場合、１つ目のコマンドは、Ｗｒｉｔｅコマンドに相当し、２つ目のコマンドは、ＬｏｃａｔｅコマンドやＳｐａｃｅコマンドに相当し、３つ目のコマンドは、Ｒｅａｄコマンドに相当する。また、ホストＩ／Ｆ１１は、ホスト３０に対し、これらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【００１７】
バッファ１２は、テープ２３に書き込むべきデータやテープ２３から読み出されたデータを蓄積するメモリである。例えば、ＤＲＡＭ（Dynamic Random Access Memory）によって構成される。また、バッファ１２は、複数のバッファセグメントからなり、各バッファセグメントが、テープ２３に対する読み書きの単位であるデータセットを格納している。
チャネル１３は、テープ２３に書き込むべきデータをヘッド１４に送ったり、テープ２３から読み出されたデータをヘッド１４から受け取ったりするために用いられる通信経路である。
ヘッド１４は、テープ２３が長手方向に移動するとき、テープ２３に対して情報を書き込んだり、テープ２３から情報を読み出したりする。
モータ１５は、リール２１、２２を回転させる。尚、図では、１つの矩形でモータ１５を表しているが、モータ１５としては、リール２１、２２の各々に１つずつ、合計２個設けるのが好ましい。
【００１８】
一方、コントローラ１６は、テープドライブ１０の全体を制御する。例えば、ホストＩ／Ｆ１１で受け付けたコマンドに従って、データのテープ２３への書込みやテープ２３からの読出しを制御する。また、ヘッド位置制御システム１７やモータドライバ１８の制御も行う。
ヘッド位置制御システム１７は、所望の１つ又は複数のラップを追跡するシステムである。ここで、ラップとは、テープ２３上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド１４を電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム１７で行う。
モータドライバ１８は、モータ１５を駆動する。尚、上述したように、モータ１５を２個使用する場合であれば、モータドライバ１８も２個設けられる。
【００１９】
本実施の形態では、かかる構成を有するテープドライブ１０において、まず、トランザクションサイズが大きい場合に同期処理のパフォーマンスを向上させる手法を提案する。即ち、テープドライブ１０は、テープ２３上の容量を犠牲にして、同じラップにバックヒッチを伴わない書込み（以下、「バックヒッチレス書込み」という）を行う。
通常、テープ２３には、公称の容量を超えてある程度の余裕分までデータを書き込むことができる。例えば、公称の容量を５００ＧＢとし、余裕分を７％とした場合、エラーレートが非常に低ければ、５３５（＝５００×１．０７）ＧＢまでのデータをテープ２３に書き込めることになる。従って、バックヒッチレス書込みによる容量損失が７％以下であれば、それは、ユーザにとってそれほど深刻な事態とはならない。そこで、本実施の形態では、上記の例における３５（＝５３５−５００）ＧＢの余裕分を、パフォーマンス向上のために使う。
【００２０】
図２は、バックヒッチを伴う書込みを行う場合とバックヒッチレス書込みを行う場合との違いを示したものである。尚、図では、データセットを「ＤＳ」と表記している。
このうち、（ａ）は、バックヒッチを伴う書込みの様子を示している。
図示するように、テープ２３には、ＤＳ＃Ｎ−２、ＤＳ＃Ｎ−１、ＤＳ＃Ｎ、ＤＳ＃Ｎ＋１が書き込まれている。このうち、ＤＳ＃Ｎ−２から同期処理における書込みが開始し、ＤＳ＃Ｎで同期処理が完了したとする。すると、ここで、バックヒッチが発生する。このバックヒッチには、約３秒の時間が費やされ、テープドライブ１０は、バックヒッチが完了するまで、次の書込みを開始することができない。つまり、バックヒッチが完了した後に、ＤＳ＃Ｎ＋１が書き込まれることになる。
【００２１】
また、（ｂ）は、バックヒッチレス書込みの様子を示している。
図示するように、テープ２３には、ＤＳ＃Ｎ−２、ＤＳ＃Ｎ−１、ＤＳ＃Ｎ、ＤＳ＃Ｎ＋１が書き込まれている。このうち、ＤＳ＃Ｎ−２から同期処理における書込みが開始し、ＤＳ＃Ｎで同期処理が完了したとする。但し、この場合、バックヒッチは発生しない。つまり、バックヒッチレス書込みは、（ａ）で費やされた約３秒の時間を必要としない。しかし、テープドライブ１０は、テープ２３を、容量を犠牲にして前方向に動かしてしまう。
【００２２】
とはいっても、このバックヒッチレス書込みは、パフォーマンスの点で大きな利点がある。
そこで、本実施の形態では、このバックヒッチレス書込みを行う。具体的には、同期コマンドを受信したときに、テープ２３の残り容量を確認して、バックヒッチを行うかバックヒッチレス書込みを行うかを決定する。これにより、同期処理時にバックヒッチレス書込みをしたとしても、テープ２３の全体の容量が影響を受けないようにする。
尚、このように同じラップにバックヒッチレス書込みを行う手法を、以下では、ＳＷＢＦ（Same Wrap Backhitchless Flush）と呼ぶ。
【００２３】
ところで、このようなＳＷＢＦアルゴリズムを用いても、パフォーマンスが期待通りに向上しない場合がある。それは、テープドライブ１０が同期のタイミングでバックヒッチを行わなかったとしても、テープ２３の転送レートがホスト３０の転送レートよりも速い場合は、通常の書込み時にバックヒッチが発生してしまうからである。
そこで、本実施の形態では、このような場合におけるパフォーマンスの向上のため、つまり、書込みシーケンスの中でのバックヒッチの総数を減少させるために、次のトランザクションのための理想的なテープ速度を見積もり、そのテープ速度に変更するために意図的にバックヒッチを強制する手法を提案する。
【００２４】
本実施の形態において、上記のパフォーマンス問題は、次のトランザクションのための理想的なテープ速度を決定し、決定されたテープ速度によってバックヒッチを強制すべきかどうかを決定するＳＷＢＦのための新しい論理を導入することで解決される。
図３〜６に、テープ速度と１サイクルの同期処理のために必要な時間との関係を示す。尚、図中、太線がテープ速度を表す。
【００２５】
図３は、通常のケースであり、同期処理が完了する都度、バックヒッチが発生するケースを示している。即ち、図において、時間Ｔ０１で同期処理が完了してバックヒッチを開始する。以降、時間Ｔ０２までのバックヒッチ時間において、テープ速度は一旦減少し、逆方向に加速、減少した後、再び増加して元に戻る。そして、時間Ｔ０３で同期処理が完了するまでの書込み時間において、次のデータを書き込む。
【００２６】
図４は、理想的なＳＷＢＦのケースを示す。この場合、テープドライブ１０は、同期処理が完了してもバックヒッチを行わず、バックヒッチレス書込みモードで次のデータを書き込む。即ち、図において、時間Ｔ１１で同期処理が完了するが、バックヒッチを行わずに、時間Ｔ１２で同期処理が完了するまでの書込み時間において、次のデータを書き込む。
【００２７】
図５は、図４と同じトランザクションサイズとホスト転送レートで、より遅いテープ速度を使ったケースを示す。この場合、バックヒッチは発生しない。しかし、テープ速度が遅いため、同期処理のために必要な時間が理想的なケースより長くなっている。即ち、図において、時間Ｔ２１で同期処理が完了するが、バックヒッチを行わずに、時間Ｔ２２で同期処理が完了するまでの書込み時間において、次のデータを書き込む。この場合に、時間Ｔ２１から時間Ｔ２２までの時間が、図４の時間Ｔ１１から時間Ｔ１２までの時間よりも長くなっている。
【００２８】
図６は、図４と同じトランザクションサイズとホスト転送レートで、より速いテープ速度を使ったケースを示す。この場合、テープ２３の転送レートがホスト３０の転送レートより速ければ、ホスト３０がテープドライブ１０への全てのトランザクションの転送を完了する前に、バッファ１２は空になる。すると、バックヒッチが強制される。即ち、図において、時間Ｔ３１で同期処理が完了するが、バックヒッチを行わずに、以降の書込み時間において、次のデータを書き込む。しかしながら、テープ速度が速過ぎるために、時間Ｔ３２でバッファ１２が空になり、バックヒッチが発生する。以降、時間Ｔ３３までのバックヒッチ時間において、テープ速度は一旦減少し、逆方向に加速、減少した後、再び増加して元に戻る。そして、時間Ｔ３４で同期処理が完了するまでの書込み時間において、引き続きデータを書き込む。このように、図６の場合、１つの同期処理のために必要な時間にはバックヒッチのための時間が含まれることになる。その結果、ＳＷＢＦには、通常の同期処理と比較してパフォーマンスの利点がなくなってしまう。
【００２９】
そこで、本実施の形態では、図５と図６に示されるケースを避けるために、理想的なテープ速度よりも速いテープ速度や遅いテープ速度で一貫してバックヒッチレス書込みを行うよりもむしろ、バックヒッチを強制してテープ速度を変更する。
また、理想的なテープ速度を計算するためにテープドライブ１０の最近の履歴を用い、選択されたテープ速度でのパフォーマンスを保証するために過去のバックヒッチ発生及びテープ速度を用いる。
【００３０】
このような本実施の形態の概略動作は、次の通りである。
（第１工程）
まず、理想的なテープ速度が、過去のトランザクションサイズとホスト転送レートの平均によって算出される。
【００３１】
（第２工程）
次に、過去のトランザクションについて選択されたテープ速度、及び、バッファ１２が空になったことによるバックヒッチが先に選択された速度で発生したかどうかを参照する。同じ速度での過去のトランザクションでバックヒッチが発生していれば、バックヒッチは、次のトランザクションでも発生するかもしれないので、算出された速度より遅い速度を使うようにする。このように同期タイミングでより遅い速度を選択することにより、バックヒッチは次のトランザクションで発生せず、書込みシーケンスの間のバックヒッチの総数は減少する。
【００３２】
（第３工程）
上記の方法によって理想的なテープ速度を決定した後に、現在の速度が理想的な速度と同じでない場合、テープドライブ１０は、バックヒッチを強制する。尚、算出された速度は、ＳＷＢＦで使われる現在の速度よりも速かったり遅かったりするかもしれない。また、現在の速度が理想的な速度と同じである場合、テープドライブ１０は、ＳＷＢＦを可能にする容量の基準が満たされれば、バックヒッチレス書込みを行う。
【００３３】
次に、このような動作を実現するためのコントローラ１６の機能構成について説明する。
図７は、コントローラ１６の機能構成例を示したブロック図である。
図示するように、コントローラ１６は、コマンド処理部４１と、バッファ管理部４２と、チャネル入出力部４３と、バックヒッチ判定部４４と、速度決定部４５と、速度テーブル記憶部４６と、履歴記憶部４７と、動作信号出力部４８とを備える。
【００３４】
このうち、コマンド処理部４１は、ホストＩ／Ｆ１１からコマンドを受け取る。ここで、コマンドとしては、バッファ１２にデータを格納することを指示するＷｒｉｔｅコマンド、バッファ１２に格納されたデータをテープ２３に書き込む同期コマンド（ＷｒｉｔｅＦＭコマンド等）がある。
バッファ管理部４２は、コマンド処理部４１がＷｒｉｔｅコマンドを受け取った場合は、データをバッファ１２内に用意する。また、コマンド処理部４１が同期コマンドを受け取った場合は、データをバッファ１２から読み出してチャネル入出力部４３に出力する。
チャネル入出力部４３は、バッファ管理部４２がバッファ１２から読み出したデータをチャネル１３に出力したり、チャネル１３から受け取ったデータをバッファ１２に格納したりする。
【００３５】
バックヒッチ判定部４４は、現在のデータがテープ２３に書き込まれるまでの状況に基づいて、最終的にテープ２３に公称の容量分のデータを書き込めるか判断し、バックヒッチレス書込みを行うかどうかを判定する。本実施の形態では、第１のデータをテープ媒体に書き込んだ後にバックヒッチを行わずに第２のデータをテープ媒体に書き込むかどうかを判定する判定部の一例として、バックヒッチ判定部４４を設けている。
速度決定部４５は、バックヒッチ判定部４４がバックヒッチレス書込みを行うと判定した場合に、バッファ１２が空になることによるバックヒッチを発生させないテープ速度を決定する。本実施の形態では、テープ媒体の速度を変更する変更部の一例として、速度決定部４５を設けている。
速度テーブル記憶部４６は、テープ２３の速度として予め用意された速度と、その速度でテープ２３を走行させた場合のテープ転送レートとの対応を含む速度テーブルを記憶する。
履歴記憶部４７は、過去に処理したトランザクション、そのトランザクションを処理したときのテープ２３の速度、そのトランザクションを処理したときにバックヒッチが発生したかどうかの情報等の対応を含む履歴情報を記憶する。但し、履歴情報にはこれ以外の情報（例えば、エラーの発生に関する情報）を含めてもよい。
動作信号出力部４８は、モータドライバ１８に対して、バックヒッチ判定部４４又は速度決定部４５で決定された動作を行うことを指示する信号を出力する。
【００３６】
次に、コントローラ１６の動作について説明する。
図８は、コントローラ１６の動作例を示したフローチャートである。尚、この動作例は、バッファ１２内のデータセットが同期コマンドに応じてテープ２３に書き込まれているときに開始するものとする。
コントローラ１６では、このようなデータセットの書込み中に、バッファ管理部４２が、バッファ１２から最後のデータセットを読み出してチャネル入出力部４３に渡し、チャネル入出力部４３が、渡されたデータセットをテープ２３に書き込む（ステップ４０１）。
【００３７】
このとき、最後のデータセットがテープ２３に書き込まれたことがバッファ管理部４２に伝えられるので、バッファ管理部４２は、バックヒッチ判定部４４に対して、バックヒッチを行うかどうかを判定するよう指示する。これにより、バックヒッチ判定部４４は、最終的にテープ２３に公称の容量分のデータを書き込めるかという観点からバックヒッチを行うかどうかを判定するバックヒッチ判定処理を行う（ステップ４０２）。尚、このバックヒッチ判定処理の詳細については後述する。そして、バックヒッチ判定処理における判定結果は、動作信号出力部４８に出力される。
【００３８】
これにより、動作信号出力部４８は、判定結果がバックヒッチレス書込みを行うことを示しているかどうかを判定する（ステップ４０３）。
ここで、判定結果がバックヒッチレス書込みを行わないことを示している場合、動作信号出力部４８は、モータドライバ１８に対し、バックヒッチを開始する旨の信号を出力する（ステップ４０９）。
一方、判定結果がバックヒッチレス書込みを行うことを示している場合、動作信号出力部４８は、制御をバッファ管理部４２に戻し、バッファ管理部４２が、トランザクションサイズ（図では「ＴＲサイズ」と表記）とバッファ１２のサイズ（図では「ＢＵＦサイズ」と表記）とを比較する（ステップ４０４）。ここで、トランザクションサイズとしては、例えば、過去の３つのトランザクションのサイズの平均値を用いるとよい。
【００３９】
その結果、トランザクションサイズがバッファ１２のサイズよりも小さければ、バッファ管理部４２は、速度決定部４５に対して、テープ２３の新たな速度を決定するよう指示する。これにより、速度決定部４５は、テープ２３の新たな速度を決定するテープ速度決定処理を行う（ステップ４０５）。尚、このテープ速度決定処理の詳細についても後述する。
【００４０】
その後、現在のテープ速度がこのテープ速度決定処理で決定されたテープ速度と異なるならば、ＳＷＢＦモードでの書込みは行われず、バックヒッチが行われ、テープ速度が変更される。具体的には、速度決定部４５が、ステップ４０５で決定されたテープ速度が現在のテープ速度に等しいかどうかを判定する（ステップ４０６）。そして、これらのテープ速度が等しければ、バックヒッチレス書込みを行うことを決定する（ステップ４０７）。また、これらのテープ速度が等しくなければ、ステップ４０５で決定されたテープ速度をバックヒッチ後に用いることを決定し、動作信号出力部４８に伝える（ステップ４０８）。すると、動作信号出力部４８は、モータドライバ１８に対し、バックヒッチを開始する旨の信号を出力する（ステップ４０９）。そして、このバックヒッチの後に、テープ２３の速度が変更されることになる。尚、このステップ４０６〜４０９の処理は、上述した第３工程に相当する。
【００４１】
一方、ステップ４０４でトランザクションサイズがバッファ１２のサイズ以上であると判定されれば、バックヒッチレス書込みを行うことを決定する（ステップ４０７）。
このようにして、バックヒッチレス書込みを行うことの決定、又は、バックヒッチの開始がなされると、その旨はコマンド処理部４１に返され、コマンド処理部４１は、同期コマンドの完了をホスト３０に報告する（ステップ４１０）。
【００４２】
その後、コマンド処理部４１は、次のデータセットを受け付けてバッファ管理部４２に受け渡し、バッファ管理部４２が、受け付けたデータをバッファ１２に格納する（ステップ４１１）。
次に、バッファ管理部４２は、新しい書込みを開始するために十分なデータセットが受け取られたかどうかを判定する（ステップ４１２）。そして、十分なデータセットが受け取られていないと判定されれば、ステップ４１０の終了後から一定時間経過したかどうかの判断に移り（ステップ４１３）、一定期間が経過していなければ、暫く待って（ステップ４１４）、再度ステップ４１２の判定を行う。一定期間が経過していれば、バッファ管理部４２は、動作信号出力部４８に制御を渡し、動作信号出力部４８が、モータドライバ１８に対し、バックヒッチを開始するように指示する信号を出力する（ステップ４１６）。また、ステップ４１２で十分なデータセットが受け取られたと判定されれば、現在のヘッド１４の位置と最後に書かれたデータセットの終端の位置との間隔が短いかどうかを判定する（ステップ４１５）。例えば、その間隔が、データセット間隔の閾値よりも長いかどうかを判定すればよい。
【００４３】
ここで、ステップ４１０の終了後から一定期間が経過した場合、及び、十分なデータセットを受け取った後、現在のヘッド１４の位置と最後に書かれたデータセットの終端の位置との間隔が長い場合、バッファ管理部４２は、動作信号出力部４８に制御を渡し、動作信号出力部４８が、モータドライバ１８に対し、バックヒッチを開始するように指示する信号を出力する（ステップ４１６）。そして、バッファ管理部４２は、バッファ１２からデータセットを読み出してチャネル入出力部４３に受け渡し、チャネル入出力部４３が、データセットをテープ２３に書き込む（ステップ４１７）。
一方、現在のヘッド１４の位置と最後に書かれたデータセットの終端の位置との間隔が短ければ、バックヒッチは行わずに、バッファ管理部４２が、バッファ１２からデータセットを読み出してチャネル入出力部４３に受け渡し、チャネル入出力部４３が、データセットをテープ２３に書き込む（ステップ４１７）。
【００４４】
次に、ステップ４０２のバックヒッチ判定処理について詳細に説明する。尚、このバックヒッチ判定処理は、上述したように、最終的にテープ２３に公称の容量分のデータを書き込めるかという観点からバックヒッチレス書込みを行うかどうかを判定する処理であるが、その判定動作として、４つの動作例が考えられるので、これらを順に説明する。
【００４５】
（第１の動作例）
図９は、第１の動作例を示したフローチャートである。
バックヒッチ判定部４４は、まず、テープ２３の公称の記憶容量（Ｃ）を取得する（ステップ５０１）。また、テープ２３の長手方向のテープ長（Ｌ）を取得する（ステップ５０２）。この場合、Ｃ及びＬは、例えば、テープカートリッジ２０がロードされた際に、テープカートリッジ２０に設けられたカートリッジメモリから取得するとよい。
【００４６】
次に、バックヒッチ判定部４４は、現在ヘッド１４が位置するラップの番号（CurrentWrapNum）を取得する（ステップ５０３）。本実施の形態では、複数のヘッド１４を用いてデータがテープ２３に書かれる。その際、テープ２３は、まず、ＢＯＴ（Beginning Of Tape）からＥＯＴ（End Of Tape）まで第１の方向に動かされ、第１の複数のデータトラックが書かれ、次に、テープ２３の方向は逆転し、テープ２３は、第２の方向に動かされて、第２の複数のデータトラックがＥＯＴからＢＯＴまで書かれる。この場合、第１の複数のデータトラックが、第１の「ラップ」を構成し、第２の複数のデータトラックが、第２の「ラップ」を構成する。テープ２３は複数のラップで構成され、テープ２３上のラップの総数をＮとしたとき、ラップの番号は０から（Ｎ−１）までの値をとる。
【００４７】
更に、バックヒッチ判定部４４は、現在ヘッド１４が位置する長手方向の位置（CurrentLongitudinalPosition）を取得する（ステップ５０４）。例えば、テープ２３上には、非データ領域にテープ長（Ｌ）に沿って書かれた複数のサーボバンドが存在する。サーボバンドに配置された複数の連続したサーボパターンは、線形位置（ＬＰＯＳ）の情報をコード化している。このステップは、ヘッド１４のＬＰＯＳを決定するために複数のサーボパターンを解読することを含んでいてもよい。
そして、バックヒッチ判定部４４は、ヘッド１４に対するパラメータ（Ｘ）を算出する（ステップ５０５）。ここで、Ｘには、ステップ５０２で取得したＬと、ステップ５０３で取得したCurrentWrapNumとを掛け合わせたものに、ステップ５０４で取得したCurrentLongitudinalPositionを加えて得られた値が設定される。
その後、バックヒッチ判定部４４は、現在位置における期待される容量（Ｓ）に、「（Ｘ／（Ｌ＊TotalWrapNum））＊Ｃ」を設定する（ステップ５０６）。ここで、TotalWrapNumは、テープ２３上のラップの総数である。
【００４８】
次に、バックヒッチ判定部４４は、現在のデータセット番号（Ｎ）を取得する（ステップ５０７）。そして、データセットのサイズ（DatasetSize）を取得する（ステップ５０８）。これらは、例えば、バッファ管理部４２から取得するとよい。また、バックヒッチ判定部４４は、現在位置における実際の容量（Ｒ）に、ステップ５０７で取得したＮとステップ５０８で取得したDatasetSizeとを掛け合わせて得られた値を設定する（ステップ５０９）。
【００４９】
最後に、バックヒッチ判定部４４は、「Ｒ−Ｓ＊β＋α」が「０」を超えるかどうかを判定する（ステップ５１０）。そして、「Ｒ−Ｓ＊β＋α」が「０」を超えると判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行うことを判定結果に設定する（ステップ５１１）。また、「Ｒ−Ｓ＊β＋α」が「０」を超えないと判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行わないことを判定結果に設定する（ステップ５１２）。
尚、上記の式において、αは、ＢＯＴの近くでこの機能を簡単に呼び出すための一定値であり、例えば、約５ＧＢに設定される。また、βは、例えば、約１．０５に設定される。α、βは、例えば、テープドライブ１０又はテープ２３の製造業者により設定されるとよい。先に述べたように、テープ２３には、公称の容量を超えてある程度の余裕分までデータを書き込むことができる。α、βはＳ＊β＋αがテープ２３に書き込むことができる容量を超えない範囲で設定できる。
【００５０】
（第２の動作例）
図１０は、第２の動作例を示したフローチャートである。
バックヒッチ判定部４４は、まず、テープ２３上で発生するバックヒッチレス書込みの許容される最大の回数（BackhitchlessThresholdCount）を取得する（ステップ５２１）。ここで、BackhitchlessThresholdCountは、例えば、テープドライブ１０又はテープ２３の製造業者により設定されるとよい。また、現在の書込み処理の間にテープ２３上で既に発生したバックヒッチレス書込みの回数（ActualBackhitchlessWriteCount）を取得する（ステップ５２２）。ここで、ActualBackhitchlessWriteCountは、履歴記憶部４７に記憶された履歴情報に基づいて取得するとよい。
次に、バックヒッチ判定部４４は、ActualBackhitchlessWriteCountがBackhitchlessThresholdCountを超えるかどうか判定する（ステップ５２３）。そして、ActualBackhitchlessWriteCountがBackhitchlessThresholdCountを超えないと判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行うことを判定結果に設定する（ステップ５２４）。また、ActualBackhitchlessWriteCountがBackhitchlessThresholdCountを超えると判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行わないことを判定結果に設定する（ステップ５２５）。
【００５１】
（第３の動作例）
図１１は、第３の動作例を示したフローチャートである。
バックヒッチ判定部４４は、まず、テープ２３上でバックヒッチレス書込みを用いるときに許容される最大のエラーレート（ErrorRateThreshold）を取得する（ステップ５４１）。ここで、ErrorRateThresholdは、例えば、テープドライブ１０又はテープ２３の製造業者により設定されるとよい。また、テープ２３の実際のエラーレート（ActualErrorRate）を取得する（ステップ５４２）。ここで、ActualErrorRateは、履歴記憶部４７に記憶された履歴情報に基づいて取得するとよい。
次に、バックヒッチ判定部４４は、ActualErrorRateがErrorRateThresholdを超えるかどうか判定する（ステップ５４３）。そして、ActualErrorRateがErrorRateThresholdを超えないと判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行うことを決定する（ステップ５４４）。また、ActualErrorRateがErrorRateThresholdを超えると判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行わないことを決定する（ステップ５４５）。
【００５２】
（第４の動作例）
図１２は、第４の動作例を示したフローチャートである。
バックヒッチ判定部４４は、まず、テープ２３上で発生するバックヒッチレス書込みの間の最小のテープ長（BackhitchlessThresholdInterval）を取得する（ステップ５６１）。ここで、BackhitchlessThresholdIntervalは、例えば、テープドライブ１０又はテープ２３の製造業者により設定されるとよい。また、現在のヘッド１４の位置と最後のバックヒッチレス書込みとの間の実際のテープ長（ActualBackhitchlessWriteInterval）を取得する（ステップ５６２）。ここで、ActualBackhitchlessWriteIntervalは、サーボヘッドが読み出したＬＰＯＳ情報に基づいて取得するとよい。
次に、バックヒッチ判定部４４は、ActualBackhitchlessWriteIntervalがBackhitchlessThresholdIntervalを下回っているかどうか判定する（ステップ５６３）。そして、ActualBackhitchlessWriteIntervalがBackhitchlessThresholdIntervalを下回っていないと判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行うことを判定結果に設定する（ステップ５６４）。また、ActualBackhitchlessWriteIntervalがBackhitchlessThresholdIntervalを下回っていると判定されれば、新しい書込み動作を開始するときにバックヒッチレス書込みを行わないことを判定結果に設定する（ステップ５６５）。
【００５３】
尚、これらの４つの動作例は、バックヒッチ判定部４４における動作のあくまで例示に過ぎない。例えば、第１の動作例や第４の動作例のように現在のデータがテープ２３に書き込まれるまでのデータの書込み状況に着目した他の判定方法を採用してもよいし、第２の動作例や第３の動作例のように現在のデータがテープ２３に書き込まれるまでの特定の事象の発生状況に着目した他の判定方法を採用してもよい。更に、より広く、現在のデータがテープ２３に書き込まれるまでの状況に基づいて、バックヒッチレス書込みを行うかどうかを判定するものと考えてもよい。
【００５４】
次に、ステップ４０５のテープ速度決定処理について詳細に説明する。
図１３は、テープ速度決定処理の動作例を示したフローチャートである。尚、この動作例は、ＳＷＢＦに対する容量基準が満たされるときでも、同期タイミングにおいて、ＳＷＢＦを行うかバックヒッチを行うかを追加的に決定するものである。
まず、速度決定部４５は、過去のトランザクションサイズとホスト転送レートから、次のトランザクションにおけるホスト３０からの転送時間HostTxTimeを見積もる（ステップ６０１）。ここで、HostTxTimeは、例えば、過去の３つのトランザクションにおけるホスト３０からの転送時間の平均とすればよい。即ち、TransactionSizeを、過去の３つのトランザクションの平均のトランザクションサイズとし、HostTxRateを、過去の３つのトランザクションの平均のホスト転送レートとすると、HostTxTime = TransactionSize / HostTxRateによって求めるとよい。尚、TransactionSize及びHostTxRateは、履歴記憶部４７に記憶されたトランザクションの処理の履歴情報から、速度決定部４５が入力データとして取得しておけばよい。
【００５５】
また、速度決定部４５は、過去のトランザクションのサイズと各速度でのメディア転送レートから、速度Ｓｐで次のトランザクションを書くのに必要な時間ReqTime(Sp)を見積もる。そして、HostTxTimeとReqTime(Sp)とを比較し、バッファ１２が空になることによるバックヒッチを発生させない最も速い速度が選択されるように、Ｓｐを遅くしていく。
具体的には、速度決定部４５が、テープの速度を表す変数Ｓｐに対して、速度テーブル記憶部４６に記憶された複数の速度のうちの最も速い速度であるＳＰ１を代入する（ステップ６０２）。そして、テープ速度Ｓｐでトランザクションを書くのに必要な時間ReqTime(Sp)を算出する（ステップ６０３）。ここで、ReqTime(Sp)は、例えば、過去の３つのトランザクションを特定の速度Ｓｐで書くのに必要な時間の時間の平均とすればよい。即ち、TransactionSizeを、過去の３つのトランザクションの平均のトランザクションサイズとし、特定の速度Ｓｐでトランザクションを書くのに必要な時間をMediaTxRate(Sp)とすると、ReqTime(Sp) = TransactionSize / MediaTxRate(Sp)で求めるとよい。尚、TransactionSizeは、履歴記憶部４７に記憶されたトランザクションの処理の履歴情報から、速度決定部４５が入力データとして取得し、MediaTxRate(Sp)は、速度テーブル記憶部４６に記憶されたテープ速度ごとの情報から、速度決定部４５が入力データとして取得しておけばよい。
【００５６】
その後、速度決定部４５は、ReqTime(Sp)がHostTxTimeを下回っているかどうかを判定する（ステップ６０４）。つまり、テープ２３にデータを書き込む所要時間よりもホスト３０から同データが転送される所要時間が長ければ、バッファ１２が空になる可能性があるので、そのような状態にあるかどうかを判定する。
その結果、ReqTime(Sp)がHostTxTimeを下回っていると判定されれば、速度決定部４５は、Ｓｐに設定された速度よりも遅い速度があるかどうかを判定する（ステップ６０５）。ここでは、Ｓｐに設定された速度よりも遅い速度が速度テーブル記憶部４６にエントリとして登録されているかどうかを判定するとよい。そして、そのような速度が登録されていれば、次に速い速度をＳｐに設定し（ステップ６０６）、ステップ６０３に戻る。
このようにしてステップ６０３〜６０６を繰り返し、ステップ６０５でこれ以上遅い速度がないと判定されたとする。この場合は、選択された速度を表す変数ChosenSpeedに対し、速度テーブル記憶部４６に登録された最も遅い速度を設定する（ステップ６０７）。一方、ステップ６０４でReqTime(Sp)がHostTxTimeを下回っていないと判定されたとする。この場合は、選択された速度を表す変数ChosenSpeedに対し、そのときのＳｐを設定する（ステップ６０８）。
尚、このステップ６０１〜６０８の処理は、上述した第１工程に相当する。
【００５７】
その後、速度決定部４５は、過去の３つのトランザクションの処理において選択された速度を参照する。この場合において、選択された速度でバックヒッチが発生していれば、その速度は速過ぎる可能性がある。従って、より遅い速度を再選択する。
具体的には、速度決定部４５が、過去のトランザクションを識別するインデックスｉに「０」を代入する（ステップ６０９）。そして、ｉ＝０，１，２について次の処理を行う。尚、以下では、ｉ番目のトランザクションをTr[i]と表記し、新しい方からTr[0]、Tr[1]、Tr[2]とする。
【００５８】
即ち、まず、Tr[i]を書き込んだときのテープ２３の速度を表す変数prevSp[i]が、ステップ６０７又は６０８で選択されたChosenSpeedと等しく、かつ、Tr[i]でバックヒッチが発生したかどうかを判定する（ステップ６１０）。
その結果、prevSp[i]が、ステップ６０７又は６０８で選択されたChosenSpeedと等しく、かつ、Tr[i]でバックヒッチが発生したというのでなければ、速度決定部４５は、インデックスｉに「１」を加算し（ステップ６１１）、インデックスｉが「３」未満であるかどうかを判定する（ステップ６１２）。そして、インデックスｉが「３」未満であれば、ステップ６１０に戻り、インデックスｉが「３」に達していれば、履歴記憶部４７に記憶された履歴情報を更新する（ステップ６１４）。つまり、Tr[1]に対応する履歴情報をTr[2]に対応する履歴情報とし、Tr[0]に対応する履歴情報をTr[1]に対応する履歴情報とし、今回のトランザクションに対応する履歴情報をTr[0]に対応する履歴情報とする。
【００５９】
一方、ステップ６１０で、prevSp[i]が、ステップ６０７又は６０８で選択されたChosenSpeedと等しく、かつ、Tr[i]でバックヒッチが発生していれば、ChosenSpeedの次に速い速度をChosenSpeedに設定する（ステップ６１３）。そして、履歴記憶部４７に記憶された履歴情報を更新する（ステップ６１４）。つまり、Tr[1]に対応する履歴情報をTr[2]に対応する履歴情報とし、Tr[0]に対応する履歴情報をTr[1]に対応する履歴情報とし、今回のトランザクションに対応する履歴情報をTr[0]に対応する履歴情報とする。
尚、このステップ６０９〜６１４の処理は、上述した第２工程に相当する。
【００６０】
ところで、図８にステップ４０４を設けたことから分かるように、このテープ速度決定処理は、トランザクションサイズがバッファ１２のサイズ（例えば、１ＧＢ）よりも小さい場合に限り、実行される。
これは、トランザクションサイズがバッファ１２のサイズより大きい場合、バッファ１２が、テープ２３にバッファリングされたデータを書く前にいっぱいになり、ホスト転送が中断されるかもしれないからである。ホスト転送のこの休止状態は、ホスト転送レートを低下させる。この場合、計算はより複雑になるので、上述したテープ速度決定処理は適用されない。
【００６１】
以上により、本実施の形態についての説明を終了する。
このように、本実施の形態では、テープ２３に最終的に書き込まれるデータ容量の観点からバックヒッチレス書込みを行うと判定された場合であっても、バッファが空になることによるバックヒッチが発生する可能性があれば、敢えてバックヒッチを行ってテープ速度を変更するようにした。これにより、トランザクションサイズが大きい場合における同期時のバックヒッチによるパフォーマンスの低下に加えて、バッファが空になることによるバックヒッチによるパフォーマンスの低下も防止することができる。
【００６２】
尚、本実施の形態では、テープ２３の速度を変更するに先立ってバックヒッチを行うようにしたが、バックヒッチを行わずにテープ２３の速度を変更する構成としてもよい。
【００６３】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００６４】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【図面の簡単な説明】
【００６５】
【図１】本発明の実施の形態が適用されるテープドライブの構成を示したブロック図である。
【図２】バックヒッチを伴う書込みとバックヒッチレス書込みを比較して示した図である。
【図３】バックヒッチレス書込みを行わない場合におけるテープ速度と同期処理の１サイクルに要する時間との関係を示したグラフである。
【図４】理想的なテープ速度でバックヒッチレス書込みを行う場合におけるテープ速度と同期処理の１サイクルに要する時間との関係を示したグラフである。
【図５】理想的なテープ速度よりも遅いテープ速度でバックヒッチレス書込みを行う場合におけるテープ速度と同期処理の１サイクルに要する時間との関係を示したグラフである。
【図６】理想的なテープ速度よりも速いテープ速度でバックヒッチレス書込みを行う場合におけるテープ速度と同期処理の１サイクルに要する時間との関係を示したグラフである。
【図７】本発明の実施の形態におけるコントローラの機能構成例を示したブロック図である。
【図８】本発明の実施の形態におけるコントローラの動作例を示した図である。
【図９】本発明の実施の形態のコントローラにおけるバックヒッチ判定部の第１の動作例を示したフローチャートである。
【図１０】本発明の実施の形態のコントローラにおけるバックヒッチ判定部の第２の動作例を示したフローチャートである。
【図１１】本発明の実施の形態のコントローラにおけるバックヒッチ判定部の第３の動作例を示したフローチャートである。
【図１２】本発明の実施の形態のコントローラにおけるバックヒッチ判定部の第４の動作例を示したフローチャートである。
【図１３】本発明の実施の形態のコントローラにおける速度決定部の動作例を示したフローチャートである。
【符号の説明】
【００６６】
１０…テープドライブ、１１…ホストＩ／Ｆ、１２…バッファ、１３…チャネル、１４…ヘッド、１５…モータ、１６…コントローラ、１７…ヘッド位置制御システム、１８…モータドライバ
【図１】
0004954141.tif 000002
【図２】
0004954141.tif 000003
【図３】
0004954141.tif 000004
【図４】
0004954141.tif 000005
【図５】
0004954141.tif 000006
【図６】
0004954141.tif 000007
【図７】
0004954141.tif 000008
【図８】
0004954141.tif 000009
【図９】
0004954141.tif 000010
【図１０】
0004954141.tif 000011
【図１１】
0004954141.tif 000012
【図１２】
0004954141.tif 000013
【図１３】
0004954141.tif 000014