この出願は、2021年6月16日に中国国家知識産権局に出願された「DATA COMPRESSION METHOD AND APPARATUS」と題する中国特許出願第202110667882.7号に対する優先権を主張し、その全体が参照により本明細書に組み込まれる。
この出願は、データ圧縮技術の分野に関係し、特に、データ圧縮方法及び装置に関係する。
ストレージ・システムの全体的な入出力(input output、IO)の読み出し/書き込み性能を向上させるために、メモリ内のファイルを圧縮する必要がある。現在、Linuxの読み出し/書き込みファイル・システムのF2FS、ジャーナリング・フラッシュ・ファイル・システム・バージョン2(journalling Flash file system version 2、JFFS2)、Bツリー・ファイル・システム(B-tree file system、BTRFS)など、及びWindowsの読み出し/書き込みファイル・システムのNTFSなどがある。メタデータ領域は、ファイル・システム全体に占める割合が小さいため、データ領域が、通常、デバイスの記憶容量を大きく占有する。したがって、データ領域のデータを圧縮することにより、入出力IOのサイズを縮小し、IOの読み込み/書き込み性能を向上させることができる。
既存のデータ圧縮方法では、圧縮が必要とされるオリジナル・ファイル・データ(又はソース・データと呼ばれる)は、一般に、固定サイズの最小圧縮単位に基づいて圧縮されており、圧縮ファイル・データ(又は圧縮データと呼ばれる)は、ヘッダ・データと圧縮データを含んでもよい。ヘッダ・データはファイル・データの属性情報を表すために使用され、圧縮データはファイル・データのコンテンツを表すために使用される。次いで、圧縮ファイル・データは記憶媒体に保存される。しかし、既存の読み出し/書き込みファイル・システムの圧縮ソリューションでは、ランダム読み出し増幅の問題があり、読み出し効率が低い。
この出願の実施形態は、読み出し/書き込みファイル・システムのランダム読み出し増幅の問題を解決し、読み出し効率を向上させるデータ圧縮方法及び装置を提供する。
第1の態様によれば、この出願の一実施形態は、データ圧縮方法を提供する。本方法は、電子デバイスによって実行されてもよいし、電子デバイス内に位置するコンポーネント(例えば、チップ、チップ・システム、又はプロセッサ)によって実行されてもよい。以下、本方法が電子デバイスによって実行される例を使用して説明を提供する。本方法は、電子デバイスが、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得することであって、mは1以上の正の整数である、ことを含む。電子デバイスは、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得し、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である。電子デバイスは、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録する。iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
この出願の実施形態で提供されるデータ圧縮方法によれば、データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。追加的に、データ・ブロックのインデックスに含まれる属性が修正されてもよく、そのため、ストレージ・デバイス上の圧縮ファイルが修正されてもよい。この出願の実施形態では、既存の読み出し/書き込みファイル・システムにおける圧縮ソリューションのランダム読み出し増幅の問題を解決し、固定出力圧縮方式を有する既存のファイル・システムがデータ及びメタデータ更新をサポートできないという問題を解決することが分かる。
具体的かつ可能な実装では、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得することは、具体的には、m個のデータ・ブロック内の全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てることである。第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいときに、j個のデータ・ブロックに対して、指定された圧縮閾値に基づいて圧縮動作が実行されて、i番目の圧縮データ・ブロックを取得する。
n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和が、j個のデータ・ブロックの合計データ長以下であるときに、j個のデータ・ブロックの各々の第1のインデックスを確立することである。
具体的かつ可能な実装では、属性情報は、属性情報は、データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性とのうちの少なくとも1つを含む。
具体的かつ可能な実装では、属性情報は第3の属性を含み、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することである。
具体的かつ可能な実装では、属性情報は、第7の属性を含み、本方法は、第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットに更新することか、又は第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新することをさらに含む。
具体的かつ可能な実装では、属性情報は第4の属性を含み、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるときに、第4の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれないときに、第4の属性の属性値に0を代入することである。
具体的かつ可能な実装では、属性情報は第2の属性を含み、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、j個のデータ・ブロックの各々のデータ・ページが有効であるときに、第2の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが無効であるときに、第2の属性の属性値に0を代入することである。
いくつかの可能な実装では、本方法は、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得することの前に、上書き対象データの第2のセットを取得することであって、第2のセットは、p個の圧縮データ・ブロックを含み、pは1以上の正の整数である、ことと、p個の圧縮データ・ブロックにおける第1の対象圧縮データの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得することであって、qは1以上の正の整数である、ことと、q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定することと、第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定することと、をさらに含む。
具体的かつ可能な実装では、第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
いくつかの可能な実装では、本方法は、第1のデータ・ブロックの第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得することであって、第1のインデックスが第1のデータ・ブロックの属性情報を含む、ことと、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出すことと、第1の圧縮データ・ブロックのインデックスに基づいて第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得することであって、複数のデータ・ブロックは第1のデータ・ブロックを含む、ことと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットを決定することと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットに基づいて第1のデータ・ブロックのデータを取得することと、をさらに含む。
第2の態様によれば、この出願の一実施形態は、データ圧縮装置を提供する。本装置は、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得するように構成されている第1の取得ユニットであって、mは1以上の正の整数である、第1の取得ユニットと、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得するように構成されている圧縮ユニットであって、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である、圧縮ユニットと、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録するように構成されている更新ユニットと、を含む。
iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
この出願の実施形態で提供されるデータ圧縮方法によれば、データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。追加的に、データ・ブロックのインデックスに含まれる属性が修正されてもよく、そのため、ストレージ・デバイス上の圧縮ファイルが修正されてもよい。この出願の実施形態では、既存の読み出し/書き込みファイル・システムにおける圧縮ソリューションのランダム読み出し増幅の問題を解決し、固定出力圧縮方式を有する既存のファイル・システムがデータ及びメタデータ更新をサポートできないという問題を解決することが分かる。
具体的かつ可能な実装では、圧縮ユニットは、m個のデータ・ブロックの全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てるように構成されている。第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいときに、j個のデータ・ブロックに対して、指定された圧縮閾値に基づいて圧縮動作が実行されて、i番目の圧縮データ・ブロックを取得する。
具体的かつ可能な実装では、更新ユニットは、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和が、j個のデータ・ブロックの合計データ長以下であるときに、j個のデータ・ブロックの各々の第1のインデックスを確立するように構成されている。
具体的かつ可能な実装では、属性情報は、属性情報は、データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであることを表すために使用される第7の属性とのうちの少なくとも1つを含む。データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離である。
具体的かつ可能な実装では、属性情報は、第3の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第7の属性を含み、更新ユニットは、第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットに更新することか、又は第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第4の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるときに、第4の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれないときに、第4の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第2の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページが有効であるときに、第2の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが無効であるときに、第2の属性の属性値に0を代入することを行うようにさらに構成されている。
いくつかの可能な実施態様では、本装置は、上書き対象データの第2のセットを取得するように構成されている第2の取得ユニットであって、第2のセットは、p個の圧縮データ・ブロックを含み、pは1以上の正の整数である、第2の取得ユニットと、p個の圧縮データ・ブロックにおける第1の対象圧縮データの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得するように構成されている第3の取得ユニットであって、qは1以上の正の整数である、第3の取得ユニットと、q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定するように構成されている第1の決定ユニットと、第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定するように構成されている第2の決定ユニットと、をさらに含む。
具体的かつ可能な実装では、第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
いくつかの可能な実装では、本装置は、第1のデータ・ブロックの第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得するように構成されている第1の読み出しユニットであって、第1のインデックスが第1のデータ・ブロックの属性情報を含む、第1の読み出しユニットと、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出すように構成されている第2の読み出しユニットと、第1の圧縮データ・ブロックのインデックスに基づいて第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得するように構成されている伸長ユニットであって、複数のデータ・ブロックは第1のデータ・ブロックを含む、伸長ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットを決定するように構成されている第3の決定ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットに基づいて第1のデータ・ブロックのデータを取得するように構成されている第3の取得ユニットと、をさらに含む。
第3の態様によれば、この出願の一実施形態は、第1の態様の方法を実行するように構成されているデバイスを提供する。
第4の態様によれば、この出願の一実施形態は、コンピュータ可読記憶媒体を提供する。コンピュータ可読記憶媒体は、コンピュータ命令を記憶する。コンピュータ命令が電子デバイス上で実行されるときに、電子デバイスは、第1の態様のデータ圧縮方法を実行することが可能となる。
第5の態様によれば、本出願の一実施形態は、コンピュータ・プログラムを提供する。プログラムがプロセッサによって呼び出されるときに、第1の態様のデータ圧縮方法は、実行される。
第6の態様によれば、この出願の一実施形態は、1つ以上のプロセッサを含むチップ・システムを提供する。1つ以上のプロセッサが命令を実行するときに、1つ以上のプロセッサは、第1の態様のデータ圧縮方法を実行する。
この出願における技術的特徴、技術的解決策、有益な効果、又は類似の文言の説明は、全ての特徴及び利点が任意の個々の実施形態において実装可能であることを示唆しないと理解されたい。反対に、特徴又は有益な効果の説明は、少なくとも1つの実施形態が特定の技術的特徴、技術的解決策、又は有益な効果を含むことを意味すると理解されよう。したがって、この明細書における技術的特徴、技術的解決策、又は有益な効果の説明は、必ずしも同じ実施形態に属さなくてもよい。さらに、実施形態に記載される技術的特徴、技術的解決策、及び有益な効果は、任意の適切な方式で組み合わされてもよい。当業者は、実施形態が、特定の実施形態において、1つ以上の特定の技術的特徴、技術的解決策、又は有益な効果を伴わずに実装されてもよいと理解してもよい。他の実施形態では、全ての実施形態を反映するわけではない特定の実施形態において、追加の技術的特徴及び有益な効果が識別されてもよい。
この出願一実施形態による、オペレーティング・システムの構成ブロック図である。
この出願の一実施形態による、ストレージ・システムの構造の概略図である。
図1bのストレージ・システムのソリッド・ステート・ディスクの構造の概略図である。
図2のソリッド・ステート・ディスクのフラッシュ・チップの構造の概略図である。
図3のフラッシュ・チップに対応するフラッシュ変換層の概略図である。
固定入力圧縮モードの概略図である。
この出願の一実施形態による、固定出力圧縮モードの概略図である。
この出願の一実施形態による、データ・ブロック・インデックスの概略図である。
既存の拡張可能な読み出し専用ファイル・システムにおけるデータ・ブロック・インデックスの概略図である。
この出願の一実施形態による、データ圧縮方法の概略フローチャートである。
この出願の一実施形態による、データ圧縮方法の概略フローチャートである。
この出願の一実施形態による、データ・ブロック・インデックスを更新する概略フローチャートである。
この出願の一実施形態による、データ・ブロック・インデックスを更新する概略フローチャートである。
この出願の一実施形態による、データ圧縮中のデータ・ブロック・インデックス関係の概略図である。
この出願の一実施形態による、別のデータ圧縮方法の概略フローチャートである。
この出願の一実施形態による、上書き又は読み出し手順におけるデータ・ブロック・インデックス関係の概略図である。
この出願の一実施形態による、データ読み出し手順の概略フローチャートである。
この出願の一実施形態による、データ圧縮装置の構造の概略図である。
この出願の説明で言及される「含む」、「有する」、及び任意の他のそれらの変化形の用語は、非排他的な包含をカバーすることを意図している。例えば、一連のステップ又はユニットを含む、プロセス、方法、システム、製品又はデバイスは、列挙されたステップ又はユニットに限定されず、任意選択で、列挙されていない別のステップ又はユニットをさらに含むか、あるいは任意選択で、プロセス、方法、製品又はデバイスに固有の別のステップ又はユニットをさらに含む。
この出願の実施形態では、「例」又は「例えば」の文言は、例、例示又は説明を与えることを表すために使用されることに留意されたい。本出願において、「例」又は「例えば」として記載される任意の実施形態又は設計スキームは、他の実施形態又は設計スキームよりも好ましいものとして、又はより多くの利点を有するものとして説明されるべきではない。正確には、「例」、「例えば」などの文言は、関連概念を特定の方式で提示することを意図している。
この出願の実施態様の説明では、別段特定されない限り、「複数」とは、2以上を意味する。本明細書における「及び/又は」の用語は、関連するオブジェクト間の関連付け関係のみを記載し、3つの関係があり得ることを示す。例えば、A及び/又はBは、以下の3つのケース、すなわち、Aのみが存在すること、A及びBの両方が存在すること、並びにBのみが存在することを表してもよい。
理解を簡単にするために、この出願の実施形態で使用され得る関係する用語及び概念を最初に記載する。
図1aは、オペレーティング・システムの構成ブロック図である。
オペレーティング・システム(operating system、略してOS)は、コンピュータのハードウェア及びソフトウェアリソースを管理するコンピュータ・プログラムであり、例えば、unix、Windows、及びLinuxである。オペレーティング・システムは、基本的なトランザクション、例えば、メモリの管理と構成、システム・リソースの供給と需要の優先度の決定、入出力デバイスの制御、ネットワークの運用、及びファイル・システムの管理を処理する必要がある。オペレーティング・システムはまた、ユーザがシステムと対話するための動作インターフェースを提供する。
オペレーティング・システム・カーネルは、ほとんどのオペレーティング・システムのコア部分である。オペレーティング・システム・カーネルは、オペレーティング・システム内のストレージ・デバイス、ファイル、周辺機器、システム・リソースを管理するために使用される部分を含み、システムのプロセス、メモリ、デバイス・ドライバ、ファイル及びネットワーク・システムを管理し、オペレーティング・システムの性能や安定性を決定する。オペレーティング・システム・カーネルは、ハードウェア抽象化層、ディスク及びファイル・システム制御、マルチタスクなどの機能を提供するシステム・ソフトウェアである。オペレーティング・システム・カーネルは、多くのアプリケーションに対してコンピュータ・ハードウェアへの安全なアクセスを提供し、アプリケーションがコンピュータ・ハードウェアの一部に対していつ動作を実行するか、及びそれにかかる時間を決定することができる。コンピュータ・ハードウェア上での直接動作は非常に複雑であるため、オペレーティング・システム・カーネルは、これらの動作を完了するためのハードウェア抽象化方法のセットを提供することができる。
ファイル・システムは、オペレーティング・システム・カーネルのコア・モジュール、すなわち、メイン・コンポーネントである。ファイル・システムは、ストレージ・デバイス上のファイルを編成し、ファイル情報を管理及び記憶し、主にユーザのためのファイルを作成し、ファイルを記憶、読み出し、修正、ダンプを行い、ファイル・アクセスを制御し、ユーザがファイルを使用しなくなったときにファイルをキャンセルする方法である。
ファイル・システムは、カーネル内のファイルの抽象表現を提供し、ファイルを物理的なストレージ・デバイス(ディスク、ハード・ディスクなど)にマッピングし、ストレージ・デバイス上のファイルの物理アドレスをユーザが見ることができるパス及びファイル名にマッピングし、ファイル・データの迅速な読み出し、修正、及び永続化を容易にする。
ファイル・システムには、読み出し/書き込みファイル・システム及び読み出し専用ファイル・システムを含む。読み出し/書き込みファイル・システムは、ファイルをストレージ・デバイスに書き込むか、又はファイルをストレージ・デバイスから読み出すことができるファイル・システムであり、例えば、ファイル・アロケーション・テーブル(file allocation table、FAT)、ハイ・パフォーマンス・ファイル・システム(high performance file system、HPFS)、ニュー・テクノロジー・ファイル・システム(new technology file system、NTFS)、フォース・エクテンデット・ファイル・システム(fourth extended file system、EXT4)、フラッシュ・フレンドリー・ファイル・システム(flash friendly file system、F2FS)である。読み出し専用ファイル・システムは、ファイルをストレージ・デバイスから読み出すことのみが可能であり、ファイルをストレージ・デバイスに書き込むことができないファイル・システムであり、例えば、拡張可能な読み出し専用ファイル・システム(extendable read-only file system、EROFS)である。
この出願をより明確にするために、最初に、この出願のアプリケーション・シナリオについて記載する。
図1bは、ストレージ・システムの構造の概略図である。
図1bに示すアプリケーション・シナリオでは、ユーザは、アプリケーションを使用してデータにアクセスする。これらのアプリケーションを実行するコンピュータは、「アプリケーション・サーバ」と呼ばれる。アプリケーション・サーバ100は、物理マシンであってもよいし、仮想マシンであってもよい。物理アプリケーション・サーバは、デスクトップコンピュータ、サーバ、ノートブック・コンピュータ、及びモバイル・デバイスを含むが、これらに限定されない。アプリケーション・サーバは、データにアクセスするためにファイバ・チャネル・スイッチ110を使用してストレージ・システムにアクセスする。しかし、スイッチ110は、任意選択であり、アプリケーション・サーバ100はまた、ネットワークを使用してストレージ・システム120と直接通信するようにしてもよい。代替的には、ファイバ・チャネル・スイッチ110は、Ethernetスイッチ、InfiniBandスイッチ、RoCE(RDMA over Converged Ethernet)スイッチなどで置き換えられてもよい。
図1bに示すストレージ・システム120は、集中型ストレージ・システムである。集中型ストレージ・システムは、1つ以上のメイン・デバイスを含む中央ノードである。データは中央ノードに記憶され、システム全体の全てのデータ処理サービスは、中央ノードに展開される。換言すれば、集中型ストレージ・システムでは、端末又はクライアントはデータの入出力のみを担当し、全てのデータ記憶及び制御処理は中央ノードによって完了される。集中型ストレージ・システムは統合ポータルを特徴とし、外部デバイスからの全てのデータはこのポータルを通過する。ポータルは、集中型ストレージ・システムのエンジン121である。エンジン121は、集中型ストレージ・システムのコア・コンポーネントであり、エンジン121には、ストレージ・システムの多くの高度な機能が実装されている。
図1bに示すように、エンジン121は、1つ以上のコントローラを有する。図1bでは、エンジンが2つのコントローラを含む例が説明のために使用される。コントローラ0とコントローラ1の間にはミラー・チャネルがある。したがって、コントローラ0がデータをコントローラ0のメモリ124に書き込んだ後、コントローラ0は、ミラー・チャネルを介してデータのコピーをコントローラ1に送信してもよく、コントローラ1は、そのコピーをコントローラ1のローカル・メモリ124に記憶する。したがって、コントローラ0とコントローラ1とは互いにバックアップを行う。コントローラ0が故障したときに、コントローラ1は、コントローラ0のサービスを引き継いでもよい。コントローラ1が故障したときに、コントローラ0は、コントローラ1のサービスを引き継いでもよく、ハードウェア故障によるストレージ・システム120全体の使用不能を回避する。4つのコントローラがエンジン121に配設されるときに、ミラー・チャネルが任意の2つのコントローラ間に存在し、したがって、任意の2つのコントローラが互いにバックアップする。
エンジン121は、フロントエンド・インターフェース125とバックエンド・インターフェース126とをさらに含み、フロントエンド・インターフェース125は、アプリケーション・サーバ100と通信して、アプリケーション・サーバ100にストレージ・サービスを提供するように構成されている。バックエンド・インターフェース126は、ハード・ディスク134と通信して、ストレージ・システムの容量を拡張するように構成されている。エンジン121は、バックエンド・インターフェース126を介してさらに多くのハード・ディスク134に接続して、大きなストレージ・リソース・プールを形成してもよい。
エンジン121とディスク・エンクロージャ130との間の通信プロトコルのタイプに基づいて、ディスク・エンクロージャ130は、SASディスク・エンクロージャ、NVMeディスク・エンクロージャ、IPディスク・エンクロージャ、又は別のタイプのディスク・エンクロージャであってもよい。SASディスク・エンクロージャはSAS 3.0プロトコルを使用し、各エンクロージャは25のSASハード・ディスクをサポートする。エンジン121は、オンボードSASインターフェース又はSASインターフェース・モジュールを介してディスク・エンクロージャ130に接続される。NVMeディスク・エンクロージャは、完全なコンピュータ・システムのようなものである。NVMeハード・ディスクがNVMeディスク・エンクロージャに挿入されている。追加的に、NVMeディスク・エンクロージャは、RDMAポートを介してエンジン121に接続される。
ハードウェア的には、図1bに示すように、コントローラ0は、少なくともプロセッサ123とメモリ124とを含む。プロセッサ123は、ストレージ・システム(サーバ又は他のストレージ・システム)の外部からのデータ・アクセス要求を処理するように構成されており、かつストレージ・デバイス内部で生成された要求を処理するように構成されている中央処理ユニット(central processing unit、CPU)である。例えば、プロセッサ123は、フロントエンド・ポート125を使用して、アプリケーション・サーバ100から送信されたデータ書き込み要求を受信するときに、そのデータ書き込み要求のデータをメモリ124に一時的に記憶する。メモリ124内のデータの総量が特定の閾値に達するときに、プロセッサ123は、バックエンド・ポートを使用して、メモリ124に記憶されたデータを、永続的な記憶のためにハード・ディスク134に送信する。
メモリ124は、プロセッサと直接データを交換する内部メモリである。データは、いつでも高速にメモリに読み書きされ得、メモリは、オペレーティング・システム又は他の実行中のプログラムの一時的なデータ・メモリとして機能する。メモリは、少なくとも2つのタイプのメモリを含み、例えば、メモリは、ランダム・アクセス・メモリであってもよい。例えば、ランダム・アクセス・メモリは、ダイナミック・ランダム・アクセス・メモリ(Dynamic Random Access Memory、DRAM)、又はストレージ・クラス・メモリ(Storage Class Memory、SCM)である。DRAMは、半導体メモリであり、ほとんどのランダム・アクセス・メモリ(Random Access Memory、RAM)と同様に、揮発性メモリ(volatile Memory)デバイスである。SCMは、従来のストレージ・デバイスの特徴とメモリの特徴の両方を組み合わせた複合ストレージ技術を使用する。ストレージ・クラス・メモリは、ハード・ディスクに比べて高速な読み書きを提供することができるが、アクセス速度の観点からDRAMよりも遅く、コストの観点からはDRAMよりも安い。しかし、DRAM及びSCMは、実施形態における説明のための例示にすぎない。メモリは、別のランダム・アクセス・メモリ、例えば、スタティック・ランダム・アクセス・メモリ(Static Random Access Memory、SRAM)をさらに含んでもよい。追加的に、メモリ124は、デュアル・インライン・メモリ・モジュール(Dual In-line Memory Module、略してDIMM)、すなわち、ダイナミック・ランダム・アクセス・メモリ(DRAM)で構成されたモジュールであってもよいし、ソリッド・ステート・ディスク(Solid State Disk、SSD)であってもよい。実際のアプリケーションでは、コントローラ0には、複数のメモリ124と、異なるタイプのメモリ124とが構成されていてもよい。この実施形態では、メモリ113の数及びタイプは限定されない。追加的に、メモリ124は、停電保護機能を有するように構成されてもよい。停電保護機能とは、停電後にシステムの電源を再投入してもメモリ124に記憶されたデータが失われないことを意味する。停電保護機能を有するメモリは、不揮発性メモリと呼ばれる。
例えば、メモリ124及びハード・ディスク134は、いずれもソリッド・ステート・ドライブ(英語:Solid-state drive又はSolid-state disk、略してSSD)であってもよく、主にフラッシュ(NAND Flash)を不揮発性メモリとして使用するストレージ・デバイスである。図2に示すように、SSD200は、NANDフラッシュと、プライマリ・コントローラ(略してPC)201とを含む。NANDフラッシュは、データを記憶するように構成されている複数のフラッシュ・チップ205を含む。PC201は、SSDの頭脳であり、データ記憶の管理、SSDの性能及び耐用年数の維持などのいくつかの複雑なタスクを担当する。PC201は、組み込み型のマイクロチップであり、SSDの動作要求を全て送信するためのコマンドセンタのような機能を有するプロセッサ202を含む。例えば、プロセッサ202は、バッファ内のファームウェアを使用して、データの読み書き、ガーベジ・コレクション、ウェア・レベリングなどの機能を実行してもよい。
SSD PC201は、ホスト・インターフェース204と、いくつかのチャネル・コントローラとをさらに含む。ホスト・インターフェース204は、ホストと通信するように構成されている。本明細書におけるホストとは、サーバ、パーソナル・コンピュータ、アレイ・コントローラなどの任意のデバイスを指す。PC201は、複数のチャネル・コントローラを使用して、複数のフラッシュ・チップ205を並列に動作させて、最下層の帯域幅を改善してもよい。例えば、PC201とFLASHチップとの間に8つのチャネルがあり、PC201は、8つのチャネルを介して8つのフラッシュ・チップ205に対して並列にデータを読み書きする。
図3に示すように、ダイは、1つ以上のフラッシュ・チップのパッケージである。1つのダイが複数のパネル(panel)を含んでもよく、マルチプレーンNANDは性能を効果的に向上させることができる設計である。図3に示すように、1つのダイを2つのプレーンに分割され、2つのプレーンのブロック番号をシングル及びデュアルクロスする。したがって、動作中に、シングル及びデュアルクロス動作を実行して、性能を向上させてもよい。1つのパネルは、複数のブロック(block)を含む。1つのブロックは、複数のページ(page)を含む。16GBのフラッシュ・チップが一例として使用される。各4314*8=34512セルは、論理的にページを形成する。各ページは、4KBのコンテンツと218-BのECCパリティ・データを記憶することができる。ページは、IO動作の最小単位でもある。128ページごとにブロックが形成され、2048ブロックごとにパネルが形成される。フラッシュ・チップ全体は、2つのパネルが含む。一方のパネルには奇数番号のブロックが記憶され、他方のパネルには偶数番号のブロックが記憶される。2つのプレーンは、同時に動作され得る。これは一例にすぎない。ページ・サイズ、ブロック容量、フラッシュ・チップ容量は、異なる使用を有する。これは、この出願では限定されない。
ホストは、ブロックにデータを書き込む。ブロックがフルであるときに、SSD PC 201は、書き込みを継続するために次のブロックを選択してもよい。ページは、書き込まれるデータの最小単位である。換言すれば、PC201は、ページを粒度としてブロックにデータを書き込む。ブロックは、データ消去のための最小単位である。PCは、一度にブロック全体しか消去できない。
ホストは、論理ブロック・アドレス(Logical Block Address、LBA)を使用してSSDにアクセスする。各LBAは、セクタを表す(一例として、512Bが使用される)。SSDでは、PCは、ページ単位でSSDにアクセスする(一例として、4KBが使用される)。したがって、アプリケーション・サーバがデータを書き込むたびに、SSD PCは、データを書き込むページを検索する。ページのアドレスは、物理ブロック・アドレス(Physical Block Address、PBA)と呼ばれる。LBAからPBAへのマッピングは、SSD内に記録される。このようなマッピングにより、ホストが次にLBAのデータを読み出す必要があるときに、SSDは、フラッシュ・チップ内でデータが読み出される場所を知る。図4は、フラッシュ変換層(Flash Translation Layer、FTL)の概略図である。FTLは、プロセッサ202のファームウェア内に位置する。図4に示すように、ホストが新しいデータを書き込むたびに、新しいマッピング関係が生成され、そのマッピング関係がFTLに追加(ファーストライト)されるか、又はFTLが変更(オーバライド)される。データを読み出すときに、SSDは、最初に、FTL内のデータのLBAに対応するPBAを検索し、そのPBAに基づいて対応するデータを読み出す。
フラッシュ・チップは、上書きをサポートすることができない。これは、ホストがLBA上のデータを修正するときに、そのLBAに対応するPBA上のデータを直接修正することはできないことを意味する。データは新しいPBAに書き込まれ、マッピングがFTLに追加される必要がある。例えば、FTLのLBA DとPBA Dの間にはマッピング関係があった。ホストがLBA Dのデータを修正することを要求するIO要求を送信するときに、SSDは、データを書き込む新しい場所(PBA E)を検索し、LBA DとPBA Eのマッピング関係をFTLに追加する。その結果、PBA D上のデータは無効になる。無効なデータ(ジャンク・データとも呼ばれる)とは、いかなるマッピング関係によって指し示されないデータである。データは新しいマッピング関係によって置き換えられるため、ユーザはデータのFLASHスペースにアクセスできないことがある。アプリケーション・サーバが書き込みを続けると、FLASHストレージ・スペースは徐々に減少し、最後には使い果たされる。ジャンク・データが適時にクリアされない場合、データは、ホストに書き込むことができない。全てのSSDは、ガベージ・コレクション・メカニズムを有する。基本原理は、いくつかのブロック内の有効なデータを新しいブロックに移動し、ブロックを消去することである。このようにして、新たな利用可能ブロックが生成される。
追加的に、メモリ124は、さらにソフトウェア・プログラムを記憶しており、プロセッサ123は、メモリ124内のソフトウェア・プログラムを実行することによりハード・ディスクを管理してもよい。例えば、ハード・ディスクをストレージ・リソース・プールに抽象化し、次いで、サーバが使用するLUNに分割できる。このLUNは、実際にはサーバ上にあるハード・ディスクである。確かに、一部の集中型ストレージ・システムはファイル・サーバでもあり、サーバに対して共有ファイル・サービスを提供してもよい。
メモリ124に記憶されたデータは、ファイル・システムを使用して提示されてもよい。ファイル・システムは、構造化データファイル・ストレージ及び編成形式である。既知のように、コンピュータ内の全てのデータは0と1であり、ハードウェア・メディアに記憶された一連の01の組み合わせを区別して管理することはできない。したがって、コンピュータは、「ファイル」の概念を使用してデータを編成する。コンピュータは、異なるアプリケーションによって必要とされる構造に基づいて、同じ目的のために使用されるデータを異なるタイプのファイルに編成する。通常、異なるタイプを参照するために異なる接尾辞が使用され、コンピュータは各ファイルに理解しやすく覚えやすい名前を付ける。多数のファイルがあるときに、ファイルは、特定の方法でグループ化される。ファイルの各グループは、同じディレクトリ(又はフォルダ)に記憶される。カタログは、ファイルに加えて、下位レベルのカタログ(サブカタログ又はサブフォルダと呼ばれる)を含んでもよい。全てのファイルとカタログはツリー構造を形成する。ツリー構造は、ファイル・システム(File System)という特別な名前を有する。WindowsのFAT、FAT32、NTFS、LinuxのEXT2、EXT3、EXT4、XFS、BtrFSなど、多くのタイプのファイル・システムがある。検索を容易にするために、ルート・ノードからファイルへのレベルごとの降順、カタログ、サブカタログ、及びファイルの名前は、特殊文字(例えば、Windows又はDOSでは「¥」が使用され、Unixのようなシステムでは「/」が使用される)と組み合わされ、このような文字列は、ファイル・パスと呼ばれ、Linuxでは「/etc/systemd/system.conf」であり、Windowsでは「C:¥Windows¥System 32¥taskmgr.exe」である。パスは、特定のファイルにアクセスするための一意の識別子である。例えば、WindowsでのD:¥data¥file.exeはファイルのパスであり、パーティションDのデータカタログ内のfile.exeファイルを示す。
ファイル・システムは、ブロック・デバイス上に構築される。ファイル・システムは、ファイル・パスだけでなく、ファイルを形成するブロック、及びカタログ/サブカタログ情報を記録するブロックも記録する。異なるファイル・システムは、異なる編成構造を有する。管理の容易さから、ハード・ディスクなどのブロック・デバイスは、一般に、複数の論理ブロック・デバイス、すなわち、ハード・ディスク・パーティション(Partition)に分割されてもよい。逆に、単一の媒体の容量と性能は、限定される。複数の物理ブロック・デバイスは、RAID、JBODなどの様々なレベルの技術を使用して、論理ブロック・デバイスに結合され得る。代替的には、ファイル・システムは、これらの論理ブロック・デバイス上に構築されてもよい。いずれの場合も、アプリケーション・サーバ上のアプリケーションは、配下のブロック・デバイス上のアクセス対象のファイルの特定の位置を考慮する必要はなく、ファイルのファイル名/IDのみをファイル・システムに送信する必要がある。ファイル・システムは、ファイル名/IDに基づくクエリを通じてファイル・パスを取得する。
比較的な一般的なファイル・アクセス・プロトコルは、NFS、CIFS、SMBなどであるが、これは、この実施形態では限定されない。
この出願のファイル・システムは、読み出し/書き込み可能ファイル・システムである。読み出し/書き込みファイル・システムは、ストレージ・デバイスにファイルを書き込むか、又はストレージ・デバイスからファイルを読み出すことができるファイル・システムであり、例えば、FAT、HPFS、NTFS、EXT4及びF2FSである。
ファイル・システムは、一般に、メタデータ領域とデータ領域とを含む。メタデータ領域は、スーパーブロックとiノード(inode)領域とを含む。メタデータ領域のスーパーブロックは、ファイル・システムの制御情報、データ構造などのコンテンツを含んでもよい。メタデータ領域のiノード領域は、ファイルの記述情報、例えば、ファイル長及びファイル・タイプを含んでもよい。ファイル・タイプは、例えば、通常アイノード(regular inode)、ディレクトリ・iノード(directory inode)、シンボルリンク・iノード(symbol link inode)、特殊iノード(special inode)である。データ領域に記憶されるデータは、可逆圧縮技術に基づくファイルレベルの圧縮処理を実行して取得されたデータであってもよい。データ領域内のデータは、ディスク・ブロックのセットに基づいて、記憶媒体(例えば、ディスク又はフラッシュ)の物理的な記憶空間に記憶される。同じファイルのデータは、連続したディスク・ブロックに記憶されていてもよいし、クロス方式で不連続なディスク・ブロックに記憶されてもよい。
本出願においてディスク・ブロックの概念を導入したからといって、記憶媒体がディスクに限定されるものではなく、ディスク・ブロックが、記憶媒体の物理的な記憶空間を分割することによって小さな物理的な記憶空間を表すために使用されてもよいことが理解されよう。
もちろん、本出願のストレージ・システムは、スケールアウト・ストレージ・システムをさらに含んでもよい。スケールアウト・ストレージ・システムは、独立した複数のストレージ・ノードにデータが記憶されるシステムである。従来のネットワーク・ストレージ・システムは、全てのデータを記憶するために集中型ストレージ・アレイを使用する。ストレージ・アレイの性能は、システム性能のボトルネックであるだけでなく、信頼性とセキュリティの焦点でもあり、大規模なストレージ・アプリケーションの要件を満たすことができない。
以上、この出願のアプリケーション・シナリオについて簡単に説明した。
上記のストレージ・システムでは、データの読み出し/書き込み能力に基づいて、コンポーネントのレートがソートされており、降順で、中央処理ユニット(central processing unit、CPU)>>ダブル・データ・レート同期ダイナミック・ランダム・アクセス・メモリ(double data rate synchronous dynamic random access memory、DDR SDRAM)>フラッシュ・チップ・フラッシュである。ストレージ・システムにおけるデータ・アクセスのボトルネックは、メモリとフラッシュとの間のデータのIO(input output)時間オーバヘッドであることが分かる。
ストレージ・システムの全体的なIO読み出し/書き込み性能を向上させるには、メモリ内のファイルを圧縮する必要がある。メタデータ領域は、ファイル・システム全体に占める割合が小さいため、通常、デバイスの記憶容量を大きく占有する。したがって、フラッシュにデータを書き込むときに、データを圧縮して、圧縮データをフラッシュに書き込むことにより、フラッシュの記憶容量占有を削減し、フラッシュの態様年数を延ばすことができる。
現在、Linuxの読み出し/書き込みファイル・システムのF2FS、ジャーナリング・フラッシュ・ファイル・システム・バージョン2(journalling Flash file system version 2、JFFS2)、Bツリー・ファイル・システム(B-tree file system、BTRFS)など、及びWindowsの読み出し/書き込みファイル・システムのNTFSなどに対してデータ圧縮方式が使用されることがある。
圧縮が必要とされるオリジナル・ファイル・データ(又はソース・データと呼ばれる)は、固定サイズの最小圧縮単位(クラスタ)に基づいて圧縮されており、圧縮ファイル・データ(又は圧縮データと呼ばれる)は、ヘッダ・データと圧縮データを含む。ヘッダ・データはファイル・データの属性情報を表すために使用され、圧縮データはファイル・データのコンテンツを表すために使用される。圧縮ファイル・データはフラッシュに保存され、4KBのサイズに調整されます。
例えば、図5の固定入力圧縮モードの模式図に示すように、連続するアドレスを有する4つのデータ・ブロック(block)をクラスタ0として圧縮し、ヘッダ・データ(header)+圧縮データ(compressed data)を含む圧縮ファイル・データを取得する。圧縮ファイル・データのサイズが4KB未満である場合、圧縮ファイル・データは4KBのサイズでフラッシュに記憶される。
図5に示すオリジナル・ファイル・データ(又はソース・データと呼ばれる)のサイズは、4ブロックであり、各ブロックのサイズは、4KBであり、1ブロックが1論理ページであると仮定する。オリジナル・ファイル・データの論理ページは、0、1、2、及び3で番号付けられている。オリジナル・ファイル・データは、圧縮率75%の圧縮ファイル・データに圧縮され、圧縮ファイル・データのサイズは12KBである。したがって、圧縮ファイル・データのサイズは、3ブロックである。したがって、圧縮ファイル・データの実際のページは3ページ分であり、1論理ページを読み出すために読み出す必要があるフラッシュの実際のページのサイズを表1に示す。
圧縮ファイル・データをフラッシュに保存した後、オリジナル・ファイル・データの対象論理ページをフラッシュ内で読み出す必要がある場合、圧縮ファイル・データの3ページ分のデータを読み出す必要があり、圧縮ファイル・データを伸長した後でのみ対象論理ページを読み出すことができる。例えば、ランダム読み出しのシナリオでは、論理ページ0のオリジナル・ファイル・データをフラッシュ上で読み出す必要がある場合、3ページ分の圧縮ファイル・データを読み出し、圧縮ファイル・データを伸長した後にのみ、論理ページ0のオリジナル・ファイル・データを正常に読み出すことができる。したがって、データ読み出し効率は、以下のようである。
ランダム読み出しのシナリオでは、図5に示すデータ圧縮方法で取得された圧縮ファイル・データの読み出し効率は、比較的低いことが分かる。
前述の問題を解決するために、この出願の一実施形態は、データ圧縮方法を提供する。この方法では、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックが取得される。m個のデータ・ブロックが予め設定された圧縮アルゴリズムを使用して圧縮されて、n個の圧縮データ・ブロックを順次取得し、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表す。mとnは、両方とも1以上の正の整数である。
予め設定された圧縮アルゴリズムは、固定出力圧縮モードに対応する圧縮アルゴリズム、例えば(lempel-ziv 4, LZ4)圧縮アルゴリズムであってもよい。もちろん、予め設定された圧縮アルゴリズムは、別の圧縮アルゴリズムであってもよい。これは、本出願の本実施形態において具体的に限定されない。
例えば、図6に示すように、アプリケーション・シナリオにおいて、ソース・データのサイズが16KBであり、4KBのデータがデータ・ブロックであり、また、論理ページが例として使用されると仮定する。ソース・データの論理ページは、表2の第1行に示すように、0、1、2、及び3で番号付けされている。
論理ページの連続する16KBのソース・データが、それぞれ6KB、7KB、5KBの3つに分割されると仮定する。圧縮データ・ブロック内の各圧縮データのサイズが4KBとなるまで、予め設定された圧縮アルゴリズム(例えば、LZ4)を使用して3つのデータが圧縮される。
圧縮データ・ブロックは、それぞれ、図6に示す圧縮ページ4、圧縮ページ5、及び圧縮ページ6として番号付けされた3つのデータ・ページを有する。
圧縮ページ4では、論理ページ0のソース・データが全て圧縮されていることが分かる。したがって、論理ページ0は1ページに圧縮される。論理ページ1の一部のソース・データは圧縮ページ4に圧縮され、論理ページ1の他のソース・データは圧縮ページ5に圧縮される。したがって、論理ページ1は2ページに圧縮される。論理ページ2の一部のソース・データは圧縮ページ5に圧縮され、論理ページ2の他のソース・データは圧縮ページ6に圧縮される。したがって、論理ページ2は2ページに圧縮される。圧縮ページ6には、論理ページ3のソース・データが全て圧縮されている。したがって、論理ページ3は1ページに圧縮される。
したがって、ランダム読み出しシナリオでは、任意の1つ以上の論理ページが読み出されることがある。例えば、論理ページ0が読み出されるときに、表2の2行目と2列目に示すように、1つの圧縮ページのみが読み出される必要がある。伸長後、論理ページ0の全てのデータが取得されてもよい。
この場合、読み出し効率は、以下の式2に従って計算されてもよい。
論理ページ3の読み出し効率は、論理ページ0の読み出し効率と同じである。
例えば、論理ページ1が読み出されるときに、表2の2行目と3列目に示すように、3つの圧縮ページが読み出される必要がある。論理ページ1の全てのデータは、圧縮ページ4のデータと圧縮ページ5のデータとが伸長された後のみ取得することができる。
この場合、読み出し効率は、以下の式3に従って計算されてもよい。
論理ページ2の読み出し効率は、論理ページ1の読み出し効率と同じである。
追加的に、4つの論理ページの平均読み出し効率は、以下の式4に従って計算されてもよい。
式2、式3、式4の計算により得られる読み出し効率から、ランダム読み出しシナリオにおいて、図6に示すデータ圧縮方式の読み出し効率は、図5に示すデータ圧縮方式の読み出し効率よりもはるかに高いことが分かる。
この出願のこの実施形態では、固定出力圧縮モードに対応する圧縮アルゴリズムを使用して、読み書き可能なファイル・システムのデータ領域のm個のデータ・ブロックを圧縮して、出力される各圧縮データ・ブロックが固定サイズを有するように、同じバイト数のn個の圧縮データ・ブロックを順次取得することが分かる。データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。
追加的に、図8は、既存の拡張可能な読み出し専用ファイル・システム(extendable read-only file system、erofs)におけるデータ・ブロックのインデックス付け方式を示す。データ・ブロックアドレス配列data_addrでは、ブロック・アドレスがアクセスされ、実際のデータ・ブロックのアドレスを指し示す。erofsがミラーを作成するときに図5に示す方法を使用してデータを圧縮するときに、ストレージ・デバイス(例えば、ディスク)の構造やファイル・コンテンツが固定されているため、ファイルの修正はサポートされない。しかし、ユーザの実際の動作シナリオでは、ストレージ・デバイス上の多くの圧縮ファイルを頻繁に修正する必要があることがある。erofsはこの要件をサポートしていない。
対応するデータ・ブロックは、データ・ブロック・インデックスに基づいて見つけることができ、データ・ブロック・インデックスもiノード、すなわちメタデータであることが理解されよう。iノードは、メタデータを記憶するために使用される領域であり、ファイルに関する属性情報、例えば、ファイルの作成者、作成日、サイズ、データ・ブロックの場所を記憶するために使用される領域である。各iノードは番号を有し、オペレーティング・システムは、異なるiノード番号を使用して異なるファイルを識別する。例えば、表向きは、ユーザは、ファイル名を使用してファイルを開く。実際には、最初に、ファイル名に基づいて対応するiノード番号を見つけ、iノード番号に基づいてiノード情報を取得し、次いで、iノード情報に基づいてデータ・ブロックのアドレスを見つけて、データを読み出す。
すなわち、iノードには、ファイルの属性と、ファイルの実際のストレージ場所、すなわちブロック番号(block number)が記録される。各ブロック(一般的なサイズは4KB)は、iノードを使用して検索及び位置特定され得る。iノードはLinuxにおけるものであり、Unixではvノードと呼ばれる。基本的に、iノードは、少なくとも以下の情報、すなわち、(1)ファイル・タイプ、(2)ファイル・アクセス許可、(3)ファイル所有者及びグループ、(4)ファイル・サイズ、(5)リンクの数、すなわち、iノードを指し示すファイル名の総数、(6)ファイル状態変更時間(ctime)、最終アクセス時間(atime)、及び最終修正時間(mtime)、(7)SUID、SGID、及びSBITを含む特別なファイル属性、及び(8)ファイル・コンテンツの真のポイント(ポインタ)を含む。
図8は、既存のデータ・ブロック・インデックス・フォーマットを示す。データ・ブロック・インデックス・フォーマットは、スケーラビリティ、例えば、追記、ブロック予約、又は切り捨て(truncate)をサポートしない。追記は、オリジナル・ファイルのコンテンツを削除することなく、オリジナル・ファイルに新たなコンテンツを追加することを示す。ブロック予約は、ディスク・ブロックを割り当てることができる領域をファイル・システムが考え、ファイル・サイズが増加した場合、ディスク・ブロックを予約することを示す。切り詰めは、ファイルを修正、例えば、ファイルを削除又は追加することを示す。
例えば、図8に示すように、データ・ブロック・インデックスは、blk entryで表され、説明の便宜上、簡単にblkと呼ばれる。blk 1は、圧縮データ・ブロック1のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック1のアドレスがblk 1に記憶される。blk 2は、圧縮データ・ブロック2のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック2のアドレスがblk 2に記憶される。blk 3は、圧縮データ・ブロック3のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック3のアドレスがblk 3に記憶される。blk 4は、圧縮データ・ブロック4のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック4のアドレスがblk 4に記憶される。したがって、blkに記憶されたアドレスに基づいて、ストレージ・デバイス内の圧縮データ・ブロックの場所を決定することができる。
読み出し/書き込みファイル・システムが、書き込み、上書き、事前割り当て、切り捨てなどをサポートすることを可能にするために、この出願の実施形態で提供されるデータ圧縮方法は、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1インデックスを確立することと、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録することとをさらに含む。iは、1以上n以下の正の整数である。iは、1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
属性情報は、
データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、
データ・ブロックのデータ・ページが有効であるかどうか、すなわち、データ・ページが通常のデータ・ページであるか、又は空のデータ・ページであるかを表すために使用される第2の属性であって、空のデータ・ページは、ブランク・データ・ページと理解され得る、第2の属性と、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、
データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、
データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、
データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性とのうちの少なくとも1つを含む。
例えば、図7に示すように、データ・ブロックの第1のインデックスは、データ・ブロック又は圧縮データ・ブロックのアドレスを記憶するblkエントリと、拡張属性情報を記憶するextentエントリとを含む。各extentエントリは、blkエントリと1対1で対応し、各データ・ページは、対応するextentエントリと、対応するblkエントリとを有する。
extentエントリ・メンバのセットは、以下の方式で表される。
例えば、セットAに示すように、データ・ブロック・インデックスに含まれるメンバをセットAに示してもよい。各データ・ページは、対応するセットAを有することに留意されたい。
セット・メンバの意味は、以下のように記載される。
is_reservedは第1の属性である。
is_validは第2の属性である。
first_pageは第3の属性である。
cross_blockは第4の属性である。
is_compressは第5の属性である。
blkidxは、第6の属性である。
ofsは第7の属性である。
図6に示す方法を用いて、読み出し/書き込みファイル・システムにおいてデータを圧縮するときに、ストレージ・デバイス上の圧縮ファイルが修正されてもよいように、図7に示すデータ・ブロックのインデックスに含まれる属性が修正されてもよいことが分かる。
以下、この出願の実施形態で提供されるデータ圧縮方法について、特定の例を参照して記載する。
図9A及び図9は、この出願の一実施形態による、データ圧縮方法の概略フローチャートである。図9A及び図9Bに示すように、方法は、以下のステップを含む。
S901:読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得し、mは1以上の正の整数である。
m個のデータ・ブロックは、ライト・バックされる必要があるデータ・ブロックとして理解されよう。ライト・バックとは、書き込み動作中に、データが最初にキャッシュのためにメモリに書き込まれるが、すぐにはストレージ・デバイス(例えばディスク)に書き込まれないことを意味してもよい。メモリにキャッシュされたデータは、いくつかの特定の条件又は動作(例えば、リフレッシュ機構やシンク(sync)動作)の下でのみ、ストレージ・デバイスに書き込まれる。
S902:m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得し、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である。
予め設定された圧縮アルゴリズムは、LZ4圧縮アルゴリズムであってもよいし、もちろん、固定出力を有する別の圧縮アルゴリズムであってもよい。これは、本出願の本実施形態において具体的に限定されない。
mは任意の正の整数である。例えば、mは4であるか、mは10であるか、又はmは20である。
S902は、具体的には、以下のように実装されてもよい。
S9021:m個のデータ・ブロックの全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てる。
予め設定された順序は、連続するストレージ:アドレスの順序、すなわち、m個のデータ・ブロックの連続する順序であってもよい。
第1のセットは、最小圧縮可能単位(クラスタ)と呼ばれてもよい。換言すれば、第1のセットは、最小圧縮可能データ・ブロック・セット、例えば、図6に示す6KBデータ・ブロック・セット、7KBデータ・ブロック・セット、5KBデータ・ブロック・セットである。
例えば、m個のデータ・ブロックは、記憶媒体において連続するアドレスのセグメントにマッピングされる。データ・ブロックを始点とし、記憶媒体にマッピングされたデータ・ブロックのアドレス順に従って、固定サイズのデータ・セットが順次分割される。図6に示すように、データ・ブロック0とデータ・ブロック1の1/2データとで6KBのデータ・セットを形成し、データ・ブロック1の1/2データとデータ・ブロック2の3/4データとブランク・データ・ページとで7KBのデータ・セットを形成し、データ・ブロック2の1/4データとデータ・ブロック3とで5KBのデータ・セットを形成する。
S9022:第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいかどうかを決定し、jは1以上m以下の正の整数である。j個のデータ・ブロックのデータ容量が第1のセットの定格容量と等しくない場合、S9021が実行されるか、又はj個のデータ・ブロックのデータ容量が第1のセットの定格容量と等しい場合、S9023が実行される。
S9023:第1のセットのj個のデータ・ブロックに対して、指定された圧縮閾値に基づいて固定圧縮動作を実行し、i番目の圧縮データ・ブロックを取得する。
指定された圧縮閾値は、圧縮率を表すために使用される。例えば、指定された圧縮閾値の数式は、指定された圧縮閾値=合計データ長-合計データ長*圧縮率であってもよい。
S9024:j個のデータ・ブロックの合計データ長が、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和よりも大きいかどうかを決定する。j個のデータ・ブロックの合計データ長が、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和よりも大きい場合、S903が実行される。j個のデータ・ブロックの合計データ長が、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和よりも大きくない場合、ソース・データ・ページがフラッシュにサブミットされる。
S903:n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録し、iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。
圧縮データ・ブロックを圧縮するときに、その圧縮データ・ブロックに対応するデータ・ブロックの各々のインデックスが確立される。
第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
例えば、Linuxのf2fs読み出し/書き込みファイル・システムを例として使用し、f2fsにおけるデータ・ブロックの第1のインデックス/フォーマットは、以下のようであってもよい。
第1のインデックスに含まれる属性情報のデータ構造は、以下のようであってもよい。例えば、エントリ・データ構造は、
であり、属性情報は、
データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と(is_reserved)、
データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と(is_valid)、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と(first_page)、
データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と(cross_block)、
データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と(is_compress)、
データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と(blkidx)、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性と(ofs)のうちの少なくとも1つを含んでもよい。
具体的かつ可能な実装では、図10A及び図10Bは、この出願の一実施形態による、データ・ブロック・インデックスを更新する概略フローチャートである。図10A及び図10Bに示すように、属性情報は、第3の属性(first_page)及び第7の属性(ofs)を含んでもよく、S903は、具体的には、以下のように実装されてもよい。
S1031:j個のデータ・ブロックの各々のデータ・ページが、i番目の圧縮データ・ブロックの第1の圧縮ページであるかどうかを決定する。j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することを行う。
S1032:第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応する第1のセットにおけるオフセットに更新する。
S1033:第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページとi番目の圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新する。
もちろん、属性情報は、第4の属性(cross_block)をさらに含んでいてもよく、S103は、具体的には以下のように実装されてもよい。
S1034:2つの圧縮ブロックの圧縮データ・ページにj個のデータ・ブロックの各々のデータ・ページが含まれているかどうかを決定する。j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれる場合、第4の属性の属性値に1を代入するか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれない場合、第4の属性の属性値に0を代入する。
もちろん、属性情報は、第2の属性(is_valid)をさらに含んでいてもよく、S103は、具体的には以下のように実装されてもよい。
S1035:j個のデータ・ブロックの各々のデータ・ページが有効であるかどうかを決定する。j個のデータ・ブロックの各々のデータ・ページが有効である場合、第2の属性の属性値に1を代入し、j個のデータ・ブロックの各々のデータ・ページが無効である場合、第2の属性の属性値に0を代入する。
もちろん、属性情報は、第6の属性(blkidx)をさらに含んでいてもよく、S103は、具体的には以下のように実装されてもよい。
S1036:m個のデータ・ブロックの各データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを決定する。
圧縮は、メモリのm個のデータ・ブロックの記憶場所のシーケンスに従って、最小固定圧縮単位(例えば、第1のセット)のサイズを使用して実行される。1回目の圧縮が完了した(すなわち、第1の圧縮データ・ブロックが取得された)ときに、第1の圧縮データ・ブロックに対応する完了データ・ブロックのデータ・ページは、全て第1の圧縮ブロックのインデックス位置にある。例えば、第1の圧縮データ・ブロックに対応するデータ・ブロックは、データ・ブロック0のデータの一部、データ・ブロック1、データ・ブロック2、及びデータ・ブロック3を含む。第1の圧縮データ・ブロックに対応する完全データ・ブロックは、データ・ブロック0、データ・ブロック1、及びデータ・ブロック2である。したがって、データ・ブロック0、データ・ブロック1、データ・ブロック2のデータ・ページは、第1の圧縮データ・ブロックのインデックス位置にある。
第3の属性に付加する必要がある第7の属性に加えて、他の属性に対応するデータ・ブロック・インデックス更新手順は互いに独立していることに留意されたい。第1の属性、第2の属性、第4の属性、第5の属性、及び第6の属性に対応するデータ・ブロック・インデックス更新手順のシーケンスは、この出願のこの実施形態においては特に限定されない。
例えば、図11に示すように、m個のデータ・ブロックは、データ・ブロック0(すなわち、ブロック0)、データ・ブロック1(すなわち、ブロック1)、データ・ブロック2(すなわち、ブロック2)、及びデータ・ブロック3(すなわち、ブロック3)を含むと仮定される。ブロック0、ブロック1、ブロック2、及びブロック3を使用して連続するアドレスのセグメントがメモリにマッピングされる。圧縮中に、ブロック0、ブロック1、ブロック2、及びブロック3使用してメモリ上にマッピングされた連続するアドレスのセグメントのシーケンス(例えば、図11の左から右への圧縮方向)に従って、最小固定圧縮単位(例えば、第1のセット)のサイズを使用して圧縮が実行されるときに、
ブロック0の一部とブロック1が最小固定圧縮単位(例えば4KB)に達したときに、1回目の圧縮が実行されて、第1の圧縮データ・ブロック(compress blk 0)を取得する。この場合、ブロック0のデータ・ブロック・インデックスは、表3に示すように確立される。
図10A及び図10Bを参照すると、ブロック0のデータ・ページが、第1の圧縮データ・ブロックの第1の圧縮ページにあることが分かる。したがって、first_pageに1が代入される。ブロック0のデータ・ページは、第1の圧縮データ・ブロックの第1の圧縮ページにのみある。したがって、cross_blockに0が代入される。ブロック0のデータ・ページの第1の圧縮データ・ブロック内のインデックス・アドレスは、第1の圧縮データ・ブロック(compress blk 0)の番号である。したがって、blkidxに0が代入される。ブロック0のデータ・ページは、第1の圧縮データ・ブロックの第1の圧縮ページにあり、ブロック0に対応する第1のセットにおけるブロック0のオフセットは0である。したがって、ofsに0が代入される。ブロック0のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
ブロック1の残りの部分、ブロック2の一部及びブロック3が最小固定圧縮単位(例えば4KB)に達したときに、2回目の圧縮が実行されて、第2の圧縮データ・ブロック(compress blk 1)を取得する。この場合、ブロック1とブロック2のデータ・ブロック・インデックスは、表4に示すように確立される。
図10A及び図10Bを参照すると、ブロック1のデータ・ページが、第2の圧縮データ・ブロックの第1の圧縮ページにあることが分かる。したがって、first_pageに1が代入される。ブロック1のデータ・ページは、第1の圧縮データ・ブロックの圧縮ページと第2の圧縮データ・ブロックの圧縮ページとにある。したがって、cross_blockに1が代入される。ブロック1のデータ・ページの第2の圧縮データ・ブロック内のインデックス・アドレスは、第2の圧縮データ・ブロック(compress blk 1)の番号である。したがって、blkidxに1が代入される。ブロック1のデータ・ページは、第2の圧縮データ・ブロックの第1の圧縮ページにあり、データ・ブロックのセットにおけるブロック1のオフセットはOfs1である。したがって、ofs1にOfs1が代入される。ブロック1のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
同様に、ブロック2のデータ・ページは、第2の圧縮データ・ブロックの第1の圧縮ページにはない。したがって、first_pageに0が代入される。ブロック2のデータ・ページは、第2の圧縮データ・ブロックの圧縮ページにのみある。したがって、cross_blockに0が代入される。ブロック2のデータ・ページの第2の圧縮データ・ブロック内のインデックス・アドレスは、第2の圧縮データ・ブロック(compress blk 1)の番号である。したがって、blkidxに1が代入される。ブロック2のデータ・ページは、第2の圧縮データ・ブロックの第1の圧縮ページにはなく、ブロック2のデータ・ページと第1の圧縮データ・ブロックの第1の圧縮ページとの間の距離は1である。したがって、ofsに1が代入される。ブロック2のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
ブロック3の残りの部分が最小固定圧縮単位(例えば4KB)に達したときに、3回目の圧縮が実行されて、第3の圧縮データ・ブロック(compress blk 2)を取得する。この場合、ブロック3のデータ・ブロック・インデックスは、表5に示すように確立される。
図10A及び図10Bを参照すると、ブロック3のデータ・ページが、第3の圧縮データ・ブロックの第1の圧縮ページにあることが分かる。したがって、first_pageに1が代入される。ブロック1のデータ・ページは、第2の圧縮データ・ブロックの圧縮ページと第3の圧縮データ・ブロックの圧縮ページとにある。したがって、cross_blockに1が代入される。ブロック1のデータ・ページの第3の圧縮データ・ブロック内のインデックス・アドレスは、第2の圧縮データ・ブロック(compress blk 2)の番号である。したがって、blkidxに2が代入される。ブロック3のデータ・ページは、第3の圧縮データ・ブロックの第1の圧縮ページにあり、データ・ブロックのセットにおけるブロック3のオフセットはOfs2である。したがって、ofs1にOfs2が代入される。ブロック3のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
S904:m個のデータの圧縮が完了したかどうかを決定する。圧縮が完了すると、圧縮データ・ブロックの圧縮ページがデバイスにサブミットされる。圧縮が完了していない場合は、S902を実行する。
いくつかの実施形態では、図12は、この出願の一実施形態による、データ圧縮方法の概略フローチャートである。図12に示すように、S902が実行される前に、この出願のこの実施形態で提供されるデータ圧縮方法は、以下のステップを含む。
S905:上書き対象データの第2のセットを取得する。
S906:上書き対象データの第2のセットが圧縮データ・ブロックを含むかどうかを決定する。上書き対象データの第2のセットが圧縮データ・ブロックを含む場合、S907が実行されるか、又は上書き対象データの第2のセットが圧縮データ・ブロックを含まない場合、既存のデータの上書き処理が実行される。
第2のセットは、p個の圧縮データ・ブロックを含んでもよく、pは1以上の正の整数である。
S907:p個の圧縮データ・ブロックにおける第1の対象圧縮データの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得し、qは1以上の正の整数である。
S908:q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定する。
具体的には、第2のセットの各圧縮データ・ブロックのインデックス・アドレスが読み出され、圧縮データ・ブロックが伸長されて、圧縮データ・ブロックに対応するデータ・ブロックを取得する。次いで、q個のデータ・ブロックの各々の場所オフセットが決定される。
S909:第1の圧縮ページと、圧縮ページにおける第1のデータ・ブロックのオフセット位置とに基づいて、第1のデータ・ブロックのデータ・ページを取得する。
S910:第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定する。
S911:第1のデータ・ブロックのデータ・ページを第2のデータ・ブロックで上書きする。
S912:第1のセットに第2のデータ・ブロックを割り当てる。
要するに、読み出し/書き込みファイル・システムf2fsでは、この出願のこの実施形態で提供される固定出力圧縮モードを使用して、指定されたsoファイル、vdexファイル、odexファイルなどを圧縮することにより、例えば、電子デバイス上に40個のアプリケーションをインストールするプロセスにおいて、各アプリケーションが平均12%の時間的効果を得ることができるという有益な効果が達成され得る。アプリケーションのインストール中、soファイルには追記手順を有し、vdexファイルとodexファイルの両方は、上書き手順を有する。40個のアプリケーションの平均ブート・ゲインは、固定入力圧縮モードでの圧縮データのブート・ゲインよりも8%高くなる。
この出願のこの実施形態で提供されるデータ圧縮方法によれば、前述のデータ圧縮方法を使用してデータが圧縮された後、データを読み出す必要がある。図14は、この出願の一実施形態による、データ読み出し手順の概略フローチャートである。図14に示すように、データの読み出し手順は、以下のようである。
S141:第1のデータ・ブロックの属性情報を含む第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得し、第1のインデックスが、第1のデータ・ブロックの属性情報を含む。
前述の実施形態では、第1のデータ・ブロックの属性情報は、第1の属性~第7の属性のうちの少なくとも1つを含んでもよい。例えば、第1のデータ・ブロックの属性情報は、第3の属性(first_page)、第4の属性(cross_block)、第6の属性(blkidx)、及び第7の属性(ofs)を含む。
上書きシナリオ及び読み出し専用シナリオでは、第1のデータ・ブロックは、図13に示すデータ・ブロック2(ブロック2)であると仮定する。ブロック2のofs、cross_block、blkidxなどの属性情報を読み出し、ブロック2に対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得する。具体的には、表4が依然として使用される。ブロック2のofsに代入された値が1であることが読み出されたときに、ブロック2のデータ・ページが第2の圧縮データ・ブロックの第1の圧縮ページにはなく、ブロック2のデータ・ページと第1の圧縮データ・ブロックの第1の圧縮ページとの間の距離が1として取得されてもよいと決定されてもよい。次いで、ブロック2のcross_blockに代入された値が0であることが読み出されたときに、ブロック2のデータ・ページが第1の圧縮データ・ブロックの圧縮ページのみにり、別の圧縮データ・ブロックの圧縮ページにはないと決定されてもよい。次いで、ブロック2のblkidxに代入された値が1であることが読み出されたときに、ブロック2のデータ・ページの第1の圧縮データ・ブロックにおけるインデックス・アドレスが第1の圧縮データ・ブロックの番号であると決定されてもよく、すなわち、第1の圧縮データ・ブロックのインデックス・アドレスが1として取得されてもよい。
S142:第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出す。
S143:第1の圧縮データ・ブロックのインデックスに基づいて、第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得し、複数のデータ・ブロックは、第1のデータ・ブロックを含む。
具体的には、第1の圧縮データ・ブロックは、第1の圧縮データ・ブロックのインデックスに基づいてデバイス上で見出される。第1の圧縮データ・ブロックが見出された後、第1の圧縮データ・ブロックが解析され、解析された複数のデータ・ブロックが取得される。例えば、図13に示すように、第1の圧縮データ・ブロックをcompress blk 1とし、compress blk 1を解析した後、以下のデータ、すなわち、データ・ブロック1(ブロック1)のデータの一部、データ・ブロック2(ブロック2)、及びデータ・ブロック3(ブロック3)のデータの一部が取得される。
S144:複数の伸長データ・ブロックのうちの第1のデータ・ブロックのオフセットを決定する。
具体的には、第1のデータ・ブロックの属性情報に基づいて、第1のデータ・ブロックが図13に示すデータ・ブロック2(ブロック2)であることが分かる。図13に示すように、圧縮データblk 1から解析された複数のデータ・ブロックにおけるブロック2のオフセット(dstofs)の表現は以下のようである。
式中、dstofsは、圧縮ブロック1から解析された複数のデータ・ブロックにおけるブロック2のオフセットを示し、block_sizeは、データ・ブロックの長さを示し、ofs1は、第7の属性の属性値を示し、ofs1%block_sizeは、余りを示す。
S145:複数の伸長データ・ブロックのうちの第1のデータ・ブロックのオフセットに基づいて、第1のデータ・ブロックのデータを取得する。
前述の例は、依然として使用される。第1のデータ・ブロックは、ブロック2である。図13及び表4に示すように、ブロック2のデータを取得されてもよい。
具体的には、この可能な設計における通信システムは、図9に示すデータ圧縮方法で各デバイスの機能を実行するように構成されているため、前述のデータ圧縮方法と同じ効果を達成することができる。
図15は、この出願の一実施形態によるデータ圧縮装置を示す。データ圧縮装置1500は、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得するように構成されている第1の取得ユニットであって、mは1以上の正の整数である、第1の取得ユニット1501と、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得するように構成されている圧縮ユニットであって、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である、圧縮ユニット1502と、n個の圧縮データのうちのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録するように構成されている更新ユニット1503と、を含む。iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
具体的かつ可能な実装では、圧縮ユニット1502は、m個のデータ・ブロックの全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てるように構成されている。第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいときに、j個のデータ・ブロックに対して、指定された圧縮閾値に基づいて圧縮動作が実行されて、i番目の圧縮データ・ブロックを取得する。
具体的かつ可能な実装では、更新ユニット1503は、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和が、j個のデータ・ブロックの合計データ長以下であるときに、j個のデータ・ブロックの各々の第1のインデックスを確立するように構成されている。
具体的かつ可能な実装では、属性情報は、属性情報は、データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性とのうちの少なくとも1つを含む。
具体的かつ可能な実装では、属性情報は、第3の属性を含み、更新ユニット1503は、j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第7の属性を含み、更新ユニット1503は、第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットに更新することか、又は第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第4の属性を含み、更新ユニット1503は、j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるときに、第4の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれないときに、第4の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第2の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページが有効であるときに、第2の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが無効であるときに、第2の属性の属性値に0を代入することを行うようにさらに構成されている。
いくつかの可能な実施態様では、本装置は、上書き対象データの第2のセットを取得するように構成されている第2の取得ユニットであって、第2のセットは、p個の圧縮データ・ブロックを含み、pは1以上の正の整数である、第2の取得ユニット1504と、p個の圧縮データ・ブロックにおける第1の対象圧縮データの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得するように構成されている第3の取得ユニットであって、qは1以上の正の整数である、第3の取得ユニット1505と、q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定するように構成されている第1の決定ユニット1506と、第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定するように構成されている第2の決定ユニット1507と、をさらに含む。
いくつかの可能な実装では、本装置は、第1のデータ・ブロックの第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得するように構成されている第1の読み出しユニットであって、第1のインデックスが第1のデータ・ブロックの属性情報を含む、第1の読み出しユニットと、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出すように構成されている第2の読み出しユニットと、第1の圧縮データ・ブロックのインデックスに基づいて第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得するように構成されている伸長ユニットであって、複数のデータ・ブロックは第1のデータ・ブロックを含む、伸長ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットを決定するように構成されている第3の決定ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットに基づいて第1のデータ・ブロックのデータを取得するように構成されている第3の取得ユニットと、をさらに含む。
具体的かつ可能な実装では、第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
この出願の実施形態で提供されるデータ圧縮方法によれば、データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。追加的に、データ・ブロックのインデックスに含まれる属性が修正されてもよく、そのため、ストレージ・デバイス上の圧縮ファイルが修正されてもよい。この出願の実施形態では、既存の読み出し/書き込みファイル・システムにおける圧縮ソリューションのランダム読み出し増幅の問題を解決し、固定出力圧縮方式を有する既存のファイル・システムがデータ及びメタデータ更新をサポートできないという問題を解決することが分かる。
この出願の一実施形態は、デバイスをさらに提供する。デバイスは、前述の実装のいずれか1つに従ってステップを実行するように構成されたユニット、又は前述の実装のいずれか1つに従ってステップを実行するように構成されたユニットを含む。
この出願の一実施形態は、命令を含むコンピュータ可読記憶媒体をさらに提供する。命令がコンピュータ上で動作するときに、コンピュータは、前述の方法のいずれか1つを実行することが可能となる。
この出願の一実施形態は命令を含むコンピュータ・プログラム製品を提供する。コンピュータ・プログラム製品がコンピュータ上で動作するときに、コンピュータは、前述の方法のいずれか1つを行うことが可能となる。
この出願の一実施形態は、チップをさらに提供する。チップは、プロセッサ及びインターフェース回路を含む。インターフェース回路は、プロセッサに結合される。プロセッサは、コンピュータ・プログラム又は命令を実行して、前述の方法を実装するように構成されている。インターフェース回路は、チップの外側の別のモジュールと通信するように構成されている。
この出願の説明では、別段の定めがない限り、「/」は「又は」を意味する。例えば、A/Bは、A又はBを表してもよい。本明細書における「及び/又は」の用語は、関連するオブジェクト間の関連付け関係のみを説明し、3つの関係があり得ることを示す。例えば、A及び/又はBは、以下の3つのケース、すなわち、Aのみが存在すること、A及びBの両方が存在すること、並びにBのみが存在することを表してもよい。追加的に、「少なくとも1つ」とは、1つ以上を意味し、「複数の」とは、2つ以上を意味する。「第1」、「第2」などの文言は、数又は実行シーケンスを制限せず、「第1」、「第2」などの文言は、明確な差異を示さない。
この出願の説明では、「例」、「例えば」などの文言は、例、例示又は説明を与えることを表すために使用される。本出願において、「例」又は「例えば」として記載される任意の実施形態又は設計スキームは、他の実施形態又は設計スキームよりも好ましいものとして、又はより多くの利点を有するものとして説明されるべきではない。正確には、「例」、「例えば」などの文言は、関連概念を特定の方式で提示することを意図している。
実装に関する前述の説明は、便宜的かつ簡潔な説明を目的として、まさに前述の機能モジュールへの分割が説明のための例として使用されることを当業者が明確に理解することを可能にする。実際のアプリケーションでは、前述の機能は、必要に応じて実装のために異なる機能モジュールに割り当てられ得る。換言すれば、装置の内部構造は、上記の機能の全部又は一部を実装するために、異なる機能モジュールに分割される。
この出願で提供されるいくつかの実施形態では、開示された装置及び方法は、他の方式で実装され得ると理解されたい。例えば、記載された装置の実施形態は、一例にすぎない。例えば、モジュール又はユニット分割は、単に論理関数分割であり、実際の実装の際には他の分割であってもよい。例えば、複数のユニット又はコンポーネントが別の装置に組み合わされたり、統合されてもよいし、いくつかの特徴が無視されたり、実行されなくてもよい。追加的に、表示又は議論された相互結合、直接結合、又は通信接続は、いくつかのインターフェースを使用することによって実装されてもよい。装置又はユニット間の間接結合又は通信接続は、電子的、機械的、又は他の形態において実装されてもよい。
別個の部分として記載されるユニットは、物理に分離されていても、されていなくてもよく、ユニットとして表示される部分は、1つ以上の物理ユニットであってもよいし、1つの場所に位置していてもよいし、複数の場所に分散されてもよい。ユニットの一部又は全部は、実施形態の解決策の目的を達成するために実際の要件に基づいて選択されてもよい。
追加的に、本出願の実施形態における機能ユニットは、1つの処理ユニットに統合されてもよく、ユニットの各々は、物理的に単独で存在してもよく、又は2つ以上のユニットが1つのユニットに統合される。統合されたユニットは、ハードウェアの形態で実装されてもよいし、ソフトウェア機能ユニットの形態で実装されてもよい。
この出願は、特定の特徴及びその実施形態を参照して記載されているが、この出願の精神及び範囲から逸脱することなく、様々な修正及び組み合わせがそれらに対して行われてもよいことは明らかである。これに対応して、明細書及び添付の図面は、添付の特許請求の範囲によって定義されるこの出願の例示的な説明にすぎず、この出願の範囲をカバーする修正、変形、組み合わせ又は均等のいずれか又は全てと考えられる。当業者が、この出願の精神及び範囲から逸脱することなく、この出願に様々な修正及び変形を行うことができることが明らかである。この出願は、以下の特許請求の範囲及びそれらの均等の技術によって画定される保護の範囲内にあることを条件として、この出願のこれらの修正及び変形をカバーすることを意図している。
前述の説明は、この出願の単に具体的な実装に過ぎないが、この出願の保護範囲を制限することを意図したものではない。この出願に開示された技術的範囲内で、当業者によって容易に理解することができる変更又は代替は、この出願の保護範囲に含まれるものとする。したがって、この出願の保護範囲は、特許請求の範囲の保護範囲に従うものとする。
この出願は、2021年6月16日に中国国家知識産権局に出願された「DATA COMPRESSION METHOD AND APPARATUS」と題する中国特許出願第202110667882.7号に対する優先権を主張し、その全体が参照により本明細書に組み込まれる。
この出願は、データ圧縮技術の分野に関係し、特に、データ圧縮方法及び装置に関係する。
ストレージ・システムの全体的な入出力(input output、IO)の読み出し/書き込み性能を向上させるために、メモリ内のファイルを圧縮する必要がある。現在、Linuxの読み出し/書き込みファイル・システムのF2FS、ジャーナリング・フラッシュ・ファイル・システム・バージョン2(journalling Flash file system version 2、JFFS2)、Bツリー・ファイル・システム(B-tree file system、BTRFS)など、及びWindowsの読み出し/書き込みファイル・システムのNTFSなどがある。メタデータ領域は、ファイル・システム全体に占める割合が小さいため、データ領域が、通常、デバイスの記憶容量を大きく占有する。したがって、データ領域のデータを圧縮することにより、入出力IOのサイズを縮小し、IOの読み込み/書き込み性能を向上させることができる。
既存のデータ圧縮方法では、圧縮が必要とされるオリジナル・ファイル・データ(又はソース・データと呼ばれる)は、一般に、固定サイズの最小圧縮単位に基づいて圧縮されており、圧縮ファイル・データ(又は圧縮データと呼ばれる)は、ヘッダ・データと圧縮データを含んでもよい。ヘッダ・データはファイル・データの属性情報を表すために使用され、圧縮データはファイル・データのコンテンツを表すために使用される。次いで、圧縮ファイル・データは記憶媒体に保存される。しかし、既存の読み出し/書き込みファイル・システムの圧縮ソリューションでは、ランダム読み出し増幅の問題があり、読み出し効率が低い。
この出願の実施形態は、読み出し/書き込みファイル・システムのランダム読み出し増幅の問題を解決し、読み出し効率を向上させるデータ圧縮方法及び装置を提供する。
第1の態様によれば、この出願の一実施形態は、データ圧縮方法を提供する。本方法は、電子デバイスによって実行されてもよいし、電子デバイス内に位置するコンポーネント(例えば、チップ、チップ・システム、又はプロセッサ)によって実行されてもよい。以下、本方法が電子デバイスによって実行される例を使用して説明を提供する。本方法は、電子デバイスが、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得することであって、mは1以上の正の整数である、ことを含む。電子デバイスは、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得し、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である。電子デバイスは、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録する。iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
この出願の実施形態で提供されるデータ圧縮方法によれば、データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。追加的に、データ・ブロックのインデックスに含まれる属性が修正されてもよく、そのため、ストレージ・デバイス上の圧縮ファイルが修正されてもよい。この出願の実施形態では、既存の読み出し/書き込みファイル・システムにおける圧縮ソリューションのランダム読み出し増幅の問題を解決し、固定出力圧縮方式を有する既存のファイル・システムがデータ及びメタデータ更新をサポートできないという問題を解決することが分かる。
具体的かつ可能な実装では、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得することは、具体的には、m個のデータ・ブロック内の全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てることである。第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいときに、j個のデータ・ブロックに対して、指定された圧縮閾値に基づいて圧縮動作が実行されて、i番目の圧縮データ・ブロックを取得する。
n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和が、j個のデータ・ブロックの合計データ長以下であるときに、j個のデータ・ブロックの各々の第1のインデックスを確立することである。
具体的かつ可能な実装では、属性情報は、属性情報は、データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性とのうちの少なくとも1つを含む。
具体的かつ可能な実装では、属性情報は第3の属性を含み、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することである。
具体的かつ可能な実装では、属性情報は、第7の属性を含み、本方法は、第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットに更新することか、又は第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新することをさらに含む。
具体的かつ可能な実装では、属性情報は第4の属性を含み、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるときに、第4の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれないときに、第4の属性の属性値に0を代入することである。
具体的かつ可能な実装では、属性情報は第2の属性を含み、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立することは、具体的には、j個のデータ・ブロックの各々のデータ・ページが有効であるときに、第2の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが無効であるときに、第2の属性の属性値に0を代入することである。
いくつかの可能な実装では、本方法は、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得することの前に、上書き対象データの第2のセットを取得することであって、第2のセットは、p個の圧縮データ・ブロックを含み、pは1以上の正の整数である、ことと、p個の圧縮データ・ブロックにおける第1の対象圧縮データ・ブロックの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得することであって、qは1以上の正の整数である、ことと、q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定することと、第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定することと、をさらに含む。
具体的かつ可能な実装では、第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
いくつかの可能な実装では、本方法は、第1のデータ・ブロックの第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得することであって、第1のインデックスが第1のデータ・ブロックの属性情報を含む、ことと、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出すことと、第1の圧縮データ・ブロックのインデックスに基づいて第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得することであって、複数のデータ・ブロックは第1のデータ・ブロックを含む、ことと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットを決定することと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットに基づいて第1のデータ・ブロックのデータを取得することと、をさらに含む。
第2の態様によれば、この出願の一実施形態は、データ圧縮装置を提供する。本装置は、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得するように構成されている第1の取得ユニットであって、mは1以上の正の整数である、第1の取得ユニットと、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得するように構成されている圧縮ユニットであって、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である、圧縮ユニットと、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録するように構成されている更新ユニットと、を含む。
iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
この出願の実施形態で提供されるデータ圧縮方法によれば、データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。追加的に、データ・ブロックのインデックスに含まれる属性が修正されてもよく、そのため、ストレージ・デバイス上の圧縮ファイルが修正されてもよい。この出願の実施形態では、既存の読み出し/書き込みファイル・システムにおける圧縮ソリューションのランダム読み出し増幅の問題を解決し、固定出力圧縮方式を有する既存のファイル・システムがデータ及びメタデータ更新をサポートできないという問題を解決することが分かる。
具体的かつ可能な実装では、圧縮ユニットは、m個のデータ・ブロックの全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てるように構成されている。第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいときに、j個のデータ・ブロックに対して、指定された圧縮閾値に基づいて圧縮動作が実行されて、i番目の圧縮データ・ブロックを取得する。
具体的かつ可能な実装では、更新ユニットは、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和が、j個のデータ・ブロックの合計データ長以下であるときに、j個のデータ・ブロックの各々の第1のインデックスを確立するように構成されている。
具体的かつ可能な実装では、属性情報は、属性情報は、データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであることを表すために使用される第7の属性とのうちの少なくとも1つを含む。データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離である。
具体的かつ可能な実装では、属性情報は、第3の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第7の属性を含み、更新ユニットは、第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットに更新することか、又は第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第4の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるときに、第4の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれないときに、第4の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第2の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページが有効であるときに、第2の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが無効であるときに、第2の属性の属性値に0を代入することを行うようにさらに構成されている。
いくつかの可能な実施態様では、本装置は、上書き対象データの第2のセットを取得するように構成されている第2の取得ユニットであって、第2のセットは、p個の圧縮データ・ブロックを含み、pは1以上の正の整数である、第2の取得ユニットと、p個の圧縮データ・ブロックにおける第1の対象圧縮データ・ブロックの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得するように構成されている第3の取得ユニットであって、qは1以上の正の整数である、第3の取得ユニットと、q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定するように構成されている第1の決定ユニットと、第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定するように構成されている第2の決定ユニットと、をさらに含む。
具体的かつ可能な実装では、第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
いくつかの可能な実装では、本装置は、第1のデータ・ブロックの第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得するように構成されている第1の読み出しユニットであって、第1のインデックスが第1のデータ・ブロックの属性情報を含む、第1の読み出しユニットと、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出すように構成されている第2の読み出しユニットと、第1の圧縮データ・ブロックのインデックスに基づいて第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得するように構成されている伸長ユニットであって、複数のデータ・ブロックは第1のデータ・ブロックを含む、伸長ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットを決定するように構成されている第3の決定ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットに基づいて第1のデータ・ブロックのデータを取得するように構成されている第3の取得ユニットと、をさらに含む。
第3の態様によれば、この出願の一実施形態は、第1の態様の方法を実行するように構成されているデバイスを提供する。
第4の態様によれば、この出願の一実施形態は、コンピュータ可読記憶媒体を提供する。コンピュータ可読記憶媒体は、コンピュータ命令を記憶する。コンピュータ命令が電子デバイス上で実行されるときに、電子デバイスは、第1の態様のデータ圧縮方法を実行することが可能となる。
第5の態様によれば、本出願の一実施形態は、コンピュータ・プログラムを提供する。プログラムがプロセッサによって呼び出されるときに、第1の態様のデータ圧縮方法は、実行される。
第6の態様によれば、この出願の一実施形態は、1つ以上のプロセッサを含むチップ・システムを提供する。1つ以上のプロセッサが命令を実行するときに、1つ以上のプロセッサは、第1の態様のデータ圧縮方法を実行する。
この出願における技術的特徴、技術的解決策、有益な効果、又は類似の文言の説明は、全ての特徴及び利点が任意の個々の実施形態において実装可能であることを示唆しないと理解されたい。反対に、特徴又は有益な効果の説明は、少なくとも1つの実施形態が特定の技術的特徴、技術的解決策、又は有益な効果を含むことを意味すると理解されよう。したがって、この明細書における技術的特徴、技術的解決策、又は有益な効果の説明は、必ずしも同じ実施形態に属さなくてもよい。さらに、実施形態に記載される技術的特徴、技術的解決策、及び有益な効果は、任意の適切な方式で組み合わされてもよい。当業者は、実施形態が、特定の実施形態において、1つ以上の特定の技術的特徴、技術的解決策、又は有益な効果を伴わずに実装されてもよいと理解してもよい。他の実施形態では、全ての実施形態を反映するわけではない特定の実施形態において、追加の技術的特徴及び有益な効果が識別されてもよい。
この出願一実施形態による、オペレーティング・システムの構成ブロック図である。
この出願の一実施形態による、ストレージ・システムの構造の概略図である。
図1bのストレージ・システムのソリッド・ステート・ディスクの構造の概略図である。
図2のソリッド・ステート・ディスクのフラッシュ・チップの構造の概略図である。
図3のフラッシュ・チップに対応するフラッシュ変換層の概略図である。
固定入力圧縮モードの概略図である。
この出願の一実施形態による、固定出力圧縮モードの概略図である。
この出願の一実施形態による、データ・ブロック・インデックスの概略図である。
既存の拡張可能な読み出し専用ファイル・システムにおけるデータ・ブロック・インデックスの概略図である。
この出願の一実施形態による、データ圧縮方法の概略フローチャートである。
この出願の一実施形態による、データ圧縮方法の概略フローチャートである。
この出願の一実施形態による、データ・ブロック・インデックスを更新する概略フローチャートである。
この出願の一実施形態による、データ・ブロック・インデックスを更新する概略フローチャートである。
この出願の一実施形態による、データ圧縮中のデータ・ブロック・インデックス関係の概略図である。
この出願の一実施形態による、別のデータ圧縮方法の概略フローチャートである。
この出願の一実施形態による、上書き又は読み出し手順におけるデータ・ブロック・インデックス関係の概略図である。
この出願の一実施形態による、データ読み出し手順の概略フローチャートである。
この出願の一実施形態による、データ圧縮装置の構造の概略図である。
この出願の説明で言及される「含む」、「有する」、及び任意の他のそれらの変化形の用語は、非排他的な包含をカバーすることを意図している。例えば、一連のステップ又はユニットを含む、プロセス、方法、システム、製品又はデバイスは、列挙されたステップ又はユニットに限定されず、任意選択で、列挙されていない別のステップ又はユニットをさらに含むか、あるいは任意選択で、プロセス、方法、製品又はデバイスに固有の別のステップ又はユニットをさらに含む。
この出願の実施形態では、「例」又は「例えば」の文言は、例、例示又は説明を与えることを表すために使用されることに留意されたい。本出願において、「例」又は「例えば」として記載される任意の実施形態又は設計スキームは、他の実施形態又は設計スキームよりも好ましいものとして、又はより多くの利点を有するものとして説明されるべきではない。正確には、「例」、「例えば」などの文言は、関連概念を特定の方式で提示することを意図している。
この出願の実施態様の説明では、別段特定されない限り、「複数」とは、2以上を意味する。本明細書における「及び/又は」の用語は、関連するオブジェクト間の関連付け関係のみを記載し、3つの関係があり得ることを示す。例えば、A及び/又はBは、以下の3つのケース、すなわち、Aのみが存在すること、A及びBの両方が存在すること、並びにBのみが存在することを表してもよい。
理解を簡単にするために、この出願の実施形態で使用され得る関係する用語及び概念を最初に記載する。
図1aは、オペレーティング・システムの構成ブロック図である。
オペレーティング・システム(operating system、略してOS)は、コンピュータのハードウェア及びソフトウェアリソースを管理するコンピュータ・プログラムであり、例えば、unix、Windows、及びLinuxである。オペレーティング・システムは、基本的なトランザクション、例えば、メモリの管理と構成、システム・リソースの供給と需要の優先度の決定、入出力デバイスの制御、ネットワークの運用、及びファイル・システムの管理を処理する必要がある。オペレーティング・システムはまた、ユーザがシステムと対話するための動作インターフェースを提供する。
オペレーティング・システム・カーネルは、ほとんどのオペレーティング・システムのコア部分である。オペレーティング・システム・カーネルは、オペレーティング・システム内のストレージ・デバイス、ファイル、周辺機器、システム・リソースを管理するために使用される部分を含み、システムのプロセス、メモリ、デバイス・ドライバ、ファイル及びネットワーク・システムを管理し、オペレーティング・システムの性能や安定性を決定する。オペレーティング・システム・カーネルは、ハードウェア抽象化層、ディスク及びファイル・システム制御、マルチタスクなどの機能を提供するシステム・ソフトウェアである。オペレーティング・システム・カーネルは、多くのアプリケーションに対してコンピュータ・ハードウェアへの安全なアクセスを提供し、アプリケーションがコンピュータ・ハードウェアの一部に対していつ動作を実行するか、及びそれにかかる時間を決定することができる。コンピュータ・ハードウェア上での直接動作は非常に複雑であるため、オペレーティング・システム・カーネルは、これらの動作を完了するためのハードウェア抽象化方法のセットを提供することができる。
ファイル・システムは、オペレーティング・システム・カーネルのコア・モジュール、すなわち、メイン・コンポーネントである。ファイル・システムは、ストレージ・デバイス上のファイルを編成し、ファイル情報を管理及び記憶し、主にユーザのためのファイルを作成し、ファイルを記憶、読み出し、修正、ダンプを行い、ファイル・アクセスを制御し、ユーザがファイルを使用しなくなったときにファイルをキャンセルする方法である。
ファイル・システムは、カーネル内のファイルの抽象表現を提供し、ファイルを物理的なストレージ・デバイス(ディスク、ハード・ディスクなど)にマッピングし、ストレージ・デバイス上のファイルの物理アドレスをユーザが見ることができるパス及びファイル名にマッピングし、ファイル・データの迅速な読み出し、修正、及び永続化を容易にする。
ファイル・システムには、読み出し/書き込みファイル・システム及び読み出し専用ファイル・システムを含む。読み出し/書き込みファイル・システムは、ファイルをストレージ・デバイスに書き込むか、又はファイルをストレージ・デバイスから読み出すことができるファイル・システムであり、例えば、ファイル・アロケーション・テーブル(file allocation table、FAT)、ハイ・パフォーマンス・ファイル・システム(high performance file system、HPFS)、ニュー・テクノロジー・ファイル・システム(new technology file system、NTFS)、フォース・エクテンデット・ファイル・システム(fourth extended file system、EXT4)、フラッシュ・フレンドリー・ファイル・システム(flash friendly file system、F2FS)である。読み出し専用ファイル・システムは、ファイルをストレージ・デバイスから読み出すことのみが可能であり、ファイルをストレージ・デバイスに書き込むことができないファイル・システムであり、例えば、拡張可能な読み出し専用ファイル・システム(extendable read-only file system、EROFS)である。
この出願をより明確にするために、最初に、この出願のアプリケーション・シナリオについて記載する。
図1bは、ストレージ・システムの構造の概略図である。
図1bに示すアプリケーション・シナリオでは、ユーザは、アプリケーションを使用してデータにアクセスする。これらのアプリケーションを実行するコンピュータは、「アプリケーション・サーバ」と呼ばれる。アプリケーション・サーバ100は、物理マシンであってもよいし、仮想マシンであってもよい。物理アプリケーション・サーバは、デスクトップコンピュータ、サーバ、ノートブック・コンピュータ、及びモバイル・デバイスを含むが、これらに限定されない。アプリケーション・サーバは、データにアクセスするためにファイバ・チャネル・スイッチ110を使用してストレージ・システムにアクセスする。しかし、スイッチ110は、任意選択であり、アプリケーション・サーバ100はまた、ネットワークを使用してストレージ・システム120と直接通信するようにしてもよい。代替的には、ファイバ・チャネル・スイッチ110は、Ethernetスイッチ、InfiniBandスイッチ、RoCE(RDMA over Converged Ethernet)スイッチなどで置き換えられてもよい。
図1bに示すストレージ・システム120は、集中型ストレージ・システムである。集中型ストレージ・システムは、1つ以上のメイン・デバイスを含む中央ノードである。データは中央ノードに記憶され、システム全体の全てのデータ処理サービスは、中央ノードに展開される。換言すれば、集中型ストレージ・システムでは、端末又はクライアントはデータの入出力のみを担当し、全てのデータ記憶及び制御処理は中央ノードによって完了される。集中型ストレージ・システムは統合ポータルを特徴とし、外部デバイスからの全てのデータはこのポータルを通過する。ポータルは、集中型ストレージ・システムのエンジン121である。エンジン121は、集中型ストレージ・システムのコア・コンポーネントであり、エンジン121には、ストレージ・システムの多くの高度な機能が実装されている。
図1bに示すように、エンジン121は、1つ以上のコントローラを有する。図1bでは、エンジンが2つのコントローラを含む例が説明のために使用される。コントローラ0とコントローラ1の間にはミラー・チャネルがある。したがって、コントローラ0がデータをコントローラ0のメモリ124に書き込んだ後、コントローラ0は、ミラー・チャネルを介してデータのコピーをコントローラ1に送信してもよく、コントローラ1は、そのコピーをコントローラ1のローカル・メモリ124に記憶する。したがって、コントローラ0とコントローラ1とは互いにバックアップを行う。コントローラ0が故障したときに、コントローラ1は、コントローラ0のサービスを引き継いでもよい。コントローラ1が故障したときに、コントローラ0は、コントローラ1のサービスを引き継いでもよく、ハードウェア故障によるストレージ・システム120全体の使用不能を回避する。4つのコントローラがエンジン121に配設されるときに、ミラー・チャネルが任意の2つのコントローラ間に存在し、したがって、任意の2つのコントローラが互いにバックアップする。
エンジン121は、フロントエンド・インターフェース125とバックエンド・インターフェース126とをさらに含み、フロントエンド・インターフェース125は、アプリケーション・サーバ100と通信して、アプリケーション・サーバ100にストレージ・サービスを提供するように構成されている。バックエンド・インターフェース126は、ハード・ディスク134と通信して、ストレージ・システムの容量を拡張するように構成されている。エンジン121は、バックエンド・インターフェース126を介してさらに多くのハード・ディスク134に接続して、大きなストレージ・リソース・プールを形成してもよい。
エンジン121とディスク・エンクロージャ130との間の通信プロトコルのタイプに基づいて、ディスク・エンクロージャ130は、SASディスク・エンクロージャ、NVMeディスク・エンクロージャ、IPディスク・エンクロージャ、又は別のタイプのディスク・エンクロージャであってもよい。SASディスク・エンクロージャはSAS 3.0プロトコルを使用し、各エンクロージャは25のSASハード・ディスクをサポートする。エンジン121は、オンボードSASインターフェース又はSASインターフェース・モジュールを介してディスク・エンクロージャ130に接続される。NVMeディスク・エンクロージャは、完全なコンピュータ・システムのようなものである。NVMeハード・ディスクがNVMeディスク・エンクロージャに挿入されている。追加的に、NVMeディスク・エンクロージャは、RDMAポートを介してエンジン121に接続される。
ハードウェア的には、図1bに示すように、コントローラ0は、少なくともプロセッサ123とメモリ124とを含む。プロセッサ123は、ストレージ・システム(サーバ又は他のストレージ・システム)の外部からのデータ・アクセス要求を処理するように構成されており、かつストレージ・デバイス内部で生成された要求を処理するように構成されている中央処理ユニット(central processing unit、CPU)である。例えば、プロセッサ123は、フロントエンド・インターフェース125を使用して、アプリケーション・サーバ100から送信されたデータ書き込み要求を受信するときに、そのデータ書き込み要求のデータをメモリ124に一時的に記憶する。メモリ124内のデータの総量が特定の閾値に達するときに、プロセッサ123は、バックエンド・インターフェースを使用して、メモリ124に記憶されたデータを、永続的な記憶のためにハード・ディスク134に送信する。
メモリ124は、プロセッサと直接データを交換する内部メモリである。データは、いつでも高速にメモリに読み書きされ得、メモリは、オペレーティング・システム又は他の実行中のプログラムの一時的なデータ・メモリとして機能する。メモリは、少なくとも2つのタイプのメモリを含み、例えば、メモリは、ランダム・アクセス・メモリであってもよい。例えば、ランダム・アクセス・メモリは、ダイナミック・ランダム・アクセス・メモリ(Dynamic Random Access Memory、DRAM)、又はストレージ・クラス・メモリ(Storage Class Memory、SCM)である。DRAMは、半導体メモリであり、ほとんどのランダム・アクセス・メモリ(Random Access Memory、RAM)と同様に、揮発性メモリ(volatile Memory)デバイスである。SCMは、従来のストレージ・デバイスの特徴とメモリの特徴の両方を組み合わせた複合ストレージ技術を使用する。ストレージ・クラス・メモリは、ハード・ディスクに比べて高速な読み書きを提供することができるが、アクセス速度の観点からDRAMよりも遅く、コストの観点からはDRAMよりも安い。しかし、DRAM及びSCMは、実施形態における説明のための例示にすぎない。メモリは、別のランダム・アクセス・メモリ、例えば、スタティック・ランダム・アクセス・メモリ(Static Random Access Memory、SRAM)をさらに含んでもよい。追加的に、メモリ124は、デュアル・インライン・メモリ・モジュール(Dual In-line Memory Module、略してDIMM)、すなわち、ダイナミック・ランダム・アクセス・メモリ(DRAM)で構成されたモジュールであってもよいし、ソリッド・ステート・ディスク(Solid State Disk、SSD)であってもよい。実際のアプリケーションでは、コントローラ0には、複数のメモリ124と、異なるタイプのメモリ124とが構成されていてもよい。この実施形態では、メモリ113の数及びタイプは限定されない。追加的に、メモリ124は、停電保護機能を有するように構成されてもよい。停電保護機能とは、停電後にシステムの電源を再投入してもメモリ124に記憶されたデータが失われないことを意味する。停電保護機能を有するメモリは、不揮発性メモリと呼ばれる。
例えば、メモリ124及びハード・ディスク134は、いずれもソリッド・ステート・ドライブ(英語:Solid-state drive又はSolid-state disk、略してSSD)であってもよく、主にフラッシュ(NAND Flash)を不揮発性メモリとして使用するストレージ・デバイスである。図2に示すように、SSD200は、NANDフラッシュと、プライマリ・コントローラ(略してPC)201とを含む。NANDフラッシュは、データを記憶するように構成されている複数のフラッシュ・チップ205を含む。PC201は、SSDの頭脳であり、データ記憶の管理、SSDの性能及び耐用年数の維持などのいくつかの複雑なタスクを担当する。PC201は、組み込み型のマイクロチップであり、SSDの動作要求を全て送信するためのコマンドセンタのような機能を有するプロセッサ202を含む。例えば、プロセッサ202は、バッファ内のファームウェアを使用して、データの読み書き、ガーベジ・コレクション、ウェア・レベリングなどの機能を実行してもよい。
SSD PC201は、ホスト・インターフェース204と、いくつかのチャネル・コントローラとをさらに含む。ホスト・インターフェース204は、ホストと通信するように構成されている。本明細書におけるホストとは、サーバ、パーソナル・コンピュータ、アレイ・コントローラなどの任意のデバイスを指す。PC201は、複数のチャネル・コントローラを使用して、複数のフラッシュ・チップ205を並列に動作させて、最下層の帯域幅を改善してもよい。例えば、PC201とFLASHチップとの間に8つのチャネルがあり、PC201は、8つのチャネルを介して8つのフラッシュ・チップ205に対して並列にデータを読み書きする。
図3に示すように、ダイは、1つ以上のフラッシュ・チップのパッケージである。1つのダイが複数のパネル(panel)を含んでもよく、マルチプレーンNANDは性能を効果的に向上させることができる設計である。図3に示すように、1つのダイを2つのプレーンに分割され、2つのプレーンのブロック番号をシングル及びデュアルクロスする。したがって、動作中に、シングル及びデュアルクロス動作を実行して、性能を向上させてもよい。1つのパネルは、複数のブロック(block)を含む。1つのブロックは、複数のページ(page)を含む。16GBのフラッシュ・チップが一例として使用される。各4314*8=34512セルは、論理的にページを形成する。各ページは、4KBのコンテンツと218-BのECCパリティ・データを記憶することができる。ページは、IO動作の最小単位でもある。128ページごとにブロックが形成され、2048ブロックごとにパネルが形成される。フラッシュ・チップ全体は、2つのパネルが含む。一方のパネルには奇数番号のブロックが記憶され、他方のパネルには偶数番号のブロックが記憶される。2つのプレーンは、同時に動作され得る。これは一例にすぎない。ページ・サイズ、ブロック容量、フラッシュ・チップ容量は、異なる使用を有する。これは、この出願では限定されない。
ホストは、ブロックにデータを書き込む。ブロックがフルであるときに、SSD PC 201は、書き込みを継続するために次のブロックを選択してもよい。ページは、書き込まれるデータの最小単位である。換言すれば、PC201は、ページを粒度としてブロックにデータを書き込む。ブロックは、データ消去のための最小単位である。PCは、一度にブロック全体しか消去できない。
ホストは、論理ブロック・アドレス(Logical Block Address、LBA)を使用してSSDにアクセスする。各LBAは、セクタを表す(一例として、512Bが使用される)。SSDでは、PCは、ページ単位でSSDにアクセスする(一例として、4KBが使用される)。したがって、アプリケーション・サーバがデータを書き込むたびに、SSD PCは、データを書き込むページを検索する。ページのアドレスは、物理ブロック・アドレス(Physical Block Address、PBA)と呼ばれる。LBAからPBAへのマッピングは、SSD内に記録される。このようなマッピングにより、ホストが次にLBAのデータを読み出す必要があるときに、SSDは、フラッシュ・チップ内でデータが読み出される場所を知る。図4は、フラッシュ変換層(Flash Translation Layer、FTL)の概略図である。FTLは、プロセッサ202のファームウェア内に位置する。図4に示すように、ホストが新しいデータを書き込むたびに、新しいマッピング関係が生成され、そのマッピング関係がFTLに追加(ファーストライト)されるか、又はFTLが変更(オーバライド)される。データを読み出すときに、SSDは、最初に、FTL内のデータのLBAに対応するPBAを検索し、そのPBAに基づいて対応するデータを読み出す。
フラッシュ・チップは、上書きをサポートすることができない。これは、ホストがLBA上のデータを修正するときに、そのLBAに対応するPBA上のデータを直接修正することはできないことを意味する。データは新しいPBAに書き込まれ、マッピングがFTLに追加される必要がある。例えば、FTLのLBA DとPBA Dの間にはマッピング関係があった。ホストがLBA Dのデータを修正することを要求するIO要求を送信するときに、SSDは、データを書き込む新しい場所(PBA E)を検索し、LBA DとPBA Eのマッピング関係をFTLに追加する。その結果、PBA D上のデータは無効になる。無効なデータ(ジャンク・データとも呼ばれる)とは、いかなるマッピング関係によって指し示されないデータである。データは新しいマッピング関係によって置き換えられるため、ユーザはデータのFLASHスペースにアクセスできないことがある。データが連続的にホストに書き込まれると、FLASHストレージ・スペースは徐々に減少し、最後には使い果たされる。ジャンク・データが適時にクリアされない場合、データは、ホストに書き込むことができない。全てのSSDは、ガベージ・コレクション・メカニズムを有する。基本原理は、いくつかのブロック内の有効なデータを新しいブロックに移動し、ブロックを消去することである。このようにして、新たな利用可能ブロックが生成される。
追加的に、メモリ124は、さらにソフトウェア・プログラムを記憶しており、プロセッサ123は、メモリ124内のソフトウェア・プログラムを実行することによりハード・ディスクを管理してもよい。例えば、ハード・ディスクをストレージ・リソース・プールに抽象化し、次いで、サーバが使用するLUNに分割できる。このLUNは、実際にはサーバ上にあるハード・ディスクである。確かに、一部の集中型ストレージ・システムはファイル・サーバでもあり、サーバに対して共有ファイル・サービスを提供してもよい。
メモリ124に記憶されたデータは、ファイル・システムを使用して提示されてもよい。ファイル・システムは、構造化データファイル・ストレージ及び編成形式である。既知のように、コンピュータ内の全てのデータは0と1であり、ハードウェア・メディアに記憶された一連の01の組み合わせを区別して管理することはできない。したがって、コンピュータは、「ファイル」の概念を使用してデータを編成する。コンピュータは、異なるアプリケーションによって必要とされる構造に基づいて、同じ目的のために使用されるデータを異なるタイプのファイルに編成する。通常、異なるタイプを参照するために異なる接尾辞が使用され、コンピュータは各ファイルに理解しやすく覚えやすい名前を付ける。多数のファイルがあるときに、ファイルは、特定の方法でグループ化される。ファイルの各グループは、同じディレクトリ(又はフォルダ)に記憶される。カタログは、ファイルに加えて、下位レベルのカタログ(サブカタログ又はサブフォルダと呼ばれる)を含んでもよい。全てのファイルとカタログはツリー構造を形成する。ツリー構造は、ファイル・システム(File System)という特別な名前を有する。WindowsのFAT、FAT32、NTFS、LinuxのEXT2、EXT3、EXT4、XFS、BtrFSなど、多くのタイプのファイル・システムがある。検索を容易にするために、ルート・ノードからファイルへのレベルごとの降順、カタログ、サブカタログ、及びファイルの名前は、特殊文字(例えば、Windows又はDOSでは「¥」が使用され、Unixのようなシステムでは「/」が使用される)と組み合わされ、このような文字列は、ファイル・パスと呼ばれ、Linuxでは「/etc/systemd/system.conf」であり、Windowsでは「C:¥Windows¥System 32¥taskmgr.exe」である。パスは、特定のファイルにアクセスするための一意の識別子である。例えば、WindowsでのD:¥data¥file.exeはファイルのパスであり、パーティションDのデータカタログ内のfile.exeファイルを示す。
ファイル・システムは、ブロック・デバイス上に構築される。ファイル・システムは、ファイル・パスだけでなく、ファイルを形成するブロック、及びカタログ/サブカタログ情報を記録するブロックも記録する。異なるファイル・システムは、異なる編成構造を有する。管理の容易さから、ハード・ディスクなどのブロック・デバイスは、一般に、複数の論理ブロック・デバイス、すなわち、ハード・ディスク・パーティション(Partition)に分割されてもよい。逆に、単一の媒体の容量と性能は、限定される。複数の物理ブロック・デバイスは、RAID、JBODなどの様々なレベルの技術を使用して、論理ブロック・デバイスに結合され得る。代替的には、ファイル・システムは、これらの論理ブロック・デバイス上に構築されてもよい。いずれの場合も、アプリケーション・サーバ上のアプリケーションは、配下のブロック・デバイス上のアクセス対象のファイルの特定の位置を考慮する必要はなく、ファイルのファイル名/IDのみをファイル・システムに送信する必要がある。ファイル・システムは、ファイル名/IDに基づくクエリを通じてファイル・パスを取得する。
比較的な一般的なファイル・アクセス・プロトコルは、NFS、CIFS、SMBなどであるが、これは、この実施形態では限定されない。
この出願のファイル・システムは、読み出し/書き込み可能ファイル・システムである。読み出し/書き込みファイル・システムは、ストレージ・デバイスにファイルを書き込むか、又はストレージ・デバイスからファイルを読み出すことができるファイル・システムであり、例えば、FAT、HPFS、NTFS、EXT4及びF2FSである。
ファイル・システムは、一般に、メタデータ領域とデータ領域とを含む。メタデータ領域は、スーパーブロックとiノード(inode)領域とを含む。メタデータ領域のスーパーブロックは、ファイル・システムの制御情報、データ構造などのコンテンツを含んでもよい。メタデータ領域のiノード領域は、ファイルの記述情報、例えば、ファイル長及びファイル・タイプを含んでもよい。ファイル・タイプは、例えば、通常アイノード(regular inode)、ディレクトリ・iノード(directory inode)、シンボルリンク・iノード(symbol link inode)、特殊iノード(special inode)である。データ領域に記憶されるデータは、可逆圧縮技術に基づくファイルレベルの圧縮処理を実行して取得されたデータであってもよい。データ領域内のデータは、ディスク・ブロックのセットに基づいて、記憶媒体(例えば、ディスク又はフラッシュ)の物理的な記憶空間に記憶される。同じファイルのデータは、連続したディスク・ブロックに記憶されていてもよいし、クロス方式で不連続なディスク・ブロックに記憶されてもよい。
本出願においてディスク・ブロックの概念を導入したからといって、記憶媒体がディスクに限定されるものではなく、ディスク・ブロックが、記憶媒体の物理的な記憶空間を分割することによって小さな物理的な記憶空間を表すために使用されてもよいことが理解されよう。
もちろん、本出願のストレージ・システムは、スケールアウト・ストレージ・システムをさらに含んでもよい。スケールアウト・ストレージ・システムは、独立した複数のストレージ・ノードにデータが記憶されるシステムである。従来のネットワーク・ストレージ・システムは、全てのデータを記憶するために集中型ストレージ・アレイを使用する。ストレージ・アレイの性能は、システム性能のボトルネックであるだけでなく、信頼性とセキュリティの焦点でもあり、大規模なストレージ・アプリケーションの要件を満たすことができない。
以上、この出願のアプリケーション・シナリオについて簡単に説明した。
上記のストレージ・システムでは、データの読み出し/書き込み能力に基づいて、コンポーネントのレートがソートされており、降順で、中央処理ユニット(central processing unit、CPU)>>ダブル・データ・レート同期ダイナミック・ランダム・アクセス・メモリ(double data rate synchronous dynamic random access memory、DDR SDRAM)>フラッシュ・チップである。ストレージ・システムにおけるデータ・アクセスのボトルネックは、メモリとフラッシュとの間のデータのIO(input output)時間オーバヘッドであることが分かる。
ストレージ・システムの全体的なIO読み出し/書き込み性能を向上させるには、メモリ内のファイルを圧縮する必要がある。メタデータ領域は、ファイル・システム全体に占める割合が小さいため、通常、デバイスの記憶容量を大きく占有する。したがって、フラッシュにデータを書き込むときに、データを圧縮して、圧縮データをフラッシュに書き込むことにより、フラッシュの記憶容量占有を削減し、フラッシュの態様年数を延ばすことができる。
現在、Linuxの読み出し/書き込みファイル・システムのF2FS、ジャーナリング・フラッシュ・ファイル・システム・バージョン2(journalling Flash file system version 2、JFFS2)、Bツリー・ファイル・システム(B-tree file system、BTRFS)など、及びWindowsの読み出し/書き込みファイル・システムのNTFSなどに対してデータ圧縮方式が使用されることがある。
圧縮が必要とされるオリジナル・ファイル・データ(又はソース・データと呼ばれる)は、固定サイズの最小圧縮単位(クラスタ)に基づいて圧縮されており、圧縮ファイル・データ(又は圧縮データと呼ばれる)は、ヘッダ・データと圧縮データを含む。ヘッダ・データはファイル・データの属性情報を表すために使用され、圧縮データはファイル・データのコンテンツを表すために使用される。圧縮ファイル・データはフラッシュに保存され、4KBのサイズに調整されます。
例えば、図5の固定入力圧縮モードの模式図に示すように、連続するアドレスを有する4つのデータ・ブロック(block)をクラスタ0として圧縮し、ヘッダ・データ(header)+圧縮データ(compressed data)を含む圧縮ファイル・データを取得する。圧縮ファイル・データのサイズが4KB未満である場合、圧縮ファイル・データは4KBのサイズでフラッシュに記憶される。
図5に示すオリジナル・ファイル・データ(又はソース・データと呼ばれる)のサイズは、4ブロックであり、各ブロックのサイズは、4KBであり、1ブロックが1論理ページであると仮定する。オリジナル・ファイル・データの論理ページは、0、1、2、及び3で番号付けられている。オリジナル・ファイル・データは、圧縮率75%の圧縮ファイル・データに圧縮され、圧縮ファイル・データのサイズは12KBである。したがって、圧縮ファイル・データのサイズは、3ブロックである。したがって、圧縮ファイル・データの実際のページは3ページ分であり、1論理ページを読み出すために読み出す必要があるフラッシュの実際のページのサイズを表1に示す。
圧縮ファイル・データをフラッシュに保存した後、オリジナル・ファイル・データの対象論理ページをフラッシュ内で読み出す必要がある場合、圧縮ファイル・データの3ページ分のデータを読み出す必要があり、圧縮ファイル・データを伸長した後でのみ対象論理ページを読み出すことができる。例えば、ランダム読み出しのシナリオでは、論理ページ0のオリジナル・ファイル・データをフラッシュ上で読み出す必要がある場合、3ページ分の圧縮ファイル・データを読み出し、圧縮ファイル・データを伸長した後にのみ、論理ページ0のオリジナル・ファイル・データを正常に読み出すことができる。したがって、データ読み出し効率は、以下のようである。
ランダム読み出しのシナリオでは、図5に示すデータ圧縮方法で取得された圧縮ファイル・データの読み出し効率は、比較的低いことが分かる。
前述の問題を解決するために、この出願の一実施形態は、データ圧縮方法を提供する。この方法では、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックが取得される。m個のデータ・ブロックが予め設定された圧縮アルゴリズムを使用して圧縮されて、n個の圧縮データ・ブロックを順次取得し、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表す。mとnは、両方とも1以上の正の整数である。
予め設定された圧縮アルゴリズムは、固定出力圧縮モードに対応する圧縮アルゴリズム、例えば(lempel-ziv 4, LZ4)圧縮アルゴリズムであってもよい。もちろん、予め設定された圧縮アルゴリズムは、別の圧縮アルゴリズムであってもよい。これは、本出願の本実施形態において具体的に限定されない。
例えば、図6に示すように、アプリケーション・シナリオにおいて、ソース・データのサイズが16KBであり、4KBのデータがデータ・ブロックであり、また、論理ページが例として使用されると仮定する。ソース・データの論理ページは、表2の第1行に示すように、0、1、2、及び3で番号付けされている。
論理ページの連続する16KBのソース・データが、それぞれ6KB、7KB、5KBの3つに分割されると仮定する。圧縮データ・ブロック内の各圧縮データのサイズが4KBとなるまで、予め設定された圧縮アルゴリズム(例えば、LZ4)を使用して3つのデータが圧縮される。
圧縮データ・ブロックは、それぞれ、図6に示す圧縮ページ4、圧縮ページ5、及び圧縮ページ6として番号付けされた3つのデータ・ページを有する。
圧縮ページ4では、論理ページ0のソース・データが全て圧縮されていることが分かる。したがって、論理ページ0は1ページに圧縮される。論理ページ1の一部のソース・データは圧縮ページ4に圧縮され、論理ページ1の他のソース・データは圧縮ページ5に圧縮される。したがって、論理ページ1は2ページに圧縮される。論理ページ2の一部のソース・データは圧縮ページ5に圧縮され、論理ページ2の他のソース・データは圧縮ページ6に圧縮される。したがって、論理ページ2は2ページに圧縮される。圧縮ページ6には、論理ページ3のソース・データが全て圧縮されている。したがって、論理ページ3は1ページに圧縮される。
したがって、ランダム読み出しシナリオでは、任意の1つ以上の論理ページが読み出されることがある。例えば、論理ページ0が読み出されるときに、表2の2行目と2列目に示すように、1つの圧縮ページのみが読み出される必要がある。伸長後、論理ページ0の全てのデータが取得されてもよい。
この場合、読み出し効率は、以下の式2に従って計算されてもよい。
論理ページ3の読み出し効率は、論理ページ0の読み出し効率と同じである。
例えば、論理ページ1が読み出されるときに、表2の2行目と3列目に示すように、3つの圧縮ページが読み出される必要がある。論理ページ1の全てのデータは、圧縮ページ4のデータと圧縮ページ5のデータとが伸長された後のみ取得することができる。
この場合、読み出し効率は、以下の式3に従って計算されてもよい。
論理ページ2の読み出し効率は、論理ページ1の読み出し効率と同じである。
追加的に、4つの論理ページの平均読み出し効率は、以下の式4に従って計算されてもよい。
式2、式3、式4の計算により得られる読み出し効率から、ランダム読み出しシナリオにおいて、図6に示すデータ圧縮方式の読み出し効率は、図5に示すデータ圧縮方式の読み出し効率よりもはるかに高いことが分かる。
この出願のこの実施形態では、固定出力圧縮モードに対応する圧縮アルゴリズムを使用して、読み書き可能なファイル・システムのデータ領域のm個のデータ・ブロックを圧縮して、出力される各圧縮データ・ブロックが固定サイズを有するように、同じバイト数のn個の圧縮データ・ブロックを順次取得することが分かる。データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。
追加的に、図8は、既存の拡張可能な読み出し専用ファイル・システム(extendable read-only file system、erofs)におけるデータ・ブロックのインデックス付け方式を示す。データ・ブロックアドレス配列data_addrでは、ブロック・アドレスがアクセスされ、実際のデータ・ブロックのアドレスを指し示す。erofsがミラーを作成するときに図5に示す方法を使用してデータを圧縮するときに、ストレージ・デバイス(例えば、ディスク)の構造やファイル・コンテンツが固定されているため、ファイルの修正はサポートされない。しかし、ユーザの実際の動作シナリオでは、ストレージ・デバイス上の多くの圧縮ファイルを頻繁に修正する必要があることがある。erofsはこの要件をサポートしていない。
対応するデータ・ブロックは、データ・ブロック・インデックスに基づいて見つけることができ、データ・ブロック・インデックスもiノード、すなわちメタデータであることが理解されよう。iノードは、メタデータを記憶するために使用される領域であり、ファイルに関する属性情報、例えば、ファイルの作成者、作成日、サイズ、データ・ブロックの場所を記憶するために使用される領域である。各iノードは番号を有し、オペレーティング・システムは、異なるiノード番号を使用して異なるファイルを識別する。例えば、表向きは、ユーザは、ファイル名を使用してファイルを開く。実際には、最初に、ファイル名に基づいて対応するiノード番号を見つけ、iノード番号に基づいてiノード情報を取得し、次いで、iノード情報に基づいてデータ・ブロックのアドレスを見つけて、データを読み出す。
すなわち、iノードには、ファイルの属性と、ファイルの実際のストレージ場所、すなわちブロック番号(block number)が記録される。各ブロック(一般的なサイズは4KB)は、iノードを使用して検索及び位置特定され得る。iノードはLinuxにおけるものであり、Unixではvノードと呼ばれる。基本的に、iノードは、少なくとも以下の情報、すなわち、(1)ファイル・タイプ、(2)ファイル・アクセス許可、(3)ファイル所有者及びグループ、(4)ファイル・サイズ、(5)リンクの数、すなわち、iノードを指し示すファイル名の総数、(6)ファイル状態変更時間(ctime)、最終アクセス時間(atime)、及び最終修正時間(mtime)、(7)SUID、SGID、及びSBITを含む特別なファイル属性、及び(8)ファイル・コンテンツの真のポイント(ポインタ)を含む。
図8は、既存のデータ・ブロック・インデックス・フォーマットを示す。データ・ブロック・インデックス・フォーマットは、スケーラビリティ、例えば、追記、ブロック予約、又は切り捨て(truncate)をサポートしない。追記は、オリジナル・ファイルのコンテンツを削除することなく、オリジナル・ファイルに新たなコンテンツを追加することを示す。ブロック予約は、ディスク・ブロックを割り当てることができる領域をファイル・システムが考え、ファイル・サイズが増加した場合、ディスク・ブロックを予約することを示す。切り詰めは、ファイルを修正、例えば、ファイルを削除又は追加することを示す。
例えば、図8に示すように、データ・ブロック・インデックスは、blk entryで表され、説明の便宜上、簡単にblkと呼ばれる。blk 1は、圧縮データ・ブロック1のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック1のアドレスがblk 1に記憶される。blk 2は、圧縮データ・ブロック2のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック2のアドレスがblk 2に記憶される。blk 3は、圧縮データ・ブロック3のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック3のアドレスがblk 3に記憶される。blk 4は、圧縮データ・ブロック4のインデックスであり、ストレージ・デバイス内の圧縮データ・ブロック4のアドレスがblk 4に記憶される。したがって、blkに記憶されたアドレスに基づいて、ストレージ・デバイス内の圧縮データ・ブロックの場所を決定することができる。
読み出し/書き込みファイル・システムが、書き込み、上書き、事前割り当て、切り捨てなどをサポートすることを可能にするために、この出願の実施形態で提供されるデータ圧縮方法は、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1インデックスを確立することと、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録することとをさらに含む。iは、1以上n以下の正の整数である。iは、1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
属性情報は、
データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、
データ・ブロックのデータ・ページが有効であるかどうか、すなわち、データ・ページが通常のデータ・ページであるか、又は空のデータ・ページであるかを表すために使用される第2の属性であって、空のデータ・ページは、ブランク・データ・ページと理解され得る、第2の属性と、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、
データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、
データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、
データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性とのうちの少なくとも1つを含む。
例えば、図7に示すように、データ・ブロックの第1のインデックスは、データ・ブロック又は圧縮データ・ブロックのアドレスを記憶するblkエントリと、拡張属性情報を記憶するextentエントリとを含む。各extentエントリは、blkエントリと1対1で対応し、各データ・ページは、対応するextentエントリと、対応するblkエントリとを有する。
extentエントリ・メンバのセットは、以下の方式で表される。
例えば、セットAに示すように、データ・ブロック・インデックスに含まれるメンバをセットAに示してもよい。各データ・ページは、対応するセットAを有することに留意されたい。
セット・メンバの意味は、以下のように記載される。
is_reservedは第1の属性である。
is_validは第2の属性である。
first_pageは第3の属性である。
cross_blockは第4の属性である。
is_compressは第5の属性である。
blkidxは、第6の属性である。
ofsは第7の属性である。
図6に示す方法を用いて、読み出し/書き込みファイル・システムにおいてデータを圧縮するときに、ストレージ・デバイス上の圧縮ファイルが修正されてもよいように、図7に示すデータ・ブロックのインデックスに含まれる属性が修正されてもよいことが分かる。
以下、この出願の実施形態で提供されるデータ圧縮方法について、特定の例を参照して記載する。
図9A及び図9は、この出願の一実施形態による、データ圧縮方法の概略フローチャートである。図9A及び図9Bに示すように、方法は、以下のステップを含む。
S901:読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得し、mは1以上の正の整数である。
m個のデータ・ブロックは、ライト・バックされる必要があるデータ・ブロックとして理解されよう。ライト・バックとは、書き込み動作中に、データが最初にキャッシュのためにメモリに書き込まれるが、すぐにはストレージ・デバイス(例えばディスク)に書き込まれないことを意味してもよい。メモリにキャッシュされたデータは、いくつかの特定の条件又は動作(例えば、リフレッシュ機構やシンク(sync)動作)の下でのみ、ストレージ・デバイスに書き込まれる。
S902:m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得し、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である。
予め設定された圧縮アルゴリズムは、LZ4圧縮アルゴリズムであってもよいし、もちろん、固定出力を有する別の圧縮アルゴリズムであってもよい。これは、本出願の本実施形態において具体的に限定されない。
mは任意の正の整数である。例えば、mは4であるか、mは10であるか、又はmは20である。
S902は、具体的には、以下のように実装されてもよい。
S9021:m個のデータ・ブロックの全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てる。
予め設定された順序は、連続するストレージ:アドレスの順序、すなわち、m個のデータ・ブロックの連続する順序であってもよい。
第1のセットは、最小圧縮可能単位(クラスタ)と呼ばれてもよい。換言すれば、第1のセットは、最小圧縮可能データ・ブロック・セット、例えば、図6に示す6KBデータ・ブロック・セット、7KBデータ・ブロック・セット、5KBデータ・ブロック・セットである。
例えば、m個のデータ・ブロックは、記憶媒体において連続するアドレスのセグメントにマッピングされる。データ・ブロックを始点とし、記憶媒体にマッピングされたデータ・ブロックのアドレス順に従って、固定サイズのデータ・セットが順次分割される。図6に示すように、データ・ブロック0とデータ・ブロック1の1/2データとで6KBのデータ・セットを形成し、データ・ブロック1の1/2データとデータ・ブロック2の3/4データとブランク・データ・ページとで7KBのデータ・セットを形成し、データ・ブロック2の1/4データとデータ・ブロック3とで5KBのデータ・セットを形成する。
S9022:第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいかどうかを決定し、jは1以上m以下の正の整数である。j個のデータ・ブロックのデータ容量が第1のセットの定格容量と等しくない場合、S9021が実行されるか、又はj個のデータ・ブロックのデータ容量が第1のセットの定格容量と等しい場合、S9023が実行される。
S9023:第1のセットのj個のデータ・ブロックに対して、指定された圧縮閾値に基づいて固定圧縮動作を実行し、i番目の圧縮データ・ブロックを取得する。
指定された圧縮閾値は、圧縮率を表すために使用される。例えば、指定された圧縮閾値の数式は、指定された圧縮閾値=合計データ長-合計データ長*圧縮率であってもよい。
S9024:j個のデータ・ブロックの合計データ長が、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和よりも大きいかどうかを決定する。j個のデータ・ブロックの合計データ長が、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和よりも大きい場合、S903が実行される。j個のデータ・ブロックの合計データ長が、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和よりも大きくない場合、ソース・データ・ページがフラッシュにサブミットされる。
S903:n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録し、iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。
圧縮データ・ブロックを圧縮するときに、その圧縮データ・ブロックに対応するデータ・ブロックの各々のインデックスが確立される。
第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
例えば、Linuxのf2fs読み出し/書き込みファイル・システムを例として使用し、f2fsにおけるデータ・ブロックの第1のインデックス/フォーマットは、以下のようであってもよい。
第1のインデックスに含まれる属性情報のデータ構造は、以下のようであってもよい。例えば、エントリ・データ構造は、
であり、属性情報は、
データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と(is_reserved)、
データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と(is_valid)、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と(first_page)、
データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と(cross_block)、
データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と(is_compress)、
データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と(blkidx)、
データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性と(ofs)のうちの少なくとも1つを含んでもよい。
具体的かつ可能な実装では、図10A及び図10Bは、この出願の一実施形態による、データ・ブロック・インデックスを更新する概略フローチャートである。図10A及び図10Bに示すように、属性情報は、第3の属性(first_page)及び第7の属性(ofs)を含んでもよく、S903は、具体的には、以下のように実装されてもよい。
S1031:j個のデータ・ブロックの各々のデータ・ページが、i番目の圧縮データ・ブロックの第1の圧縮ページであるかどうかを決定する。j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することを行う。
S1032:第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応する第1のセットにおけるオフセットに更新する。
S1033:第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページとi番目の圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新する。
もちろん、属性情報は、第4の属性(cross_block)をさらに含んでいてもよく、S103は、具体的には以下のように実装されてもよい。
S1034:2つの圧縮ブロックの圧縮データ・ページにj個のデータ・ブロックの各々のデータ・ページが含まれているかどうかを決定する。j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれる場合、第4の属性の属性値に1を代入するか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれない場合、第4の属性の属性値に0を代入する。
もちろん、属性情報は、第2の属性(is_valid)をさらに含んでいてもよく、S103は、具体的には以下のように実装されてもよい。
S1035:j個のデータ・ブロックの各々のデータ・ページが有効であるかどうかを決定する。j個のデータ・ブロックの各々のデータ・ページが有効である場合、第2の属性の属性値に1を代入し、j個のデータ・ブロックの各々のデータ・ページが無効である場合、第2の属性の属性値に0を代入する。
もちろん、属性情報は、第6の属性(blkidx)をさらに含んでいてもよく、S103は、具体的には以下のように実装されてもよい。
S1036:m個のデータ・ブロックの各データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを決定する。
圧縮は、メモリのm個のデータ・ブロックの記憶場所のシーケンスに従って、最小固定圧縮単位(例えば、第1のセット)のサイズを使用して実行される。1回目の圧縮が完了した(すなわち、第1の圧縮データ・ブロックが取得された)ときに、第1の圧縮データ・ブロックに対応する完了データ・ブロックのデータ・ページは、全て第1の圧縮データ・ブロックのインデックス位置にある。例えば、第1の圧縮データ・ブロックに対応するデータ・ブロックは、データ・ブロック0のデータの一部、データ・ブロック1、データ・ブロック2、及びデータ・ブロック3を含む。第1の圧縮データ・ブロックに対応する完全データ・ブロックは、データ・ブロック0、データ・ブロック1、及びデータ・ブロック2である。したがって、データ・ブロック0、データ・ブロック1、データ・ブロック2のデータ・ページは、第1の圧縮データ・ブロックのインデックス位置にある。
第3の属性に付加する必要がある第7の属性に加えて、他の属性に対応するデータ・ブロック・インデックス更新手順は互いに独立していることに留意されたい。第1の属性、第2の属性、第4の属性、第5の属性、及び第6の属性に対応するデータ・ブロック・インデックス更新手順のシーケンスは、この出願のこの実施形態においては特に限定されない。
例えば、図11に示すように、m個のデータ・ブロックは、データ・ブロック0(すなわち、ブロック0)、データ・ブロック1(すなわち、ブロック1)、データ・ブロック2(すなわち、ブロック2)、及びデータ・ブロック3(すなわち、ブロック3)を含むと仮定される。ブロック0、ブロック1、ブロック2、及びブロック3を使用して連続するアドレスのセグメントがメモリにマッピングされる。圧縮中に、ブロック0、ブロック1、ブロック2、及びブロック3使用してメモリ上にマッピングされた連続するアドレスのセグメントのシーケンス(例えば、図11の左から右への圧縮方向)に従って、最小固定圧縮単位(例えば、第1のセット)のサイズを使用して圧縮が実行されるときに、
ブロック0の一部とブロック1が最小固定圧縮単位(例えば4KB)に達したときに、1回目の圧縮が実行されて、第1の圧縮データ・ブロック(compress blk 0)を取得する。この場合、ブロック0のデータ・ブロック・インデックスは、表3に示すように確立される。
図10A及び図10Bを参照すると、ブロック0のデータ・ページが、第1の圧縮データ・ブロックの第1の圧縮ページにあることが分かる。したがって、first_pageに1が代入される。ブロック0のデータ・ページは、第1の圧縮データ・ブロックの第1の圧縮ページにのみある。したがって、cross_blockに0が代入される。ブロック0のデータ・ページの第1の圧縮データ・ブロック内のインデックス・アドレスは、第1の圧縮データ・ブロック(compress blk 0)の番号である。したがって、blkidxに0が代入される。ブロック0のデータ・ページは、第1の圧縮データ・ブロックの第1の圧縮ページにあり、ブロック0に対応する第1のセットにおけるブロック0のオフセットは0である。したがって、ofsに0が代入される。ブロック0のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
ブロック1の残りの部分、ブロック2の一部及びブロック3が最小固定圧縮単位(例えば4KB)に達したときに、2回目の圧縮が実行されて、第2の圧縮データ・ブロック(compress blk 1)を取得する。この場合、ブロック1とブロック2のデータ・ブロック・インデックスは、表4に示すように確立される。
図10A及び図10Bを参照すると、ブロック1のデータ・ページが、第2の圧縮データ・ブロックの第1の圧縮ページにあることが分かる。したがって、first_pageに1が代入される。ブロック1のデータ・ページは、第1の圧縮データ・ブロックの圧縮ページと第2の圧縮データ・ブロックの圧縮ページとにある。したがって、cross_blockに1が代入される。ブロック1のデータ・ページの第2の圧縮データ・ブロック内のインデックス・アドレスは、第2の圧縮データ・ブロック(compress blk 1)の番号である。したがって、blkidxに1が代入される。ブロック1のデータ・ページは、第2の圧縮データ・ブロックの第1の圧縮ページにあり、データ・ブロックのセットにおけるブロック1のオフセットはOfs1である。したがって、ofs1にOfs1が代入される。ブロック1のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
同様に、ブロック2のデータ・ページは、第2の圧縮データ・ブロックの第1の圧縮ページにはない。したがって、first_pageに0が代入される。ブロック2のデータ・ページは、第2の圧縮データ・ブロックの圧縮ページにのみある。したがって、cross_blockに0が代入される。ブロック2のデータ・ページの第2の圧縮データ・ブロック内のインデックス・アドレスは、第2の圧縮データ・ブロック(compress blk 1)の番号である。したがって、blkidxに1が代入される。ブロック2のデータ・ページは、第2の圧縮データ・ブロックの第1の圧縮ページにはなく、ブロック2のデータ・ページと第1の圧縮データ・ブロックの第1の圧縮ページとの間の距離は1である。したがって、ofsに1が代入される。ブロック2のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
ブロック3の残りの部分が最小固定圧縮単位(例えば4KB)に達したときに、3回目の圧縮が実行されて、第3の圧縮データ・ブロック(compress blk 2)を取得する。この場合、ブロック3のデータ・ブロック・インデックスは、表5に示すように確立される。
図10A及び図10Bを参照すると、ブロック3のデータ・ページが、第3の圧縮データ・ブロックの第1の圧縮ページにあることが分かる。したがって、first_pageに1が代入される。ブロック1のデータ・ページは、第2の圧縮データ・ブロックの圧縮ページと第3の圧縮データ・ブロックの圧縮ページとにある。したがって、cross_blockに1が代入される。ブロック1のデータ・ページの第3の圧縮データ・ブロック内のインデックス・アドレスは、第2の圧縮データ・ブロック(compress blk 2)の番号である。したがって、blkidxに2が代入される。ブロック3のデータ・ページは、第3の圧縮データ・ブロックの第1の圧縮ページにあり、データ・ブロックのセットにおけるブロック3のオフセットはOfs2である。したがって、ofs1にOfs2が代入される。ブロック3のデータ・ページは、有効なデータ・ページである。したがって、is_validに1が代入される。
S904:m個のデータの圧縮が完了したかどうかを決定する。圧縮が完了すると、圧縮データ・ブロックの圧縮ページがデバイスにサブミットされる。圧縮が完了していない場合は、S902を実行する。
いくつかの実施形態では、図12は、この出願の一実施形態による、データ圧縮方法の概略フローチャートである。図12に示すように、S902が実行される前に、この出願のこの実施形態で提供されるデータ圧縮方法は、以下のステップを含む。
S905:上書き対象データの第2のセットを取得する。
S906:上書き対象データの第2のセットが圧縮データ・ブロックを含むかどうかを決定する。上書き対象データの第2のセットが圧縮データ・ブロックを含む場合、S907が実行されるか、又は上書き対象データの第2のセットが圧縮データ・ブロックを含まない場合、既存のデータの上書き処理が実行される。
第2のセットは、p個の圧縮データ・ブロックを含んでもよく、pは1以上の正の整数である。
S907:p個の圧縮データ・ブロックにおける第1の対象圧縮データ・ブロックの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得し、qは1以上の正の整数である。
S908:q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定する。
具体的には、第2のセットの各圧縮データ・ブロックのインデックス・アドレスが読み出され、圧縮データ・ブロックが伸長されて、圧縮データ・ブロックに対応するデータ・ブロックを取得する。次いで、q個のデータ・ブロックの各々の場所オフセットが決定される。
S909:第1の圧縮ページと、圧縮ページにおける第1のデータ・ブロックのオフセット位置とに基づいて、第1のデータ・ブロックのデータ・ページを取得する。
S910:第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定する。
S911:第1のデータ・ブロックのデータ・ページを第2のデータ・ブロックで上書きする。
S912:第1のセットに第2のデータ・ブロックを割り当てる。
要するに、読み出し/書き込みファイル・システムf2fsでは、この出願のこの実施形態で提供される固定出力圧縮モードを使用して、指定されたsoファイル、vdexファイル、odexファイルなどを圧縮することにより、例えば、電子デバイス上に40個のアプリケーションをインストールするプロセスにおいて、各アプリケーションが平均12%の時間的効果を得ることができるという有益な効果が達成され得る。アプリケーションのインストール中、soファイルには追記手順を有し、vdexファイルとodexファイルの両方は、上書き手順を有する。40個のアプリケーションの平均ブート・ゲインは、固定入力圧縮モードでの圧縮データのブート・ゲインよりも8%高くなる。
この出願のこの実施形態で提供されるデータ圧縮方法によれば、前述のデータ圧縮方法を使用してデータが圧縮された後、データを読み出す必要がある。図14は、この出願の一実施形態による、データ読み出し手順の概略フローチャートである。図14に示すように、データの読み出し手順は、以下のようである。
S141:第1のデータ・ブロックの属性情報を含む第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得し、第1のインデックスが、第1のデータ・ブロックの属性情報を含む。
前述の実施形態では、第1のデータ・ブロックの属性情報は、第1の属性~第7の属性のうちの少なくとも1つを含んでもよい。例えば、第1のデータ・ブロックの属性情報は、第3の属性(first_page)、第4の属性(cross_block)、第6の属性(blkidx)、及び第7の属性(ofs)を含む。
上書きシナリオ及び読み出し専用シナリオでは、第1のデータ・ブロックは、図13に示すデータ・ブロック2(ブロック2)であると仮定する。ブロック2のofs、cross_block、blkidxなどの属性情報を読み出し、ブロック2に対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得する。具体的には、表4が依然として使用される。ブロック2のofsに代入された値が1であることが読み出されたときに、ブロック2のデータ・ページが第2の圧縮データ・ブロックの第1の圧縮ページにはなく、ブロック2のデータ・ページと第1の圧縮データ・ブロックの第1の圧縮ページとの間の距離が1として取得されてもよいと決定されてもよい。次いで、ブロック2のcross_blockに代入された値が0であることが読み出されたときに、ブロック2のデータ・ページが第1の圧縮データ・ブロックの圧縮ページのみにり、別の圧縮データ・ブロックの圧縮ページにはないと決定されてもよい。次いで、ブロック2のblkidxに代入された値が1であることが読み出されたときに、ブロック2のデータ・ページの第1の圧縮データ・ブロックにおけるインデックス・アドレスが第1の圧縮データ・ブロックの番号であると決定されてもよく、すなわち、第1の圧縮データ・ブロックのインデックス・アドレスが1として取得されてもよい。
S142:第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出す。
S143:第1の圧縮データ・ブロックのインデックスに基づいて、第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得し、複数のデータ・ブロックは、第1のデータ・ブロックを含む。
具体的には、第1の圧縮データ・ブロックは、第1の圧縮データ・ブロックのインデックスに基づいてデバイス上で見出される。第1の圧縮データ・ブロックが見出された後、第1の圧縮データ・ブロックが解析され、解析された複数のデータ・ブロックが取得される。例えば、図13に示すように、第1の圧縮データ・ブロックをcompress blk 1とし、compress blk 1を解析した後、以下のデータ、すなわち、データ・ブロック1(ブロック1)のデータの一部、データ・ブロック2(ブロック2)、及びデータ・ブロック3(ブロック3)のデータの一部が取得される。
S144:複数の伸長データ・ブロックのうちの第1のデータ・ブロックのオフセットを決定する。
具体的には、第1のデータ・ブロックの属性情報に基づいて、第1のデータ・ブロックが図13に示すデータ・ブロック2(ブロック2)であることが分かる。図13に示すように、圧縮データblk 1から解析された複数のデータ・ブロックにおけるブロック2のオフセット(dstofs)の表現は以下のようである。
式中、dstofsは、圧縮ブロック1から解析された複数のデータ・ブロックにおけるブロック2のオフセットを示し、block_sizeは、データ・ブロックの長さを示し、ofs1は、第7の属性の属性値を示し、ofs1%block_sizeは、余りを示す。
S145:複数の伸長データ・ブロックのうちの第1のデータ・ブロックのオフセットに基づいて、第1のデータ・ブロックのデータを取得する。
前述の例は、依然として使用される。第1のデータ・ブロックは、ブロック2である。図13及び表4に示すように、ブロック2のデータを取得されてもよい。
具体的には、この可能な設計における通信システムは、図9に示すデータ圧縮方法で各デバイスの機能を実行するように構成されているため、前述のデータ圧縮方法と同じ効果を達成することができる。
図15は、この出願の一実施形態によるデータ圧縮装置を示す。データ圧縮装置1500は、読み書き可能なファイル・システムのデータ領域におけるm個のデータ・ブロックを取得するように構成されている第1の取得ユニットであって、mは1以上の正の整数である、第1の取得ユニット1501と、m個のデータ・ブロックを予め設定された圧縮アルゴリズムを使用して圧縮して、n個の圧縮データ・ブロックを順次取得するように構成されている圧縮ユニットであって、圧縮データ・ブロックの第1の容量は全て同じであり、第1の容量は、圧縮データ・ブロックに含まれ得る圧縮データのバイト数を表し、nは1以上の正の整数である、圧縮ユニット1502と、n個の圧縮データ・ブロックのi番目の圧縮データ・ブロックに対応するj個のデータ・ブロックの各々の第1のインデックスを確立し、第1のインデックスとj個のデータ・ブロックとの間のマッピング関係を記録するように構成されている更新ユニット1503と、を含む。iは1以上n以下の正の整数であり、jは1以上m以下の正の整数である。第1のインデックスは、j個のデータ・ブロックに含まれる各データ・ブロックの記憶媒体における記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
具体的かつ可能な実装では、圧縮ユニット1502は、m個のデータ・ブロックの全てのデータ・ブロックを予め設定された順序で第1のセットに順次割り当てるように構成されている。第1のセットのj個のデータ・ブロックのデータ容量が、第1のセットの定格容量と等しいときに、j個のデータ・ブロックに対して、指定された圧縮閾値に基づいて圧縮動作が実行されて、i番目の圧縮データ・ブロックを取得する。
具体的かつ可能な実装では、更新ユニット1503は、i番目の圧縮データ・ブロックのヘッダ・データと圧縮データの合計データ長と、指定された圧縮閾値との和が、j個のデータ・ブロックの合計データ長以下であるときに、j個のデータ・ブロックの各々の第1のインデックスを確立するように構成されている。
具体的かつ可能な実装では、属性情報は、属性情報は、データ・ブロックが圧縮される圧縮データ・ブロックの記憶場所が予め割り当てられているかどうかを表す第1の属性と、データ・ブロックのデータ・ページが有効であるかどうかを表すために使用される第2の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページであるかどうかを表すために使用される第3の属性と、データ・ブロックのデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるかどうかを表すために使用される第4の属性と、データ・ブロックのデータ・ページが、データ・ブロックを圧縮することによって取得された圧縮データ・ブロックの圧縮ページであるかどうかを示す第5の属性と、データ・ブロックのデータ・ページが位置する圧縮データ・ブロックのインデックス・アドレスを表すために使用される第6の属性と、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属するときに、第7の属性の属性値が、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットであり、データ・ブロックのデータ・ページが、データ・ブロックの圧縮データ・ブロックの第1の圧縮ページに属しないときに、第7の属性の属性値が、データ・ブロックのデータ・ページと、圧縮データ・ブロックの第1の圧縮ページとの間の距離であることを表すために使用される第7の属性とのうちの少なくとも1つを含む。
具体的かつ可能な実装では、属性情報は、第3の属性を含み、更新ユニット1503は、j個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページであるときに、第3の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページがi番目の圧縮データ・ブロックの第1の圧縮ページではないときに、第3の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第7の属性を含み、更新ユニット1503は、第3の属性の属性値が1であるときに、第7の属性の属性値を、圧縮データ・ブロックに対応するセットにおけるデータ・ブロックのオフセットに更新することか、又は第3の属性の属性値が0であるときに、第7の属性の属性値を、データ・ブロックのデータ・ページと圧縮データ・ブロックの第1の圧縮ページとの間の距離に更新することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第4の属性を含み、更新ユニット1503は、j個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれるときに、第4の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが2つの圧縮ブロックの圧縮データ・ページに含まれないときに、第4の属性の属性値に0を代入することを行うようにさらに構成されている。
具体的かつ可能な実装では、属性情報は、第2の属性を含み、更新ユニットは、j個のデータ・ブロックの各々のデータ・ページが有効であるときに、第2の属性の属性値に1を代入することか、又はj個のデータ・ブロックの各々のデータ・ページが無効であるときに、第2の属性の属性値に0を代入することを行うようにさらに構成されている。
いくつかの可能な実施態様では、本装置は、上書き対象データの第2のセットを取得するように構成されている第2の取得ユニットであって、第2のセットは、p個の圧縮データ・ブロックを含み、pは1以上の正の整数である、第2の取得ユニット1504と、p個の圧縮データ・ブロックにおける第1の対象圧縮データ・ブロックの圧縮ページと、第1の対象圧縮データ・ブロックの圧縮ページに対応するq個のデータ・ブロックとを取得するように構成されている第3の取得ユニットであって、qは1以上の正の整数である、第3の取得ユニット1505と、q個のデータ・ブロックにおいて、q個のデータ・ブロック内の第1の対象データ・ブロックの場所オフセットを決定するように構成されている第1の決定ユニット1506と、第1の対象データ・ブロックのデータ・ページが、上書き対象データのデータ・ページであると決定するように構成されている第2の決定ユニット1507と、をさらに含む。
いくつかの可能な実装では、本装置は、第1のデータ・ブロックの第1のインデックスを読み出して、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックス・アドレスを取得するように構成されている第1の読み出しユニットであって、第1のインデックスが第1のデータ・ブロックの属性情報を含む、第1の読み出しユニットと、第1のデータ・ブロックに対応する第1の圧縮データ・ブロックのインデックスを読み出すように構成されている第2の読み出しユニットと、第1の圧縮データ・ブロックのインデックスに基づいて第1の圧縮データ・ブロックを伸長して、第1の圧縮データ・ブロックに対応する複数のデータ・ブロックを取得するように構成されている伸長ユニットであって、複数のデータ・ブロックは第1のデータ・ブロックを含む、伸長ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットを決定するように構成されている第3の決定ユニットと、複数の伸長データ・ブロックにおける第1のデータ・ブロックのオフセットに基づいて第1のデータ・ブロックのデータを取得するように構成されている第3の取得ユニットと、をさらに含む。
具体的かつ可能な実装では、第1のインデックスは、記憶媒体におけるi番目の圧縮データ・ブロックの記憶場所、及びj個のデータ・ブロックの各々に含まれる属性情報を識別するために使用される。
この出願の実施形態で提供されるデータ圧縮方法によれば、データ・ブロックが読み出されるときに、読み出し効率を効果的に向上させることができ、読み出し増幅係数が小さいランダム読み出しシナリオでデータを読み出すことを保証することができる。追加的に、データ・ブロックのインデックスに含まれる属性が修正されてもよく、そのため、ストレージ・デバイス上の圧縮ファイルが修正されてもよい。この出願の実施形態では、既存の読み出し/書き込みファイル・システムにおける圧縮ソリューションのランダム読み出し増幅の問題を解決し、固定出力圧縮方式を有する既存のファイル・システムがデータ及びメタデータ更新をサポートできないという問題を解決することが分かる。
この出願の一実施形態は、デバイスをさらに提供する。デバイスは、前述の実装のいずれか1つに従ってステップを実行するように構成されたユニット、又は前述の実装のいずれか1つに従ってステップを実行するように構成されたユニットを含む。
この出願の一実施形態は、命令を含むコンピュータ可読記憶媒体をさらに提供する。命令がコンピュータ上で動作するときに、コンピュータは、前述の方法のいずれか1つを実行することが可能となる。
この出願の一実施形態は命令を含むコンピュータ・プログラム製品を提供する。コンピュータ・プログラム製品がコンピュータ上で動作するときに、コンピュータは、前述の方法のいずれか1つを行うことが可能となる。
この出願の一実施形態は、チップをさらに提供する。チップは、プロセッサ及びインターフェース回路を含む。インターフェース回路は、プロセッサに結合される。プロセッサは、コンピュータ・プログラム又は命令を実行して、前述の方法を実装するように構成されている。インターフェース回路は、チップの外側の別のモジュールと通信するように構成されている。
この出願の説明では、別段の定めがない限り、「/」は「又は」を意味する。例えば、A/Bは、A又はBを表してもよい。本明細書における「及び/又は」の用語は、関連するオブジェクト間の関連付け関係のみを説明し、3つの関係があり得ることを示す。例えば、A及び/又はBは、以下の3つのケース、すなわち、Aのみが存在すること、A及びBの両方が存在すること、並びにBのみが存在することを表してもよい。追加的に、「少なくとも1つ」とは、1つ以上を意味し、「複数の」とは、2つ以上を意味する。「第1」、「第2」などの文言は、数又は実行シーケンスを制限せず、「第1」、「第2」などの文言は、明確な差異を示さない。
この出願の説明では、「例」、「例えば」などの文言は、例、例示又は説明を与えることを表すために使用される。本出願において、「例」又は「例えば」として記載される任意の実施形態又は設計スキームは、他の実施形態又は設計スキームよりも好ましいものとして、又はより多くの利点を有するものとして説明されるべきではない。正確には、「例」、「例えば」などの文言は、関連概念を特定の方式で提示することを意図している。
実装に関する前述の説明は、便宜的かつ簡潔な説明を目的として、まさに前述の機能モジュールへの分割が説明のための例として使用されることを当業者が明確に理解することを可能にする。実際のアプリケーションでは、前述の機能は、必要に応じて実装のために異なる機能モジュールに割り当てられ得る。換言すれば、装置の内部構造は、上記の機能の全部又は一部を実装するために、異なる機能モジュールに分割される。
この出願で提供されるいくつかの実施形態では、開示された装置及び方法は、他の方式で実装され得ると理解されたい。例えば、記載された装置の実施形態は、一例にすぎない。例えば、モジュール又はユニット分割は、単に論理関数分割であり、実際の実装の際には他の分割であってもよい。例えば、複数のユニット又はコンポーネントが別の装置に組み合わされたり、統合されてもよいし、いくつかの特徴が無視されたり、実行されなくてもよい。追加的に、表示又は議論された相互結合、直接結合、又は通信接続は、いくつかのインターフェースを使用することによって実装されてもよい。装置又はユニット間の間接結合又は通信接続は、電子的、機械的、又は他の形態において実装されてもよい。
別個の部分として記載されるユニットは、物理に分離されていても、されていなくてもよく、ユニットとして表示される部分は、1つ以上の物理ユニットであってもよいし、1つの場所に位置していてもよいし、複数の場所に分散されてもよい。ユニットの一部又は全部は、実施形態の解決策の目的を達成するために実際の要件に基づいて選択されてもよい。
追加的に、本出願の実施形態における機能ユニットは、1つの処理ユニットに統合されてもよく、ユニットの各々は、物理的に単独で存在してもよく、又は2つ以上のユニットが1つのユニットに統合される。統合されたユニットは、ハードウェアの形態で実装されてもよいし、ソフトウェア機能ユニットの形態で実装されてもよい。
この出願は、特定の特徴及びその実施形態を参照して記載されているが、この出願の範囲から逸脱することなく、様々な修正及び組み合わせがそれらに対して行われてもよいことは明らかである。これに対応して、明細書及び添付の図面は、添付の特許請求の範囲によって定義されるこの出願の例示的な説明にすぎず、この出願の範囲をカバーする修正、変形、組み合わせ又は均等のいずれか又は全てと考えられる。当業者が、この出願の精神及び範囲から逸脱することなく、この出願に様々な修正及び変形を行うことができることが明らかである。この出願は、以下の特許請求の範囲及びそれらの均等の技術によって画定される保護の範囲内にあることを条件として、この出願のこれらの修正及び変形をカバーすることを意図している。
前述の説明は、この出願の単に具体的な実装に過ぎないが、この出願の保護範囲を制限することを意図したものではない。この出願に開示された技術的範囲内で、当業者によって容易に理解することができる変更又は代替は、この出願の保護範囲に含まれるものとする。したがって、この出願の保護範囲は、特許請求の範囲の保護範囲に従うものとする。