(57)【特許請求の範囲】
【請求項１】
テープ媒体にデータを書き込む際の当該テープ媒体の走行を制御する装置であって、
連続するデータの書込み毎に同期を受け、前記同期にしてバックヒッチを行わないデータの書込みと、バックヒッチを行うデータの書込みとの回数を調整しながら書込む場合において、バックヒッチを行わないことによってデータが書き込まれずに走行する前記テープ媒体の部分の長さが、当該テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートの実現を妨げない長さになるように、当該テープ媒体を走行させる速度を決定する決定部
を含む、装置。
【請求項２】
前記決定部は、予め定められた量の単位データが書き込まれた前記テープ媒体の範囲において、バックヒッチを伴わないデータの書込みに要する時間である第１の所要時間と、バックヒッチを伴うデータの書込みに要する時間である第２の所要時間とを算出し、当該第１の所要時間と当該第２の所要時間とに基づいて、当該テープ媒体を走行させる速度を決定する、請求項１の装置。
【請求項３】
前記決定部は、前記範囲においてバックヒッチを行わずにデータを書き込むことが可能な回数である第１の回数に基づいて前記第１の所要時間を算出し、前記範囲においてバックヒッチを行ってからデータを書き込むことが必要な回数である第２の回数に基づいて前記第２の所要時間を算出する、請求項２の装置。
【請求項４】
前記テープ媒体にデータを書き込んでから次のデータを書き込むまでの時間の履歴を示す時間履歴情報と、前記テープ媒体に前記単位データを書き込むためにデータを書き込んだ回数の履歴を示す回数履歴情報とを記憶する記憶部を更に備え、
前記決定部は、前記時間履歴情報に基づいて前記第１の回数を算出し、当該第１の回数と前記回数履歴情報とに基づいて前記第２の回数を算出する、請求項３の装置。
【請求項５】
前記決定部は、バックヒッチを行わずにデータを書き込むのに要する時間である第１の時間に基づいて前記第１の所要時間を算出し、バックヒッチを行ってからデータを書き込むのに要する時間である第２の時間に基づいて前記第２の所要時間を算出する、請求項２又は３の装置。
【請求項６】
前記テープ媒体にデータを書き込んでから次のデータを書き込むまでの時間の履歴を示す時間履歴情報と、前記テープ媒体に１回に書き込むデータの量の履歴を示すデータ量履歴情報とを記憶する記憶部を更に備え、
前記決定部は、前記時間履歴情報と前記データ量履歴情報とに基づいて前記第１の時間を算出し、予め定められた値を用いて算出されたバックヒッチに要する時間と前記データ量履歴情報とに基づいて前記第２の時間を算出する、請求項５の装置。
【請求項７】
連続するデータの書込み毎に同期を受け、前記同期にしてバックヒッチを行わないデータの書込みと、バックヒッチを行うデータの書込みとの回数を調整しながら書込む場合において、テープ媒体にデータを書き込む際の当該テープ媒体の走行を制御する装置であって、
前記テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートを取得する取得部と、
前記取得部により取得された前記読出しデータレートを実現するために予め定められた量の単位データが書き込まれた前記テープ媒体の範囲においてバックヒッチを行わずにデータを書き込むことが可能な回数と、バックヒッチを行わずにデータを書き込むのに要する時間とを乗算して得られた第１の所要時間と、前記取得部により取得された前記読出しデータレートを実現するために前記範囲においてバックヒッチを行ってからデータを書き込むことが必要な回数と、バックヒッチを行ってからデータを書き込むのに要する時間とを乗算して得られた第２の所要時間とに基づいて、当該テープ媒体を走行させる速度を決定する決定部と
を含む、装置。
【請求項８】
前記決定部は、前記テープ媒体の複数の速度にそれぞれ対応する前記第１の所要時間と前記第２の所要時間との複数の和を算出し、特定の速度についての和が当該複数の和の中で最小である場合に、当該特定の速度を、当該テープ媒体を走行させる速度として決定する、請求項７の装置。
【請求項９】
連続するデータの書込み毎に同期を受け、前記同期にしてバックヒッチを行わないデータの書込みと、バックヒッチを行うデータの書込みとの回数を調整しながら書込む場合において、テープ媒体にデータを書き込む際の当該テープ媒体の走行を制御する方法であって、
前記テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートを取得するステップと、
バックヒッチを行わないことによってデータが書き込まれずに走行する前記テープ媒体の部分の長さが、前記読出しデータレートの実現を妨げない長さになるように、当該テープ媒体を走行させる速度を決定するステップと
を含む、方法。
【請求項１０】
連続するデータの書込み毎に同期を受け、前記同期にしてバックヒッチを行わないデータの書込みと、バックヒッチを行うデータの書込みとの回数を調整しながら書込む場合において、テープ媒体にデータを書き込む際の当該テープ媒体の走行を制御する装置としてコンピュータを機能させるプログラムであって、
前記コンピュータを、
前記テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートを取得する取得部と、
バックヒッチを行わないことによってデータが書き込まれずに走行する前記テープ媒体の部分の長さが、前記取得部により取得された前記読出しデータレートの実現を妨げない長さになるように、当該テープ媒体を走行させる速度を決定する決定部として機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テープ媒体の走行を制御する装置及び方法に関する。特に、本発明は、テープ媒体にデータを書き込む際のテープ媒体の走行を制御する装置及び方法に関する。
【背景技術】
【０００２】
例えばＬＴＯ（Linear Tape Open）に準拠して磁気テープ等のテープ媒体にデータを書き込むテープドライブでは、データの書込み中にホスト（アプリケーションプログラム）から同期コマンドを定期的、ないし、散発的に受け取ることがある。同期コマンドとは、テープドライブ内のバッファに蓄積されたデータを強制的にテープ媒体に書き込むためのコマンドである。このように同期コマンドを定期的に受け取ることがあるのは、アプリケーションプログラムが、自身がテープドライブに送ったデータが全てテープ媒体に書かれ、テープドライブ内のバッファに残っていないことを、知りたい（保証したい）ためである。
テープドライブが同期コマンドを受け取ると、テープドライブ内のバッファが空になり書き込むデータが無いままテープ媒体が空走行してしまうが、記録するデータの間隔を狭い状態に保つため、テープドライブは通常「バックヒッチ」を行う。バックヒッチとは、テープ媒体の走行速度を減速して一旦停止し、逆方向に走行し、その後、再度元の方向に走行して書き込むべき位置に達して次のデータを書く、という一連の動作のことである。  このバックヒッチには通常２〜３秒程度の時間を要する。次のデータの書出しはこのバックヒッチの完了後となるため、頻繁に同期コマンドを受け取ると書込みのパフォーマンスが著しく低下してしまう。
こうしたことから、従来、バックヒッチを行わなくて済むようにするための技術が提案されていた（例えば、特許文献１〜３参照）。【０００３】
特許文献１では、ホストから送られたデータセットをバッファメモリに格納し、バッファメモリに格納されたデータセットを取り出してホストに送るホストＩ／Ｆ部と、バッファメモリに格納されたデータセットを取り出してテープに転送し、テープから読み出されたデータセットをバッファメモリに格納するメディアＩ／Ｆ部とを備えた装置において、ホストとの間の転送レートをホストＩ／Ｆ部から取得し、テープに書き込む際のエラーレートをメディアＩ／Ｆ部から取得し、この転送レートとエラーレートに基づいてテープスピードを決定し、決定されたスピードでテープが動作するよう制御している。【０００４】
特許文献２では、複数の書込データをデータ記録媒体に対して予め定められたサイズのセグメント単位で順次書き込む記憶装置において、複数の書込データのそれぞれについて、書込データをデータ記録媒体に対して書き込む書込指示に対応付けて書込データを受信した場合に、書込データをデータ記録媒体の少なくとも一のセグメントに対して書き込み、一の書込データのサイズが予め定められた規定サイズより小さい場合に、データ記録媒体に順次書き込まれた複数の書込データのうち、一の書込データ以降に書き込まれた複数の書込データを連結して、データ記録媒体における、連結の対象となった複数の書込データの書き込みに要していたセグメントより少ない数のセグメントに対して書き込んでいる。また、特許文献２では、バックヒッチを行わずに書込データをテープ記録媒体に対して書き込むバックヒッチレスフラッシュを行うことで、バックヒッチを行う場合と比較して、高速に動作している。【０００５】
特許文献３では、回転可能なスキャナと、スキャナの回転の間に情報が記録されるように、磁気テープを回転可能なスキャナ近くに移送する移送システムとを備えるヘリカルスキャンテープレコーダにおいて、コントローラが、テープへの記録動作中にポーズするためのポーズルーチンとして、テープ上のポーズ前最終記録位置を示すテープポーズ位置基準値を判断するステップと、テープ上のポーズ前最終記録位置の後に消去信号を記録するステップと、テープを巻き戻すステップと、テープを順方向に移送し、現テープ位置値を取得するステップと、現テープ位置値がいつテープポーズ位置基準値に対する所定の値に達するかを判断するステップと、スキャナの次の回転の開始時において、テープへの１つ以上のポーズ後ストライプの記録を開始するステップとを実行している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−３１８５７１号公報
【特許文献２】特開２００４−３４１９２５号公報
【特許文献３】特表２００８−５３３６３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
また、バックヒッチを行わなくて済むようにするためには、同期コマンドを受け取った後、次のデータの書込みが可能となるまで、テープを空走行する（データを書き込まずに走行する）ことも考えられる。しかしながら、データをテープに書き込む時間がテープ速度に比例することから、書込み時間の短縮のために速いテープ速度を用いたとすると、空走行する距離が長くなり、読出し時のパフォーマンスが低下してしまうという問題点があった。
逆に、読出し時のパフォーマンスの目標値を実現しようとすると、空走行する距離を短くせざるを得ないので、その分バックヒッチを行うことになる。従って、バックヒッチの発生頻度やバックヒッチの所要時間を考慮した書込み処理全体の時間を短縮することができなくなってしまう。【０００８】
本発明の目的は、目標の読出しデータレートの実現を妨げることなく、書込みのパフォーマンスを向上することにある。
【課題を解決するための手段】
【０００９】
かかる目的のもと、本発明は、テープ媒体にデータを書き込む際のテープ媒体の走行を制御する装置であって、バックヒッチを行わないことによってデータが書き込まれずに走行するテープ媒体の部分の長さが、テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートの実現を妨げない長さになるように、テープ媒体を走行させる速度を決定する決定部を含む、装置を提供する。【００１０】
ここで、決定部は、予め定められた量の単位データが書き込まれたテープ媒体の範囲において、バックヒッチを伴わないデータの書込みに要する時間である第１の所要時間と、バックヒッチを伴うデータの書込みに要する時間である第２の所要時間とを算出し、第１の所要時間と第２の所要時間とに基づいて、テープ媒体を走行させる速度を決定する、ものであってよい。【００１１】
また、決定部は、範囲においてバックヒッチを行わずにデータを書き込むことが可能な回数である第１の回数に基づいて第１の所要時間を算出し、範囲においてバックヒッチを行ってからデータを書き込むことが必要な回数である第２の回数に基づいて第２の所要時間を算出する、ものであってよい。その場合、テープ媒体にデータを書き込んでから次のデータを書き込むまでの時間の履歴を示す時間履歴情報と、テープ媒体に単位データを書き込むためにデータを書き込んだ回数の履歴を示す回数履歴情報とを記憶する記憶部を更に備え、決定部は、時間履歴情報に基づいて第１の回数を算出し、第１の回数と回数履歴情報とに基づいて第２の回数を算出する、ものであってよい。【００１２】
更に、決定部は、バックヒッチを行わずにデータを書き込むのに要する時間である第１の時間に基づいて第１の所要時間を算出し、バックヒッチを行ってからデータを書き込むのに要する時間である第２の時間に基づいて第２の所要時間を算出する、ものであってよい。その場合、テープ媒体にデータを書き込んでから次のデータを書き込むまでの時間の履歴を示す時間履歴情報と、テープ媒体に１回に書き込むデータの量の履歴を示すデータ量履歴情報とを記憶する記憶部を更に備え、決定部は、時間履歴情報とデータ量履歴情報とに基づいて第１の時間を算出し、予め定められた値を用いて算出されたバックヒッチに要する時間とデータ量履歴情報とに基づいて第２の時間を算出する、ものであってよい。  【００１３】
また、本発明は、テープ媒体にデータを書き込む際のテープ媒体の走行を制御する装置であって、テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートを取得する取得部と、取得部により取得された読出しデータレートを実現するために予め定められた量の単位データが書き込まれたテープ媒体の範囲においてバックヒッチを行わずにデータを書き込むことが可能な回数と、バックヒッチを行わずにデータを書き込むのに要する時間とを乗算して得られた第１の所要時間と、取得部により取得された読出しデータレートを実現するために範囲においてバックヒッチを行ってからデータを書き込むことが必要な回数と、バックヒッチを行ってからデータを書き込むのに要する時間とを乗算して得られた第２の所要時間とに基づいて、テープ媒体を走行させる速度を決定する決定部とを含む、装置も提供する。【００１４】
ここで、決定部は、テープ媒体の複数の速度にそれぞれ対応する第１の所要時間と第２の所要時間との複数の和を算出し、特定の速度についての和が複数の和の中で最小である場合に、特定の速度を、テープ媒体を走行させる速度として決定する、ものであってよい。【００１５】
更に、本発明は、テープ媒体にデータを書き込む際のテープ媒体の走行を制御する方法であって、テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートを取得するステップと、バックヒッチを行わないことによってデータが書き込まれずに走行するテープ媒体の部分の長さが、読出しデータレートの実現を妨げない長さになるように、テープ媒体を走行させる速度を決定するステップとを含む、方法も提供する。【００１６】
更にまた、本発明は、テープ媒体にデータを書き込む際のテープ媒体の走行を制御する装置としてコンピュータを機能させるプログラムであって、コンピュータを、テープ媒体に書き込まれたデータを読み出す際の目標の読出しデータレートを取得する取得部と、バックヒッチを行わないことによってデータが書き込まれずに走行するテープ媒体の部分の長さが、取得部により取得された読出しデータレートの実現を妨げない長さになるように、テープ媒体を走行させる速度を決定する決定部として機能させる、プログラムも提供する。
【発明の効果】
【００１７】
本発明によれば、目標の読出しデータレートの実現を妨げることなく、書込みのパフォーマンスを向上することにある。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施の形態が適用されるテープドライブの構成を示したブロック図である。
【図２】スピードレベルとテープ速度と読出しデータレートとの対応関係の例を示した図である。
【図３】本発明の実施の形態におけるＴ（ｘ）の算出方法について説明するための図である。
【図４】本発明の実施の形態におけるコントローラの機能構成例を示したブロック図である。
【図５】本発明の実施の形態におけるコントローラの動作例を示したフローチャートである。
【図６】本発明の実施の形態のコントローラにおけるバックヒッチ判定部の動作例を示したフローチャートである。
【図７】本発明の実施の形態のコントローラにおける速度決定部の動作例を示したフローチャートである。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
図１は、本実施の形態が適用されるテープドライブ１０の構成例を示した図である。このテープドライブ１０は、ホストインターフェイス（以下、「ホストＩ／Ｆ」という）１１と、バッファ１２と、チャネル１３と、ヘッド１４と、モータ１５とを含む。また、コントローラ１６と、ヘッド位置制御システム１７と、モータドライバ１８とを含む。更に、テープドライブ１０には、テープカートリッジ２０が挿入されることにより装填可能となっているので、ここでは、テープカートリッジ２０も図示している。このテープカートリッジ２０は、リール２１、２２に巻かれたテープ２３を含む。テープ２３は、リール２１、２２の回転に伴い、リール２１からリール２２の方向へ、又は、リール２２からリール２１の方向へ、長手方向に移動する。尚、テープ２３としては、磁気テープが例示されるが、磁気テープ以外のテープ媒体でもよい。
【００２０】
ここで、ホストＩ／Ｆ１１は、上位装置の一例であるホスト３０との通信を行う。例えば、ホスト３０から、テープ２３へのデータの書込みを指示するコマンド、テープ２３を目的の位置に移動させるコマンド、テープ２３からのデータの読出しを指示するコマンド、バッファ１２に蓄積されたデータのテープ２３への強制的な書込みを指示するコマンド（同期コマンド）を受け取る。尚、このホストＩ／Ｆ１１で用いる通信規格としては、ＳＣＳＩが例示される。ＳＣＳＩの場合、１つ目のコマンドは、Ｗｒｉｔｅコマンドに相当し、２つ目のコマンドは、ＬｏｃａｔｅコマンドやＳｐａｃｅコマンドに相当し、３つ目のコマンドは、Ｒｅａｄコマンドに相当し、４つ目のコマンドは、ＷｒｉｔｅＦＭ ｎｏｎ−ｉｍｍｅｄｉａｔｅコマンドに相当する。また、ホストＩ／Ｆ１１は、ホスト３０に対し、これらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【００２１】
バッファ１２は、テープ２３に書き込むべきデータやテープ２３から読み出されたデータを蓄積するメモリである。例えば、ＤＲＡＭ（Dynamic Random Access Memory）によって構成される。また、バッファ１２は、複数のバッファセグメントからなり、各バッファセグメントが、テープ２３に対する読み書きの単位であるデータセットを格納している。  チャネル１３は、テープ２３に書き込むべきデータをヘッド１４に送ったり、テープ２３から読み出されたデータをヘッド１４から受け取ったりするために用いられる通信経路である。
ヘッド１４は、テープ２３が長手方向に移動するとき、テープ２３に対して情報を書き込んだり、テープ２３から情報を読み出したりする。
モータ１５は、リール２１、２２を回転させる。尚、図では、１つの矩形でモータ１５を表しているが、モータ１５としては、リール２１、２２の各々に１つずつ、合計２個設けるのが好ましい。
【００２２】
一方、コントローラ１６は、テープドライブ１０の全体を制御する。例えば、ホストＩ／Ｆ１１で受け付けたコマンドに従って、データのテープ２３への書込みやテープ２３からの読出しを制御する。また、ヘッド位置制御システム１７やモータドライバ１８の制御も行う。
ヘッド位置制御システム１７は、所望の１つ又は複数のラップを追跡するシステムである。ここで、ラップとは、テープ２３上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド１４を電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム１７で行う。
モータドライバ１８は、モータ１５を駆動する。尚、上述したように、モータ１５を２個使用する場合であれば、モータドライバ１８も２個設けられる。
【００２３】
本実施の形態では、かかる構成を有するテープドライブ１０において、同期コマンドを受け取ってもバックヒッチを行わずにそのままテープ２３を走行させ、次のデータを同じラップに書き込む。このように同じラップにバックヒッチを行わずにデータを書き込む方式は、ＳＷＢＦ（Same Wrap Backhitchless Flush）或いはSkip Syncと呼ばれるが、以下では、ＳＷＢＦと呼ぶことにする。
【００２４】
その際、本実施の形態では、書込み時間の短縮のみを考慮して速いテープ速度を用いるのではなく、バックヒッチの回数を抑えて全体の書込み時間を短縮するために、より遅いテープ速度の中から適切なテープ速度を選択して用いることがある。
【００２５】
即ち、テープドライブ１０は、読出し時のパフォーマンスの目標値を達成するために、モニタする一定の範囲において、ＳＷＢＦを実行できる回数とバックヒッチが発生する回数とを算出する。そして、これらの回数に基づいて、段階的に用意されたテープ２３の複数のスピードレベルのうちスピードレベルｘを用いてデータを書き込むのに要する時間Ｔ（ｘ）を算出する。これにより、Ｔ（ｘ）が最小となるスピードレベルを選択すれば、最大のパフォーマンスを得ることが可能となる。
【００２６】
以下、Ｔ（ｘ）の具体的な算出方法について説明する。
まず、Ｔ（ｘ）を算出するのに用いる変数として、Ｓ（ｘ）及びＲ（ｘ）を定義する。即ち、段階的に用意されたテープ２３の複数のスピードレベルのうちスピードレベルｘをＳＰｘと表記すると、Ｓ（ｘ）は、ＳＰｘでのテープ速度［ｍ／ｓｅｃ］であり、Ｒ（ｘ）は、ＳＰｘでの書込みデータレート［ＭＢ／ｓｅｃ］である。
図２に、ＳＰｘ、Ｓ（ｘ）、Ｒ（ｘ）の値の一例として、第５世代ＬＴＯにおける値を示す。
【００２７】
一方、テープドライブ１０は、ＳＰｘでバックヒッチを行うのに要する時間T_backhitch(x)[sec]を、以下の式により算出する。但し、Ａ［ｍ／ｓｅｃ２］は、テープ２３の加速度であり、例えば、１０［ｍ／ｓｅｃ２］である。また、ｓ［ｓｅｃ］は、テープ速度がその変更後に安定するまでの時間であり、例えば、１．０［ｓｅｃ］である。
T_backhitch(x)＝（Ｓ（ｘ）／Ａ）＊４＋ｓ＊２
【００２８】
また、テープドライブ１０は、最高速度であるＳＰ１を用いてデータを読み出すときに目標の読出しデータレートであるTarget_Data_Rateを実現するために許容される空走行の最長距離Max_Length[m]を、以下の式により算出する。
Max_Length＝Max_Interval＊Ｓ（１）
ここで、Max_Interval[sec]は、最高速度であるＳＰ１を用いてデータを読み出すときに目標の読出しデータレートであるTarget_Data_Rateを実現するために許容される空走行の最大時間であり、以下の式により求められる。但し、Target_Data_Size[MB]は、Target_Data_Rateをモニタする対象であるデータのデータ量である。
Max_Interval＝Target_Data_Size／Target_Data_Rate−Target_Data_Size／Ｒ（１）
【００２９】
ところで、本実施の形態において、テープドライブ１０は、パフォーマンスをモニタする対象であるTarget_Data_Sizeのデータをホスト３０から受け取ってテープ２３に書き込んだときに、Average_Interval[sec]、Average_Tx[MB]、ｎを履歴情報として取得し、記録しておく。そして、このような履歴情報を用いることにより、直近の値に基づいて適切なテープ速度を決定する。
ここで、Average_Intervalは、同期を完了してから次のデータを受け取ってテープに書き始めることができるようになるまでの平均時間であり、Average_Txは、同期と同期の間の平均データ転送量であり、ｎは、Target_Data_Sizeを書き込むまでに同期を行った回数である。
【００３０】
このような情報を取得した状態で、テープドライブ１０は、Target_Data_Sizeのデータを書き込むまでに行った同期のうち、ＳＷＢＦを実行可能な同期の数の最大値ｍ（ｘ）を、以下の式により算出する。
ｍ（ｘ）＝Max_Length／ｌ（ｘ）
ここで、ｌ（ｘ）［ｍ］は、テープ２３がＳＰｘに対応するテープ速度で走行している場合において、同期後に空走行する距離であり、以下の式により求められる。
ｌ（ｘ）＝Average_Interval＊Ｓ（ｘ）
また、テープドライブ１０は、Average_TxのデータをＳＷＢＦで書き込むのに要する時間T_swbf(x)[sec]を、以下の式により算出する。
T_swbf(x)＝Average_Tx／Ｒ（Ｘ）＋Average_Interval
更に、テープドライブ１０は、Average_TxのデータをNormal Write（バックヒッチを伴う書込み方法）で書き込むのに要する時間T_normal(x)[sec]を、以下の式により算出する。
T_normal(x)＝T_backhitch(x)＋Average_Tx／Ｒ（ｘ）
【００３１】
これらの値を取得すると、テープドライブ１０は、Target_Data_Sizeのデータを書き込むのに要する時間Ｔ（ｘ）を、以下の式により算出する。
Ｔ（ｘ）＝ｍ（Ｘ）＊T_swbf(x)＋（ｎ−ｍ（Ｘ））＊T_normal(x)
そして、Ｔ（ｘ）が一番小さくなるテープ速度でデータを書き込むとパフォーマンスが良くなる。
【００３２】
図３は、この算出方法について具体的に示した概念図である。尚、図では、Target_Data_Sizeを１００ＭＢとし、Average_Txを１０ＭＢとし、ｎを１０としている。
（ａ）は、ＳＰ１に対応する最速のテープ速度Ｓ（１）でNormal Writeを行った場合を示す。
同期時には、１０ＭＢのデータが書かれた後、バックヒッチが行われ、次の１０ＭＢのデータが詰めて書かれている。その結果、読出し時のパフォーマンスを保つために一定のデータ量を書かなければならない範囲（図中、黒い太矢印で示した範囲）には、Max_Length[m]のデータが書かれていない部分（図中、白い太矢印で示した部分）が生じている。  
【００３３】
一方、（ｂ）は、ＳＰｘに対応するテープ速度Ｓ（ｘ）でＳＷＢＦを行った場合を示す。
この場合、１回目の同期Ｓｙｎｃ（１）で１０ＭＢのデータを書いた後は、白い太矢印で示すように、空走行を行っている。ここで、空走行は距離ｌ（ｘ）にわたって行われるので、読出し時のパフォーマンスを保つために一定のデータ量を書かなければならない範囲（図中、黒い太矢印で示した範囲）内で無制限に行えるものではない。そこで、図では、この範囲内で空走行を行える回数ｍ（ｘ）を２とし、２回目の同期Ｓｙｎｃ（２）で１０ＭＢのデータを書いた後から５回目までの同期Ｓｙｎｃ（５）で１０ＭＢのデータを書いた後までは、バックヒッチを行っている。その後、６回目の同期Ｓｙｎｃ（６）で１０ＭＢのデータを書いた後は、白い太矢印で示すように、空走行を行い、７回目の同期Ｓｙｎｃ（７）で１０ＭＢのデータを書いた後から９回目までの同期Ｓｙｎｃ（９）で１０ＭＢのデータを書いた後までは、バックヒッチを行っている。
【００３４】
次に、このような動作を実現するためのコントローラ１６の機能構成について説明する。
図４は、コントローラ１６の機能構成例を示したブロック図である。
図示するように、コントローラ１６は、コマンド処理部４１と、バッファ管理部４２と、チャネル入出力部４３と、バックヒッチ判定部４４と、目標容量記憶部４５と、速度決定部４６と、履歴記憶部４７と、速度テーブル記憶部４８と、動作信号出力部４９とを備える。
【００３５】
このうち、コマンド処理部４１は、ホストＩ／Ｆ１１からコマンドを受け取る。ここで、コマンドとしては、例えば、バッファ１２にデータを格納することを指示するＷｒｉｔｅコマンド、バッファ１２に格納されたデータをテープ２３に書き込む同期コマンド（ＷｒｉｔｅＦＭコマンド等）がある。
バッファ管理部４２は、コマンド処理部４１がＷｒｉｔｅコマンドを受け取った場合は、データをバッファ１２内に用意する。また、コマンド処理部４１が同期コマンドを受け取った場合は、データをバッファ１２から読み出してチャネル入出力部４３に出力する。  チャネル入出力部４３は、バッファ管理部４２がバッファ１２から読み出したデータをチャネル１３に出力したり、チャネル１３から受け取ったデータをバッファ１２に格納したりする。
【００３６】
バックヒッチ判定部４４は、目標容量をテープ２３に書き出すことと、目標とする読出しデータレートを確保することのために、バックヒッチを行うべきかどうかを判定する。  目標容量記憶部４５は、テープ２３の公称容量のうち書き込むべき目標容量の情報を記憶する。
【００３７】
速度決定部４６は、バックヒッチ判定部４４がバックヒッチを行うと判定した場合に、目標とする読出しデータレートを確保するためのテープ速度を決定する。本実施の形態では、目標の読出しデータレートを取得する取得部の一例として、また、テープ媒体を走行させる速度を決定する決定部の一例として、速度決定部４６を設けている。
履歴記憶部４７は、過去にデータを書き込んだときの履歴情報を記憶する。ここで、履歴情報には、例えば、これまでのテープ２３上で空走行が行われた長さ、同期の回数、同期から同期までの時間や、同期に応じて書き込まれたデータのサイズ（トランザクションサイズ）等の情報がある。また、現在の書込み位置から遡って一定量のデータが書かれた範囲についてのみ、これらの情報を履歴情報として記憶するようにしてもよい。本実施の形態では、履歴情報を記憶する記憶部の一例として、履歴記憶部４７を設けている。
速度テーブル記憶部４８は、テープ２３に対して複数段階用意されたスピードレベルと、各スピードレベルに対応するテープ速度や読出しデータレートとの対応を含む速度テーブルを記憶する。
動作信号出力部４９は、モータドライバ１８に対して、バックヒッチ判定部４４又は速度決定部４６で決定された動作を行うことを指示する信号を出力する。
【００３８】
次に、コントローラ１６の動作について説明する。
図５は、コントローラ１６の動作例を示したフローチャートである。尚、この動作例は、バッファ１２内のデータセットが同期コマンドに応じてテープ２３に書き込まれているときに開始するものとする。
コントローラ１６では、このようなデータセットの書込み中に、バッファ管理部４２が、バッファ１２から最後のデータセットを読み出してチャネル入出力部４３に渡し、チャネル入出力部４３が、渡されたデータセットをテープ２３に書き込む（ステップ４０１）。
【００３９】
このとき、最後のデータセットがテープ２３に書き込まれたことがバッファ管理部４２に伝えられるので、バッファ管理部４２は、バックヒッチ判定部４４に対して、バックヒッチを行うかどうかを判定するよう指示する。これにより、バックヒッチ判定部４４は、目標容量をテープ２３に書き出し、かつ、目標とする読出しデータレートを確保するという観点からバックヒッチを行うかどうかを判定するバックヒッチ判定処理を行う（ステップ４０２）。尚、このバックヒッチ判定処理の詳細については後述する。そして、バックヒッチ判定処理における判定結果は、動作信号出力部４９に出力される。
【００４０】
これにより、動作信号出力部４９は、判定結果がＳＷＢＦを実行すること（バックヒッチを行わないこと）を示しているかどうかを判定する（ステップ４０３）。
ここで、判定結果がＳＷＢＦを実行することを示していない場合、動作信号出力部４９は、モータドライバ１８に対し、バックヒッチを開始する旨の信号を出力する（ステップ４０９）。
一方、判定結果がＳＷＢＦを実行することを示している場合、動作信号出力部４９は、制御をバッファ管理部４２に戻し、バッファ管理部４２が、トランザクションサイズ（図では「ＴＲサイズ」と表記）とバッファ１２のサイズ（図では「ＢＵＦサイズ」と表記）とを比較する（ステップ４０４）。ここで、トランザクションサイズとしては、例えば、過去の３つのトランザクションのサイズの平均値を用いるとよい。
【００４１】
その結果、トランザクションサイズがバッファ１２のサイズよりも小さければ、バッファ管理部４２は、速度決定部４６に対して、テープ２３の新たな速度を決定するよう指示する。これにより、速度決定部４６は、テープ２３の新たな速度を決定するテープ速度決定処理を行う（ステップ４０５）。尚、このテープ速度決定処理の詳細についても後述する。
【００４２】
その後、現在のテープ速度がこのテープ速度決定処理で決定されたテープ速度と異なるならば、ＳＷＢＦは実行されることなく、バックヒッチが行われ、テープ速度が変更される。具体的には、速度決定部４６が、ステップ４０５で決定されたテープ速度が現在のテープ速度に等しいかどうかを判定する（ステップ４０６）。そして、これらのテープ速度が等しければ、ＳＷＢＦを実行することを決定する（ステップ４０７）。また、これらのテープ速度が等しくなければ、ステップ４０５で決定されたテープ速度をバックヒッチ後に用いることを決定し、動作信号出力部４９に伝える（ステップ４０８）。すると、動作信号出力部４９は、モータドライバ１８に対し、バックヒッチを開始する旨の信号を出力する（ステップ４０９）。そして、このバックヒッチの後に、テープ２３の速度が変更されることになる。
【００４３】
一方、ステップ４０４でトランザクションサイズがバッファ１２のサイズ以上であると判定されれば、ＳＷＢＦを実行することを決定する（ステップ４０７）。
このようにして、ＳＷＢＦを実行することの決定、又は、バックヒッチの開始がなされると、その旨はコマンド処理部４１に返され、コマンド処理部４１は、同期コマンドの完了をホスト３０に報告する（ステップ４１０）。
【００４４】
その後、コマンド処理部４１は、次のデータセットを受け付けてバッファ管理部４２に受け渡し、バッファ管理部４２が、受け付けたデータをバッファ１２に格納する（ステップ４１１）。
次に、バッファ管理部４２は、新しい書込みを開始するために十分なデータセットが受け取られたかどうかを判定する（ステップ４１２）。そして、十分なデータセットが受け取られていないと判定されれば、ステップ４１０の終了後から一定時間経過したかどうかの判断に移り（ステップ４１３）、一定時間が経過していなければ、暫く待って（ステップ４１４）、再度ステップ４１２の判定を行う。一定時間が経過していれば、バッファ管理部４２は、動作信号出力部４９に制御を渡し、動作信号出力部４９が、モータドライバ１８に対し、バックヒッチを開始するように指示する信号を出力する（ステップ４１６）。また、ステップ４１２で十分なデータセットが受け取られたと判定されれば、現在のヘッド１４の位置と最後に書かれたデータセットの終端の位置との間隔が短いかどうかを判定する（ステップ４１５）。例えば、その間隔が、データセット間隔の閾値よりも長いかどうかを判定すればよい。
【００４５】
ここで、ステップ４１０の終了後から一定時間が経過した場合、及び、十分なデータセットを受け取った後、現在のヘッド１４の位置と最後に書かれたデータセットの終端の位置との間隔が長い場合、バッファ管理部４２は、動作信号出力部４９に制御を渡し、動作信号出力部４９が、モータドライバ１８に対し、バックヒッチを開始するように指示する信号を出力する（ステップ４１６）。そして、バッファ管理部４２は、バッファ１２からデータセットを読み出してチャネル入出力部４３に受け渡し、チャネル入出力部４３が、データセットをテープ２３に書き込む（ステップ４１７）。
一方、現在のヘッド１４の位置と最後に書かれたデータセットの終端の位置との間隔が短ければ、バックヒッチは行わずに、バッファ管理部４２が、バッファ１２からデータセットを読み出してチャネル入出力部４３に受け渡し、チャネル入出力部４３が、データセットをテープ２３に書き込む（ステップ４１７）。
【００４６】
その後、チャネル入出力部４３が、データの書込みに関する履歴情報をバッファ管理部４２に伝え、バッファ管理部４２が、この履歴情報を履歴記憶部４７に記憶する（ステップ４１８）。ここで、履歴情報には、現在の書込み位置の直近の単位データ（ターゲットデータ）が書き込まれた範囲内に生じたデータセット間の間隔の累計であるAccumulated_Interval、そのときのテープ速度Ｓ（ｘ）、同期を完了してから次のデータを受け取ってテープに書き始めることができるようになるまでの平均時間Average_Interval（時間履歴情報の一例）、同期と同期の間の平均データ転送量Average_Tx（データ量履歴情報の一例）、Target_Data_Sizeを書き込むまでに同期を行った回数ｎ（回数履歴情報の一例）等がある。
【００４７】
次に、ステップ４０２のバックヒッチ判定処理について詳細に説明する。
図６は、バックヒッチ判定処理の流れを示したフローチャートである。
バックヒッチ判定部４４は、まず、図示しないメモリに記憶されたモード情報を取得する（ステップ５０１）。そして、モード情報が高データレートモードを示しているかどうかを判定する（ステップ５０２）。ここで、高データレートモードとは、公称容量よりも少ない目標容量（Target Capacity）を書き込むことを前提としたモードである。
その結果、モード情報が高データレートモードを示していると判定されれば、バックヒッチ判定部４４は、目標容量記憶部４５から目標容量を取得する（ステップ５０３）。また、バックヒッチ判定部４４は、総データセット数Ｃ、有効テープ長Ｔ、ＳＷＢＦ用マージン比率ｒ、最終データサイズセット位置ｐ、最終データセット番号ｗ、データセット長Ｌを取得する（ステップ５０４）。このうち、Ｃ、Ｔ、Ｌは、予め内部に保持された設定情報から取得するとよい。また、ｒは、ステップ５０３で取得した目標容量を公称容量で除することによって求めるとよい。更に、ｐ、ｗは、ステップ４０１で最後のデータセットを書き込んだときに得られるので、その値を取得するとよい。
【００４８】
次に、バックヒッチ判定部４４は、このようにして取得した値に関し、条件式「（Ｃ×ｒ−ｗ）×Ｌ＜Ｔ−ｐ」が成立するかどうかを判定する（ステップ５０５）。
ここで、条件式が成立した場合、バックヒッチ判定部４４は、Target_Data_Size、Target_Data_Rate、Ｒ（１）、Accumulated_Interval、Ｓ（ｘ）、Ｓ（１）を取得する（ステップ５０６）。このうち、Target_Data_Size、Target_Data_Rate、は、予め内部に保持された設定情報から取得するとよい。また、Ｒ（１）、Ｓ（１）は、速度テーブル記憶部４８に記憶された速度テーブルを検索することにより取得するとよい。更に、Accumulated_Interval、Ｓ（ｘ）は、ステップ４１８で履歴記憶部４７に記憶されたものを取得するとよい。
【００４９】
次に、バックヒッチ判定部４４は、式「Threshold＝Target_Data_Size／Target_Data_Rate−Target_Data_Size／Ｒ（１）−Accumulated_Interval＊Ｓ（ｘ）／Ｓ（１）」により、Thresholdを求め（ステップ５０７）、Thresholdが０より大きいかどうかを判定する（ステップ５０８）。
その結果、Thresholdが０より大きいと判定されれば、ＳＷＢＦを実行することを判定結果とする（ステップ５０９）。
一方、ステップ５０２でモード情報が高データレートモードを示していないと判定された場合、ステップ５０５で条件式「（Ｃ×ｒ−ｗ）×Ｌ＜Ｔ−ｐ」が成立しないと判定された場合、及び、ステップ５０８でThresholdが０以下と判定された場合は、バックヒッチを行うことを判定結果とする（ステップ５１０）。
【００５０】
次に、ステップ４０５のテープ速度決定処理について詳細に説明する。
図７は、テープ速度決定処理の流れを示したフローチャートである。尚、この動作例は、ＳＷＢＦに対する容量基準が満たされるときでも、同期タイミングにおいて、ＳＷＢＦを行うかバックヒッチを行うかを追加的に決定するものである。
まず、速度決定部４６は、Ｓ（１）、Ｒ（１）、Target_Data_Size、Target_Data_Rate、Average_Interval、Average_Tx、ｎ、Ａ、ｓを取得する（ステップ６０１）。このうち、Target_Data_Size、Target_Data_Rate、Ａ、ｓは、予め内部に保持された設定情報から取得するとよい。また、Ｓ（１）、Ｒ（１）は、速度テーブル記憶部４８に記憶された速度テーブルを検索することにより取得するとよい。更に、Average_Interval、Average_Tx、ｎは、ステップ４１８で履歴記憶部４７に記憶されたものを取得するとよい。
【００５１】
次に、速度決定部４６は、Max_Lengthを算出する（ステップ６０２）。具体的には、まず、ステップ６０１で取得したＲ（１）、Target_Data_Size、Target_Data_Rateを用いて、「Max_Interval＝Target_Data_Size／Target_Data_Rate−Target_Data_Size／Ｒ（１）」により、Max_Intervalを算出する。また、ステップ６０１で取得したＳ（１）を用いて、「Max_Length＝Max_Interval＊Ｓ（１）」により、Max_Lengthを算出する。
【００５２】
次いで、速度決定部４６は、Ｔ（１）を算出する（ステップ６０３）。具体的には、まず、ステップ６０１で取得したＳ（１）、Ａ、ｓを用いて、「T_backhitch(1)＝（Ｓ（１）／Ａ）＊４＋ｓ＊２」により、T_backhitch(1)を算出する。また、同じくステップ６０１で取得したＲ（１）、Average_Txを用いて、「T_normal(1)＝T_backhitch(1)＋Average_Tx／Ｒ（１）」により、T_normal(1)を算出する。更に、同じくステップ６０１で取得したＲ（１）、Average_Tx、Average_Intervalを用いて、「T_swbf(1)＝Average_Tx／Ｒ（１）＋Average_Interval」により、T_swbf(1)を算出する。また、同じくステップ６０１で取得したＳ（１）、Average_Intervalを用いて、「ｌ（１）＝Average_Interval＊Ｓ（１）」により、ｌ（１）を算出する。更に、ステップ６０２で算出したMax_Lengthを用いて、「ｍ（１）＝Max_Length／ｌ（１）」により、ｍ（１）を算出する。更にまた、ステップ６０１で取得したｎを用いて、「Ｔ（１）＝ｍ（１）＊T_swbf(1)＋（ｎ―ｍ（１））＊T_normal(1)」により、Ｔ（１）を算出する。
【００５３】
その後、速度決定部４６は、スピードレベルを表す変数ｘに２を代入する（ステップ６０４）。
そして、速度決定部４６は、変数ｘが２の場合から５の場合までの各場合において、Ｔ（ｘ）を評価する処理を行う。
即ち、まず、速度決定部４６は、Ｓ（ｘ）、Ｒ（ｘ）を取得する（ステップ６０５）。ここで、Ｓ（ｘ）、Ｒ（ｘ）は、速度テーブル記憶部４８に記憶された速度テーブルを検索することにより取得するとよい。
【００５４】
次に、速度決定部４６は、Ｔ（ｘ）を算出する（ステップ６０６）。具体的には、まず、ステップ６０５で取得したＳ（ｘ）と、ステップ６０１で取得したＡ、ｓとを用いて、「T_backhitch(x)＝（Ｓ（ｘ）／Ａ）＊４＋ｓ＊２」により、T_backhitch(x)を算出する。また、ステップ６０５で取得したＲ（ｘ）と、ステップ６０１で取得したAverage_Txとを用いて、「T_normal(x)＝T_backhitch(x)＋Average_Tx／Ｒ（ｘ）」により、T_normal(x)を算出する。更に、ステップ６０５で取得したＲ（ｘ）と、ステップ６０１で取得したAverage_Tx、Average_Intervalとを用いて、「T_swbf(x)＝Average_Tx／Ｒ（ｘ）＋Average_Interval」により、T_swbf(x)を算出する。また、ステップ６０５で取得したＳ（ｘ）と、ステップ６０１で取得したAverage_Intervalを用いて、「ｌ（ｘ）＝Average_Interval＊Ｓ（ｘ）」により、ｌ（ｘ）を算出する。更に、ステップ６０２で算出したMax_Lengthを用いて、「ｍ（ｘ）＝Max_Length／ｌ（ｘ）」により、ｍ（ｘ）を算出する。更にまた、ステップ６０１で取得したｎを用いて、「Ｔ（ｘ）＝ｍ（ｘ）＊T_swbf(x)＋（ｎ−ｍ（ｘ））＊T_normal(x)」により、Ｔ（ｘ）を算出する。尚、ｍ（ｘ）＊T_swbf(x)は第１の所要時間の一例であり、（ｎ−ｍ（ｘ））＊T_normal(x)は第２の所要時間の一例である。また、ｍ（ｘ）は第１の回数の一例であり、（ｎ−ｍ（ｘ））は第２の回数の一例である。更に、T_swbf(x)は第１の時間の一例であり、T_normal(x)は第２の時間の一例である。
【００５５】
その後、速度決定部４６は、Ｔ（ｘ）がＴ（ｘ−１）よりも小さいかどうかを判定する（ステップ６０７）。つまり、Ｔ（ｘ）が最小となる場合に、テープ２３をテープ速度Ｓ（ｘ）で走行させれば、最大のパフォーマンスが得られるので、そのようなＴ（ｘ）を探索する処理を行っている。
その結果、Ｔ（ｘ）がＴ（ｘ−１）よりも小さいと判定されれば、速度決定部４６は、ｘに１を加算する（ステップ６０８）。そして、加算後のｘが５以下であるかどうかを判定する（ステップ６０９）。つまり、本実施の形態において、テープドライブ１０に用意されたスピードレベルは１から５までであるので、Ｓ（ｘ）よりも遅い速度があるかどうかを判定する。その結果、加算後のｘが５以下であれば、ステップ６０５に戻る。
このようにしてステップ６０５〜６０９を繰り返し、ステップ６０９でｘが５に達し、これ以上遅い速度がないと判定されたとする。この場合は、選択された速度を表す変数ChosenSpeedに対し、速度テーブル記憶部４８に登録された最も遅い速度であるＳ（５）を設定する（ステップ６１０）。一方、ステップ６０７でＴ（ｘ）がＴ（ｘ−１）よりも小さくないと判定されたとする。この場合は、選択された速度を表す変数ChosenSpeedに対し、そのとき評価しているＴ（ｘ）の１つ前のＴ（ｘ−１）に対応するＳ（ｘ−１）を設定する（ステップ６１１）。
【００５６】
以上により、本実施の形態についての説明を終了する。
このように、本実施の形態では、ＳＷＢＦによって空走行が生じても目標の読出しデータレートを実現可能なテープ速度を選択し、そのテープ速度でテープ２３を走行させてデータを書き込むようにした。これにより、書込み時のパフォーマンスを向上しつつ、目標の読出しデータレートも確保することができる。
【００５７】
尚、本実施の形態では、テープ２３の速度を変更するに先立ってバックヒッチを行うようにしたが、バックヒッチを行わずにテープ２３の速度を変更する構成としてもよい。
また、上記では、テープ速度を段階的に変更するテープドライブ１０に本実施の形態を適用した場合について説明したが、本実施の形態は、テープ速度を無段階変速可能なテープドライブ装置に対しても適用可能である。
【００５８】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００５９】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００６０】
１０…テープドライブ、１１…ホストＩ／Ｆ、１２…バッファ、１３…チャネル、１４…ヘッド、１５…モータ、１６…コントローラ、１７…ヘッド位置制御システム、１８…モータドライバ、２０…テープカートリッジ、２１，２２…リール、２３…テープ、３０…ホスト、４１…コマンド処理部、４２…バッファ管理部、４３…チャネル入出力部、４４…バックヒッチ判定部、４５…目標容量記憶部、４６…速度決定部、４７…履歴記憶部、４８…速度テーブル記憶部、４９…動作信号出力部
【図１】
0005385992.tif 000002
【図２】
0005385992.tif 000003
【図３】
0005385992.tif 000004
【図４】
0005385992.tif 000005
【図５】
0005385992.tif 000006
【図６】
0005385992.tif 000007
【図７】
0005385992.tif 000008