(57)【特許請求の範囲】
【請求項１】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動する方法であって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを受け取るステップと、
アクセスが、非同期コピーとしてのアクセスであるかどうかを判断するステップと、
非同期コピーとしてのアクセスであるものと判断される場合には、タイムアウト（Ｔ）をセットするステップと、
セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）をリコールするステップと、
セットされたタイムアウト（Ｔ）が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートするステップと、を有する、
方法。
【請求項２】
非同期コピーとしてのアクセスがあるアプリケーションを、ユーザＩＤ（ＵＩＤ）によって区別することを特徴とする、
請求項１に記載の方法。
【請求項３】
ユーザＩＤ（ＵＩＤ）ごとに、タイムアウト（Ｔ）がセットされていることを特徴とする、
請求項２に記載の方法。
【請求項４】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動する方法であって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを観察するステップと、
アクセスが、特定のアプリケーションからのアクセスであるかどうかを判断するステップと、
特定のアプリケーションからのアクセスであるものと判断される場合には、セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）をリコールした後、特定のアプリケーション以外のアプリケーションからのアクセスとは異なる扱いをするために、セットされている所定の時間が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートするステップと、を有する、
方法。
【請求項５】
特定のアプリケーションが、非同期コピーとしてのアクセスを伴うアプリケーションである、
請求項４に記載の方法。
【請求項６】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動するＨＳＭクライアントであって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを受け取り、
アクセスが、非同期コピーとしてのアクセスであるかどうかを判断し、
非同期コピーとしてのアクセスであるものと判断される場合には、タイムアウト（Ｔ）をセットし、
セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）のリコールを要求し、
セットされたタイムアウト（Ｔ）が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートする、
ＨＳＭクライアント。
【請求項７】
非同期コピーとしてのアクセスがあるアプリケーションを、ユーザＩＤ（ＵＩＤ）によって区別することを特徴とする、
請求項６に記載のＨＳＭクライアント。
【請求項８】
ユーザＩＤ（ＵＩＤ）ごとに、タイムアウト（Ｔ）がセットされていることを特徴とする、
請求項７に記載のＨＳＭクライアント。
【請求項９】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動するＨＳＭクライアントであって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを観察し、
アクセスが、特定のアプリケーションからのアクセスであるかどうかを判断し、
特定のアプリケーションからのアクセスであるものと判断される場合には、セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）をリコールした後、特定のアプリケーション以外のアプリケーションからのアクセスとは異なる扱いをするために、セットされている所定の時間が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートする、
ＨＳＭクライアント。
【請求項１０】
特定のアプリケーションが、非同期コピーとしてのアクセスを伴うアプリケーションである、
請求項９に記載のＨＳＭクライアント。
【請求項１１】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）として、プライマリーストレージとセカンダリーストレージとの間においてデータを移動するＨＳＭであって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを受け取り、
アクセスが、非同期コピーとしてのアクセスであるかどうかを判断し、
非同期コピーとしてのアクセスであるものと判断される場合には、タイムアウト（Ｔ）をセットし、
セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）のリコールを要求し、
セットされたタイムアウト（Ｔ）が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートする、
ＨＳＭ。
【請求項１２】
非同期コピーとしてのアクセスがあるアプリケーションを、ユーザＩＤ（ＵＩＤ）によって区別することを特徴とする、
請求項１１に記載のＨＳＭ。
【請求項１３】
ユーザＩＤ（ＵＩＤ）ごとに、タイムアウト（Ｔ）がセットされていることを特徴とする、
請求項１２に記載のＨＳＭ。
【請求項１４】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）として、プライマリーストレージとセカンダリーストレージとの間においてデータを移動するＨＳＭであって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを観察し、
アクセスが、特定のアプリケーションからのアクセスであるかどうかを判断し、
特定のアプリケーションからのアクセスであるものと判断される場合には、セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）をリコールした後、特定のアプリケーション以外のアプリケーションからのアクセスとは異なる扱いをするために、セットされている所定の時間が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートする、
ＨＳＭ。
【請求項１５】
特定のアプリケーションが、非同期コピーとしてのアクセスを伴うアプリケーションである、
請求項１４に記載のＨＳＭ。
【請求項１６】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動することを実行する、プライマリーストレージの上で動く、または、プライマリーストレージの上で動く、プログラムであって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを受け取るステップと、
アクセスが、非同期コピーとしてのアクセスであるかどうかを判断するステップと、
非同期コピーとしてのアクセスであるものと判断される場合には、タイムアウト（Ｔ）をセットするステップと、
セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）をリコールするステップと、
セットされたタイムアウト（Ｔ）が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートするステップと、を有していて、
これらのステップをコンピュータに実行させる、
プログラム。
【請求項１７】
非同期コピーとしてのアクセスがあるアプリケーションを、ユーザＩＤ（ＵＩＤ）によって区別することを特徴とする、
請求項１６に記載のプログラム。
【請求項１８】
ユーザＩＤ（ＵＩＤ）ごとに、タイムアウト（Ｔ）がセットされていることを特徴とする、
請求項１７に記載のプログラム。
【請求項１９】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動することを実行する、プライマリーストレージの上で動く、または、プライマリーストレージの上で動く、プログラムであって、
アプリケーションからのアクセスであって、プライマリーストレージまたはセカンダリーストレージに記憶されているファイル（Ｆ）へのアクセスを観察するステップと、
アクセスが、特定のアプリケーションからのアクセスであるかどうかを判断するステップと、
特定のアプリケーションからのアクセスであるものと判断される場合には、セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）をリコールした後、特定のアプリケーション以外のアプリケーションからのアクセスとは異なる扱いをするために、セットされている所定の時間が経過したら、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートするステップと、を有していて、
これらのステップをコンピュータに実行させる、
プログラム。
【請求項２０】
特定のアプリケーションが、非同期コピーとしてのアクセスを伴うアプリケーションである、
請求項１９に記載のプログラム。
【請求項２１】
タイムアウト（Ｔ）または所定の時間が、リコールからの経過時間としてセットされる、
請求項１または４に記載の方法。
【請求項２２】
タイムアウト（Ｔ）または所定の時間が、リコールからの経過時間としてセットされる、
請求項６または９に記載のＨＳＭクライアント。
【請求項２３】
タイムアウト（Ｔ）または所定の時間が、リコールからの経過時間としてセットされる、
請求項１１または１４に記載のＨＳＭ。
【請求項２４】
タイムアウト（Ｔ）または所定の時間が、リコールからの経過時間としてセットされる、
請求項１６または１９に記載のプログラム。
【請求項２５】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動することを実行するＨＳＭクライアントによって使用される、タイムアウトテーブルであって、
非同期コピーとしてのアクセスがあるアプリケーションを、ユーザＩＤ（ＵＩＤ）によって区別していて、かつ、
ユーザＩＤ（ＵＩＤ）ごとに、タイムアウト（Ｔ）をセットしているが、ＨＳＭクライアントが、セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）のリコールを要求したこととの関係で、タイムアウト（Ｔ）をセットしていて、
ＨＳＭクライアントによって、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートするためのタイミングとして、セットされているタイムアウト（Ｔ）が参照して使用される、
タイムアウトテーブル。
【請求項２６】
データのアクセス頻度またはポリシーに応じてプライマリーストレージまたはセカンダリーストレージの何れかを選択的に使用する階層型ストレージ（ＨＳＭ）において、プライマリーストレージとセカンダリーストレージとの間においてデータを移動することを実行するＨＳＭクライアントによって使用される、タイムアウトテーブルであって、
特定のアプリケーションと、特定のアプリケーション以外のアプリケーションとを、ユーザＩＤ（ＵＩＤ）によって区別していて、かつ、
ユーザＩＤ（ＵＩＤ）ごとに、タイムアウト（Ｔ）をセットしているが、ＨＳＭクライアントが、セカンダリーストレージから、プライマリーストレージへと、ファイル（Ｆ）のリコールを要求したこととの関係で、タイムアウト（Ｔ）をセットしていて、
ＨＳＭクライアントによって、プライマリーストレージから、セカンダリーストレージへと、ファイル（Ｆ）をマイグレートするためのタイミングとして、セットされているタイムアウト（Ｔ）が参照して使用される、
タイムアウトテーブル。
【請求項２７】
特定のアプリケーションが、非同期コピーとしてのアクセスを伴うアプリケーションである、
請求項２６に記載のタイムアウトテーブル。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、階層型ストレージにおけるマイグレーションに関する。
【背景技術】
【０００２】
= HSMについて =
【０００３】
ストレージシステムにおいて、費用対効果を高めるために、データのアクセス頻度などに応じて使用するストレージデバイスを動的に選択して選択的に使用する、階層型ストレージ（以下HSM）というアーキテクチャが近年広く使われている。
【０００４】
図１は、階層型ストレージ（以下、HSM）における操作(operation)を示す図である。
【０００５】
階層型ストレージにおいては、アクセス頻度の高いデータを（相対的に）高速・高コスト・小容量なディスク(HDD)などに保存し、そうではないデータを（相対的に）低速・低コスト・大容量なテープ(Tape)などに保存することによって、「アクセス頻度」に応じて最適な記憶装置デバイスにデータを保存することができる。
【０００６】
この例の設定では、ディスク(HDD)がプライマリーにアクセスに対応するプライマリーストレージとして、テープ(Tape)がセカンダリーにアクセスに対応するセカンダリーストレージとして、２種類の記憶装置デバイスが設定されている。
【０００７】
通常、これらの記憶装置デバイスの選択は、ユーザがあらかじめ設定したポリシーによって自動的に行われる。
【０００８】
「ポリシー」とは、どのようなデータをどの記憶装置デバイスに保存するか、を定めたルールであり、例えば「過去90日間にアクセスのないファイルをテープに移動する」といったルールがポリシーにあたる。
【０００９】
HSMにおいては、これら記憶装置デバイスである、HDDとテープとの間におけるデータの実体の移動は、ユーザの側から透過的に行われる。
【００１０】
以下では、（相対的に）高速な記憶装置としてディスクを、（相対的に）低速な記憶装置としてテープを用いて説明する。
【００１１】
HSMにおいては、一般的に、以下のような複数の種類の操作（operation）が利用可能である。
【００１２】
migrate: ディスクからテープへデータを移動させること。
【００１３】
recall: テープからディスクへデータを移動させること。
【００１４】
図２は、HSMにおけるファイルの状態を示す模式図である。
【００１５】
また、一般に、上記の操作に伴い、HSMにおけるファイルは、以下の(A)(B)(C)の何れかの状態を持つことになる。
【００１６】
図２においては、ファイルがある（存在する）状態を太線で、ファイルがない状態を破線で、模式的に示している。
【００１７】
(A) resident:  ファイルのデータがディスクのみにある状態。
【００１８】
(B) migrated:  ファイルのデータがテープのみにある状態。
【００１９】
(C) premigrated:  ファイルのデータがディスクとテープの両方にある状態。
【００２０】
(C) の状態は、一般的には、migrateする前にpremigrate処理を実行してディスクとテープの両方にデータを残した場合、もしくは、recall直後におけるファイルの状態である。
【００２１】
recallが行なわれた直後には、一般的にはテープ上のデータは直ぐに削除されるようなことはないため、一時的に、ディスクとテープとの両方にデータが存在していることになるからである。
【００２２】
図３は、HSMにおけるサーバ・クライアントモデルの実装を示す模式図である。
【００２３】
操作を実行する主体は、HSMにおいてはしばしば、ここに模式的に示すようなサーバ・クライアントモデルとして実装される。
【００２４】
HSMクライアント：  ディスク(HDD)などのプライマリストレージに接続されたマシンおよびその上で動くプログラム。
【００２５】
HSMサーバ：  テープなどのセカンダリストレージに接続されたマシンおよびその上で動くプログラム。
【００２６】
HSMクライアントは、ファイルへのアクセスなどを受け取り、またはアクセスなどを観察し、ポリシーに応じてHSMサーバへmigrate/recallの要求を送る。
【００２７】
HSMサーバは、HSMクライアントから送られたデータをテープに書き込んだり、テープから読み出したデータをHSMクライアントに送ったりする。
【００２８】
通常、ユーザの側からは、migrate/recallを意識することはない。
【００２９】
HSMを実現するソフトウェアとして、例えばIBM (IBM Corporationの商標) TSM HSMがある。
【００３０】
= 非同期コピーについて =
【００３１】
一方、ストレージシステムにおいて、ホストからのI/Oとは非同期に、運用サイトのデータをバックアップサイトへコピーする「非同期コピー」というアプリケーションが存在する。
【００３２】
非同期コピーにおいては通常、ある時点でのコピーでは、前回のコピー時以降に変更のあったファイルのみを転送するインクリメンタルコピーを行うのが普通である。
【００３３】
非同期コピー機能を持ったストレージとして、例えばIBM SONASがある。
【００３４】
= HSM上での非同期コピーについて =
【００３５】
通常、非同期コピーとHSMとは、独立して実装・運用されており、HSMで運用管理を行うストレージシステムにおいて同期コピーを実行するということは珍しくない。
【００３６】
実際、例えばIBM SONASは、HSMと非同期コピーの両方をサポートしている。
【００３７】
このようなシステムにおいては通常、非同期コピーは、あるファイルがmigrateされているのかどうか分からない。
【００３８】
そのため、migrateされているファイルがコピー対象になった場合、非同期コピーはそのファイルを読み出そうとし、その結果として、HSMが当該ファイルをrecallすることになる。
【００３９】
非同期コピーではファイルの中身を読んで、バックアップサイトに読取ったファイルの中身を送る必要が生じる。
【００４０】
従って、非同期コピーでは、ファイルがmigratedな場合にrecallする操作を行なうことを避けることができない。
【００４１】
しかし、階層型ストレージの目的を考えると、非同期コピーがrecallしたファイルは、ユーザによってrecallされたファイルとは異なり、今後アクセスされる可能性が増えたりするといったアクセス頻度の増加が見込まれる訳ではない。
【００４２】
従って、非同期コピーがそのファイルのデータを読み取り次第、なるべく早く、再びmigrateすることが望ましい。
【００４３】
これは特に、プライマリーストレージであるディスクの容量が比較的小さい場合などにおいて重要となってくる。
【００４４】
非同期コピーによってrecallされたファイルをコピー終了後になるべく早くmigrateする方法として、premigratedの状態にあることを利用する方法が考えられる。
【００４５】
一般にrecallされたファイルは、その直後にpremigrated状態になる。
【００４６】
非同期コピーがrecallを実行させた場合もこの状態を生じさせてしまうため、HSMポリシーに「premigratedの状態にあるファイルをmigrateする」と設定しておくと、非同期コピー実行後には適時migrateされていくと考えられる。
【００４７】
しかしこのような手法では、非同期コピー以外からのアクセスによってpremigratedになったファイルも同様に扱われてしまう。
【００４８】
これは、それらの(premigratedな)ファイルを優先的にmigrateしたくないような場合には不都合な問題となり、実際にそのような事例に遭遇した。
【００４９】
特許文献１〜６はいずれもデータのマイグレーションについて記載がある。
【００５０】
また特許文献１〜特許文献６には、階層型ストレージの記憶制御について記載がある。
【００５１】
ただし、これらの各文献には、本発明が解決しようとする手段の構成が断片的に開示されているにすぎない。
【００５２】
特に、これらいずれの文献にも、「アプリケーションの処理が完了次第なるべく早くmigrateする」ことについては記載がない。
【００５３】
特許文献７〜１１は、参考事例にすぎない。
【００５４】
従来技術には、本発明が解決しようとする問題に着目しているものは見あたらず、そのような問題を解決することができる既存の手法は存在しない。
【先行技術文献】
【特許文献】
【００５５】
【特許文献１】特開２００３−２９６１５１
【特許文献２】特開２０１０−２５７０２０
【特許文献３】特開平５−８１０９０
【特許文献４】特開２０１２−９８９６５
【特許文献５】特開２００８−１１２２９１
【特許文献６】特開２００６−２５２２４７
【特許文献７】特開平６−４４１０７
【特許文献８】特開２０１０−２５７０９４
【特許文献９】特開２０１１−１８６７９４
【特許文献１０】特開２００６−９９７６３
【特許文献１１】特開２０１４−３８４６３
【発明の概要】
【発明が解決しようとする課題】
【００５６】
本発明の目的は、非同期コピーがrecallしたファイルを、ユーザの側から透過的に、コピー完了後になるべく早くmigrateする方法を提供することにある。
【課題を解決するための手段】
【００５７】
階層型ストレージにおいて、特定のアプリケーションによってrecallされたファイルを、アプリケーションの処理が完了次第なるべく早くmigrateする。
【００５８】
具体的には、あらかじめ特定のプロセスの実効UIDをHSMクライアントに登録しておき、そのユーザIDからあるファイルにrecall操作があった後、当該UIDからそのファイルへのアクセスが一定時間にわたって無かった場合に、そのファイルをmigrateする、というものである。
【発明の効果】
【００５９】
非同期コピー以外からのアクセスによってpremigratedになったファイルも同様に扱われてしまうようなことがなく、それらの(premigratedな)ファイルを優先的にmigrateしたくないような場合に生じてしまう不都合な問題が解消される。
【図面の簡単な説明】
【００６０】
【図１】図１は、階層型ストレージ（以下、HSM）における操作(operation)を示す図である。
【図２】図２は、HSMにおけるファイルの状態を示す模式図である。
【図３】図３は、HSMにおけるサーバ・クライアントモデルの実装を示す模式図である。
【図４】図４は、HSMにおけるアプリケーションのアクセスの状況を示す模式図である。
【図５】図５は、複数のアプリケーションに本発明を適用する場合の登録例を示す図である。
【図６】図６は、あるアプリケーションが、ファイルfへのアクセスをする動作例を示す図である。
【図７】図７は、あるアプリケーションが、ファイルfへのアクセスをする場合に、HSMクライアントにおいてtimerを動作させる例を示す図である。
【発明を実施するための形態】
【００６１】
本発明の一実施形態では、新規に以下の構成要素を管理・使用することで、recallされたファイルをなるべく早いタイミングでmigrateし直す手法を提案する。：
【００６２】
−  recallを発生させたユーザID
【００６３】
−  recallからの経過時間
【００６４】
−  上記ユーザIDと，タイムアウト値の組からなる、timeout table
【００６５】
それぞれの構成要素の詳細と、これらを利用する新規手法については後述する。
【００６６】
本発明は、基本的にHSMクライアントにのみ変更を加えることで実現できる。
【００６７】
つまり、本発明は、既存のアプリケーション自体には変更を加えることなく適用できるような場合がほとんどである。
【００６８】
以下で、まず本発明の手法の大まかな流れを説明し、その後詳細について実施例を挙げながら説明していく。
【００６９】
<< 本発明の手法の大まかな流れ >>
【００７０】
ここでは、本手法の全体の大まかな流れを説明する．
【００７１】
図４は、HSMにおけるアプリケーションのアクセスの状況を示す模式図である。
【００７２】
HSMが構成されているシステム上で、あるアプリケーションAが動いている状況を想定する。
【００７３】
アプリケーションAは、migrateされているファイルFにアクセスすることになる。
【００７４】
このファイルFへのアクセスの際recallを伴い、Fはpre-migratedないしresident状態となるが、AによるFへのアクセスが終わり次第、なるべく早くFをmigrateし直せるように、以下のように動作する。
【００７５】
１．あらかじめ、Aの実効ユーザID Uと、タイムアウトTとを登録しておく。
【００７６】
２．UによるFへのアクセス時にtimerをスタートする。このtimerはUからFへのアクセスがある度にリセットする。
【００７７】
３．U以外によるFへのアクセス時には、timerを削除する。
【００７８】
４．timerの値がTを超えたとき、Fをmigrateしtimerを削除する。
【００７９】
<< 本手法の詳細な説明 >>
【００８０】
ここでは本手法の詳細について説明する。
【００８１】
説明のため、アプリケーションが非同期コピーである場合の動作について例を示しながら説明するが、本発明はアプリケーションによらず適用可能である。
【００８２】
= 1.準備 =
【００８３】
以下のステップは、アプリケーションの使用を開始する前に一度だけ実行する。
【００８４】
1-1. 専用ユーザの作成
【００８５】
対象システムのOSに応じて、任意の方法で専用ユーザを作成する。
【００８６】
この専用ユーザのUIDをuとする。
【００８７】
1-2. ユーザとタイムアウト値の登録
【００８８】
非同期コピーを実行するマシン上のHSMクライアントに、uとタイムアウト値tを組にして、timeoutテーブルに登録する。
【００８９】
tは、「非同期コピーにおいて、あるファイルに対する処理を完了するまでに行われる連続したI/O命令の最大間隔」とする。
【００９０】
このtは、アプリケーションや、アプリケーションを実行するマシン、その他、環境に依存する。
【００９１】
例えば、ある1GBのファイルを非同期コピーする場合を考える。
【００９２】
その際、コピー元のマシンでこのファイルを読み込み、それをsshなどのプロトコルを用いてコピー先へネットワーク転送するが、通常は、より小さい単位（例えば512KB）ずつreadし、それをバッファに溜めていき、ある程度バッファに溜まったときに（例えば16MB）、それをネットワーク転送する。
【００９３】
つまり、read単位が512KBであるなら、1GB分のデータを読むのに2048回のread system callが呼び出される。
【００９４】
この場合、tは、これらの各read system callの呼び出し間隔として十分な時間とする。
【００９５】
逆に言えば、アプリケーションからこのファイルへのreadがt秒以上なければ、このファイルに関する処理が完了したものとみなせるようなtを設定する。
【００９６】
tの具体的な値を決める際に、例えば以下のように考えることができる。
【００９７】
−  実行環境のcpu,disk,networkなどの帯域が十分にあり、かつ、単にファイルデータを読み込みそれらを一気にネットワーク転送するだけなら、各readの間隔は十分小さい（1秒以下）はずである。
【００９８】
したがってtとして（十分な余裕を持たせて）900秒 (=15分)という値を設定できる。
【００９９】
−  上記と異なり、ファイルデータを読み込んだ後、データの圧縮を行い、その圧縮データをネットワーク転送するような場合を考えると、上記の場合よりもreadの間隔は長くなることが予想される。
【０１００】
このような場合は、上記よりもさらに余裕を持たせて、t=1800秒 としても良い。
【０１０１】
ここでtの値は15分程度と考えているが、一方で、本手法を適用しない場合にポリシーによるmigrateが行われる場合には、通常「最後にアクセスされてから60日以上経っているファイルをmigrateする」などの、非常に長い期間をしきい値とする。
【０１０２】
15分と60日を比較し、本手法によるmigrateが非常に早いタイミングで行われることが分かる。
【０１０３】
適切なtの値は環境に依存するが、ファイルの入出力状況（file I/O）をモニターしながら実際にアプリケーションを実行してみることで、適当なtを決定できる。
【０１０４】
もし複数のアプリケーションに本発明を適用する場合には、アプリケーションごとに異なるUIDそれぞれに対して、timeout値を登録する。
【０１０５】
図５は、複数のアプリケーションに本発明を適用する場合の登録例を示す図である。
【０１０６】
ここでは例として、timeout tableを用いる。
【０１０７】
ここで、非同期アプリケーションの実効UIDは10とし、もうひとつ、本発明を用いる別のアプリケーションのUIDを20とする。
【０１０８】
1-3. 非同期コピープログラムへの変更
【０１０９】
本発明を適用するために、非同期コピー中にデータのI/O処理を行う部分で、実効ユーザIDがuとなるようにしなければならない。
【０１１０】
これを実現する方法はシステムに応じて処理が異なるが、例えばLinux (Linus Torvaldsの商標)では、実効ユーザIDがuであるプロセスから、非同期コピーを実行すれば良い。
【０１１１】
また、必要に応じてseteuid system callを使うこともできる。
【０１１２】
= 2. 非同期コピーが、あるmigratedなファイルfへのアクセスを開始するとき =
【０１１３】
以下の処理は、非同期コピーが、migrateされているファイルfへのアクセスを開始するときに、そのファイルfについて一度だけ行う。
【０１１４】
ここでは、説明のため、ファイルfがコピー元にある場合を考えるが、コピー先にある場合にも本発明を適用できる。
【０１１５】
もしfがresident/premigratedな状態にあるような場合、非同期コピーはディスク上のデータを、HSMクライントを介さずそのまま読み込むことができる。
【０１１６】
このような場合、ファイルfに対して本発明は一切適用されない。
【０１１７】
fがmigratedな状態にある場合、非同期コピーがfのデータを読み込もうとすると、HSMクライアントはHSMサーバにrecall処理を要求する。
【０１１８】
この際、HSMクライアントは、fを読み込もうとしているプロセスのUIDを調べ、それがtimeoutテーブルに載っているものかどうかを判定する。
【０１１９】
図６は、あるアプリケーションが、ファイルfへのアクセスをする動作例を示す図である。
【０１２０】
動作は、次の１〜３のようになる。
【０１２１】
１．  非同期コピー（UID=10）が、ストレージ上のファイルfを読み込もうとする。
【０１２２】
２．  fはmigratedであるため，HSMクライアントはHSMサーバに対して、fのrecallを要求する。
【０１２３】
３．  テープなどにあるファイルfの実体データが，ストレージ上のファイルfに展開（もしくはメモリ上に展開）される。
【０１２４】
ここで、ファイルfにアクセスしているプロセスの実効UIDがtimeout tableに存在する場合、recallをHSMサーバへ要求する前に、HSMクライアントにて以下の処理を行う。
【０１２５】
2-1. access timerのスタート
【０１２６】
ファイルfへのRecall処理が発生したときに、内部的にファイルf用のaccess timerに0をセットしtimerをスタートする。
【０１２７】
このtimerは、uからfへのアクセスが発生する度に0にリセットし直される（後述）。
【０１２８】
すなわち、timerは「非同期コピーが最後にファイルfにアクセスしてからの経過時間」を表す。
【０１２９】
2-2. DMAPIで、read/writeをフック
【０１３０】
ファイルfへのファイルアクセス（メタデータ、データのIO）時にフック関数hookが呼ばれるようにする。
【０１３１】
この関数hookは、「非同期コピーがファイルfへのアクセスを終えた」とみなせるタイミングで削除されることになる（後述）。
【０１３２】
この関数hookの登録は、例えばSNIAで標準化されているDMAPI (Data Management API)を使用することによって実現できる。
【０１３３】
DMAPIは、XFS, JFS, GPFS (IBM Corporationの商標)などにおいてサポートされており、SONASにおいても使用することができる。
【０１３４】
対象ファイルシステムがDMAPIをサポートしていない場合の手法は後述する。
【０１３５】
この関数hook内で以下の処理を行う。
【０１３６】
−  fにアクセスするプロセスのUIDがuのとき、timerを0でリセットする。
【０１３７】
−  fにアクセスするプロセスのUIDがu以外のとき、timerおよびhook関数を削除する。
【０１３８】
後者は、非同期コピー以外の、例えばユーザプロセスがファイルfにアクセスしてきた場合などを意味する。
【０１３９】
この場合は、fをmigrate するかどうかは、本発明ではなく既存のポリシーに従うようにする。
【０１４０】
したがって、UID=uのアプリケーションがfの処理を完了する前に、timeout tableに載っていない別のアプリケーションがfにアクセスした場合、従来のHSMポリシーの通り今後fにさらなるアクセスがあるものとし、fのmigrateを行わない。
【０１４１】
図７は、あるアプリケーションが、ファイルfへのアクセスをする場合に、HSMクライアントにおいてtimerを動作させる例を示す図である。
【０１４２】
上記の2-1と2-2の処理を図示すると、図７のようになる。
【０１４３】
１．  HSMクライアントが「UID=10のファイルf用のtimer」をスタートさせる。
【０１４４】
２．  DMAPIを用いて「ファイルf用のフック関数hook」をセットする。この関数は、fへのアクセスがある度に呼び出される。
【０１４５】
= 3. 非同期コピーが、ファイルfを用いた処理を開始してから完了するまで =
【０１４６】
ステップ2においてrecallが完了すると、非同期コピープロセスはファイルfのreadを始める。
【０１４７】
このfへのread中，HSMクライアントで以下のことを行う。
【０１４８】
3-1. timerのタイムアウト検出
【０１４９】
fのtimerのタイムアウトを検知したら、非同期コピーがfへの処理を完了したとみなし、タイムアウト・ルーチンにより、関数hookを削除し、fをmigrateする。
【０１５０】
ただし、fに関するtimerが複数ある場合（つまり，複数のアプリケーションに対して本発明を適用している場合）は、すべてのtimerがタイムアウトしたときだけmigrateするようにし、関数hookも削除しない。
【０１５１】
= 対象ファイルシステムがDMAPIを実装していない場合 =
【０１５２】
対象ファイルシステムがDMAPIを実装していない場合は、以下の処理を行うことで本発明を実現できる。
【０１５３】
−  2-1において、timerをkickしたときのatimeを覚えておく。
【０１５４】
−  3-1において、その時点のfのatimeを取得し、覚えておいたatimeと比較する。
【０１５５】
atimeがupdateされていたら、timerをリセットする。
【０１５６】
ただしこの方法だと、非同期コピーがfを処理している間に、別のプロセスがfにアクセスした場合でも、一定時間経過後にはfがmigrateされてしまう。
【０１５７】
本発明では、説明のため、アプリケーションとして非同期コピーを例として述べているが、本発明の技術的思想はアプリケーションによらず適用が可能である。
【０１５８】
また、記憶装置デバイスとして、プライマリーストレージとしてはディスクを、セカンダリーストレージとしてはテープを例として説明してきたが、当業者であれば様々な記憶装置に対して、記憶装置の種類によらず適用が可能である。
【図１】
0006005116.tif 000002
【図２】
0006005116.tif 000003
【図３】
0006005116.tif 000004
【図４】
0006005116.tif 000005
【図５】
0006005116.tif 000006
【図６】
0006005116.tif 000007
【図７】
0006005116.tif 000008