JP5976980B1 - 階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法 - Google Patents
階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法 Download PDFInfo
- Publication number
- JP5976980B1 JP5976980B1 JP2016514212A JP2016514212A JP5976980B1 JP 5976980 B1 JP5976980 B1 JP 5976980B1 JP 2016514212 A JP2016514212 A JP 2016514212A JP 2016514212 A JP2016514212 A JP 2016514212A JP 5976980 B1 JP5976980 B1 JP 5976980B1
- Authority
- JP
- Japan
- Prior art keywords
- logical block
- entry
- block address
- data
- count
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
実施形態によれば、階層化ストレージシステムは、階層化ストレージ装置と、当該階層化ストレージ装置を利用するコンピュータとを含む。前記コンピュータは、ファイルシステムと、補正支援部とを含む。前記ファイルシステムは、アプリケーションからのアクセス要求がデータの上書きを要求するライト要求である場合、コピーオンライト動作を実行する。前記補正支援部は、前記ストレージコントローラによって管理されていて、且つ前記コピーオンライト動作におけるコピー元の論理ブロックアドレスに対応付けられたアクセスカウントを、前記コピーオンライト動作におけるコピー先の論理ブロックアドレスに対応付けられたアクセスカウントに引き継がせる。
Description
本発明の実施形態は、階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法に関する。
近年、アクセス速度の異なる第1及び第2のストレージ装置を備えたストレージシステムが開発されている。ここで、第1のストレージ装置のアクセス速度及び記憶容量は高速で小容量であり、第2のストレージ装置のアクセス速度及び記憶容量は、第1のストレージ装置のそれと比較して低速で大容量であるものとする。ストレージシステムは、第1のストレージ装置(以下、高速ストレージ装置と称する)及び第2のストレージ装置(以下、低速ストレージ装置と称する)を階層的に組み合わせることにより実現される。そこで、このようなストレージシステムは、階層化ストレージシステムとも呼ばれる。
階層化ストレージシステムでは、使用頻度の高いデータは高速ストレージ装置内の記憶領域に配置され、使用頻度の低いデータは低速ストレージ装置内の記憶領域に配置される。このような配置(つまり階層化)により、階層化ストレージシステムの高パフォーマンスと低コストを両立することができる。
階層化が十分な効果を発揮するためには、データが配置されるべき領域(階層)が、例えば、当該データの使用頻度に基づいて適切に決定される必要がある。そこで従来技術では、階層化ストレージシステム内のストレージコントローラは、各領域(例えば論理領域)へのアクセスのカウントを、アクセスカウントテーブルを用いて管理する。ストレージコントローラは、アクセスカウントテーブルに基づいて、アクセスカウントの多い論理領域のデータを高速ストレージ装置に、アクセスカウントの少ない論理領域のデータを低速ストレージ装置に、それぞれ再配置する。
ところで、階層化ストレージシステムを含む近年のストレージシステムは、コピーオンライト機能を有しているのが一般的である。コピーオンライト機能が有効な状態に設定された階層化ストレージシステムにおいて、コンピュータ上で動作するアプリケーションが、第1のファイルの第1の箇所(より詳細には、第1の相対位置)に新たなデータ(第2のデータ)を上書きするものとする。また、第1のファイルの第1の箇所は、第1の論理領域と対応付けられており、したがって当該第1の箇所のデータ(第1のデータ)は、第1の論理領域に格納されているものとする。
この場合、ストレージコントローラはファイルシステムからのアクセス要求に応じて、第1の論理領域(旧領域)から第1のデータを読み出して、当該読み出された第1のデータを第1の論理領域とは別の空きの第2の論理領域(新領域)に書き込む(つまり、コピーする)。そしてストレージコントローラは、第2の論理領域に、第2のデータを書き込む(上書きする)。つまりストレージコントローラは、第1のデータのコピーを第2のデータで置き換える。以上の、読み出し、書き込み、及び書き込みから構成される一連の動作を、コピーオンライト動作と呼ぶ。
アプリケーションはコピーオンライト動作に無関係に、第1のファイル内の第1の箇所のデータ(第1のデータ)に第2のデータを上書きしている(書き込んでいる)と認識している。しかしコピーオン動作では、第2のデータは、第1のデータのコピー先、つまり第1のデータが格納されている旧領域とは別の新領域に書き込まれる。この場合、ストレージコントローラでは、第1のファイルの第1の箇所へのアクセスに関するアクセスカウントは、旧領域へのアクセスのカウントと新領域へのアクセスのカウントとに分散されて記録される。この結果、例えば、ファイルアクセスの状況からは高速ストレージ装置に配置されるべきデータでも、低速ストレージ装置に配置される可能性があり、ユーザの利便性を損ねる可能性がある。
本発明が解決しようとする課題は、ストレージコントローラが管理するアクセスカウントを、コピーオンライト機能が有効な場合でも、アプリケーションが認識するファイルアクセスの状況に合致するように補正することができ、ユーザの利便性の向上に寄与する階層化を実現することができる階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法を提供することにある。
実施形態によれば、階層化ストレージシステムは、階層化ストレージ装置と、前記階層化ストレージ装置を利用するコンピュータとを具備する。前記階層化ストレージ装置は、アクセス性能の異なる複数のストレージ装置と、前記複数のストレージ装置へのアクセスを制御するストレージコントローラとを具備する。前記ストレージコントローラは、前記複数のストレージ装置の記憶領域がブロック単位で割り当てられる論理ユニット内の論理ブロックを示す論理ブロックアドレスにそれぞれ対応付けて、前記論理ブロックへのアクセスのカウントを管理し、且つ前記論理ブロックアドレスにそれぞれ対応付けられたアクセスカウントに基づいて、前記論理ブロックに格納されるデータを前記複数のストレージ装置の1つに再配置する。前記コンピュータは、ファイルシステムと、デバイスドライバとを具備する。前記ファイルシステムは、前記コンピュータ上で動作するアプリケーションからの、ファイル名と当該ファイル名で示されるファイル内のアクセスされるべきブロックの相対位置情報とを含むアクセス要求に応じて、前記アクセスされるべきブロックに対応付けられた論理ブロックアドレスを含むリード要求またはライト要求を発行する。前記デバイスドライバは、前記ファイルシステムからのリード要求またはライト要求を前記ストレージコントローラに送出することにより、前記階層化ストレージ装置にアクセスする。前記コンピュータまたは前記階層化ストレージ装置は、前記ストレージコントローラによって管理されるアクセスカウントの補正を支援する補正支援部を更に具備する。前記ファイルシステムは、前記アプリケーションから要求されたファイルを、当該ファイルを構成するブロックそれぞれの当該ファイル内の相対位置と、当該ファイルを構成するブロックのデータが格納される論理ブロックそれぞれの論理ブロックアドレスとを対応付けることによって管理し、前記アクセス要求がデータの上書きを要求するライト要求WRである場合、上書きされるべきデータを、当該上書きされるべきデータが格納されている論理ブロックとは異なる論理ブロックにコピーした後、当該コピー先に前記ライト要求WRで指定されたデータを書き込むためのコピーオンライト動作を、前記デバイスドライバを用いて実行する。前記補正支援部は、前記ストレージコントローラによって管理されていて、且つ前記コピーオンライト動作におけるコピー元の論理ブロックアドレスに対応付けられたアクセスカウントを、前記コピーオンライト動作におけるコピー先の論理ブロックアドレスに対応付けられたアクセスカウントに引き継がせる。
以下、種々の実施の形態につき図面を参照して説明する。
<第1の実施形態>
図1は、第1の実施形態に係る階層化ストレージシステムの典型的なハードウェア構成を示すブロック図である。図1に示される階層化ストレージシステムは、n台のコンピュータ10_1乃至10_nと階層化ストレージ装置20とを含む。コンピュータ10_1乃至10_nは、階層化ストレージ装置20を自身のストレージ装置として利用するホストコンピュータとして機能する。図1では、コンピュータ10_1乃至10_nのうちのコンピュータ10_1の構成のみが示されている。しかし、コンピュータ10_nを含む、他のn−1台のコンピュータも、コンピュータ10_1と同様の構成を有している。
<第1の実施形態>
図1は、第1の実施形態に係る階層化ストレージシステムの典型的なハードウェア構成を示すブロック図である。図1に示される階層化ストレージシステムは、n台のコンピュータ10_1乃至10_nと階層化ストレージ装置20とを含む。コンピュータ10_1乃至10_nは、階層化ストレージ装置20を自身のストレージ装置として利用するホストコンピュータとして機能する。図1では、コンピュータ10_1乃至10_nのうちのコンピュータ10_1の構成のみが示されている。しかし、コンピュータ10_nを含む、他のn−1台のコンピュータも、コンピュータ10_1と同様の構成を有している。
コンピュータ10_1は、CPU11と、主メモリ12と、HDD13と、ホストインタフェース(HI)コントローラ14とを含む。CPU11、主メモリ12、HDD13、及びHIコントローラ14は、システムバス15によって接続されている。なお、処理の高速化のために、コンピュータ10_1が、CPU11を含む複数のCPUを含んでいても構わない。
主メモリ12は、オペレーティングシステム(OS)121、アプリケーション122、デバイスドライバ123(より詳細には、デバイスドライバプログラム)及びデーモン124(より詳細には、デーモンプロセスプログラム)等を格納するのに用いられる。OS121、アプリケーション122、デバイスドライバ123及びデーモン124は、例えばHDD13に格納されており、当該HDD13から主メモリ12にロードされて用いられる。
HIコントローラ14は、コンピュータ10_1と階層化ストレージ装置20のストレージコントローラ23との間のデータ転送を制御する。HIコントローラ14は、アプリケーション122からのアクセス要求に基づくデバイスドライバ123からのアクセス要求を、ストレージコントローラ23に送信する。HIコントローラ14はまた、デバイスドライバ123からのアクセス要求に対するストレージコントローラ23からの応答(返り値)を受信して、当該応答をデバイスドライバ123に返す。
階層化ストレージ装置20は、ホストインタフェースバス30を介してコンピュータ10_1乃至10_nと接続されている。なお、階層化ストレージ装置20が、ストレージエリアネットワーク(SAN)のようなネットワークを介してコンピュータ10_1乃至10_nと接続されていても良い。また、階層化ストレージ装置20がコンピュータ10_1のみと接続されていても構わない。つまり、階層化ストレージ装置20が、コンピュータ10_1のみによって利用されても構わない。
階層化ストレージ装置20は、アクセス性能の異なる複数のストレージ装置、例えば高速ストレージ装置21及び低速ストレージ装置22と、上述のストレージコントローラ23とを含む。ストレージコントローラ23は、ストレージインタフェースバス24を介して高速ストレージ装置21及び低速ストレージ装置22と接続されている。
高速ストレージ装置21は、例えば、フラッシュアレイのような、アクセス性能に優れた(つまり、アクセス速度が高速な)フラッシュストレージ装置から構成される。フラッシュストレージ装置は、複数のフラッシュメモリボードを用いて実現される。フラッシュメモリボードの各々は、フラッシュメモリの集合を含む。第1の実施形態では、複数のフラッシュメモリボードの各々はハードディスクドライブ(HDD)との互換性を有していないものとする。しかし、複数のフラッシュメモリボードに代えて、HDDとの互換性を有する複数のソリッドステートドライブ(SSD)が用いられても構わない。
一方、低速ストレージ装置22は、例えば、高速ストレージ装置21と比較してアクセス性能が低い(つまり、アクセス速度が低速な)ハードディスクドライブ(HDD)アレイから構成される。HDDアレイは、例えば、複数のHDDを備えたRAID(Redundant Arrays of Inexpensive DisksまたはRedundant Arrays of Independent Disks)構成のストレージ装置である。HDDアレイが、ファイバチャネル(FC)用のHDDのような高速HDDから構成されていても、或いは、シリアルATA(SATA)用のHDDのような低速HDDから構成されていても構わない。
なお、高速ストレージ装置21及び低速ストレージ装置22が必ずしもアレイ構成を有している必要はない。また、高速ストレージ装置21が少なくとも1つの高速HDDから構成され、低速ストレージ装置22が少なくとも1つの低速HDDから構成されていても良い。また、低速ストレージ装置22が、ブルーレイディスク(登録商標)ドライブ、或いはDVD(登録商標)ドライブのような光学式ディスクドライブ、或いはテープ装置から構成されていても良い。また低速ストレージ装置22がテープ装置から構成される場合、高速ストレージ装置21が光学式ディスクドライブから構成されていても良い。
図2は、図1に示される階層化ストレージシステムの典型的な機能構成を示すブロック図である。図2に示されるように、OS121は、アプリケーション122からのリード要求またはライト要求に応じて発行されるリードシステムコールまたはライトシステムコールを受けて対応するサービスを実行する。このようなシステムコールを発行する機構は、ライブラリ(ライブラリ関数)またはジャケットライブラリと呼ばれる。OS121は、コピーオンライト(copy-on-write : COW)機能を有する。
OS121は、ファイルシステム1210を含む。ファイルシステム1210は、アプリケーション122を含むアプリケーション群によって利用されるファイルと、当該ファイルを構成する、一定サイズのブロック群の論理空間(以下、論理ユニットと称する)内の位置とを対応付ける。論理ユニットは、論理ディスク、或いは論理ボリュームとも呼ばれる。ブロックのサイズは、ファイルシステム1210が論理ユニットを管理するのに用いられる。即ちファイルシステム1210は、論理ユニットを複数のブロック(論理ブロック)に分割することで、当該論理ユニットの利用状況をブロック(ブロックサイズ)単位に管理する。また、ファイルシステム1210は、論理ユニット内の空きブロックを管理する。
論理ユニット内のブロックには、先頭ブロックから順に論理ブロックアドレスがシーケンシャルに割り当てられる。一方、ファイル内のブロックには、先頭ブロックから順にオフセットと呼ばれる数値がシーケンシャルに割り当てられる。つまり、ファイル内のブロックに割り当てられるオフセットは、当該ブロックのファイル内の相対位置を示す。
ここで、アプリケーション122によって利用されるファイルFが2m個のブロックBLK0乃至BLK2m−1から構成され、当該ブロックBLK0乃至BLK2m−1が、論理ユニット内において論理ブロックアドレスLBAa乃至LBAa+2m−1で指定される範囲の領域(論理領域)に格納されているものとする。この場合、アプリケーション122は、ファイルFを、当該ファイルFの格納先に無関係に、当該ファイルFのファイル名F1と、オフセットOFST0と、ファイルサイズFSとにより認識する。オフセットOFST0の値は0であり、ファイルFの先頭ブロックBLK0を示す。ファイルサイズFSは、ファイルFのブロックの数2mを示す。
一方、ファイルシステム1210は、ファイルFを、ファイル名F1と、ブロックBLK0乃至BLK2m−1のオフセットOFST0(=0)乃至OFST2m−1(=2m−1)と、論理ブロックアドレスLBAa乃至LBAa+2m−1とを対応付けることによって管理する。なお、ファイルシステム1210が、ファイルFを、ファイル名F1と、オフセットOFST0(=0)と、ファイルサイズFS(=2m)と、先頭ブロックBLK0の論理ブロックアドレスLBAaとを対応付けることによって管理しても良い。
ここで、ファイルF内のm個のブロックBLK0乃至BLKm−1が、論理ユニット内において論理ブロックアドレスLBAa乃至LBAa+m−1で指定される範囲の領域に格納されているものとする。また、ファイルF内の残りのm個のブロックBLKm乃至BLK2m−1が、論理ユニット内において論理ブロックアドレスLBAb乃至LBAb+m−1で指定される範囲の領域に格納されているものとする。
この場合、ファイルシステム1210が、ファイルFを、ブロックBLK0乃至BLKm−1の集合(以下、エクステントEXT0と称する)とブロックBLKm乃至BLK2m−1の集合(以下、エクステントEXT1と称する)とに分けて管理しても良い。即ち、ファイルシステム1210が、エクステントEXT0を、ファイル名F1と、エクステントEXT0の先頭ブロックBLK0のオフセットOFST0(=0)と、エクステントEXT0のサイズES0(=m)と、ブロックBLK0の論理ブロックアドレスLBAaとを対応付けることによって管理しても良い。同様に、ファイルシステム1210が、エクステントEXT1を、ファイル名F1と、エクステントEXT1の先頭ブロックBLKmのオフセットOFSTm(=m)と、エクステントEXT1のサイズES1(=m)と、ブロックBLKmの論理ブロックアドレスLBAbとを対応付けることによって管理しても良い。
デバイスドライバ123は、CPU11がデバイスドライバプログラムを実行することにより実現される。デバイスドライバ123は、OS121の制御の下で、当該OS121と周辺装置との間の通信(データ転送)を実行する。デバイスドライバ123は特に、OS121内のファイルシステム1210からの要求に従い、図1に示されるHIコントローラ14を介して、階層化ストレージ装置20にリード要求またはライト要求を送出することにより、階層化ストレージ装置20へのアクセスを実行する。第1の実施形態では、リード要求またはライト要求で指定されるデータの長さが1ブロックであるものとする。つまり第1の実施形態では、1ブロック単位でのリード要求またはライト要求を想定している。
デバイスドライバ123は更に、階層化ストレージ装置20へのアクセス(1ブロック単位でのアクセス)に関する入出力(input and output : IO)情報を、当該アクセスに応じてデーモン124に渡す。IO情報は、IO(アクセス)種別を示すIO識別子、アクセス先の論理ブロックアドレス(LBA)及びハッシュ値を含む。ハッシュ値は、アクセス先から読み出されたデータ、またはアクセス先に書き込まれるデータに基づいて算出される。このハッシュ値の算出には、例えばSHA−256のようなハッシュ関数が適用される。なお、リード要求またはライト要求によって任意の長さのデータが指定される場合、IO情報に、当該データの長さ(ブロック数)を示す情報を追加すれば良い。
デーモン124は、図1に示されるCPU11が、デーモンプロセスプログラムを実行することにより実現され、ストレージコントローラ23によって管理されるアクセスカウントの補正を支援する補正支援部として機能する。デーモン124の機能については、後述する。
ストレージコントローラ23は、アクセスカウントテーブル230を含む。アクセスカウントテーブル230は、論理ブロックアドレスに対応付けられたエントリ群を含む。このエントリ群の各々は、対応する論理ブロックアドレスとカウント(アクセスカウント)とを保持するのに用いられる。カウントは、対応する論理ブロックアドレスで指定されるブロックへのアクセスの回数を示し、アクセス頻度またはアクセス統計値と称される。
ストレージコントローラ23は、アクセスカウントテーブル230のエントリ群に保持されたカウントに基づいて、当該エントリ群に対応する論理ブロックアドレスで指定されるブロック(論理ブロック)に、高速ストレージ装置21または低速ストレージ装置22内のブロック(物理ブロック)を割り当てる。具体的には、ストレージコントローラ23は、アクセス回数(カウント)が多い論理ユニット内のブロックに、高速ストレージ装置21内のブロックを優先的に割り当てる。アクセス回数が多いブロックとは、例えば、アクセス回数が上位の一定数のブロックである。なお、アクセス回数が基準の回数(つまり、閾値)より多いブロックが一定数を超えていないならば、アクセス回数が多いブロックが、アクセス回数が基準の回数より多いブロックであっても構わない。また、ストレージコントローラ23は、論理ユニット内の残りのブロック(つまり、アクセス回数が少ないブロック)に、低速ストレージ装置22内のブロックを割り当てる。
ここで、論理ユニット内の第1の論理ブロックへのアクセスの状況が変化したために、当該第1の論理ブロックに割り当てられる物理ブロックが、高速ストレージ装置21内の第1の物理ブロックから低速ストレージ装置22内の空きの第2の物理ブロック、または低速ストレージ装置22内の第3の物理ブロックから高速ストレージ装置21内の空きの第4の物理ブロックに変更されるものとする。この場合、ストレージコントローラ23は、第1の物理ブロックから第2の物理ブロックへのデータの再配置(移動)、または第3の物理ブロックから第4の物理ブロックへのデータの再配置を行う。この再配置により、階層化ストレージ装置20は動的に階層化される。
図3は、図1及び図2に示されるデーモン124の典型的な機能構成を示すブロック図である。デーモン124は、データ管理テーブル1241、IO情報処理部1242及びエントリ削除部1243を含む。データ管理テーブル1241のエントリは、デバイスドライバ123からデーモン124に渡されたIO情報中のIO識別子がリードを示している場合に、IO情報処理部1242によって追加される。データ管理テーブル1241は、物理的には、デーモン124によってアクセス可能なメモリ領域に保持される。このメモリ領域が、主メモリ12内に存在しても、或いは主メモリ12とは別のメモリ内に存在しても構わない。データ管理テーブル1241のデータ構造については後述する。
IO情報処理部1242は、デバイスドライバ123から渡されたIO情報に基づいて、データ管理テーブル1241のエントリの追加、データ管理テーブル1241からのエントリの検索、及び検索されたエントリの情報の更新を実行する。検索されたエントリの情報の更新とは、旧情報を新情報に変更することだけでなく、検索されたエントリのブランクフィールドへの新情報の設定(追記)をも含む。IO情報処理部1242はまた、デバイスドライバ123からのIO情報及びデータ管理テーブル1241に基づいて、COW動作を検出する。この検出の概要は次の通りである。
まず、OS121が有するCOW機能が有効な状態で、アプリケーション122から当該OS121に、第1のファイルにデータD2を上書きすることを指示するライト要求WRが発行されたものとする。この場合、OS121はライト要求WRに従うCOW動作のために、このライト要求WRを、リード要求RR、ライト要求(第1のライト要求)WR1及びライト要求(第2のライト要求)WR2に分解する。
リード要求RRは、第1の論理領域(旧領域)からの第1のファイル内のデータの読み出しを指示する。第1の論理領域にはデータD1が格納されているものとする。この場合、ライト要求WR1は、第1の論理領域から読み出されたデータD1を第1の論理領域とは別の空きの第2の論理領域(新領域)に書き込む(コピーする)ことを指示する。ライト要求WR2は、第2の論理領域内のコピーに、ライト要求WRで指定されたデータD2を上書きすることを指示する。
次にOS121は、デバイスドライバ123により階層化ストレージ装置20に対して、リード要求RR、第1のライト要求WR1及び第2のライト要求WR2によってそれぞれ指示されるリードアクセス、第1のライトアクセス及び第2のライトアクセスを、順に実行させる。IO情報処理部1242は、このような読み出し、書き込み及び書き込みから構成される一連の動作を、デバイスドライバ123からのIO情報及びデータ管理テーブル1241に基づいて検出することで、COW動作を検出する。
IO情報処理部1242は、COW動作の検出に応じて、第1及び第2の論理領域のLBA(旧LBA及び新LBA)を階層化ストレージ装置20に通知する。この通知をCOW通知と称する。
エントリ削除部1243は、データ管理テーブル1241から第1及び第2の条件のいずれかに合致したエントリを削除する。第1の条件に合致するエントリとは、データ管理テーブル1241に追加された時点から一定期間が経過したエントリを指す。第2の条件に合致するエントリとは、エントリ内容が更新された時点から一定期間が経過したエントリを指す。一定期間は、例えばコンピュータ10_1が、階層化ストレージ装置20へのアクセスに関するIO応答性能を測定するための特定のコマンドを実行することにより、その結果に基づいて決定されるものとする。
図4は、図2に示されるアクセスカウントテーブル230のデータ構造例を示す。図4の例では、アクセスカウントテーブル230はエントリ400を含む。エントリ400を含むアクセスカウントテーブル230のエントリ群の各々は、フィールド411及び412を含む。
フィールド411は、LBAを保持するのに用いられるLBAフィールドである。フィールド412は、フィールド411に保持されているLBAで示される領域(ブロック)へのアクセスのカウントを保持するのに用いられるカウントフィールドである。図4の例では、エントリ400のフィールド411及び412には、1(LBA=1)及び100(カウント=100)がそれぞれ保持されている。
図5は、図3に示されるデータ管理テーブル1241のデータ構造例を示す。データ管理テーブル1241の各エントリは、フィールド511乃至513を含む。フィールド511は、当該フィールド511を含むエントリがIO情報に基づいてデータ管理テーブル1241に追加された場合に、当該IO情報中のLBAを旧LBAとして保持するのに用いられる旧LBAフィールドである。
フィールド512は、フィールド511に保持されている旧LBAで示される領域から読み出されたデータのハッシュ値を保持するのに用いられるハッシュ値フィールドである。フィールド513は、旧LBAで示される領域から読み出されたデータのコピー先の領域のLBAを新LBAとして保持するのに用いられる新LBAフィールドである。
次に、第1の実施形態においてデーモン124によって実行されるデーモン処理について、図6を参照して説明する。図6は、デーモン処理の典型的な手順を示すフローチャートである。
デバイスドライバ123は、OS121のからのアクセス要求(リード要求またはライト要求)に応じて、階層化ストレージ装置20にリード要求またはライト要求を送出する。そしてデバイスドライバ123は、階層化ストレージ装置20へのリード要求またはライト要求に対応するIO情報をデーモン124に渡す。
するとデーモン12のIO情報処理部1242は、図6のフローチャートで示されるデーモン処理を開始する。まずIO情報処理部1242は、デバイスドライバ123からのIO情報を受け取る(ステップS1)。IO情報は、IO識別子、論理ブロックアドレス(LBA)及びハッシュ値を含む。つまりIO情報処理部1242は、IO識別子、LBA及びハッシュ値を受け取る。
次にIO情報処理部1242は、受領IO識別子がリードを示すかを判定する(ステップS2)。もし、受領IO識別子がリードを示すならば(ステップS2のYes)、IO情報処理部1242はステップS3に進む。
ステップS3においてIO情報処理部1242は、データ管理テーブル1241に1つのエントリを追加する(ステップS3)。エントリが追加された時点では、当該エントリのフィールド511乃至513はブランクであるものとする。次にIO情報処理部1242は、受領LBA及び受領ハッシュ値を、追加エントリのフィールド(旧LBAフィールド)511及びフィールド(ハッシュ値フィールド)512に、それぞれ設定する(ステップS4)。そしてIO情報処理部1242は、デーモン処理を終了する。
なお、ステップS3においてIO情報処理部1242が、受領LBA及び受領ハッシュ値が設定されたフィールド511及び512を含むエントリ500をデータ管理テーブル1241に追加しても良い。この場合、ステップS4は不要である。
一方、受領IO識別子がリードを示さないならば(ステップS2のNo)、つまり、受領IO識別子がライトを示すならば、IO情報処理部1242はステップS5に進む。ステップS5においてIO情報処理部1242は、フィールド513がブランクで、且つフィールド512の内容が受領ハッシュ値に等しいエントリを、目標とするエントリとしてデータ管理テーブル1241から検索する。そして、IO情報処理部1242は、目標とするエントリを検索できたかを判定する(ステップS6)。
もし、目標とするエントリを検索できたならば(ステップS6のYes)、IO情報処理部1242は、検索されたエントリのフィールド513に、受領LBAを新LBAとして設定する(ステップS7)。そしてIO情報処理部1242は、デーモン処理を終了する。
これに対し、目標とするエントリを検索できなかったならば(ステップS6のNo)、IO情報処理部1242は、フィールド513の内容(新LBA)が受領LBAに等しいエントリを、目標とするエントリとしてデータ管理テーブル1241から検索する(ステップS8)。そして、IO情報処理部1242は、目標とするエントリを検索できたかを判定する(ステップS9)。
もし、目標とするエントリを検索できたならば(ステップS9のYes)、IO情報処理部1242は、COW通知を実行する。即ちIO情報処理部1242は、検索されたエントリのフィールド511及び513の内容(つまり、旧LBA及び新LBA)を、階層化ストレージ装置20に通知する(ステップS10)。
次にIO情報処理部1242は、検索されたエントリを、第3の条件に合致するエントリとしてデータ管理テーブル1241から削除する(ステップS11)。第3の条件に合致するエントリとは、IO情報処理部1242から階層化ストレージ装置20に通知された旧LBA及び新LBAを含むエントリを指す。IO情報処理部1242はステップS11を実行すると、デーモン処理を終了する。なお検索されたエントリを、エントリ削除部1243が削除しても良い。一方、目標とするエントリを検索できなかったならば(ステップS9のNo)、IO情報処理部1242は直ちにデーモン処理を終了する。
次に、第1の実施形態におけるデーモン処理の具体例について、図6のフローチャートに加えて、図7乃至図9を参照して説明する。図7は、デーモン処理でエントリが追加されたデータ管理テーブル1241の例を示し、図8は、デーモン処理でエントリ内容が更新されたデータ管理テーブル1241の例を示す。図9は、アクセスカウントテーブル230の内容の遷移の例を示す。
まずアプリケーション122が、既に存在しているファイルF内のオフセットOFSTiにデータD2を上書きすることを指定するライト要求WRを発行したものとする。すると、ライト要求WRに応じて、システムコール発行機構からOS121にライトシステムコールが発行される。ライト要求WR及びライトシステムコールは、データD2(第1の実施形態では、1ブロックのデータ)がライトされるべきファイルF内の位置(ライト位置)に関するファイル情報を含む。
ファイル情報は、1ブロック単位でのリード要求またはライト要求が適用される第1の実施形態では、ファイルFのファイル名F1と、オフセットOFSTiとを含む。オフセットOFSTiは、i番目のオフセット(OFSTi=i)を示す。この場合、ファイル情報は、ライト(アクセス)位置が、ファイル名F1によって示されるファイルFにおけるi番目のオフセット(ブロックの位置)であることを示す。したがって、このようなファイル情報を含むライト要求WR及びライトシステムコールは、ファイルFにおけるi番目のオフセットにデータを上書きすることを指定する。
なお、ファイル情報が、データサイズDSを示す情報を含んでいても良い。上述の例では、データサイズDSは1(1ブロック)である。もし、任意のブロック数jのデータの読み出しまたは書き込みが適用されるならば、データサイズDSはj(jブロック)である。この場合、ライト位置は、ファイルFにおけるi番目のオフセットOFSTi(ブロックBLKi)からi+j−1番目のオフセットOFSTi+j−1(ブロックBLKi+j−1)までの範囲となる。
ライトシステムコールはOS121のファイルシステム1210で受領される。ファイルシステム1210は、ライトシステムコール(ライト要求WR)に基づいて、COW動作を開始する。まずファイルシステム1210は、ライトシステムコール(ライト要求WR)を、リード要求RR、第1のライト要求WR1及び第2のライト要求WR2に分解する。そしてファイルシステム1210は、リード要求RRをデバイスドライバ123により階層化ストレージ装置20に送出させる。リード要求RRは、ファイルFにおけるオフセットOFSTiの位置のブロックBLKiのデータ(ブロックデータ)が格納されている論理ブロックのアドレス(即ち論理ブロックアドレス)LBApを含む。つまりリード要求RRは、論理ブロックアドレスLBApで指定される論理ブロックからのデータの読み出しを指示する。LBApは例えば1である。
階層化ストレージ装置20のストレージコントローラ23は、デバイスドライバ123からのリード要求RRに応じて、当該リード要求RRによって指定されたデータを次のように読み出す。まず、ストレージコントローラ23は、リード要求RRによって指定された論理ブロックアドレスLBAp(LBA=LBAp=1)を、アドレス変換テーブルに基づいて、当該論理ブロックアドレスLBApに割り当てられている物理アドレスPApに変換する。物理アドレスPApは、高速ストレージ装置21または低速ストレージ装置22を指定する階層識別子を含む。ストレージコントローラ23は、物理アドレスPApに基づいて、高速ストレージ装置21または低速ストレージ装置22からデータD1を読み出す。
このデータD1の読み出しが実行される前において、アクセスカウントテーブル230は、図4に示される状態にあるものとする。つまり、アクセスカウントテーブル230のフィールド411及び412には、1(LBA=1)及び100(カウント=100)がそれぞれ保持されているものとする。この場合、ストレージコントローラ23は、物理アドレスPApが割り当てられた論理ブロックアドレスLBApを含む、アクセスカウントテーブル230内のエントリ400のフィールド412の内容(カウント)を、データD1の読み出しに応じて1インクリメントする。これにより、エントリ400のフィールド412のカウント(アクセスカウント)は、図4に示される100から、図9において矢印A1で示されるように、101にインクリメントされる。
また、ストレージコントローラ23は、読み出されたデータD1をデバイスドライバ123に返す。デバイスドライバ123は、ファイルシステム1210からのリード要求RRに対する応答(返り値)として、読み出されたデータD1を当該ファイルシステム1210に返す。
またデバイスドライバ123は、データD1のハッシュ値H1を算出する。そしてデバイスドライバ123は、リード要求RRに対応するIO情報を生成する。リード要求RRに対応するIO情報は、リードを示すIO識別子、論理ブロックアドレスLBAp(LBA=LBAp)及びハッシュ値H1を含む。デバイスドライバ123は、このIO情報[IO識別子=リード,LBAp,H1]をデーモン124に渡す。
するとデーモン124のIO情報処理部1242は、図6のフローチャートで示されるデーモン処理を、次のように実行する。まずIO情報処理部1242はデバイスドライバ123から渡されたIO情報[IO識別子=リード,LBAp,H1]を受け取る(ステップS1)。ここで、IO情報中のLBAp及びH1は、それぞれ、1及び0x1234であるものとする。この0x1234における記号0xは、後続の1234が16進表記であることを示す。
上述のように受領IO識別子がリードを示す場合(ステップS2のYes)、IO情報処理部1242は、データ管理テーブル1241に1つのエントリを追加する(ステップS3)。図7は、エントリ500が追加されたデータ管理テーブル1241の例を示す。エントリ500が追加された時点では、当該エントリ500のフィールド511乃至513はブランクである。
次にIO情報処理部1242は、受領IO情報中のLBAp及びH1、つまり、受領LBAp(=1)及び受領ハッシュ値H1(=0x1234)を、図7に示されるように、エントリ500のフィールド(旧LBAフィールド)511及びフィールド(ハッシュ値フィールド)512に、それぞれ設定する(ステップS4)。そしてIO情報処理部1242は、デーモン処理を終了する。
一方、ファイルシステム1210は、リード要求RRに対する応答を受けて、ライト要求WR1をデバイスドライバ123により階層化ストレージ装置20に送出させる。ライト要求WR1は、空きの論理ブロックの論理ブロックアドレスLBAqを含み、リード要求RRに応じて読み出されたデータD1を、論理ブロックアドレスLBAqで指定される論理ブロックに書き込む(つまりコピーする)ことを指示する。
デバイスドライバ123は、ライト要求WR1を階層化ストレージ装置20に送出する場合、当該ライト要求WR1に対応するIO情報を生成する。ライト要求WR1に対応するIO情報は、ライトを示すIO識別子、論理ブロックアドレスLBAq(LBA=LBAq)及びハッシュ値H2を含む。LBAqは、例えば2である。ハッシュ値H2は、リード要求RRに応じて読み出されたデータD1に基づいて算出される。したがって、ハッシュ値H2は、リード要求RRに対応するIO情報中のハッシュ値H1に一致する0x1234である。デバイスドライバ123は、このIO情報[IO識別子=ライト,LBAq,H2]をデーモン124に渡す。
するとデーモン124のIO情報処理部1242は、図6のフローチャートで示されるデーモン処理を、再び実行する。まずIO情報処理部1242は、デバイスドライバ123から渡されたIO情報[IO識別子=ライト,LBAq,H2]を受け取る(ステップS1)。
上述のように受領IO識別子がライトを示す場合(ステップS2のNo)、IO情報処理部1242はステップS5に進む。ステップS5においてIO情報処理部1242は、フィールド513がブランクで、且つフィールド512の内容が受領ハッシュ値H2(=0x1234)に等しいエントリを、目標とするエントリとしてデータ管理テーブル1241から検索する。
受領IO情報が、ライト要求WR1に対応するIO情報である場合、IO情報処理部1242は、図7に示されるエントリ500を、目標とするエントリとして検索することができる(ステップS6のYes)。この場合、IO情報処理部1242は、受領IO情報が、エントリ500のフィールド511に設定されたLBA(旧LBA=LBAp=1)で指定される第1の論理領域(ブロック)から読み出されたデータ(D1)を、受領IO情報中のLBAqで指定される第2の論理領域(ブロック)に書き込む(つまりコピーする)ことを指示するライト要求(WR1)に対応すると判断する。つまりIO情報処理部1242は、受領IO情報が、COW動作におけるコピーのための1回目のライト要求(WR1)に対応すると判断する。
そこでIO情報処理部1242は、図8に示されるように、検索されたエントリ500のフィールド513に、受領LBAq(=2)を新LBAとして設定する(ステップS7)。そしてIO情報処理部1242は、デーモン処理を終了する。
一方、階層化ストレージ装置20のストレージコントローラ23は、デバイスドライバ123からのライト要求WR1に応じて、当該ライト要求WR1を次のように実行する。まず、ストレージコントローラ23は、ライト要求WR1によって指定された論理ブロックアドレスLBAq(LBA=LBAq=2)を、当該論理ブロックアドレスLBAqに割り当てられる物理アドレスPAqに変換する。物理アドレスPAqは、高速ストレージ装置21または低速ストレージ装置22を指定する階層識別子を含む。ストレージコントローラ23は、物理アドレスPAqに基づいて、高速ストレージ装置21または低速ストレージ装置22にデータD1を書き込む(コピーする)。
このとき、アクセスカウントテーブル230は、フィールド411に論理ブロックアドレスLBAq(=2)が設定されたエントリ401を含んでいないものとする。この状態でストレージコントローラ23は、図9において矢印A2で示されるように、フィールド411及び412に、それぞれ論理ブロックアドレスLBAq(=2)及びカウント1が設定されたエントリ401をアクセスカウントテーブル230に追加する。なお、データD1の書き込みの前に、アクセスカウントテーブル230が、フィールド411の内容が論理ブロックアドレスLBAq(=2)に等しく、且つフィールド412がブランクまたはフィールド412の内容(カウント)がゼロのエントリ(つまりエントリ401に相当するエントリ)を含んでいても構わない。この場合、ストレージコントローラ23は、このエントリのフィールド412に1を設定すれば良い。
また、ストレージコントローラ23は、ライト要求WR1に対する応答(返り値)をデバイスドライバ123に返す。ファイルシステム1210は、ライト要求WR1に対する応答を受けて、ライト要求WR2をデバイスドライバ123により階層化ストレージ装置20に送出させる。ライト要求WR2は、ライト要求WR1に応じてデータD1が書き込まれた(コピーされた)第2の論理ブロックの論理ブロックアドレスLBAqを含み、アプリケーション122からのライト要求WR(に対応するリードシステムコール)で指定されたデータD2を、論理ブロックアドレスLBAqで指定される論理ブロックに書き込む(つまり上書きする)ことを指示する。
デバイスドライバ123は、ライト要求WR2を階層化ストレージ装置20に送出する場合、当該ライト要求WR2に対応するIO情報を生成する。ライト要求WR2に対応するIO情報は、ライトを示すIO識別子、論理ブロックアドレスLBAq(LBA=LBAq=2)及びハッシュ値H3を含む。ハッシュ値H3は、ライト要求WR2で指定されたデータD2に基づいて算出される。したがって、ハッシュ値H3は、リード要求RRに対応するIO情報中のハッシュ値H1に一致しない。
デーモン124のIO情報処理部1242は、上述のIO情報[IO識別子=ライト,LBAq,H3]をデバイスドライバ123から受け取る(ステップS1)。この場合、ステップS2の判定はNoとなるため、IO情報処理部1242は再びステップS5に進む。
受領IO情報が、ライト要求WR2に対応するIO情報である場合、IO情報処理部1242は、フィールド513がブランクで、且つフィールド512の内容が受領ハッシュ値H3に等しいエントリを検索することができない(ステップS6のNo)。しかしIO情報処理部1242は、フィールド513の内容(新LBA)が受領LBA(=LBAq=2)に等しいエントリ500(図8)を検索することができる(ステップS9のYes)。この場合、IO情報処理部1242は、受領IO情報が、旧LBA(=LBAp=1)で指定される第1の論理領域から、当該受領IO情報中のLBA(新LBA=LBAq=2)で指定される第2の論理領域にコピーされたデータ(D1)に、新たなデータ(D2)を書き込む(上書きする)ことを指示するライト要求(WR2)に対応すると判断する。つまりIO情報処理部1242は、受領IO情報が、COW動作における上書きのための2回目のライト要求(WR2)に対応しており、したがってCOW動作を検出したと判断する。
そこでIO情報処理部1242は、COW通知を実行する。即ちIO情報処理部1242は、旧LBA(=LBAp=1)で指定される第1の論理領域のデータがCOW動作により新LBA(=LBAq=2)で指定される第2の論理領域に移動したことを示す情報を、階層化ストレージ装置20に通知する(ステップS10)。具体的には、IO情報処理部1242は、エントリ500(目標エントリ)のフィールド511及び513の内容を、旧LBA及び新LBAの組を示す情報として、階層化ストレージ装置20に通知する。次にIO情報処理部1242は、エントリ500をデータ管理テーブル1241から削除して(ステップS11)、デーモン処理を終了する。
一方、階層化ストレージ装置20のストレージコントローラ23は、デバイスドライバ123からのライト要求WR2を受領した場合、当該ライト要求WR2を実行する。即ちストレージコントローラ23は、ライト要求WR2によって指定された論理ブロックアドレスLBAq(LBA=LBAq=2)に割り当てられる物理アドレスPAqに基づいて、高速ストレージ装置21または低速ストレージ装置22にデータD2を書き込む(上書きする)。つまりストレージコントローラ23は、LBAqで指定される第2の論理領域にコピーされた、ファイルFのi番目のオフセットのデータD1を、新たなデータD2に更新する。
またストレージコントローラ23は、ライト要求WR2の実行(データD2の上書き)に応じて、論理ブロックアドレスLBAq(LBA=LBAq=2)を含む、アクセスカウントテーブル230内のエントリ401を操作する。即ちストレージコントローラ23は、エントリ401のフィールド412のカウントを、図9において矢印A3で示されるように、1から2にインクリメントする。
ストレージコントローラ23は更に、ライト要求WR2の実行の完了に応じて、ライト要求WR2に対する応答(正常完了応答)をデバイスドライバ123に返す。ファイルシステム1210は、この応答をデバイスドライバ123から受け取る。するとファイルシステム1210は、ライト要求WRに従うCOW動作を終了し、当該ライト要求WRに対する応答をアプリケーション122に返す。またファイルシステム1210は、ファイルFのi番目のオフセットに対応付けられた論理ブロックアドレスを、LBApからLBAqに変更する。そして、ファイルシステム1210は、LBApで指定される第1の論理領域を空き領域として、LBAqで指定される第2の論理領域を使用中領域として、それぞれ管理する。
COW動作では、データD2の上書きの実行中、元のデータD1はLBApで指定される第1の論理領域に格納されている。このため、上述の上書きの実行中に電源遮断のような障害が発生しても、第1のファイルの内容をCOW動作の開始前の状態に復元することができる。つまりCOW動作は、障害が発生しても、データの一貫性を保つことを可能にする。
その後、階層化ストレージ装置20のストレージコントローラ23が、デバイスドライバ123から上述のCOW通知を受領したものとする。このCOW通知は、旧LBA(=LBAp=1)及び新LBA(=LBAq=2)の組を含む。この場合、ストレージコントローラ23は、新LBA(=2)を含む、アクセスカウントテーブル230内のエントリ401のカウント(=2)に、旧LBA(=1)を含む、アクセスカウントテーブル230内のエントリ400のカウント(=101)を加算する。つまりストレージコントローラ23は、デバイスドライバ123からCOW通知に応じて、旧LBA(=1)に対応付けられたカウント(=101)を、旧LBAのデータのコピー先の新LBA(=2)に対応付けられたカウントに引き継ぐ。そしてストレージコントローラ23は、エントリ400のカウントをクリアする。
これにより、アクセスカウントテーブル230内のエントリ400及び401のカウントは、図9において矢印A4で示されるように、101及び2から、それぞれ0及び103に更新される。この更新の結果、エントリ401は、ファイルFのi番目のオフセットのデータが格納される(新LBA=2で指定される)論理領域へのアクセスのカウントが103であることを示す。即ち、エントリ401は、アプリケーション122が認識しているファイルFのi番目のオフセットへのアクセスの回数を正しく示す。
第1の実施形態では、ファイルシステム1210からデバイスドライバ123に、COW動作に無関係のリード要求RRsが発行された場合にも、データ管理テーブル1241にエントリが追加される(ステップS3)。しかし、リード要求RRsに対応するコピーのためのライト要求はファイルシステム1210からデバイスドライバ123に発行されない。そこで、エントリ削除部1243は、リード要求RRsに対応するIO情報に基づいてデータ管理テーブル1241に時刻TsでエントリEsが追加された場合、時刻Tsから一定期間の経過(第1の条件の成立)に応じて、当該エントリEsを削除する。
また第1の実施形態では、ファイルシステム1210からデバイスドライバ123に、COW動作に無関係のファイルのコピーのためのライト要求WRtが発行された場合にも、データ管理テーブル1241に追加されたエントリの内容(より詳細には、フィールド513の内容)が更新される(ステップS7)。しかし、ライト要求WRtに対応する上書きのためのライト要求はファイルシステム1210からデバイスドライバ123に発行されない。そこでエントリ削除部1243は、ライト要求WRtに対応するIO情報に基づいてデータ管理テーブル1241内のエントリEtが時刻Ttで更新された場合、時刻Ttから一定期間の経過(第2の条件の成立)に応じて、当該エントリEtを削除する。
上述のエントリ削除のために、データ管理テーブル1241内の各エントリに時刻情報が設定されるフィールドを追加すると良い。時刻情報は、対応するエントリが追加された日時または当該対応するエントリの内容が更新された日時を示す。
次に、ファイルシステム1210からデバイスドライバ123に、COW動作に無関係の新規のデータ書き込みのためのライト要求WRuが発行されたものとする。このライト要求WRuに対応するリード要求は存在しない。この場合、ステップS2,S6及びS9の判定は全てNoとなり、ライト要求WRuに対応するIO情報は破棄される。
第1の実施形態によれば、デーモン124(内のIO情報処理部1242)は、デバイスドライバ123からのIO情報を処理することで、ファイルシステム1210のCOW動作をリアルタイムに検出して、当該COW動作に関する旧LBA及び新LBAの組を階層化ストレージ装置20に通知することができる。これにより、階層化ストレージ装置20のストレージコントローラ23は、ファイルシステム1210のCOW機能が有効な場合でも、アプリケーション122により発行されるアクセス要求(特に、ファイルF内にデータを上書きするためのライト要求)の状況を正しく反映した階層化を実現することができる。つまり第1の実施形態によれば、ユーザの利便性の向上に寄与する階層化を実現することができる。しかも、この実現のために、OS121(ファイルシステム1210)及びアプリケーション122を変更する必要がない。
第1の実施形態では、デーモン124はコンピュータ10_1に含まれている。しかしデーモン124が、階層化ストレージ装置20に含まれていても構わない。また第1の実施形態では、階層化ストレージ装置20は、アクセス性能の異なる2つのストレージ装置、つまり高速ストレージ装置21及び低速ストレージ装置22を備えている。しかし、階層化ストレージ装置20が、アクセス性能の異なる3つ以上のストレージ装置を備えていても良い。例えば階層化ストレージ装置20が、高速ストレージ装置21及び低速ストレージ装置22に加えて、アクセス性能が高速ストレージ装置21のそれより低く、低速ストレージ装置22のそれよりも高いストレージ装置(中速ストレージ装置)を備えていても良い。
<第2の実施形態>
次に、第2の実施形態に係る階層化ストレージシステムについて説明する。第2の実施形態に係る階層化ストレージシステムは、第1の実施形態に係る階層化ストレージシステムと同様のハードウェア構成を有しているものとする。そこで、第2の実施形態に係る階層化ストレージシステムの構成に関する説明に、便宜的に図1を参照する。但し、第2の実施形態における階層化ストレージシステムでは、コンピュータ10_1(乃至10−n)の機能構成が、第1の実施形態におけるそれとは異なる。例えば、第2の実施形態におけるコンピュータ10_1は、第1の実施形態におけるコンピュータ10_1が有するデーモン124とは異なる機能のデーモン124a(図10)を含む。したがって、第2の実施形態において必要ならば、図1に示されるデーモン124をデーモン124aに読み替えられたい。
次に、第2の実施形態に係る階層化ストレージシステムについて説明する。第2の実施形態に係る階層化ストレージシステムは、第1の実施形態に係る階層化ストレージシステムと同様のハードウェア構成を有しているものとする。そこで、第2の実施形態に係る階層化ストレージシステムの構成に関する説明に、便宜的に図1を参照する。但し、第2の実施形態における階層化ストレージシステムでは、コンピュータ10_1(乃至10−n)の機能構成が、第1の実施形態におけるそれとは異なる。例えば、第2の実施形態におけるコンピュータ10_1は、第1の実施形態におけるコンピュータ10_1が有するデーモン124とは異なる機能のデーモン124a(図10)を含む。したがって、第2の実施形態において必要ならば、図1に示されるデーモン124をデーモン124aに読み替えられたい。
以下、第2の実施形態における階層化ストレージシステムの機能構成について、第1の実施形態におけるそれと異なる点を中心に、図10を参照して説明する。図10は、第2の実施形態に係る階層化ストレージシステムの典型的な機能構成を示すブロック図である。図10においてコンピュータ10_1は、図2におけるそれとは異なって、キャッシュコントローラ125を含む。
キャッシュコントローラ125は、キャッシュバッファ1250を含む。キャッシュバッファ1250は、階層化ストレージ装置20から読み出されたデータ(リードデータ)、及び階層化ストレージ装置20に書かれるべきデータ(ライトデータ)を一時格納するのに用いられる。なお、キャッシュバッファ1250が、キャッシュコントローラ125の外部に設けられていても構わない。キャッシュバッファ1250に格納されたデータ(リードデータ及びライトデータ)は、キャッシュデータ(リードキャッシュデータ及びライトキャッシュデータ)と呼ばれる。
キャッシュコントローラ125は、キャッシュバッファ1250へのデータの格納(書き込み)及びキャッシュバッファ1250からのデータの読み出し(つまりキャッシュアクセス)を制御する。キャッシュコントローラ125はまた、キャッシュバッファ1250に格納されたデータのディレクトリを管理する。なお図10では、ディレクトリ管理に用いられるディレクトリ管理テーブルは省略されている。
キャッシュコントローラ125は更に、ファイルシステム1210からのライト要求に基づくキャッシュバッファ1250へのライトデータの書き込みに応じて、当該書き込みに関するIO情報をデーモン124aに渡す。キャッシュコントローラ125からのIO情報は、ライトデータのハッシュ値及びキャッシュバッファ1250における当該ライトデータの書き込み先のアドレス(つまり、バッファアドレス)を含む。
図11は、図10に示されるデーモン124aの典型的な機能構成を示すブロック図である。デーモン124aは、データ管理テーブル1241a、IO情報処理部1242a及びエントリ削除部1243を含む。データ管理テーブル1241a、IO情報処理部1242aは、図3に示されるデータ管理テーブル1241及びIO情報処理部1242にそれぞれ対応する。しかし、データ管理テーブル1241aのデータ構造はデータ管理テーブル1241のそれと異なり、IO情報処理部1242aの機能はIO情報処理部1242のそれと異なる。
IO情報処理部1242aは、デバイスドライバ123またはキャッシュコントローラ125から渡されたIO情報に基づいて、データ管理テーブル1241aのエントリの追加、データ管理テーブル1241からのエントリの検索、及び検索されたエントリの情報の更新(より詳細には、検索されたエントリへの情報の追記)を実行する。IO情報処理部1242aはまた、検索されたエントリの情報の更新に基づいて、COW動作を検出する。
図12は、図11に示されるデータ管理テーブル1241aのデータ構造例を示す。データ管理テーブル1241aの各エントリは、フィールドC1乃至C4を含む。フィールドC1は、当該フィールドC1を含むエントリがキャッシュコントローラ125からのIO情報に基づいて検索された場合に、当該IO情報中のバッファアドレスを保持するのに用いられるバッファアドレスフィールドである。
フィールドC2は、当該フィールドC2を含むエントリがデバイスドライバ123からのIO情報に基づいて追加された場合に、当該IO情報中のハッシュ値を旧ハッシュ値として保持するのに用いられる旧ハッシュ値フィールドである。フィールドC3は、当該フィールドC3を含むエントリがキャッシュコントローラ125からのIO情報中のバッファアドレスに基づいて検索された場合に、当該IO情報中のハッシュ値を新ハッシュ値として保持するのに用いられる新ハッシュ値フィールドである。
フィールドC4は、当該フィールドC4を含むエントリがデバイスドライバ123からのIO情報に基づいて追加された場合に、当該IO情報中のLBAを旧LBAとして保持するのに用いられる旧LBAフィールドである。フィールドC5は、当該フィールドC5を含むエントリがデバイスドライバ123からのIO情報に基づいて検索された場合に、当該IO情報中のLBAを新LBAとして保持するのに用いられる新LBAフィールドである。
次に、第2の実施形態においてデーモン124aによって実行されるデーモン処理について、図13乃至図15を参照して説明する。図13は、デーモン処理の典型的な手順を示すフローチャートである。図14は、図13に示されるデーモン処理に含まれているエントリ・追加更新処理の典型的な手順を示すフローチャート、図15は、図13に示されるデーモン処理に含まれているエントリ更新処理の典型的な手順を示すフローチャートである。
キャッシュコントローラ125は、ファイルシステム1210から当該キャッシュコントローラ125へのライト要求に基づくキャッシュバッファ1250へのライトデータの書き込みに応じて、当該書き込みに関するIO情報[ハッシュ値,バッファアドレス]をデーモン124aに渡す。デバイスドライバ123は、ファイルシステム1210からのアクセス要求(リード要求またはライト要求)に応じて、階層化ストレージ装置20にリード要求またはライト要求を送出する。デバイスドライバ123は、階層化ストレージ装置20にリード要求またはライト要求を送出した場合、当該リード要求またはライト要求に対応するIO情報[IO識別子=リード,LBA,ハッシュ値]をデーモン124aに渡す。
デーモン124aのIO情報処理部1242aは、デバイスドライバ123またはキャッシュコントローラ125からのIO情報を受け取る(ステップS21)。そしてIO情報処理部1242aは、受領IO情報が、例えばデバイスドライバ123からのIO情報であるかを判定する(ステップS22)。
ステップS22の判定がYesであるならば、受領IO情報は、IO識別子、LBA及びハッシュ値を含む。この場合、IO情報処理部1242aは、受領IO識別子がリードを示すかを判定する(ステップS23)。
もし、ステップS23の判定がYesであるならば、IO情報処理部1242aはエントリ追加処理(ステップS24)を次のように実行する。まずIO情報処理部1242aは、受領LBAに等しいLBAを旧LBAとして持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS241)。そして、IO情報処理部1242aは、目標とするエントリを検索できたかを判定する(ステップS242)。
もし、ステップS242の判定がNoであるならば、IO情報処理部1242aは、データ管理テーブル1241aに1つのエントリを追加する(ステップS243)。エントリが追加された時点では、当該エントリのフィールドC1乃至C5はブランクである。次にIO情報処理部1242aは、受領ハッシュ値及び受領LBAを、それぞれ旧ハッシュ値及び旧LBAとして、追加エントリのフィールド(旧ハッシュ値フィールド)C2及びフィールド(旧LBAフィールド)C4に設定する(ステップS244)。これによりIO情報処理部1242は、エントリ追加処理(ステップS24)を終了して、デーモン処理を終了する。これに対してステップS242の判定がYesであるならば、IO情報処理部1242aは、直ちにエントリ追加処理(ステップS24)を終了して、デーモン処理を終了する。
一方、ステップS23の判定がNoであるならば、IO情報処理部1242aは、エントリ追加・更新処理(ステップS25)を、図14に示されるフローチャートに従って次のように実行する。まずIO情報処理部1242aは、受領LBAに等しいLBAを旧LBAとして持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS251)。そして、IO情報処理部1242aは、目標とするエントリを検索できたかを判定する(ステップS252)。
もし、ステップS252の判定がNoであるならば、IO情報処理部1242aは、受領ハッシュ値に等しいハッシュ値を新ハッシュ値として持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS253)。そして、IO情報処理部1242aは、目標とするエントリを検索できたかを判定する(ステップS254)。
もし、ステップS254の判定がNoであるならば、IO情報処理部1242aは、ステップS243と同様に、データ管理テーブル1241aに1つのエントリを追加する(ステップS255)。エントリが追加された時点では、当該エントリのフィールドC1乃至C5はブランクである。次にIO情報処理部1242aは、ステップS244と同様に、受領ハッシュ値及び受領LBAを、それぞれ旧ハッシュ値及び旧LBAとして、追加エントリのフィールドC2及びC4に設定する(ステップS256)。これによりIO情報処理部1242は、エントリ追加・更新処理(ステップS25)を終了して、デーモン処理を終了する。
これに対し、ステップS254の判定がYesであるならば、IO情報処理部1242aは、COW動作を検出したと判断する。そこでIO情報処理部1242aは、検索されたエントリのフィールドC5に、受領LBAを新LBAとして設定する(ステップS257)。
次にIO情報処理部1242aは、検索されたエントリのフィールドC4及びC5に設定されている旧LBA及び新LBAの組を階層化ストレージ装置20に通知する(ステップS258)。次にIO情報処理部1242aは、検索されたエントリをデータ管理テーブル1241aから削除する(ステップS259)。これによりIO情報処理部1242は、エントリ追加・更新処理(ステップS25)を終了して、デーモン処理を終了する。なお、検索されたエントリを、エントリ削除部1243が削除しても良い。
また、ステップS22の判定がNoであるならば、受領IO情報はバッファアドレス及びハッシュ値を含む。この場合、IO情報処理部1242aは、エントリ更新処理(ステップS26)を、図15に示されるフローチャートに従って次のように実行する。まずIO情報処理部1242aは、受領バッファアドレスに等しいバッファアドレスを持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS261)。そして、IO情報処理部1242aは、目標とするエントリを検索できたかを判定する(ステップS262)。
もし、ステップS262の判定がYesであるならば、IO情報処理部1242aは、検索されたエントリのフィールドC3に、受領ハッシュ値を新ハッシュ値として設定する(ステップS263)。これによりIO情報処理部1242は、エントリ更新処理(ステップS26)を終了して、デーモン処理を終了する。
これに対し、ステップS262の判定がNoであるならば、IO情報処理部1242aは、受領ハッシュ値に等しいハッシュ値を旧ハッシュ値として持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS264)。そして、IO情報処理部1242aは、目標とするエントリを検索できたかを判定する(ステップS265)。
もし、ステップS265の判定がYesであるならば、IO情報処理部1242aは、検索されたエントリのフィールドC1に、受領バッファアドレスを設定する(ステップS266)。そして、IO情報処理部1242aは、エントリ更新処理(ステップS26)を終了して、デーモン処理を終了する。これに対してステップS265の判定がNoであるならば、IO情報処理部1242aは、直ちにエントリ追加処理(ステップS26)を終了して、デーモン処理を終了する。
次に、第2の実施形態におけるデーモン処理の具体例について、図13乃至図15のフローチャートに加えて、図16及び図17を参照して説明する。図16は、デーモン処理でエントリが追加されたデータ管理テーブル1241aの例を示し、図17は、データ管理テーブル1241の内容の遷移の例を示す。
まず、前記第1の実施形態と同様に、アプリケーション122が、既に存在しているファイルF内のオフセットOFSTiにデータD2を上書きすることを指定するライト要求WRを発行したものとする。すると、ライト要求WRに応じて、システムコール発行機構からOS121にライトシステムコールが発行される。OS121のファイルシステム1210は、ライトシステムコールに基づいて、COW動作を開始する。まずファイルシステム1210は、ライトシステムコール(ライト要求WR)を、第1の実施形態と同様に、リード要求RR、第1のライト要求WR1及び第2のライト要求WR2に分解する。そしてファイルシステム1210は、リード要求RRを、第1の実施形態と異なって、キャッシュコントローラ125に発行する。
キャッシュコントローラ125は、リード要求RRに応じてディレクトリ管理テーブルを参照して、リード要求RRの示すLBApに格納されているデータD1が、キャッシュバッファ1250にも格納されているかを判定する。ここでは、データD1は、バッファアドレスBA1で指定されるキャッシュバッファ1250内の領域に格納されているものとする。この場合、キャッシュコントローラ125は、キャッシュバッファ1250からデータD1を読み出す。そしてキャッシュコントローラ125は、読み出されたデータD1を、ファイルシステム1210からのリード要求RRに対する応答として当該ファイルシステム1210に返す。
するとファイルシステム1210は、次のライト要求WR1をキャッシュコントローラ125に発行する。このように、リード要求RRの示すLBApに格納されているデータD1がキャッシュバッファ1250にも格納されているキャッシュヒット状態(第1の状態)では、リード要求RRは、ファイルシステム1210からデバイスドライバ123に発行されない。キャッシュヒット状態は、ライト要求WRに基づくCOW動作が開始される前に、データD1のリードまたはライトが既に実行されていることを示す。
キャッシュヒット状態では、図16に示されるエントリ1600が、エントリ追加処理(図13のステップS24)またはエントリ追加・更新処理(図13のステップS25)によってデータ管理テーブル1241aに既に追加されている。データD1のハッシュ値H1及びLBApが、第1の実施形態と同様に、それぞれ0x1234及び1であるものとする。この場合、エントリ1600のフィールドC2及びC4には、データD1のハッシュ値H1(=0x1234)及びLBAp(=1)が、それぞれ旧ハッシュ値及び旧LBAとして設定されている。
これに対し、データD1がキャッシュバッファ1250に格納されていないミスヒット状態(第2の状態)の場合、ファイルシステム1210からデバイスドライバ123にもリード要求RRが発行される。デバイスドライバ123は、このリード要求RRを階層化ストレージ装置20に送出する。階層化ストレージ装置20のストレージコントローラ23は、リード要求RRによって指定されたデータD1を高速ストレージ装置21または低速ストレージ装置22から読み出して、当該データD1をデバイスドライバ123に返す。デバイスドライバ123は、ファイルシステム1210からのリード要求RRに対する応答として、読み出されたデータD1を当該ファイルシステム1210に返す。またデバイスドライバ123は第1の実施形態と同様に、データD1のハッシュ値H1を算出し、リード要求RRに対応するIO情報[IO識別子=リード,LBAp=1,H1=0x1234]をデーモン124aに渡す。一方、キャッシュコントローラ125は、リード要求RRに応じてストレージコントローラ23によって読み出されたデータD1を、キャッシュバッファ1250の内の空き領域に書き込む。
デーモン124aのIO情報処理部1242aは、デバイスドライバ123から渡されたIO情報[IO識別子=リード,LBAp=1,H1=0x1234]を受け取る(ステップS21)。この場合、IO情報処理部1242aは、ステップS22及びS23を介して、エントリ追加処理(ステップS24)を実行する。これにより、IO情報処理部1242aは、図16に示されるように、受領ハッシュ値H1(=0x1234)及び受領LBAp(=1)を旧ハッシュ値及び旧LBAとして持つエントリ1600を、データ管理テーブル1241aに追加する。
一方、ファイルシステム1210は、リード要求RRに対するデバイスドライバ123またはキャッシュコントローラ125からの応答を受けて、ライト要求WR1をキャッシュコントローラ125に発行する。キャッシュコントローラ125は、ライト要求WR1に応じて、LBAqで指定される論理ブロックに書かれるべき(コピーされるべき)データD1を、キャッシュバッファ1250内の空き領域に書き込む。この領域のバッファアドレスがBA2(=0x01)であるものとする。
次にキャッシュコントローラ125は、ライト要求WR1に対する応答をファイルシステム1210に返す。また、キャッシュコントローラ125は、ライト要求WR1に対応するIO情報[ハッシュ値H2(=H1=0x1234),バッファアドレスBA2(=0x01)]を、デーモン124aに渡す。
デーモン124aのIO情報処理部1242aは、キャッシュコントローラ125から渡されたIO情報[ハッシュ値H2(=H1=0x1234),バッファアドレスBA2(=0x01)]を受け取る(ステップS21)。この場合、IO情報処理部1242aは、ステップS22を介して、エントリ更新処理(ステップS26)を、次のように実行する。
まずIO情報処理部1242aは、受領バッファアドレスBA2(=0x01)に等しいバッファアドレスを持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS261)。ここでは、IO情報処理部1242aは、目標とするエントリを検索できない(ステップS262のNo)。
そこでIO情報処理部1242aは、受領ハッシュ値H2(=H1=0x1234)に等しいハッシュ値を旧ハッシュ値として持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS264)。ここでは、IO情報処理部1242aは、エントリ1600(図16)を、目標とするエントリとして検索することができる(ステップS265のYes)。そこでIO情報処理部1242aは、図17において矢印A11で示されるように、エントリ1600のフィールドC1に、受領バッファアドレスBA2(=0x01)を設定する(ステップS266)。
さてファイルシステム1210は、ライト要求WR1に対するキャッシュコントローラ125からの応答を受け取ると、次のライト要求WR2をキャッシュコントローラ125に発行する。するとキャッシュコントローラ125は、先行するライト要求WR1に応じてデータD1が書かれたキャッシュバッファ1250内の領域、つまり、バッファアドレスBA2(=0x01)で指定される領域に、ライト要求WR2によって指定されたデータD2を上書きする。
次にキャッシュコントローラ125は、ライト要求WR2に対する応答をファイルシステム1210に返す。また、キャッシュコントローラ125は、ライト要求WR2に対応するIO情報[ハッシュ値H3(=0x1357),バッファアドレスBA2(=0x01)]を、デーモン124aに渡す。
デーモン124aのIO情報処理部1242aは、キャッシュコントローラ125から渡されたIO情報[ハッシュ値H3(=0x1357),バッファアドレスBA2(=0x01)]を受け取る(ステップS21)。この場合、IO情報処理部1242aは、ステップS22を介して、エントリ更新処理(ステップS26)を、次のように実行する。
まずIO情報処理部1242aは、受領バッファアドレスBA2(=0x01)に等しいバッファアドレスを持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS261)。ここでは、IO情報処理部1242aは、エントリ1600(図17)を目標とするエントリとして検索することができる(ステップS262のYes)。そこでIO情報処理部1242aは、図17において矢印A12で示されるように、エントリ1600のフィールドC3に、受領ハッシュ値H3(=0x1357)を新ハッシュ値として設定する(ステップS263)。
さてファイルシステム1210は、ライト要求WR2をキャッシュコントローラ125に発行した場合、ライト要求WR1の発行時とは異なり、当該ライト要求WR2をデバイスドライバ123により階層化ストレージ装置20に送出させる。すると階層化ストレージ装置20のストレージコントローラ23は、ライト要求WR2によって指定された論理ブロックアドレスLBAq(=2)に割り当てられる物理アドレスPAqに基づいて、高速ストレージ装置21または低速ストレージ装置22にデータD2を書き込む。そしてストレージコントローラ23は、ライト要求WR2に対する応答をデバイスドライバ123に返す。ファイルシステム1210は、この応答をデバイスドライバ123から受け取る。するとファイルシステム1210は、ライト要求WRに従うCOW動作を終了する。以降のファイルシステム1210の動作は、第1の実施形態と同様である。
さてデバイスドライバ123は、ライト要求WR2を階層化ストレージ装置20に送出する場合、第1の実施形態と同様に、当該ライト要求WR2に対応するIO情報[IO識別子=ライト,LBAq(=2),H3(=0x1357)]を生成する。IO情報処理部1242aは、このIO情報[IO識別子=ライト,LBAq(=2),H3(=0x1357)]を受け取ると(ステップS21)、ステップS22及びS23を介して、エントリ追加・更新処理(ステップS25)を次のように実行する。
まずIO情報処理部1242aは、受領LBAq(=2)に等しいLBAを旧LBAとして持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS251)。ここでは、IO情報処理部1242aは、目標とするエントリを検索できない(ステップS252のNo)。
そこでIO情報処理部1242aは、受領ハッシュ値H3(=0x1357)に等しいハッシュ値を新ハッシュ値として持つエントリを、目標とするエントリとしてデータ管理テーブル1241aから検索する(ステップS253)。ここでは、IO情報処理部1242aは、エントリ1600(図17)を目標とするエントリとして検索することができる(ステップS254のYes)。
この場合、IO情報処理部1242aは、図17において矢印A13で示されるように、エントリ1600のフィールドC5に、受領LBAq(=2)を新LBAとして設定する(ステップS257)。次にIO情報処理部1242aは、エントリ1600のフィールドC4及びC5の内容(つまり、旧LBA及び新LBA)を階層化ストレージ装置20に通知するためのCOW通知を実行する(ステップS258)。そしてIO情報処理部1242aは、エントリ1600をデータ管理テーブル1241から削除する(ステップS259)。
階層化ストレージ装置20のストレージコントローラ23は、IO情報処理部1242aからのCOW通知に応じて、アクセスカウントテーブル230内の旧LBA(=LBAp=1)に対応付けられたカウントを、アクセスカウントテーブル230内の新LBA(=LBAq=2)に対応付けられたカウントに引き継ぐ。そしてストレージコントローラ23は、旧LBA(=LBAp=1)に対応付けられたカウントをクリアする。
第2の実施形態によれば、デーモン124a(内のIO情報処理部1242a)は、デバイスドライバ123及びキャッシュコントローラ125からのIO情報を処理することで、ファイルシステム1210のCOW動作をリアルタイムに検知して、当該COW動作に関する旧LBA及び新LBAを階層化ストレージ装置20に通知することができる。これにより、階層化ストレージ装置20のストレージコントローラ23は、ファイルシステム1210のCOW機能が有効で、且つコンピュータ10_1(乃至10_n)がキャッシュを備えている場合でも、アプリケーション122により発行されるアクセス要求(特に、ファイルF内にデータを上書きするためのライト要求)の状況を正しく反映した階層化を実現することができる。しかも、この実現のために、OS121(ファイルシステム1210)及びアプリケーション122を変更する必要がない。
<第3の実施形態>
次に、第3の実施形態に係る階層化ストレージシステムについて説明する。第3の実施形態に係る階層化ストレージシステムは、第1及び第2の実施形態に係る階層化ストレージシステムと同様のハードウェア構成を有しているものとする。そこで、第3の実施形態に係る階層化ストレージシステムの構成に関する説明に、便宜的に図1を参照する。但し、第3の実施形態における階層化ストレージシステムでは、コンピュータ10_1(乃至10−n)の機能構成が、第1及び第2の実施形態におけるそれとは異なる。例えば、第3の実施形態におけるコンピュータ10_1は、デバイスドライバ123及びデーモン124(124a)とは異なる機能のデバイスドライバ123b及びデーモン124b(図18)を含む。また、第3の実施形態におけるコンピュータ10_1上では、アプリケーション122とは異なる機能のアプリケーション122b(図18)が走行する。したがって、第3の実施形態において必要ならば、図1に示されるアプリケーション122、デバイスドライバ123及びデーモン124を、それぞれアプリケーション122b、デバイスドライバ123b及びデーモン124bに読み替えられたい。
次に、第3の実施形態に係る階層化ストレージシステムについて説明する。第3の実施形態に係る階層化ストレージシステムは、第1及び第2の実施形態に係る階層化ストレージシステムと同様のハードウェア構成を有しているものとする。そこで、第3の実施形態に係る階層化ストレージシステムの構成に関する説明に、便宜的に図1を参照する。但し、第3の実施形態における階層化ストレージシステムでは、コンピュータ10_1(乃至10−n)の機能構成が、第1及び第2の実施形態におけるそれとは異なる。例えば、第3の実施形態におけるコンピュータ10_1は、デバイスドライバ123及びデーモン124(124a)とは異なる機能のデバイスドライバ123b及びデーモン124b(図18)を含む。また、第3の実施形態におけるコンピュータ10_1上では、アプリケーション122とは異なる機能のアプリケーション122b(図18)が走行する。したがって、第3の実施形態において必要ならば、図1に示されるアプリケーション122、デバイスドライバ123及びデーモン124を、それぞれアプリケーション122b、デバイスドライバ123b及びデーモン124bに読み替えられたい。
以下、第3の実施形態における階層化ストレージシステムの機能構成について、第1の実施形態におけるそれと異なる点を中心に、図18を参照して説明する。図18は、第3の実施形態に係る階層化ストレージシステムの典型的な機能構成を示すブロック図である。
図18に示されるコンピュータ10_1上では、アプリケーション122bが走行する。アプリケーション122bは、リード要求またはライト要求に対応するIO情報を生成して、当該IO情報をデーモン124bに渡す。アプリケーション122bからのIO情報は、ファイル情報[ファイル名,オフセット]とハッシュ値とを含む。このハッシュ値は、ファイル情報[ファイル名,オフセット]で指定されるファイル内の位置から読み出されたデータ、または当該ファイル内の位置に書き込まれるデータに基づいて算出される。
また、図18に示されるコンピュータ10_1において、デバイスドライバ123bは、ファイルシステム1210からのリード要求またはライト要求に対応するIO情報を生成して、当該IO情報をデーモン124bに渡す。デバイスドライバ123bからのIO情報は、リード要求またはライト要求の指定するLBAと、リード要求またはライト要求に応じてリードまたはライトされるデータのハッシュ値とを含む。デーモン124bは、アプリケーション122b及びデバイスドライバ123からのIO情報に基づいて、COW動作により存在する、1つの[ファイル名,オフセット]に対応する複数のLBAを検出する。
図19は、図18に示されるデーモン124bの典型的な機能構成を示すブロック図である。デーモン124bは、ファイル−LBAテーブル301、カウントテーブル302、テーブル管理部303、テーブル管理部304、及びカウント補正部305を含む。
ファイル−LBAテーブル301のエントリ群の各々は、後述のように、ファイル情報[ファイル名,オフセット]とLBAリストとを対応付けて保持するのに用いられる。カウントテーブル302のエントリ群の各々は、後述のように、LBAとカウントと最終アクセス日時情報とを保持するのに用いられる。
テーブル管理部303は、第1のテーブル管理処理を実行し、アプリケーション122b及びデバイスドライバ123bからのIO情報に基づいてファイル−LBAテーブル301を管理(更新)する。テーブル管理部304は、第2のテーブル管理処理を実行し、デバイスドライバ123bからのIO情報に基づいてカウントテーブル302を管理(更新)する。
アプリケーション122bからのIO情報は、ファイル名、オフセット及びハッシュ値を含む。IO情報中のハッシュ値は、当該IO情報中のファイル名及びオフセットで指定されるファイル内の位置から読み出されたデータ、または当該ファイル内の位置に書き込まれるデータに基づいて算出される。デバイスドライバ123bからのIO情報は、アクセス先のLBA及びハッシュ値を含む。つまりデバイスドライバ123bからのIO情報は、IO識別子を含まない点を除けば、デバイスドライバ123からのそれと同様である。
カウント補正部305は、階層化ストレージ装置20内のアクセスカウントテーブル230のカウントを補正するのに用いられるカウント補正情報を、ファイル−LBAテーブル301及びカウントテーブル302に基づいて生成して、当該カウント補正情報を階層化ストレージ装置20に送信するためのカウント補正処理を実行する。カウント補正部305はカウント補正処理において、同一ファイル内の同一オフセットへのアクセスでありながら、COW動作によって複数のLBAへのアクセスとしてカウントされた状態を、ファイル−LBAテーブル301及びカウントテーブル302に基づいて検出する。カウント補正部305はカウント補正処理において、LBAリスト内の最後にアクセスされたLBAに対応付けられたカウント(アクセスカウントテーブル230のカウント)を、同一ファイル内の同一オフセットへのアクセスの回数に一致させるのに用いられる補正値(補正カウント)を算出する。カウント補正部305はカウント補正処理において、この算出結果に基づいて、LBA及び補正カウントの組の列を含むカウント補正情報を階層化ストレージ装置20に送出する。
図20は、図19に示されるファイル−LBAテーブル301のデータ構造例を示す。ファイル−LBAテーブル301のエントリ群の各々は、フィールドE1乃至E3を含む。フィールドE1は、ファイル名を保持するのに用いられるファイル名フィールドであり、フィールドE2は、当該ファイル名で示されるファイル内のオフセットを保持するのに用いられるオフセットフィールドである。つまり、フィールドE1及びE2はファイル情報[ファイル名,オフセット]を保持するのに用いられる。フィールドE3は、対応するエントリのフィールドE1及びE2の内容で示されるファイル内のオフセットのデータが格納されている1つ以上のLBAを保持するのに用いられるLBAリストフィールドである。つまり、フィールドE3は、COW動作により、1つの[ファイル名,オフセット]に対応する複数のLBAが存在する可能性があることを想定して用意される。このような構造を有するファイル−LBAテーブル301は、一種のマッピングテーブルである。
図21は、図19に示されるカウントテーブル302のデータ構造例を示す。カウントテーブル302のエントリ群の各々は、フィールドG1乃至G3を含む。フィールドG1は、LBAを保持するのに用いられるLBAフィールドである。フィールドG2は、対応するエントリのフィールドG1に保持されているLBAで示される領域(ブロック)へのアクセスのカウントを保持するのに用いられるカウントフィールドである。フィールドG3は、対応するエントリが最後にアクセスされた日時を示す最終アクセス日時情報を保持するのに用いられる最終アクセス日時フィールドである。
次に、第3の実施形態においてテーブル管理部303によって実行される第1のテーブル管理処理について、図22を参照して説明する。図22は、第1のテーブル管理処理の典型的な手順を示すフローチャートである。
まず、アプリケーション122bが、リード要求またはライト要求を発行したものとする。アプリケーション122bからのリード要求またはライト要求は、アクセス先を示すファイル情報[ファイル名,オフセット]を含む。このリード要求またはライト要求に応じて、システムコール発行機構からOS121にリードシステムコールまたはライトシステムコールが発行される。
OS121のファイルシステム1210は、このリードシステムコールまたはライトシステムコールに応じて、デバイスドライバ123bにより階層化ストレージ装置20にリード要求またはライト要求を送出させる。このデバイスドライバ123bからのリード要求またはライト要求は、アクセス先を示すLBAを含む。階層化ストレージ装置20のストレージコントローラ23は、このリード要求またはライト要求によって指定されたLBAに割り当てられている物理アドレスに基づいて、高速ストレージ装置21または低速ストレージ装置22からのデータの読み出し、または高速ストレージ装置21または低速ストレージ装置22へのデータの書き込みを実行する。
このデータの読み出し、または書き込みに応じて、アプリケーション122bからデーモン124bに、IO情報[ファイル名,オフセット,ハッシュ値]が渡される。同様に、デバイスドライバ123bからデーモン124bに、IO情報[LBA,ハッシュ値]が渡される。
デーモン124bのテーブル管理部303は、アプリケーション122bからのIO情報[ファイル名,オフセット,ハッシュ値]、及びデバイスドライバ123bからのIO情報[LBA,ハッシュ値]を受け取る(ステップS31)。テーブル管理部303は、両方の受領ハッシュ値が等しい場合、受領ファイル名及び受領オフセットを、受領LBAと関連付ける(ステップS32)。なお、両方の受領ハッシュ値が等しくない場合、テーブル管理部303は第1のテーブル管理処理を終了する。但し、この手順は、図22のフローチャートでは省略されている。
次にテーブル管理部303は、受領ファイル名及び受領オフセットに等しいファイル名及びオフセットを持つエントリを、目標とするエントリとしてファイル−LBAテーブル301から検索する(ステップS33)。そして、テーブル管理部303は、目標とするエントリを検索できたかを判定する(ステップS34)。ステップS33の判定がYesの場合、テーブル管理部303は、ファイル−LBAテーブル301内の目標エントリ以外のエントリ群の中から受領LBAに等しいLBAを持つ他のエントリを検索する(ステップS35)。そして、テーブル管理部303は、受領LBAに等しいLBAを持つ他のエントリを検索できたかを判定する(ステップS36)。
テーブル管理部303は、目標エントリのフィールドE3中のLBAリストに、受領LBAに等しいLBAが含まれていないならば、ステップS36の判定結果に無関係に、当該LBAリストに受領LBAを追加する(ステップS38)。したがって、ステップS36の判定がYesであるならば、同一のLBAで指定される領域(論理ブロック)が、異なるファイル名及びオフセットの組に基づいてアクセスされたことになる。このことは、COW動作で使用された論理ブロックが回収されて再利用されたことを示す。そこでテーブル管理部303は、ステップS36の判定がYesの場合、ステップS38に先行してステップS37を実行する。ステップS37においてテーブル管理部303は、カウント補正部305を起動して、当該カウント補正部305によりカウント補正処理を実行させる。
一方、ステップS34の判定がNoの場合、テーブル管理部303は、受領LBAに等しいLBAを持つエントリを、ファイル−LBAテーブル301から検索する(ステップS39)。そして、テーブル管理部303は、受領LBAに等しいLBAを持つエントリを検索できたかを判定する(ステップS40)。
テーブル管理部303は、ステップS40の判定結果に無関係に、受領ファイル名、受領オフセット及び受領LBAを持つエントリをファイル−LBAテーブル301に追加する(ステップS42)。したがって、ステップS40の判定がYesであるならば、同一のLBAで指定される論理ブロックが、異なるファイル名及びオフセットの組に基づいてアクセスされたことになる。このことは、COW動作で使用された論理ブロックが回収されて再利用されたことを示す。そこでテーブル管理部303は、ステップS40の判定がYesの場合、ステップS42に先行してステップS41を実行する。ステップS41においてテーブル管理部303は、カウント補正部305を起動して、当該カウント補正部305によりカウント補正処理を実行させる。テーブル管理部303は、ステップS38またはS42を実行すると、第1のテーブル管理処理を終了する。
次に、第3の実施形態においてテーブル管理部304によって実行される第2のテーブル管理処理について、図23を参照して説明する。図23は、第2のテーブル管理処理の典型的な手順を示すフローチャートである。
まず、ファイルシステム1210が、デバイスドライバ123bにより階層化ストレージ装置20にリード要求またはライト要求を送出させたものとする。これにより、階層化ストレージ装置20のストレージコントローラ2が、高速ストレージ装置21または低速ストレージ装置22からのデータの読み出し、または高速ストレージ装置21または低速ストレージ装置22へのデータの書き込みを実行したものとする。
このデータの読み出し、または書き込みに応じて、デバイスドライバ123bからデーモン124bに、IO情報[LBA,ハッシュ値]が渡される。デーモン124bのテーブル管理部304は、デバイスドライバ123bからのIO情報[LBA,ハッシュ値]を受け取る(ステップS51)。
次にテーブル管理部304は、受領LBAに等しいLBAを持つエントリを、目標とするエントリとしてカウントテーブル302から検索する(ステップS52)。そして、テーブル管理部303は、受領LBAに等しいLBAを持つエントリを検索できたかを判定する(ステップS53)。ステップS53の判定がYesであるならば、テーブル管理部303は、検索されたエントリ中のカウントを1インクリメントし、且つ当該検索されたエントリ中の最終アクセス日時情報を現在の日時を示すように更新する(ステップS54)。
これに対し、テップS53の判定がNoであるならば、テーブル管理部303は、受領LBA、カウント1、及び現在の日時を示す最終アクセス日時情報を含むエントリを、カウントテーブル302に追加する(ステップS55)。テーブル管理部303は、ステップS54またはS55を実行すると、第2のテーブル管理処理を終了する。
次に、第3の実施形態において、テーブル管理部303によってカウント補正部305が起動された場合に(図22のステップ37またはS41)、当該カウント補正部305によって実行されるカウント補正処理について、図24を参照して説明する。図24は、カウント補正処理の典型的な手順を示すフローチャートである。第3の実施形態においてカウント補正部305は、階層化ストレージ装置20のストレージコントローラ23が、階層化処理を実行する場合にも、当該ストレージコントローラ23からの要求に応じて起動される。
カウント補正部305は、ファイル−LBAテーブル301の全てのエントリについて、以下のステップS61を含む処理を繰り返す(ステップS60)。ここでは、カウントテーブル302の第iエントリについて、ステップS61を含む処理が実行されるものとする。
まずカウント補正部305は、第iエントリ中のLBAリストが2つ以上のLBAを含むかを判定する(ステップS61)。ステップS61の判定がYesである場合、カウント補正部305は、第iエントリ中のファイル名及びオフセットの組で指定されるブロックへのアクセスの要求(アプリケーション122bからのアクセス要求)に基づいてCOW動作が行われていると判定する。つまりカウント補正部305は、第iエントリが、COW動作に基づいてアクセスされたLBA(2つ以上のLBA)を全て含んでいると判定する。そこでカウント補正部305は、第iエントリに含まれる全てのLBAを取得する(ステップS62)。
次にカウント補正部305は、取得されたLBAをそれぞれ持つエントリを、カウントテーブル302から検索する(ステップS63)。そしてカウント補正部305は、検索された全てのエントリの最終アクセス日時情報の示す最終アクセス日時を比較して、最終アクセス日時が最新のエントリを選択する(ステップS64)。
次にカウント補正部305は、選択されなかった残りのエントリ(つまり、1つ以上のエントリ)中のカウントの合計を算出し、選択されたエントリ中のカウントを、算出された合計に変更する(ステップS65)。またカウント補正部305は、選択されなかった残りのエントリ中のカウントを、負の値に変更する(ステップS66)。これによりカウント補正部305は、第iエントリについての処理を終了する。
これに対し、ステップS61の判定がNoである場合、カウント補正部305は、第iエントリ中のファイル名及びオフセットの組で指定されるブロックは、COW動作とは無関係であると判定する。そこでカウント補正部305は、アクセスカウントテーブル230において第iエントリ中の単一のLBAと対応付けられたカウントを補正する必要はないと判定する。この場合、カウント補正部305は第iエントリについての処理を終了する。カウント補正部305は、以上の処理(ステップS61を含む処理)を、ファイル−LBAテーブル301の全エントリについて繰り返す(ステップS60)。
するとカウント補正部305は、カウントテーブル302に基づいてカウント補正情報を作成して、当該カウント補正情報を階層化ストレージ装置20に送信する(ステップS67)。カウント補正情報は、LBAと補正カウントの組の列を含む。補正カウントは、ステップS65またはS66で変更されたカウントである。次にカウント補正部305は、ファイル−LBAテーブル301及びカウントテーブル302の全てのエントリを削除して(ステップS68)、カウント補正処理を終了する(ステップS69)。
次に、第1の実施形態における第1のテーブル管理処理、第2のテーブル管理処理及びカウント補正処理の具体例について、図22乃至図24のフローチャートに加えて、図25乃至図31を参照して説明する。図25は第1のテーブル管理処理でエントリが追加されたファイル−LBAテーブルの例を示す図であり、図26は第2のテーブル管理処理でエントリが追加されたカウントテーブルの例を示す図である。図27は第3の実施形態におけるカウントテーブルの内容の遷移の例を示す図であり、図28は、第1のテーブル管理処理でエントリ中のLBAリストの内容が更新されたファイル−LBAテーブルの例を示す図である。図29はカウント補正処理で作成されたカウント補正情報の例を示す図であり、図30は第3の実施形態におけるアクセスカウントテーブルの内容の例を示す図であり、図31は第3の実施形態における補正されたアクセスカウントテーブルの内容の例を示す図である。
まず説明を簡略化するために、ファイル−LBAテーブル301及びカウントテーブル302が初期化されているものする。この状態で、アプリケーション122bが新たなファイルFのオフセット0のブロックのデータを作成したものとする。ファイルFのファイル名はF1であり、ファイルFのオフセット0のブロックのデータはD1であり、当該データD1のハッシュ値は0x1234であるものとする。また、データD1は、LBAが1(LBA=LBAp=1)の論理ブロックに書き込まれるものとする。
この場合、アプリケーション122bはデーモン124bにIO情報[ファイル名=F1,オフセット=0,ハッシュ値=0x1234]を渡す。これに対してデバイスドライバ123bは、デーモン124bにIO情報[LBA=1,ハッシュ値=0x1234]を渡す。
するとデーモン124bのテーブル管理部303は、IO情報[ファイル名=F1,オフセット=0,ハッシュ値=0x1234]中のファイル名=F1及びオフセット=0と、IO情報[LBA=1,ハッシュ値=0x1234]中のLBA=1とを、ハッシュ値=0x1234に基づいて関連付ける(図22のステップS31及びS32)。そしてテーブル管理部303は、図25に示されるように、ファイル名=F1、オフセット=0及びLBA=1を持つエントリ2501を、ファイル−LBAテーブル301に追加する(図22のステップS33,S34,S39,S40及びS42)。一方、テーブル管理部304は、図26に示されるように、LBA=1、カウント=1、及び現在の日時(2015/xx/yy 15:00)を示す最終アクセス日時情報を持つエントリ2601を、カウントテーブル302に追加する。(図23のステップS51乃至S53及びS55)。
その後、アプリケーション122bが、ファイルFのオフセット0からのデータD1の読み出しを実行したものとする。この場合、アプリケーション122bはデーモン124bにIO情報[ファイル名=F1,オフセット=0,ハッシュ値=0x1234]を渡す。これに対してデバイスドライバ123bは、デーモン124bにIO情報[LBA=1,ハッシュ値=0x1234]を渡す。
するとデーモン124bのテーブル管理部303は、IO情報[ファイル名=F1,オフセット=0,ハッシュ値=0x1234]中のファイル名=F1及びオフセット=0と、IO情報[LBA=1,ハッシュ値=0x1234]中のLBA=1とを、ハッシュ値=0x1234に基づいて関連付ける(図22のステップS31及びS32)。このとき、ファイル−LBAテーブル301は、ファイル名=F1及びオフセット=0を持つエントリ2501を含む(図22のステップS34のYes)。エントリ2501には、LBA=1が存在する。このためテーブル管理部303は、図22のステップ38を実行しない。したがってエントリ2501のフィールドE3の内容は更新されない。
一方、カウントテーブル302は、図26に示されるように、LBA=1を持つエントリ2601を含む(図23のステップS53のYes)。そこでテーブル管理部303は、図26に示される状態にあるエントリ2601中のカウントを1インクリメントすることにより、図27において矢印A21で示されるように当該カウントを2に更新し、且つ最終アクセス日時情報が現在の日時(2015/xx/yy 16:00)を示すように当該最終アクセス日時情報を更新する(図23のステップS54)。
その後、アプリケーション122bが、ファイルFのオフセット0にデータD2を上書きすることを指示するライト要求WRを発行したものとする。この場合、ライト要求WRに応じたファイルシステム1210のCOW動作により、当該ライト要求WRが、リード要求RR、ライト要求WR1及びライト要求WR2に分解される。そして、リード要求RR、ライト要求WR1及びライト要求WR2が実行されることにより、データD1が書き込まれているLBA(=LBAp=1)とは異なるLBA(=LBAp=2)の論理ブロックに、データD2が書き込まれるものとする。データD2のハッシュ値は、前述のように0x1357である。
この場合、アプリケーション122bは、ライト要求WRに対応するIO情報[ファイル名=F1,オフセット=0,ハッシュ値=0x1357]をデーモン124bに渡す。これに対してデバイスドライバ123bは、リード要求RRに対応するIO情報[LBA=1,ハッシュ値=0x1234]、ライト要求WR1に対応するIO情報[LBA=2,ハッシュ値=0x1234]、及びライト要求WR2に対応するIO情報[LBA=2,ハッシュ値=0x1357]を逐次デーモン124bに渡す。
ライト要求WRに対応するIO情報及びライト要求WR2に対応するIO情報は、いずれもハッシュ値=0x1357を含む。そこでデーモン124bのテーブル管理部303は、ライト要求WRに対応するIO情報中のファイル名=F1及びオフセット=0と、ライト要求WR2に対応するIO情報中のLBA=2とを、ハッシュ値=0x1357に基づいて関連付ける(図22のステップS31及びS32)。
これに対して、リード要求RR及びライト要求WR1の各々に対応するIO情報は、ハッシュ値=0x1357とは異なるハッシュ値(=0x1234)を含む。このためテーブル管理部303は、リード要求RR及びライト要求WR1の各々に対応するIO情報中のLBAを、ライト要求WRに対応するIO情報中のファイル名=F1及びオフセット=0と関連付けない。このことは、テーブル管理部303(デーモン124b)が、リード要求RR、ライト要求WR1及びライト要求WR2のうちのライト要求WR2のみを、ライト要求WRに対応するアクセス要求であると認識することと等価である。
このとき、ファイル−LBAテーブル301は、図25に示されるように、ファイル名=F1及びオフセット=0を持つエントリ2501を含む。この場合、テーブル管理部303は、エントリ2501を目標エントリとして検索することができる(図22のステップS34のYes)。図25に示されるエントリ2501には、LBA=2は存在しない。そこでテーブル管理部303は、図25に示されるエントリ2501のフィールドE3中のLBAリストに、LBA=2を追加する(図22のステップS38)。これにより、エントリ2501中のLBAリストの内容は、図28に示されるように変更される。
一方、エントリ2601の内容が、図27において矢印A21で示されるように更新されたカウントテーブル302は、LBA=2を持つエントリを含まない(図23のステップS53のNo)。この場合、テーブル管理部304は、図27において矢印A22で示されるように、LBA=2、カウント=1、及び現在の日時(2015/xx/yy 17:00)を示す最終アクセス日時情報を持つエントリ2602を、カウントテーブル302に追加する。(図23のステップS55)。
その後、ストレージコントローラ23が階層化処理を実行するために、コンピュータ10_1にカウント補正情報を要求したものとする。すると、コンピュータ10_1のデーモン124bのカウント補正部305は、図24に示されるフローチャートに従ってカウント補正処理を実行する。これによりカウント補正部305は、カウント補正情報を作成する(図24のステップS67)。
このとき、ファイル−LBAテーブル301は、図28に示される状態にあるエントリ2501を含み、カウントテーブル302は、図27において矢印A22で示される状態にあるエントリ2601及び2602を含むものとする。この状態において、エントリ2501中のLBAリストは、2つのLBA、即ちLBA=1及びLBA=2を含む。同様にエントリ2601及び2602は、それぞれ、LBA=1及びLBA=2を含む。
そこでカウント補正部305は、エントリ2501中のLBAリストからLBA=1及びLBA=2を取得する(図24のステップS61及びS62)。またカウント補正部305は、ファイル−LBAテーブル301から、LBA=1及びLBA=2をそれぞれ有するエントリ2601及び2602を検索する(図24のステップS63)。そしてカウント補正部305は、エントリ2601及び2602から、最終アクセス日時が最新のエントリ2602を選択する(図24のステップS64)。選択されなかったエントリ2601中のカウントは2である。この場合、このカウント=2が、選択されなかった1つ以上のエントリの合計として用いられる。
そこでカウント補正部305は、選択されたエントリ2602中のカウント(=1)を、2(より詳細には、+2)に変更する(図24のステップS65)。またカウント補正部305は、選択されなかったエントリ2601中のカウント(=2)を負の値、つまり−2に変更する(図24のステップS66)。
次にカウント補正部305は、変更後のカウントテーブル302の内容(即ち変更後のエントリ2601及び2602中のLBA及びカウントの組)に基づいて、図29に示されるカウント補正情報を作成する(図24のステップS67)。このカウント補正情報は、変更後のカウントテーブル302中のLBA及びカウントの組の列を、LBA及び補正カウントの組の列として含むリスト[(LBA=1,補正カウント=−2),(LBA=2,補正カウント=+2)]から構成される、ステップS67においてカウント補正部305は、作成されたカウント補正情報を階層化ストレージ装置20に送信する。そして、カウント補正部305は、ファイル−LBAテーブル301のエントリ2501及びカウントテーブル302のエントリ2601及び2602を全て削除する(図24ステップS68)。
一方、階層化ストレージ装置20のストレージコントローラ23は、デバイスドライバ123bからのリード要求またはライト要求に応じて、例えば、指定のLBA(受領LBA)及びカウント=1を含むエントリをアクセスカウントテーブル230に追加する。また、指定のLBAを含むエントリがアクセスカウントテーブル230に存在する場合、ストレージコントローラ23は当該エントリ中のカウントを1インクリメントする。
第3の実施形態では、アプリケーション122bが新たなファイルFのオフセット0のブロックのデータD1を作成した場合に、デバイスドライバ123bから階層化ストレージ装置20に、LBA=1へのデータD1の書き込みを指定するライト要求が送出されたものとする。その後、アプリケーション122bがファイルFのオフセット0のブロックからのデータの読み出しを要求した場合、デバイスドライバ123bから階層化ストレージ装置20に、LBA=1からのデータの読み出しを指定するリード要求が送出されたものとする。その後、アプリケーション122bがファイルFのオフセット0のブロックへのデータDの上書きを要求した場合、第1の実施形態と同様に、ファイルシステム1210のCOW動作に従い、デバイスドライバ123bから階層化ストレージ装置20に、リード要求RR、ライト要求WR1及びライト要求WR2が、順次送出される。
この場合、アクセスカウントテーブル230は、図30に示されるように、LBA=1及びLBA=2をそれぞれ持つエントリ3001及び3002を含む。また、LBA=1及びLBA=2に対応付けられたエントリ3001及び3002中のカウントは、図30に示されるように、それぞれ3及び2である。
ストレージコントローラ23は、カウント補正部305から階層化ストレージ装置20に、図29に示されるカウント補正情報[(LBA=1,補正カウント=−2),(LBA=2,補正カウント=+2)]が送信された場合、当該カウント補正情報に基づいて、アクセスカウントテーブル230を次のように補正する。まずストレージコントローラ23は、アクセスカウントテーブル230に含まれていて、且つカウント補正情報の先頭の要素(LBA=1,補正カウント=−2)中のLBA(=1)に等しいLBAを持つエントリ3001を選択する。そしてストレージコントローラ23は、エントリ3001中のカウント=3に補正カウント=−2を加算する。これにより、エントリ3001中のカウントは、図31に示されるように1に補正される。
次にストレージコントローラ23は、アクセスカウントテーブル230に含まれていて、且つカウント補正情報の次(最後)の要素(LBA=2,補正カウント=+2)中のLBA(=2)に等しいLBAを持つエントリ3002を選択する。そしてストレージコントローラ23は、エントリ3002中のカウント=2に補正カウント=+2を加算する。これにより、エントリ3001中のカウントは、図31に示されるように4に補正される。
アクセスカウントテーブル230のエントリ3001及び3002中のカウントの合計(第1の合計)は、補正前及び補正後のいずれの状態においても5である(図30及び図31)。これに対して、カウントテーブル302のエントリ2601及び3602中のカウントの合計(第2の合計)は3であり(図27)、第1の合計に一致しない。その理由は、デーモン124bが、リード要求RR、ライト要求WR1及びライト要求WR2のうちのライト要求WR2のみを、アプリケーション122bからのライト要求WRに対応していると認識することによる。
しかし、第3の実施形態によれば、アクセスカウントテーブル230とカウントテーブル302とでカウントのずれが生じるとしても、アプリケーション122bが認識するファイルアクセスの状況に合致するカウントに極力近づけるように、アクセスカウントテーブル230を補正することができる。これにより、階層化ストレージ装置20のストレージコントローラ23は、ファイルシステム1210のCOW機能が有効な場合でも、アプリケーション122bにより発行されるアクセス要求の状況を比較的正しく反映した階層化を実現することができる。
<第3の実施形態の変形例>
次に、第3の実施形態の変形例に係る階層化ストレージシステムについて説明する。本変形例の第1の特徴は、コンピュータ10_1が、スナップショットに関する情報を扱う機能を有するデーモン124c(図32)を含むことにある。したがって、本変形例において必要ならば、図1に示されるデーモン124をデーモン124cに読み替えられたい。また、第3の実施形態と同様に、図1に示されるアプリケーション122及びデバイスドライバ123を、それぞれアプリケーション122b及びデバイスドライバ123bに読み替えられたい。
次に、第3の実施形態の変形例に係る階層化ストレージシステムについて説明する。本変形例の第1の特徴は、コンピュータ10_1が、スナップショットに関する情報を扱う機能を有するデーモン124c(図32)を含むことにある。したがって、本変形例において必要ならば、図1に示されるデーモン124をデーモン124cに読み替えられたい。また、第3の実施形態と同様に、図1に示されるアプリケーション122及びデバイスドライバ123を、それぞれアプリケーション122b及びデバイスドライバ123bに読み替えられたい。
以下、第3の実施形態の変形例における階層化ストレージシステムの機能構成について、第3の実施形態におけるそれと異なる点を中心に、図32を参照して説明する。図32は、第3の実施形態の変形例に係る階層化ストレージシステムの典型的な機能構成を示すブロック図である。図32においてコンピュータ10_1は、第3の実施形態におけるそれとは異なって、スナップショット部126を含む。また、図32においてコンピュータ10_1は、第3の実施形態におけるデーモン124bに代えて用いられるデーモン124cを含む。
スナップショット部126は、ファイルのバックアップ(つまり、スナップショット)の作成及び削除を実行する。この実行のために、スナップショット部126はスナップショットの作成要求または削除要求をOS121に発行する。作成要求または削除要求は、作成または削除されるべきスナップショットに関するIO情報を含む。このIO情報は、スナップショットとしてバックアップされるべきファイルまたは削除されるべきスナップショットに対応するファイルのファイル名と、当該スナップショットのスナップショット名とを含む。
本変形例において、ファイルのスナップショットは、当該ファイルが格納されている領域(第1の領域)に作成される。つまり、ファイルのスナップショットは、当該ファイルのデータが移動されることなく作成される。このためスナップショットの作成直後は、第1の領域内のファイル(つまり元のファイル)がスナップショットとして参照される。よって、スナップショットのための特別な領域を必要としない。COW機能が有効な状態で、アプリケーション122bが元のファイルを変更する場合、ファイルシステム1210は、COW動作により、ファイルの新たなデータを、元のファイルの領域とは異なる領域に書き込む。変更前のデータは、スナップショットとして参照された状態にある。
スナップショット部126は、スナップショットの作成要求または削除要求をOS121に発行する場合、当該作成要求または削除要求に対応する上述のIO情報をデーモン124cに渡す。デーモン124cは、第3の実施形態で示された機能に加えて、スナップショットを管理する機能を有する。
図33は、図32に示されるデーモン124cの典型的な機能構成を示すブロック図である。デーモン124cは、第3の実施形態におけるデーモン124bと同様に、ファイル−LBAテーブル301、テーブル管理部303、テーブル管理部304、及びカウント補正部305を含む。デーモン124cは更に、第3の実施形態におけるカウントテーブル302に代えて用いられるカウントテーブル302c、及び図32に示されるスナップショット部126に対応するスナップショット管理部306とを含む。
図34は、図33に示されるカウントテーブル302cのデータ構造例を示す。カウントテーブル302cのエントリ群の各々は、第3の実施形態におけるカウントテーブル302のそれと同様にフィールドG1乃至G3を含む。カウントテーブル302cのエントリ群の各々は更に、カウントテーブル302のそれとは異なり、フィールドG4を含む。フィールドG4は、対応するエントリのフィールドG1の内容(LBA)で示される論理ブロックに格納されたデータが、異なるスナップショットとして同時に参照されている数(被参照数)を示す。
図33に示されるスナップショット管理部306は、スナップショット部126からの、スナップショット作成要求に対応するIO情報[ファイル名,スナップショット名]に基づいて、第1のスナップショット管理処理を実行する。またスナップショット管理部306は、スナップショット部126からのスナップショット削除要求に対応するIO情報[ファイル名,スナップショット名]に基づいて、第2のスナップショット管理処理を実行する。
次に、第3の実施形態の変形例においてスナップショット管理部306によって実行される第1のスナップショット管理処理について、図35を参照して説明する。図35は、第1のスナップショット管理処理の典型的な手順を示すフローチャートである。
まずスナップショット部126が、ファイルシステム1210にスナップショット作成要求を発行したものとする。スナップショット作成要求は、ファイルFのファイル名F1及びスナップショット名SS1の組を含むものとする。これによりファイルシステム1210は、ファイル名F1で示されるファイルFを、スナップショット名SSで示されるスナップショットとして管理する。スナップショット部126はまた、スナップショット作成要求に含まれているファイル名F1及びスナップショット名SS1の組と同一のIO情報[ファイル名=F1,スナップショット名=SS1]をデーモン124cに渡す。
するとデーモン124cのスナップショット管理部306は、図35のフローチャートで示される第1のスナップショット管理処理を、次のように実行する。まずスナップショット管理部306は、スナップショット部126から渡されたIO情報[ファイル名=F1,スナップショット名=SS1]を受け取る(ステップS71)。
次にスナップショット管理部306は、ファイル−LBAテーブル301から、受領ファイル名F1に一致するファイル名を持つエントリを全て選択する(ステップS72)。そしてスナップショット管理部306は、選択された全エントリからLBAリストを抽出する(ステップS73)。
次にスナップショット管理部306は、抽出された全LBAリスト中の全てのLBAに基づいて、ファイル−LBAテーブル301に含まれていて、且つ当該LBAとそれぞれ対応付けられたエントリを全て参照する(ステップS74)。ステップS74においてスナップショット管理部306は、参照された全エントリから、最新の最終アクセス日時を示すエントリを選択し、選択されたエントリからLBAを抽出する。つまりスナップショット管理部306は、参照された全エントリから、最終アクセス日時が最新のLBAを抽出する。抽出されたLBAは、スナップショットとして作成されるべきファイル(より詳細には、ファイル内のあるオフセット)の最新のデータが格納されている論理領域(ブロック)を示す。
次にスナップショット管理部306は、カウントテーブル302cに含まれていて、且つ抽出されたLBAを含むLBAリスト中の全LBAにそれぞれ対応付けられたエントリを全て選択し、選択された全エントリ中の被参照数をいずれも1インクリメントする(ステップS75)。次にスナップショット管理部306は、受領スナップショット名SS1をファイル名として持ち、且つ抽出されたLBA(つまり、最新のLBA)をLBAリストとして持つエントリを、ファイル−LBAテーブル301に追加する(ステップS76)。スナップショット管理部306は、追加されたエントリ中のオフセットとして、ステップS72においてファイル−LBAテーブル301から選択された全エントリのうち、最新のLBAを含むLBAリストを持つエントリに設定されたオフセットを用いる。スナップショット管理部306はステップS76を実行すると、第1のスナップショット管理処理を終了する。
次に、第3の実施形態の変形例においてスナップショット管理部306によって実行される第2のスナップショット管理処理について、図36を参照して説明する。図36は、第2のスナップショット管理処理の典型的な手順を示すフローチャートである。
まずスナップショット部126が、ファイルシステム1210にスナップショット削除要求を発行したものとする。スナップショット削除要求は、ファイルFのファイル名F1及びスナップショット名SS1の組を含むものとする。スナップショット部126はまた、スナップショット作成要求に含まれているファイル名F1及びスナップショット名SS1の組と同一のIO情報[ファイル名=F1,スナップショット名=SS1]をデーモン124cに渡す。
するとデーモン124cのスナップショット管理部306は、図36のフローチャートで示される第2のスナップショット管理処理を、次のように実行する。まずスナップショット管理部306は、スナップショット部126から渡されたIO情報[ファイル名=F1,スナップショット名=SS1]を受け取る(ステップS81)。
次にスナップショット管理部306は、ファイル−LBAテーブル301から、受領フスナップショット名SS1に一致するファイル名を持つエントリを全て選択する(ステップS82)。そしてスナップショット管理部306は、ステップS83及びS84を実行する。ステップS83及びS84は、前述の第1のスナップショット管理処理におけるステップS73及びS74に相当する。したがってスナップショット管理部306は、ステップS83及びS84の実行により、最新のLBAを抽出する。必要ならば、第1のスナップショット管理処理に関する前述の説明において、ステップS73及びS74を、ステップS83及びS84に読み替えられたい。
次にスナップショット管理部306は、カウントテーブル302cに含まれていて、且つ抽出されたLBAを含むLBAリスト中の全LBAにそれぞれ対応付けられたエントリを全て選択し、選択された全エントリ中の被参照数をいずれも1ディクリメントする(ステップS85)。次にスナップショット管理部306は、ディクリメント操作(ステップS86)によって値が0となった被参照数を持つ全てのエントリを、目標とするエントリとしてカウントテーブル302cから検索する(ステップS87)。
もし、目標とするエントリを検索できたならば(ステップS87のYes)、スナップショット管理部306は検索された全エントリ中のカウントの合計Nを算出し、且つ当該全エントリ中のカウントを0に変更する(ステップS88)。検索されたエントリ中のLBAは、以前に1つ以上のスナップショットとして参照されていたものの、現在は参照されなくなったデータの格納先の論理ブロックを示す。なお、1つのエントリだけが検出されたならば、スナップショット管理部306は、当該1つのエントリ中のカウントを、合計Nとして決定する。
次にスナップショット管理部306は、ファイル−LBAテーブル301を参照することにより、検索されたエントリ中のLBAを含むLBAリストを持つエントリを全て特定する(ステップS89)。ステップS89においてスナップショット管理部306は、特定された全エントリの中から、2つ以上のLBAを含むLBAリストを全て抽出する。抽出されたLBAリストは、検索されたエントリ中のLBAを含む。つまりスナップショット管理部306は、検索されたエントリ中のLBAに一致するするLBA以外に、1つ以上のLBAを含む2つ以上のLBAリストを、ファイル−LBAテーブル301から全て抽出する。
次にスナップショット管理部306は、第1(2)のスナップショット管理処理におけるステップS74(S84)に相当するステップS90を実行する。即ちスナップショット管理部306は、ステップS89において抽出された全LBAリスト中の全てのLBAに基づいて、ファイル−LBAテーブル301に含まれていて、且つ当該LBAとそれぞれ対応付けられたエントリを全て参照する。そしてスナップショット管理部306は、参照された全エントリから、最終アクセス日時が最新のLBAを抽出する。
次にスナップショット管理部306は、カウントテーブル302cに含まれていて、且つステップS90において抽出された最新のLBAに対応付けられたエントリ中のカウントに、ステップS88において算出された合計Nを加算する(ステップS91)。つまり、スナップショット管理部306は、ステップS88において0に変更されたカウントの変更前の値の合計Nを、最新のLBAに対応付けられたエントリ中のカウントに引き継ぐ。
次にスナップショット管理部306は、ステップS82において選択されたエントリを全てファイル−LBAテーブル301から削除する(ステップS92)。そしてスナップショット管理部306は、第2のスナップショット管理処理を終了する。
第3の実施形態の変形例によれば、スナップショット管理部306は、スナップショットとして参照されなくなったデータの格納先を示すLBAに対応付けられたカウントを、COW動作によって変更された格納先を示す最新のLBAに対応付けられたカウントに加算することができる。これにより、階層化ストレージ装置20のストレージコントローラ23は、ファイルシステム1210のCOW機能が有効で、且つ階層化ストレージシステム(のコンピュータ10_1)がスナップショットを適用している場合でも、アプリケーション122により発行されるアクセス要求の状況を正しく反映した階層化を実現することができる。
前記第1乃至第3の実施形態、及び前記第3の実施形態の変形例では、ファイルの各オフセットのデータは、当該ファイルの作成時期に無関係に、アクセスカウントに応じて、高速ストレージ装置21または低速ストレージ装置22に再配置される。この再配置について、簡単に説明する。
まず、ファイルFaのオフセットOFSTaのデータDaが、LBAaで指定される論理ブロックLBaに格納されているものとする。この場合、ストレージコントローラ23は、アクセスカウントテーブル230においてLBAaに対応付けられたアクセスカウントCNTa(例えば、一定期間におけるアクセスカウント)が、閾値THを超えるか否かに応じて、データDaを高速ストレージ装置21または低速ストレージ装置22のいずれに再配置するかを決定する。具体的には、CNTa>THであって、且つデータDaが低速ストレージ装置22に配置されている場合、当該データDaは高速ストレージ装置21に再配置される。
しかし、ファイルFaが最近作成されている場合、CNTaがTHを超えるのに時間を要し、データDaは比較的長い期間、低速ストレージ装置22に配置される。そこで、ファイルFaが新規に作成された場合、ストレージコントローラ23が、当該ファイルFaの各オフセットのデータを、アクセスカウントに無関係に高速ストレージ装置21に配置しても構わない。このような構成では、コピーオンライト動作の特徴により、データの上書きも、新規書き込みとして、高速ストレージ装置21に対して行われる。このため、高速ストレージ装置21の記憶容量が足りなくなる可能性がある。
そこで、ストレージコントローラ23は、例えば、高速ストレージ装置21に配置されているファイルのデータのうち、作成から一定期間が経過し、且つ対応するアクセスカウントが少ないデータを、低速ストレージ装置22に移動する。従来技術では、このアクセスカウントは、コピーオンライト動作の影響を受けるために正確ではなく、したがって低速ストレージ装置22への適切な移動は困難である。これに対して、前記第1乃至第3の実施形態、及び前記第3の実施形態の変形例では、コピーオンライト動作におけるコピー元の論理ブロックアドレスに対応付けられたアクセスカウントを、コピーオンライト動作におけるコピー先の論理ブロックアドレスに対応付けられたアクセスカウントに引き継ぐことができるため、アクセスカウントは正確である。よって、アクセスカウントが少ないデータを、低速ストレージ装置22に適切に移動することができる。
以上説明した少なくとも1つの実施形態によれば、ストレージコントローラが管理するアクセスカウントを、コピーオンライト機能が有効な場合でも、アプリケーションが認識するファイルアクセスの状況に合致するように補正することができ、ユーザの利便性の向上に寄与する階層化を実現することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
Claims (16)
- 階層化ストレージ装置と、
前記階層化ストレージ装置を利用するコンピュータと
を具備し、
前記階層化ストレージ装置は、
アクセス性能の異なる複数のストレージ装置と、
前記複数のストレージ装置へのアクセスを制御するストレージコントローラとを具備し、
前記ストレージコントローラは、前記複数のストレージ装置の記憶領域がブロック単位で割り当てられる論理ユニット内の論理ブロックを示す論理ブロックアドレスにそれぞれ対応付けて、前記論理ブロックへのアクセスのカウントを管理し、且つ前記論理ブロックアドレスにそれぞれ対応付けられたアクセスカウントに基づいて、前記論理ブロックに格納されるデータを前記複数のストレージ装置の1つに再配置し、
前記コンピュータは、
前記コンピュータ上で動作するアプリケーションからの、ファイル名と当該ファイル名で示されるファイル内のアクセスされるべきブロックの相対位置情報とを含むアクセス要求に応じて、前記アクセスされるべきブロックに対応付けられた論理ブロックアドレスを含むリード要求またはライト要求を発行するファイルシステムと、
前記ファイルシステムからのリード要求またはライト要求を前記ストレージコントローラに送出することにより、前記階層化ストレージ装置にアクセスするデバイスドライバと
を具備し、
前記コンピュータまたは前記階層化ストレージ装置は、前記ストレージコントローラによって管理されるアクセスカウントの補正を支援する補正支援部を更に具備し、
前記ファイルシステムは、前記アプリケーションから要求されたファイルを、当該ファイルを構成するブロックそれぞれの当該ファイル内の相対位置と、当該ファイルを構成するブロックのデータが格納される論理ブロックそれぞれの論理ブロックアドレスとを対応付けることによって管理し、前記アクセス要求がデータの上書きを要求するライト要求WRである場合、上書きされるべきデータを、当該上書きされるべきデータが格納されている論理ブロックとは異なる論理ブロックにコピーした後、当該コピー先に前記ライト要求WRで指定されたデータを書き込むためのコピーオンライト動作を、前記デバイスドライバを用いて実行し、
前記補正支援部は、前記ストレージコントローラによって管理されていて、且つ前記コピーオンライト動作におけるコピー元の論理ブロックアドレスに対応付けられたアクセスカウントを、前記コピーオンライト動作におけるコピー先の論理ブロックアドレスに対応付けられたアクセスカウントに引き継がせる
階層化ストレージシステム。 - 前記補正支援部は、ファイル内の相対位置と対応付けられる論理ブロックアドレスが、前記コピーオンライト動作により変化したことを検出することにより、変化前の論理ブロックアドレス及び変化後の論理ブロックアドレスを、それぞれコピー元を示す旧論理ブロックアドレス及びコピー先を示す新論理ブロックアドレスとして前記ストレージコントローラに通知し、
前記ストレージコントローラは、前記通知された旧論理ブロックアドレスに対応付けられたアクセスカウントを、前記通知された新論理ブロックアドレスに対応付けられたアクセスカウントに引き継ぐ
請求項1記載の階層化ストレージシステム。 - 前記ファイルシステムは、前記ライト要求WRに従う前記コピーオンライト動作のために、前記コピー元からの読み出しを指定するリード要求RR、前記リード要求RRに応じて読み出されるデータを、前記コピー先に書き込むことを指定するライト要求WR1、及び前記ライト要求WRで指定されたデータを前記コピー先に書き込むことを指定するライト要求WR2を、前記デバイスドライバにより前記階層化ストレージ装置に順次送出させ、
前記補正支援部は、前記デバイスドライバから前記階層化ストレージ装置に対して、第1のリード要求、第1のライト要求及び第2のライト要求が順次送出され、前記第1のライト要求に応じて書き込まれるデータが前記第1のリード要求に応じて読み出されたデータに等しく、且つ前記第2のライト要求によって指定される論理ブロックアドレスが、前記第1のライト要求によって指定される論理ブロックアドレスに等しい場合に、コピーオンライト動作が実行されて、前記第1のリード要求に応じて読み出されたデータのファイル内の相対位置と対応付けられる論理ブロックアドレスが変化したことを検出する
請求項2記載の階層化ストレージシステム。 - 前記デバイスドライバは、前記階層化ストレージ装置にリード要求またはライト要求を送出した場合、リードまたはライトを示す識別子、当該リード要求またはライト要求の指定する論理ブロックアドレス、及び当該リード要求に応じて読み出されるデータまたは当該ライト要求の指定するライトデータのハッシュ値を含む第1の入出力情報を前記補正支援部に渡し、
前記補正支援部は、前記デバイスドライバからの前記第1の入出力情報に基づいて前記コピーオンライト動作に伴う論理ブロックアドレスの変化を検出する
請求項3記載の階層化ストレージシステム。 - 前記補正支援部は、
旧論理ブロックアドレスとして定義される、コピーオンライト動作におけるデータのコピー元の論理ブロックアドレスと、新論理ブロックアドレスとして定義される、当該データのコピー先の論理ブロックアドレスと、当該データのハッシュ値との対応を、データ管理テーブルのエントリを用いて管理し、
前記第1の入出力情報の受領に応じて前記第1の入出力情報中の識別子をチェックし、当該識別子がリードを示す場合、前記第1の入出力情報中の論理ブロックアドレスを旧論理ブロックアドレスとして有し、前記第1の入出力情報中のハッシュ値に等しいハッシュ値を有し、且つ新論理ブロックアドレスを欠いたエントリを前記データ管理テーブルに追加し、
前記第1の入出力情報中の識別子がライトを示す場合、前記第1の入出力情報中のハッシュ値に等しいハッシュ値を有し、且つ新論理ブロックアドレスを欠くエントリを前記データ管理テーブルから検索して、当該検索されたエントリに前記第1の入出力情報中の論理ブロックアドレスを新論理ブロックアドレスとして設定し、
前記第1の入出力情報中のハッシュ値に等しいハッシュ値を有し、且つ新論理ブロックアドレスを欠くエントリを検索できなかった場合、前記第1の入出力情報中の論理ブロックアドレスに等しい新論理ブロックアドレスを有するエントリを前記データ管理テーブルから検索して、当該検索されたエントリ中の旧論理ブロックアドレス及び新論理ブロックアドレスを、前記ストレージコントローラに通知する
請求項4記載の階層化ストレージシステム。 - 前記補正支援部は、前記通知された旧論理ブロックアドレス及び新論理ブロックアドレスを有するエントリを前記データ管理テーブルから削除する請求項5記載の階層化ストレージシステム。
- 前記補正支援部は、前記エントリが追加または更新されてから一定時間が経過した場合、前記エントリを前記データ管理テーブルから削除する請求項5記載の階層化ストレージシステム。
- 前記コンピュータは、
前記階層化ストレージ装置から読み出されたリードデータ、及び前記階層化ストレージ装置に書かれるべきライトデータを格納するのに用いられるキャッシュバッファと、
前記キャッシュバッファへのアクセスを制御し、前記キャッシュバッファに格納されたデータのディレクトリを管理し、且つ前記ファイルシステムからのライト要求に基づく前記キャッシュバッファへのライトデータの書き込みに応じて、当該ライトデータの書き込み先を示すバッファアドレス及び当該ライトデータのハッシュ値を有する第2の入出力情報を前記補正支援部に渡すキャッシュコントローラと
を更に具備し、
前記補正支援部は、前記デバイスドライバからの前記第1の入出力情報及び前記キャッシュコントローラからの前記第2の入出力情報に基づいて前記コピーオンライト動作に伴う論理ブロックアドレスの変化を検出する
請求項4記載の階層化ストレージシステム。 - 前記補正支援部は、
旧論理ブロックアドレスとして定義される、コピーオンライト動作におけるデータのコピー元の論理ブロックアドレスと、新論理ブロックアドレスとして定義される、当該データのコピー先の論理ブロックアドレスと、前記キャッシュバッファにおける当該データの格納先を示すバッファアドレスと、旧ハッシュ値として定義される、当該データのハッシュ値と、新ハッシュ値として定義される、当該コピー先に上書きされるデータのハッシュ値との対応を、データ管理テーブルのエントリを用いて管理し、
前記第1の入出力情報の受領に応じて前記第1の入出力情報中の識別子をチェックし、当該識別子がリードを示す場合、前記第1の入出力情報中の論理ブロックアドレス及びハッシュ値を、それぞれ旧論理ブロックアドレス及び旧ハッシュ値として有するエントリを前記データ管理テーブルに追加し、
前記第2の入出力情報の受領に応じて、当該第2の入出力情報中のバッファアドレスに等しいバッファアドレスを有するエントリを検索して、当該検索されたエントリに当該第2の入出力情報中のハッシュ値を新ハッシュ値として設定し、
前記第2の入出力情報中のバッファアドレスに等しいバッファアドレスを有するエントリを検索できなかった場合、前記第2の入出力情報中のハッシュ値に等しい旧ハッシュ値を有するエントリを前記データ管理テーブルから検索して、当該検索されたエントリに当該第2の入出力情報中のバッファアドレスを設定し、
前記識別子がライトを示し、且つ前記第1の入出力情報中の論理ブロックアドレスに等しい旧論理ブロックアドレスを有するエントリが前記データ管理テーブルに存在しない場合、前記第1の入出力情報中のハッシュ値に等しい新ハッシュ値を有するエントリを前記データ管理テーブルから検索して、当該検索されたエントリに当該第1の入出力情報中の論理ブロックアドレスを前記新論理ブロックアドレスとして設定し、しかる後に当該検索されたエントリ中の旧論理ブロックアドレス及び新論理ブロックアドレスを、前記ストレージコントローラに通知し、
前記第1の入出力情報中のハッシュ値に等しい新ハッシュ値を有するエントリを検索できなかった場合、前記第1の入出力情報中の論理ブロックアドレス及びハッシュ値を、それぞれ旧論理ブロックアドレス及び旧ハッシュ値として有するエントリを前記データ管理テーブルに追加する
請求項8記載の階層化ストレージシステム。 - 前記デバイスドライバは、前記階層化ストレージ装置にリード要求またはライト要求を送出した場合、当該リード要求またはライト要求の指定する論理ブロックアドレス、及び当該リード要求に応じて読み出されるデータまたは当該ライト要求の指定するライトデータのハッシュ値を含む第1の入出力情報を前記補正支援部に渡し、
前記アプリケーションは、前記アクセス要求の発行に応じて、ファイル名、相対位置情報、及び前記アクセス要求に応じて読み出されるまたは書き込まれるデータのハッシュ値を含む第2の入出力情報を前記補正支援部に渡し、
前記補正支援部は、
ファイルのファイル名と、当該ファイル内の相対位置を示す相対位置情報と、当該相対位置に対応付けられた論理ブロックアドレスの列を含む論理ブロックアドレスリストとの対応を、マッピングテーブルのエントリを用いて管理し、
前記マッピングテーブルの全てのエントリの論理ブロックアドレスリストに含まれているそれぞれの論理ブロックアドレスと、当該それぞれの論理ブロックアドレスで指定される論理ブロックへのアクセスのカウントと、当該論理ブロックへの最終アクセスの日時を示す最終アクセス日時情報との対応を、カウントテーブルのエントリを用いて管理し、
前記デバイスドライバからの前記第1の入出力情報及び前記アプリケーションからの前記第2の入出力情報に基づいて、前記マッピングテーブルにエントリを追加し、または前記マッピングテーブルのエントリの内容を更新し、
前記第1の入出力情報に基づいて、前記カウントテーブルにエントリを追加し、または前記カウントテーブルのエントリの内容を更新し、
前記マッピングテーブルのエントリ毎に、対応するエントリ中の論理ブロックリストに含まれるそれぞれの論理ブロックアドレスに基づいて、当該それぞれの論理ブロックアドレスに対応付けられたカウントテーブルのエントリを検索し、当該検索されたエントリに含まれている、最終アクセス日時が最新のエントリを除くエントリ中のカウントの合計を、前記ストレージコントローラによって管理されていて、且つ前記最新のエントリ中の論理ブロックアドレスに対応付けられたアクセスカウントに引き継がせる
請求項1記載の階層化ストレージシステム。 - 前記補正支援部は、前記最新のエントリ中のカウントを前記合計に変更し、且つ前記最新のエントリを除くエントリ中のカウントを負の値に変更し、前記変更されたカウントを含むエントリ中の論理ブロックアドレスと当該変更されたカウントとの組の列から構成されるカウント補正情報を前記ストレージコントローラに送出することにより、前記ストレージコントローラによって管理されているアクセスカウントのうち、前記カウント補正情報に含まれている論理ブロックアドレスに対応付けられたアクセスカウントを、前記カウント補正情報に含まれているカウントに基づいて補正させる請求項10記載の階層化ストレージシステム。
- 前記コンピュータは、ファイルのスナップショットの作成及び削除を前記ファイルシステムに要求するスナップショット部を更に具備し、
前記カウントテーブルのエントリの各々は、前記論理ブロックアドレス、前記カウント及び前記最終アクセス日時情報に加えて、当該論理ブロックアドレスの示す論理ブロックに格納されているデータが、異なるスナップショットとして同時に参照されている数を表す被参照数を有し、
前記補正支援部は、
前記カウントテーブルから値が0の被参照数を持つ第1のエントリを検索し、
第1のエントリを検索できた場合、前記マッピングテーブルから、前記第1のエントリ中の第1の論理ブロックアドレスを含む複数の論理ブロックアドレスを持つ第1の論理ブロックアドレスリストを抽出し、
前記第1の論理ブロックアドレスリスト中の前記複数の論理ブロックアドレスにそれぞれ対応付けられた、前記カウントテーブルの複数のエントリのうちの、最新の最終アクセス日時を示す最終アクセス日時情報を持つ第2のエントリ中の第2のカウントに、前記第1のエントリ中の第1のカウントを加算し、且つ前記第1のカウントを0に変更する
請求項11記載の階層化ストレージシステム。 - 前記スナップショット部は、前記ファイルシステムへの前記スナップショット作成要求または前記スナップショット削除要求に応じて、作成または削除されるべきスナップショットを示すスナップショット名、及び作成または削除されるべきスナップショットに対応するファイルを示すファイル名を含む第3の入出力情報を前記補正支援部に渡し、
前記補正支援部は、
前記第3の入出力情報が前記スナップショット作成要求に対応する場合、前記マッピングテーブルから、前記第3の入出力情報中のファイル名に一致するファイル名を持つ全てのエントリを選択して、前記選択された全エントリから第2の論理ブロックアドレスリストを抽出し、
前記第2の論理ブロックアドレスリスト中の全ての論理ブロックアドレスに基づいて前記カウントテーブルを参照することにより、最新の最終アクセス日時を示す最終アクセス日時情報を持つ第3のエントリを特定して、当該第3のエントリ中の第3の論理ブロックアドレスを最新の論理ブロックアドレスとして抽出し、
前記第3の論理ブロックアドレスを含む論理ブロックアドレスリスト中の全論理ブロックアドレスにそれぞれ対応付けられた、前記カウントテーブルのエントリ中の被参照数をインクリメントし、
前記第3の入出力情報中のオフセット名に一致するファイル名、前記第3のエントリ中のオフセットに等しいオフセット、及び前記第3の論理ブロックアドレスを持つエントリを、前記マッピングテーブルに追加し、
前記第3の入出力情報が前記スナップショット削除要求に対応する場合、前記マッピングテーブルから、前記第3の入出力情報中のスナップショット名に一致するファイル名を持つ全てのエントリを選択して、前記選択された全エントリから第3の論理ブロックアドレスリストを抽出し、
前記第3の論理ブロックアドレスリスト中の全ての論理ブロックアドレスに基づいて前記カウントテーブルを参照することにより、最新の最終アクセス日時を示す最終アクセス日時情報を持つ第4のエントリを特定して、当該第4のエントリ中の第4の論理ブロックアドレスを最新の論理ブロックアドレスとして抽出し、
前記第4の論理ブロックアドレスを含む論理ブロックアドレスリスト中の全論理ブロックアドレスにそれぞれ対応付けられた、前記カウントテーブルのエントリ中の被参照数をディクリメントする
請求項12記載の階層化ストレージシステム。 - 前記補正支援部は、前記ファイルシステムを含むオペレーティングシステムまたは前記ストレージコントローラのバックグラウンドで動作する請求項1記載の階層化ストレージシステム。
- アクセス性能の異なる複数のストレージ装置と、前記複数のストレージ装置へのアクセスを制御し、前記複数のストレージ装置の記憶領域がブロック単位で割り当てられる論理ユニット内の論理ブロックを示す論理ブロックアドレスにそれぞれ対応付けて、前記論理ブロックへのアクセスのカウントを管理し、且つ前記論理ブロックアドレスにそれぞれ対応付けられたアクセスカウントに基づいて、前記論理ブロックに格納されるデータを前記複数のストレージ装置の1つに再配置するストレージコントローラとを具備する階層化ストレージ装置を利用するコンピュータにおいて、
前記コンピュータ上で動作するアプリケーションからの、ファイル名と当該ファイル名で示されるファイル内のアクセスされるべきブロックの相対位置情報とを含むアクセス要求に応じて、前記アクセスされるべきブロックに対応付けられた論理ブロックアドレスを含むリード要求またはライト要求を発行するファイルシステムと、
前記ファイルシステムからのリード要求またはライト要求を前記ストレージコントローラに送出することにより、前記階層化ストレージ装置にアクセスするデバイスドライバと、
前記ストレージコントローラによって管理されるアクセスカウントの補正を支援する補正支援部と
を具備し、
前記ファイルシステムは、前記アプリケーションから要求されたファイルを、当該ファイルを構成するブロックそれぞれの当該ファイル内の相対位置と、当該ファイルを構成するブロックのデータが格納される論理ブロックそれぞれの論理ブロックアドレスとを対応付けることによって管理し、前記アクセス要求がデータの上書きを要求するライト要求WRである場合、上書きされるべきデータを、当該上書きされるべきデータが格納されている論理ブロックとは異なる論理ブロックにコピーした後、当該コピー先に前記ライト要求WRで指定されたデータを書き込むためのコピーオンライト動作を、前記デバイスドライバを用いて実行し、
前記補正支援部は、前記ストレージコントローラによって管理されていて、且つ前記コピーオンライト動作におけるコピー元の論理ブロックアドレスに対応付けられたアクセスカウントを、前記コピーオンライト動作におけるコピー先の論理ブロックアドレスに対応付けられたアクセスカウントに引き継がせる
コンピュータ。 - アクセス性能の異なる複数のストレージ装置と、前記複数のストレージ装置へのアクセスを制御し、前記複数のストレージ装置の記憶領域がブロック単位で割り当てられる論理ユニット内の論理ブロックを示す論理ブロックアドレスにそれぞれ対応付けて、前記論理ブロックへのアクセスのカウントを管理し、且つ前記論理ブロックアドレスにそれぞれ対応付けられたアクセスカウントに基づいて、前記論理ブロックに格納されるデータを前記複数のストレージ装置の1つに再配置するストレージコントローラとを具備する階層化ストレージ装置を利用するコンピュータにおいてファイルへのアクセスのカウントを補正する方法であって、
前記コンピュータ上で動作するアプリケーションから要求されたファイルを、当該ファイルを構成するブロックそれぞれの当該ファイル内の相対位置と、当該ファイルを構成するブロックのデータが格納される論理ブロックそれぞれの論理ブロックアドレスとを対応付けて管理するファイルシステムが、前記アプリケーションからデータの上書きを要求するライト要求WRを受領した場合、上書きされるべきデータを、当該上書きされるべきデータが格納されている論理ブロックとは異なる論理ブロックにコピーした後、当該コピー先に前記ライト要求WRで指定されたデータを書き込むためのコピーオンライト動作を、デバイスドライバを用いて実行し、
前記ストレージコントローラによって管理されていて、且つ前記コピーオンライト動作におけるコピー元の論理ブロックアドレスに対応付けられたアクセスカウントを、前記コピーオンライト動作におけるコピー先の論理ブロックアドレスに対応付けられたアクセスカウントに引き継がせる
ファイルへのアクセスのカウントを補正する方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2015/073863 WO2017033287A1 (ja) | 2015-08-25 | 2015-08-25 | 階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP5976980B1 true JP5976980B1 (ja) | 2016-08-24 |
JPWO2017033287A1 JPWO2017033287A1 (ja) | 2017-08-24 |
Family
ID=56759997
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016514212A Active JP5976980B1 (ja) | 2015-08-25 | 2015-08-25 | 階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9933948B2 (ja) |
JP (1) | JP5976980B1 (ja) |
CN (1) | CN106612619B (ja) |
WO (1) | WO2017033287A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12019906B2 (en) | 2021-08-27 | 2024-06-25 | Samsung Electronics Co., Ltd. | Electronic device and method of electronic device operating file system using data compression and memory partition |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10572506B2 (en) * | 2017-03-07 | 2020-02-25 | Salesforce.Com, Inc. | Synchronizing data stores for different size data objects |
CN108959108B (zh) * | 2017-05-26 | 2021-08-24 | 上海宝存信息科技有限公司 | 固态硬盘访问方法以及使用该方法的装置 |
US10126971B1 (en) | 2017-06-21 | 2018-11-13 | International Business Machines Corporation | Enhanced application performance in multi-tier storage environments |
US20190050163A1 (en) * | 2017-08-14 | 2019-02-14 | Seagate Technology Llc | Using snap space knowledge in tiering decisions |
CN107832236B (zh) * | 2017-10-24 | 2021-08-03 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘写性能的方法 |
CN108021707A (zh) * | 2017-12-28 | 2018-05-11 | 北京天融信网络安全技术有限公司 | 文件复制操作的识别方法、设备及计算机可读存储介质 |
CN110858124B (zh) * | 2018-08-24 | 2021-06-01 | 华为技术有限公司 | 数据迁移方法及装置 |
KR20220077208A (ko) * | 2020-11-30 | 2022-06-09 | 삼성전자주식회사 | 데이터 중복 제거 기능을 갖는 스토리지 장치, 스토리지 장치의 동작 방법, 및 스토리지 서버의 동작 방법 |
US20230024420A1 (en) * | 2021-07-16 | 2023-01-26 | Samsung Electronics Co., Ltd. | Methods and devices for file read latency reduction |
CN114415942B (zh) * | 2021-12-21 | 2022-11-04 | 联芸科技(杭州)股份有限公司 | L2p映射表重建方法及固态硬盘 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0944381A (ja) * | 1995-07-31 | 1997-02-14 | Toshiba Corp | データ格納方法およびデータ格納装置 |
JP2013168162A (ja) * | 2013-04-01 | 2013-08-29 | Hitachi Ltd | 記憶装置のデータ移行制御方法 |
JP2014516442A (ja) * | 2011-08-01 | 2014-07-10 | 株式会社日立製作所 | 計算機システム及びデータ管理方法 |
JP2015520876A (ja) * | 2012-04-26 | 2015-07-23 | 株式会社日立製作所 | 情報記憶システム及び情報記憶システムの制御方法 |
WO2015114809A1 (ja) * | 2014-01-31 | 2015-08-06 | 株式会社 東芝 | 階層化ストレージシステム、ストレージコントローラ、及び階層間のデータ移動を代替する方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5241671B2 (ja) * | 2009-10-05 | 2013-07-17 | 株式会社日立製作所 | 記憶装置のデータ移行制御方法 |
JP5395959B2 (ja) * | 2010-08-10 | 2014-01-22 | 株式会社日立製作所 | 計算機システムの管理方法、及び管理システム |
US8650381B2 (en) * | 2011-08-04 | 2014-02-11 | Hitachi, Ltd. | Storage system using real data storage area dynamic allocation method |
WO2013046258A1 (en) * | 2011-09-28 | 2013-04-04 | Hitachi, Ltd. | Method for calculating tier relocation cost and storage system using the same |
US9323462B2 (en) * | 2014-04-08 | 2016-04-26 | International Business Machines Corporation | File system snapshot data management in a multi-tier storage environment |
US9996270B2 (en) * | 2014-07-08 | 2018-06-12 | International Business Machines Corporation | Storage in tiered environment with cache collaboration |
US9411539B2 (en) * | 2014-09-24 | 2016-08-09 | International Business Machines Corporation | Providing access information to a storage controller to determine a storage tier for storing data |
-
2015
- 2015-08-25 JP JP2016514212A patent/JP5976980B1/ja active Active
- 2015-08-25 CN CN201580046932.2A patent/CN106612619B/zh active Active
- 2015-08-25 WO PCT/JP2015/073863 patent/WO2017033287A1/ja active Application Filing
-
2016
- 2016-09-14 US US15/265,589 patent/US9933948B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0944381A (ja) * | 1995-07-31 | 1997-02-14 | Toshiba Corp | データ格納方法およびデータ格納装置 |
JP2014516442A (ja) * | 2011-08-01 | 2014-07-10 | 株式会社日立製作所 | 計算機システム及びデータ管理方法 |
JP2015520876A (ja) * | 2012-04-26 | 2015-07-23 | 株式会社日立製作所 | 情報記憶システム及び情報記憶システムの制御方法 |
JP2013168162A (ja) * | 2013-04-01 | 2013-08-29 | Hitachi Ltd | 記憶装置のデータ移行制御方法 |
WO2015114809A1 (ja) * | 2014-01-31 | 2015-08-06 | 株式会社 東芝 | 階層化ストレージシステム、ストレージコントローラ、及び階層間のデータ移動を代替する方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12019906B2 (en) | 2021-08-27 | 2024-06-25 | Samsung Electronics Co., Ltd. | Electronic device and method of electronic device operating file system using data compression and memory partition |
Also Published As
Publication number | Publication date |
---|---|
US20170060744A1 (en) | 2017-03-02 |
WO2017033287A1 (ja) | 2017-03-02 |
US9933948B2 (en) | 2018-04-03 |
JPWO2017033287A1 (ja) | 2017-08-24 |
CN106612619B (zh) | 2019-05-21 |
CN106612619A (zh) | 2017-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5976980B1 (ja) | 階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法 | |
JP5707540B1 (ja) | 階層化ストレージシステム、ストレージコントローラ、及び階層間のデータ移動を代替する方法 | |
US9329957B2 (en) | Method for managing storage system using flash memory, and computer | |
US7694087B2 (en) | Duplicate data storing system, duplicate data storing method, and duplicate data storing program for storage device | |
US10037161B2 (en) | Tiered storage system, storage controller, and method for deduplication and storage tiering | |
JP5583227B1 (ja) | 物理ブロック間でデータをコピーするディスクアレイ装置、ディスクアレイコントローラ及び方法 | |
WO2017149581A1 (ja) | 仮想ストレージシステム | |
JP2008015769A (ja) | ストレージシステム及び書き込み分散方法 | |
JP6677740B2 (ja) | ストレージシステム | |
US20070239803A1 (en) | Remote mirroring method between tiered storage systems | |
WO2015162758A1 (ja) | ストレージシステム | |
JP4280055B2 (ja) | メモリ制御方法および装置 | |
US8478933B2 (en) | Systems and methods for performing deduplicated data processing on tape | |
US20150339058A1 (en) | Storage system and control method | |
JP7054001B2 (ja) | 情報処理システム、管理装置および制御方法 | |
US8832396B2 (en) | Storage apparatus and its control method | |
JP2019028954A (ja) | ストレージ制御装置、プログラム、及び重複排除方法 | |
WO2016038714A1 (ja) | ファイルシステム、データ重複排除方法、及びファイルシステムのためのプログラム | |
US8732422B2 (en) | Storage apparatus and its control method | |
JP6022116B1 (ja) | 階層化ストレージシステム、ストレージコントローラ及びレプリケーション初期化方法 | |
JP7140807B2 (ja) | 仮想ストレージシステム | |
WO2016194121A1 (ja) | ストレージシステム、計算機装置、及び、重複排除デバイス | |
JP5638022B2 (ja) | ディスクアレイ装置 | |
JP2000076022A (ja) | ファイル格納装置および記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160621 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160720 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5976980 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |