IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特開2023-64241ストレージシステム及びストレージシステムにおけるデータ処理方法
<>
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図1A
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図1B
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図2
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図3
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図4
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図5
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図6
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図7
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図8
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図9
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図10
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図11
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図12
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図13
  • 特開-ストレージシステム及びストレージシステムにおけるデータ処理方法 図14
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023064241
(43)【公開日】2023-05-11
(54)【発明の名称】ストレージシステム及びストレージシステムにおけるデータ処理方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20230501BHJP
   H03M 7/40 20060101ALI20230501BHJP
   H03M 7/30 20060101ALI20230501BHJP
【FI】
G06F3/06 301W
H03M7/40
H03M7/30 Z
G06F3/06 302J
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2021174391
(22)【出願日】2021-10-26
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】水島 永雅
(72)【発明者】
【氏名】島田 健太郎
【テーマコード(参考)】
5J064
【Fターム(参考)】
5J064AA02
5J064BA09
5J064BC01
5J064BC14
5J064BC25
5J064BD03
(57)【要約】
【課題】ストレージシステムでデータを圧縮して格納するとき、ストレージシステムのリード性能への悪影響を抑制する。
【解決手段】ストレージシステムは、インタフェースと、インタフェースによる受信データを、記憶デバイスに格納する前に、圧縮する、データ圧縮システムと、を含む。データ圧縮システムは、受信データを第一圧縮アルゴリズムにより圧縮して、第一圧縮データを生成し、第一圧縮データに含まれる所定の符号カテゴリそれぞれの出現数を用いて、第二圧縮アルゴリズムを使用した場合の伸長時間を推定し、伸長時間が閾値以下である場合に第二圧縮アルゴリズムによる圧縮を含む第二圧縮方法を選択し、伸長時間が閾値を超える場合に第二圧縮アルゴリズムによる圧縮を含まない第一圧縮方法を選択する。
【選択図】図5
【特許請求の範囲】
【請求項1】
ストレージシステムであって、
インタフェースと、
前記インタフェースによる受信データを、記憶デバイスに格納する前に、圧縮する、データ圧縮システムと、を含み、
前記データ圧縮システムは、
前記受信データを第一圧縮アルゴリズムにより圧縮して、第一圧縮データを生成し、
前記第一圧縮データに含まれる所定の符号カテゴリそれぞれの出現数を用いて、第二圧縮アルゴリズムを使用した場合の伸長時間を推定し、
前記伸長時間が閾値以下である場合に、前記第二圧縮アルゴリズムによる圧縮を含む第二圧縮方法を選択し、
前記伸長時間が閾値を超える場合に、前記第二圧縮アルゴリズムによる圧縮を含まない第一圧縮方法を選択する、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記データ圧縮システムは、
前記符号カテゴリそれぞれの伸長処理時間の情報を保持し、
前記伸長処理時間と前記符号カテゴリの出現数の積和に基づき、前記伸長時間を推定する、ストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
前記第一圧縮アルゴリズムは、辞書圧縮アルゴリズムである、ストレージシステム。
【請求項4】
請求項3に記載のストレージシステムであって、
前記符号カテゴリは、異なる一致長及び/又は距離を有するコピー符号を示す異なる符号カテゴリを含む、ストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記第二圧縮アルゴリズムは、エントロピ符号化アルゴリズム又はハフマン符号アルゴリズムである、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記第一圧縮方法は、前記第一圧縮データを出力する、ストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記第二圧縮方法は、前記第一圧縮アルゴリズムによる前記第一圧縮データの生成及び前記第一圧縮データの前記第二圧縮アルゴリズムによる圧縮を含む、ストレージシステム。
【請求項8】
請求項7に記載のストレージシステムであって、
前記伸長時間が閾値を超える場合に、前記第二圧縮アルゴリズムによる圧縮は省略される、ストレージシステム。
【請求項9】
請求項1に記載のストレージシステムであって、
前記第一圧縮方法は、前記受信データに対して、前記第一圧縮アルゴリズム及び前記第二圧縮アルゴリズムと異なる第三圧縮アルゴリズムによる圧縮を実行する、ストレージシステム。
【請求項10】
請求項1に記載のストレージシステムであって、
データ伸長システムをさらに含み、
前記データ圧縮システムは、所定パラメータを有する所定関数を使用して前記伸長時間を推定し、
前記データ伸長システムは、
前記第二圧縮方法により圧縮されたデータの伸長を行って前記受信データを復元し、
前記受信データの復元において、前記第二圧縮アルゴリズムによる圧縮データの伸長時間を測定し、
前記測定した伸長時間に基づいて前記所定パラメータを修正する、ストレージシステム。
【請求項11】
ストレージシステムにおけるデータ処理方法であって、
外部からの受信データを取得し、
前記受信データを第一圧縮アルゴリズムにより圧縮して、第一圧縮データを生成し、
前記第一圧縮データに含まれる所定の符号カテゴリそれぞれの出現数を用いて、第二圧縮アルゴリズムを使用した場合の伸長時間を推定し、
前記伸長時間が閾値以下である場合に、前記第二圧縮アルゴリズムによる圧縮を含む第二圧縮方法を選択し、
前記伸長時間が閾値を超える場合に、前記第二圧縮アルゴリズムによる圧縮を含まない第一圧縮方法を選択する、データ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムにおけるデータ圧縮に関する。
【背景技術】
【0002】
ストレージシステムにおいて、データを圧縮する技術は、システムの単位容量当たりのコスト(ビットコスト)を下げるために、重要な技術として注目されている。特に従来記憶デバイスとして用いられてきたハードディスクドライブ(Hard Disk Drive:HDD)に代わり、高速性に優れるフラッシュメモリを媒体とする半導体ドライブ(Solid State Drive:SSD)が近年広く用いられるようになってきている。データ圧縮技術は、SSDを搭載するストレージシステムのビットコストを下げる技術として、大変注目されている。
【0003】
一方、ストレージシステムは、データを格納する性能、即ちデータをストレージシステムへ書き込むライト性能も重要であるが、格納したデータを取り出す性能、即ちデータをストレージシステムから読み出すリード性能も大変重要である。データを格納するときに圧縮しておくと、当然ながら、ライト性能に影響を生じる。その後、圧縮した状態でデータを格納しておくため、データの取り出し時には圧縮データを復元(伸長)する必要があり、リード性能も影響を受ける。
【0004】
データを圧縮する計算方法には、様々なバリエーションが考案されている。Lempel-Ziv(LZ)法、ハフマン符号などの可逆圧縮法と、画像や音声に用いられるJPEG、MPEGなどの非可逆圧縮法がある。ストレージシステムでは、格納したデータと同じデータを正確に取り出すことが求められるので、可逆圧縮法が用いられる。
【0005】
これらの圧縮方法では、データ及びアルゴリズムに依存して、元のデータの大きさに対する圧縮後のデータの大きさの割合、即ち圧縮率(圧縮後データサイズを元データサイズで割った値)が様々に変化する。同一データに対して、それぞれのアルゴリズムにより圧縮率が異なるが、同一アルゴリズムでもデータが異なれば圧縮率が異なる。以下の説明では、圧縮率が大きいことを「悪い」、大きくなることを「悪化する」、小さいことを「良い」、小さくなることを「改善する」と表現することがある。
【0006】
また圧縮率の他に、圧縮に要する計算処理量及び伸長に要する計算処理量も変化する。よって、CPUによるソフト処理や、ハードウェアで圧縮及び伸長する回路など、計算処理資源を与えた場合の、それぞれの圧縮に要する時間(圧縮時間)及び伸長に要する時間(伸長時間)も変化する。ストレージシステムのライト性能に与える影響は、この圧縮時間に依存し、リード性能に与える影響は伸長時間に依存する。
【0007】
伸長後データの単位時間当たりの出力データ量で伸長性能を見た場合、圧縮率が良いほど、それに応じて伸長後のデータサイズがより拡大するので、伸長性能は高まる。よって、圧縮率の良いデータは伸長性能が高くなり、システムのリード性能を高めることが可能となる。
【0008】
以上から、システムがライトデータを圧縮するために複数の圧縮方法を準備して選択する場合、圧縮率が良い圧縮方法を選択するほど、伸長時の計算量が多くなることで伸長時間も大きくなるが、圧縮率が充分良いデータに対しては、計算対象の圧縮データ入力が少ないため、伸長データ出力で見た伸長速度(伸長性能)は高く保てる可能性がある。しかし、圧縮率が悪いデータに対しては、計算対象の圧縮データ入力が多いため、伸長データ出力でみた伸長速度(伸長性能)を高く保つことが難しく、システムのリード性能に影響が出る場合がある。
【0009】
特許文献1には、ライトデータを圧縮するために複数の圧縮方法を準備し、アプリケーションタイプなどの属性が類似している過去のデータの伸長履歴からデータの伸長時間を予測して圧縮方法を切り替える技術が開示されている。この技術により、システムのリード性能を高めるように圧縮方法を切り替えることができる。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】米国特許第10346043号
【発明の概要】
【発明が解決しようとする課題】
【0011】
特許文献1の技術では、アプリケーションタイプなどの属性の類似性を利用して伸長性能(伸長時間)を予測して圧縮方法の選択を行う。しかし、伸長時間のばらつきが大きいデータを扱うアプリケーションタイプでは、過去の伸長履歴から現在のライトデータの伸長時間の予測精度が低下し得る。
【0012】
例えば、そのアプリケーションタイプに属するデータのうち伸長時間の小さいデータが多く過去に伸長されていた場合、その類似タイプと判定された現在のライトデータには圧縮率が良い圧縮方法が選択される確率が高い。その後、それらのデータのうち伸長時間の大きいデータが多くリードされる状態になると、ストレージシステムのリード性能に悪影響が生じ得る。
【0013】
これを回避するには、属性の類似性や過去の伸長履歴に関係なく、伸長時間が大きいと推定されるライトデータには、圧縮率が良い圧縮方法を選択せず、伸長時間の小さい圧縮方法(一般的には圧縮率が悪い方法)を選択する方法が求められる。その上で、伸長時間を正しく推定する手法が求められる。
【0014】
本発明は以上の観点を鑑みてなされたものであり、その目的はストレージシステムでデータを圧縮して格納するとき、ストレージシステムのリード性能への悪影響を抑制することである。
【課題を解決するための手段】
【0015】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、以下の通りである。
【0016】
本発明の代表的な一例に係るストレージシステムは、インタフェースと、前記インタフェースによる受信データを、記憶デバイスに格納する前に、圧縮する、データ圧縮システムと、を含む。前記データ圧縮システムは、前記受信データを第一圧縮アルゴリズムにより圧縮して、第一圧縮データを生成し、前記第一圧縮データに含まれる所定の符号カテゴリそれぞれの出現数を用いて、第二圧縮アルゴリズムを使用した場合の伸長時間を推定し、前記伸長時間が閾値以下である場合に、前記第二圧縮アルゴリズムによる圧縮を含む第二圧縮方法を選択し、前記伸長時間が閾値を超える場合に、前記第二圧縮アルゴリズムによる圧縮を含まない第一圧縮方法を選択する。
【発明の効果】
【0017】
本発明の一態様によれば、ストレージシステムでデータを圧縮して格納するとき、ストレージシステムのリード性能への悪影響を抑制できる。
【図面の簡単な説明】
【0018】
図1A図1Aは、辞書圧縮の処理内容の例である。
図1B図1Bは、距離Jの値の履歴を管理するテーブルの状態の変化を示す。
図2図2は、LZ4とLZMAの圧縮率と伸長性能の関係を示した図である。
図3図4は、辞書圧縮データを構成する符号の出現数統計の収集結果の例である。
図4図4は、LZMAの推定伸長性能と実測伸長性能の関係を示した図である。
図5図5は、実施例1のデータの圧縮を行うデータ圧縮システムの例である。
図6図6は、実施例1のデータの伸長を行うデータ伸長システムの例である。
図7図7は、実施例1のデータの圧縮を行うフローチャートの例である。
図8図8は、実施例1のデータの伸長を行うフローチャートの例である。
図9図9は、実施例2のデータの圧縮を行うデータ圧縮システムの例である。
図10図10は、実施例2のデータの圧縮を行うフローチャートの例である。
図11図11は、実施例3のデータの伸長を行う、データ伸長システムの例である。
図12図12は、実施例3のデータの伸長を行うフローチャートの例である。
図13図13は、データ圧縮システムを適用したストレージシステムの全体構成の例である。
図14図14は、データ圧縮システムを適用したストレージシステムの全体構成の別の例である。
【発明を実施するための形態】
【0019】
以下、図面を参照しながら、幾つかの実施例を説明する。まず、ストレージシステムにおけるデータの圧縮を行うデータ圧縮システムについて説明する。データ圧縮システムは、複数のデータ圧縮方法によりデータ圧縮が可能であり、選択された圧縮方法により入力された平文データを圧縮した圧縮データを出力する。また、入力された圧縮データを伸長して元の(圧縮前の)平文データ(伸長後データ)を出力する。
【0020】
伸長後データの単位時間当たりのデータ量で伸長性能を見た場合、圧縮率が良い(小さい)と、圧縮率に応じて伸長後のデータのサイズが拡大するので、伸長性能は高まる。よって、圧縮率の良いデータは伸長性能が高くなり、ストレージシステムのリード性能を高めることが可能となる。
【0021】
複数の圧縮アルゴリズムを準備して選択する場合、圧縮率が良い(小さい)圧縮アルゴリズムは、伸長時間も大きくなる場合が多いが、圧縮率が充分良ければ(数値として小さければ)、伸長データで見た伸長速度(伸長性能)は高く保てる。しかし、圧縮率が悪い(大きい)時には、伸長データでみた伸長速度(伸長性能)を高く保つことが難しく、ストレージシステムのリード性能に悪影響が出る場合がある。
【0022】
この圧縮率と伸長時間の関係を利用して、リード性能への影響を少なくするため、複数の圧縮方法から使用する圧縮方法を選択する場合、データに対し、相対的に伸長時間が大きい圧縮アルゴリズムにより圧縮されたデータの伸長時間を推定できれば、選択する圧縮方法を決定することが可能である。
【0023】
ある一つの圧縮方法が、前半と後半に分かれていることがある。前半分のみ(第一の圧縮方法)を適用した際の圧縮率と伸長時間に対し、前半と後半の両方(第二の圧縮方法)を適用した際の圧縮率は良くなり、伸長時間は長くなる。
【0024】
このような圧縮方法の例がLempel-Ziv-Markov chain-Algorithm(LZMA)である。LZMAは前半が改良型の辞書圧縮(LZ法とも言う)、後半がエントロピ符号化により構成される。LZMA圧縮データの伸長は、初めに行うエントロピ符号化の復号の計算量が、その後の平文展開(辞書圧縮の符号から平文データを復元すること)のそれに加わるため、長い時間を要する。
【0025】
一方、LZ4という圧縮方法がある。LZ4は辞書圧縮(第一の圧縮方法)だけで構成される。LZ4圧縮データの伸長時間は、計算量が平文展開の分だけであるため、LZMAよりも短い。すなわち、LZ4はLZMAより伸長速度が大きい。しかし、LZ4はエントロピ符号化を実施しないため、圧縮率はLZMAより相対的に悪い。
【0026】
以上より、データの圧縮率が良ければ(数値として小さければ)後半のエントロピ符号化を行っても伸長速度が圧縮率に応じて増大するので、LZMAを選択してもシステムのリード性能に大きな影響とならない。一方、圧縮率が悪ければ(大きければ)、後半のエントロピ符号化の復号にかかる時間を相殺することができず、システムのリード性能が低下する恐れがある。
【0027】
図1Aは、LZMAにおける前半の改良型の辞書圧縮の処理内容の一例を示したものである。この辞書圧縮は、平文データの文字列ストリームにおいて、同じ文字列が再び出現するかどうかを順番に調べていく。その中で、ある文字列が、その先頭文字を起点にしてJ文字前からL文字連続で一致している場合、この文字列をコピー符号に変換する。コピー符号にはMatch符号とRep符号の二種類がある。
【0028】
Match符号はこの文字列をM[L,J]に変換する。「M」はMatch符号を表し、Lは一致文字列の文字数を表し、Jは一致文字列の起点位置を表す。Rep符号はJの値が最近使用されたものである場合にJを省略してRn[L]に変換する。ここで、nは0から3の値であり、Jの値が直前に使われた場合はn=0、2つ前に使われた場合はn=1、3つ前に使われた場合はn=2、4つ前に使われた場合はn=3である。Rep符号は情報量が少なくて済むためMatch符号よりも圧縮効果が高い。
【0029】
例えば、「b,c,d,e」の4文字の文字列501は、先頭の文字「b」を起点にして6文字前から4文字連続で一致している。この場合、文字列501をMatch符号のM[4,6]に変換する。同様に「e,f,e,b」の4文字の文字列502は、先頭の文字「e」を起点にして8文字前から4文字連続で一致している。この場合、文字列502をMatch符号のM[4,8]に変換する。
【0030】
そして「a,e,f,e,b」の5文字の文字列503は、先頭の文字「a」を起点にして6文字前から5文字連続で一致している。この場合、Jの値「6」は2つ前のコピー符号で使われた値なので、文字列503をRep符号のR1[5]に変換する。
【0031】
図1Bは、Jの値の履歴を管理するテーブルの状態520~523の変化を示す。状態520は辞書圧縮開始状態であり、Jは未登録である。M[4,6]が生成されると、管理テーブルはR0に6が登録された状態521となる。M[4,8]が生成されるとR0に8が登録され、R1に6が移動した状態522となる。R1[5]が生成されると、R0に6が移動し、R1に8が移動した状態523となる。
【0032】
一方、一致文字列が見つからず、コピー符号に変換できなかった文字は、Literal符号に変換する。コピー符号のデータ量は元の文字列の持つデータ量よりも少ないので、この変換によってデータ量を減らすことができる。この度合が辞書圧縮の圧縮率を決める。なお、一致文字列が複数存在する場合は、連続で最も長く一致する文字列を選んでコピー符号に変換する。これは、データ量をより多く減らす効果があるためである。
【0033】
なお、ここで説明した辞書圧縮を改良型と呼んだ理由は、辞書圧縮の起源であるLZ77アルゴリズムでは、Match符号よりデータ削減効果のあるRep符号が規定されていなかったからである。また、LZ4における辞書圧縮にもRep符号がない。LZ4圧縮データを作成する際には、Rep符号に代えてMatch符号が使用される。また、LZ4における辞書圧縮ではコピー符号のLは4以上という規定があるため、Lが3以下のコピー符号に代えてLiteral符号が使用される。
【0034】
後半のエントロピ符号化に入力するデータは、Literal符号、Match符号、Rep符号をそれぞれ規定のビットパタンで表現し、それらを連結したビット列である。図1Aのビット列は、LZMAの規則に従って生成したものである。10ビット長のビットパタン511はM[4,6]を表す。10ビット長のビットパタン512はM[4,8]を表す。7ビット長のビットパタン503はR1[5]を表す。Literal符号は、文字の8ビット値の先頭に0を1ビット付加した9ビット長のビットパタンで表す。
【0035】
エントロピ符号化は、このビット列における0と1の出現確率の予測値を用いて、さらに短いビット列に変換する。LZMAではレンジコーダと呼ばれるエントロピ符号化を用いる。その方法は広く知られており、説明は省略する。エントロピ符号化は、一般に、出現確率が予測しやすい(0と1の出現確率の差が大きい)ビット列ほど圧縮率が良い。逆に出現確率が予測しにくい(0と1の出現確率の差が小さい)ビット列ほど圧縮率が悪い。
【0036】
図2は、LZ4とLZMAの2つの圧縮アルゴリズムについて、圧縮率と伸長速度の関係を示した図である。横軸は圧縮率を示し、縦軸は伸長速度実測値を示す。三角で示す測定値はLZ4の測定結果を示し、円で示す測定値はLZMAの測定結果を示す。いずれのアルゴリズムも、圧縮率が良いデータほど圧縮データの伸長速度が大きくなる傾向にある。
【0037】
しかし、LZ4では圧縮率と伸長速度の相関関係が強く、ほぼ1対1の対応になっているのに対して、LZMAでは圧縮率と伸長速度の相関関係がLZ4より弱く、同じ圧縮率でも伸長速度のばらつきが大きい。このような特性になるのは、LZMAではエントロピ符号化による圧縮があるからである。つまり、データによって、辞書圧縮結果のビット列における0と1の出現確率の予測がしやすいものとしにくいものがあるためである。
【0038】
ストレージシステムのリード性能に悪影響がないようにするには、圧縮データの伸長速度に対して基準値を定め、それ以上の伸長速度が出る圧縮アルゴリズムであって、圧縮率の良いほうを選択してデータを圧縮すれば、リード性能に問題を起こさずにストレージシステムのデータ削減率を最大化することができる。
【0039】
例えば、基準値が130MB/s(602)であるとすると、伸長速度がそれ以上になるデータはLZMAを選択して圧縮し、それを下回るデータはLZ4を選択して圧縮する。ただし、伸長速度を知るために、システムがライトデータを受信するたびに実際に圧縮および伸長して速度を計測することは処理負荷が高い。
【0040】
そこで考えられる一つの方法は、伸長速度を圧縮処理の中で推定する。LZMAの伸長速度は、図2に示すように、圧縮率との相関関係が弱い。そのため、圧縮率を用いて伸長速度を推定するのは信頼性が低い。
【0041】
例えば、LZMAでの圧縮率が35%(601)以下のデータの圧縮にはLZMAを選択し、その他のデータの圧縮にはLZ4を選択する制御を行うと、全てのデータで伸長速度が基準値の130MB/s(602)以上になることが保証される。しかし、領域603内にあるデータは、伸長速度が基準値の130MB/s以上になるにも関わらず、圧縮にLZ4が選択されてしまう。これは、LZMAの選択によるシステムのデータ削減率が大きくなる可能性を無駄にすることになる。
【0042】
本明細書の一実施形態は、圧縮処理の中で圧縮率よりも信頼性の高い参照基準で、伸長速度を推定する。伸長速度は伸長データサイズを伸長時間で割ったものであるため、これは伸長時間を推定することと同じである。伸長時間は、圧縮データから図1Aのようなビット列を生成し、それを解釈して、各種符号(Literal、Match、Rep)に変換し、それを平文展開するまでの時間である。
【0043】
例えば、伸長処理は符号を処理単位として行うため、ビット列の元となった各種符号に応じた所定の処理時間をその符号の出現数だけ合計することで、伸長時間を近似することができる。つまり、符号のカテゴリ数をNとして、圧縮時にビット列を構成するのに用いた辞書圧縮の符号i(i=1~N)の出現数をXiとし、その符号1つ当たりの伸長処理単価(処理時間)をWiとすると、伸長時間Tは、以下の式で推定することができる。ここでW0は符号の出現数に依存しない伸長時間成分である。
T=W0+(W1・X1)+(W2・X2)+…+(WN・XN)
【0044】
図3の表700は、LZMAの伸長時間を推定するための符号出現数の統計表の一例である。カラム701は、符号の種類を示す。カラム702は、文字列の一致長Lを示す。カラム703は、一致文字列間の距離Jを示す。一致長さL及び距離Jは文字数で表される。
【0045】
カラム704は、伸長処理単価(処理時間)Wiを示す。伸長処理単価Wiは、Literal符号が2サイクル、Match符号は、一致長Lが17以下で距離Jが256以下のものが6サイクルなどである。カラム705は、出現数Xiを示す。出現数Xiは、Literal符号が10859回、Match符号は一致長Lが17以下で距離Jが256以下のものが1135回などである。
【0046】
符号のカテゴリ数は広く見れば3種類(Literal、Match、Rep)であるが、コピー符号に関しては、一致長Lや距離Jによって、伸長処理単価Wiが変わる可能性がある。少なくとも伸長処理単価が等しくないものを含む符号は、符号のカテゴリをさらに分けて個々の伸長処理単価が等しくなるようにカテゴリを定める。
【0047】
上記の符号カテゴリ数Nは、そのようにして決める。そして、N種の符号それぞれの出現数を集計する際には、辞書圧縮処理の結果において符号iを検出するたびにXiを1ずつカウントアップしていき、圧縮処理結果を全て観測し終わったら最終的なXiの値とWiの値から上式を用いてTを計算し、伸長時間を推定する。
【0048】
図4は、上式で推定した伸長時間と、実測した伸長時間からそれぞれの伸長速度を求めて、両者の対応関係を調べた結果である。横軸は伸長速度推定値を示し、縦軸は伸長速度実測値を示す。
【0049】
伸長速度が200MB/s以下では、推定値と実測値はほぼ一致している。伸長速度が200MB/sを超えると、両者の誤差は広がる傾向がある。ただし、圧縮アルゴリズムを選択する時の伸長速度の基準は、例えば、LZ4の最低伸長速度である200MB/sよりも低い値に設定されるため、実用的にはこの手法でLZMAの伸長速度を高い精度で推定することができる。
【0050】
したがって、LZMA圧縮時に上式による伸長時間の推定値が基準値(リード性能に悪影響のない伸長速度の基準に対応した伸長時間)を超えるデータにのみLZ4圧縮を適用すれば、システムのリード性能に悪影響がないことを保証できる。例えば、基準値が130MB/s(801)であるとすると、推定した伸長時間Tから計算される伸長速度がそれ以上になるデータはLZMAを選択して圧縮し、それを下回るデータ(領域802内のデータ)はLZ4を選択して圧縮する。本明細書の一実施形態の手法により、伸長時間の推定精度(すなわち、伸長速度の推定精度)が高くなるため、全てのデータの実際の伸長速度は基準値の130MB/sを満足する。
【0051】
本明細書の一実施形態において、実際の伸長速度が基準に満たないデータのみにLZ4圧縮が選択される。図2に基づいて圧縮率で伸長速度を判断する方式ではLZ4圧縮が選択されていた領域603内のデータに対して、この方法は、LZMA圧縮を選択する。つまり、システムのリード性能に悪影響がないことを保証しながら、データ削減率を最大化することができる。
【0052】
なお、ここまでは伸長速度に基づいて圧縮方法を選択する方法を説明したが、実際のシステムでは伸長時間から伸長速度を計算する処理を省略し、あらかじめ基準となる伸長速度に対応した伸長時間の基準値を計算しておき、それを推定した伸長時間Tと比較する手段のほうが計算負荷が少ない。ただし、図2図4を用いた説明のように、推定した伸長時間から伸長速度を計算して基準値と比較する手段を適用しても、実施形態の効果が得られることは明白である。
【0053】
また、LZMAの伸長速度が基準に満たない場合に選択する圧縮方法を、LZMAの前半に行う辞書圧縮に基づくLZ4とすることを説明したが、伸長速度が基準を満たす圧縮方法であればリード性能への悪影響を抑える目的は果たすことができるので、LZ4に限らずその他の圧縮方法を適用してもよい。
【0054】
現在のデータから推定される伸長時間を基に圧縮方法を選択することで、現在のデータが過去のデータの履歴と異なる伸長時間を示すデータであっても、問題なく対処することができる。
【0055】
以上の説明を踏まえて、本明細書の一実施形態のデータ圧縮システムは、データを第一の圧縮アルゴリズムにより圧縮して、圧縮データを生成する。データ圧縮システムは、第一の圧縮アルゴリズムによる圧縮データを構成する複数カテゴリの符号について、各カテゴリの出現数を収集する。データ圧縮システムは、各出現数にその符号のカテゴリに応じた重みを付けて加算(積和)することで、圧縮データの伸長時間を推定し、推定値と予め定められた基準とを比較する。
【0056】
本明細書の一実施形態に係るデータ圧縮システムは、推定値が基準と同等かより小さいと判定された場合に、第一の圧縮アルゴリズムによりデータを圧縮したデータを第二の圧縮アルゴリズムにより圧縮したデータを出力する。推定値が前記基準より大きいと判定された場合に、データ圧縮システムは、第一の圧縮アルゴリズムによりデータを圧縮したデータを出力する。
【0057】
本明細書の一実施形態に係るデータ圧縮システムは、推定値が基準と同等かより小さいと判定された場合に、第一の圧縮アルゴリズムによりデータを圧縮したデータを第二の圧縮アルゴリズムにより圧縮したデータを出力する。推定値が基準より大きいと判定された場合に、データ圧縮システムは、第一の圧縮アルゴリズム及び第二の圧縮アルゴリズムと異なる第三の圧縮アルゴリズムによりデータを圧縮したデータを出力する。第三の圧縮アルゴリズムによる圧縮データは、第一及び第二の圧縮アルゴリズムの両方で圧縮されたデータの伸長時間より短い時間で伸長可能である。
【0058】
辞書圧縮アルゴリズムは、第一の圧縮アルゴリズムの例であり、エントロピ符号化アルゴリズム又はハフマン符号化アルゴリズムは第二の圧縮アルゴリズムの例である。本明細書の実施形態は、これらアルゴリズムに大きな効果を示すが、他の種類の圧縮アルゴリズムが使用されてよい。
【0059】
伸張時間の推定は、所定の関数を使用して行うことができる。符号カテゴリの出現数及び重みの積和関数は、簡便な方法で効果的な推定が可能である。他の関数を使用することができ、後述するように、関数は可変パラメータを含むことができる。伸長処理時間の測定値に応じて可変パラメータを修正することで、より適切な伸長時間の推定が可能となる。
【実施例0060】
図5図8を用いて、実施例1を説明する。図5は、実施例1に関わる、データ圧縮システムの構成の例である。図5において、該データ圧縮システムは、第一圧縮部101、第二圧縮部102、伸長時間推定・判定部103、データ選択部104、符号統計部105、及び6種の信号線111~116を含む。第一圧縮部101及び第二圧縮部102は、データ圧縮システムの圧縮部に含まれ、データ選択部104は、データを出力する出力部である。
【0061】
第一圧縮部101は、入力信号線111にて該データ圧縮システム外部より入力されたデータを、第一の圧縮アルゴリズムを用いて圧縮し、圧縮したデータを信号線112に出力する。第一の圧縮アルゴリズムは、例えば、辞書圧縮である。
【0062】
これらの信号線111や112は、データを一連の信号パタンで伝送するシリアル伝送線であってもよいし、複数のデータビットを並列に伝送するパラレル伝送線であってもよい。またそれらの信号線の伝送タイミングを制御する制御信号を図5に図示しないサイドバンドの制御信号線で伝送することで伝送制御を行ってもよいし、データと制御信号とを同じ信号線で伝送してもよい。更にデータの伝達は、データを複数のパケットに分割して、パケット毎に伝送してもよいし、信号線を一定のタイミングで占有してデータを任意のタイミングで伝送してもよい。
【0063】
更に符号統計部105は、信号線112にて出力された第一の圧縮アルゴリズムによる圧縮データに含まれる符号の出現数をカテゴリごとに取集して、その結果を信号線113に出力する。この信号線113もシリアル伝送線であってもよいし、パラレル伝送線であってもよい。
【0064】
第二圧縮部102は、信号線112に出力される第一圧縮部101によって圧縮されたデータを、第一の圧縮アルゴリズムと異なる第二の圧縮アルゴリズムによって、更に圧縮し、信号線114に出力する。第二の圧縮アルゴリズムは、例えば、エントロピ符号化である。
【0065】
伸長時間推定・判定部103は、信号線113より入力される符号出現数の収集結果の情報を用いて、第二圧縮部102による圧縮データの伸長時間を上述の計算式を用いて推定し、その推定値に基づき、選択信号線115により、データ選択部104に対し出力する圧縮データを選択させる。
【0066】
具体的には、第二圧縮部102による圧縮データの伸長時間が予め定める閾値以下である場合は、伸長時間推定・判定部103は、信号線114により伝達される第二圧縮部102による圧縮データを選択させる。一方、第二圧縮部102による圧縮データの伸長時間が予め定める閾値より大きい場合は、伸長時間推定・判定部103は、信号線112により伝達される第一圧縮部101による圧縮データを出力させる。
【0067】
データ選択部104は、選択信号線115により伸長時間推定・判定部103により指定されたデータを選択し、出力信号線116に出力する。
【0068】
これらの信号線114、116は、信号線111、112と同様にシリアル伝送線であってもよいし、パラレル伝送線であってもよい。それらの信号線の伝送制御を行うための制御信号は、図5に図示しないサイドバンドの制御信号線で伝送してもよいし、データと制御信号を同じ信号線で伝送してもよい。
【0069】
更にデータは、パケット毎に伝達してもよいし、信号線を一定のタイミングで占有してデータを任意に伝送してもよい。また選択信号線115は、電圧レベルで選択結果を示してもよいし、一定のタイミングでパルス状の信号で選択結果を示してもよい。更に図5には図示しない制御線を用いて、伸長時間推定・判定部103からデータ選択を行うタイミングや信号線116にデータを出力するタイミングをデータ選択部104に指示してもよいし、データ選択部104の内部でデータを選択するタイミングやデータを出力するタイミングを制御する信号を生成してもよい。
【0070】
例えば、第一圧縮部101は、伸長時間推定・判定部103からの指示に応答して、圧縮データを第二圧縮部102に送信してもよい。伸長時間推定・判定部103は、第二圧縮部102により圧縮されて出力されるであろうデータの伸長時間が予め定める閾値以下である場合に、第一圧縮部101による圧縮データを第二圧縮部102に送信することを第一圧縮部101に指示する。これにより、第二圧縮部102により圧縮されて出力されるであろうデータの伸長時間が閾値より大きい場合に不要となる第二圧縮部102による圧縮処理を省くことができる。それにより、データ圧縮システムがデータを圧縮するのに要する全体時間を短くすることができる。
【0071】
図6は、図5のデータ圧縮システムで圧縮されたデータを元の平文データに復元するデータ伸長システムの例である。図6において、該データ伸長システムは、第一伸長部203と、第二伸長部201と、圧縮データ判定部204と、データ選択部202と、5種の信号線211~215とを含む。第一伸長部203は、第一の伸長アルゴリズムでデータを伸長する。
【0072】
第一伸長部203は、図5の第一圧縮部101が用いた第一の圧縮アルゴリズムで圧縮されたデータを第一の伸長アルゴリズムで復元する。第二伸長部201は、第一の伸長アルゴリズムと異なる第二の伸長アルゴリズムで、図5の第二圧縮部102が用いた第二の圧縮アルゴリズムで圧縮されたデータを伸長する。圧縮データ判定部204は、データ伸長部に入力された圧縮データが、図5の第一圧縮部101で圧縮されたデータか、図5の第二圧縮部102で圧縮されたデータかを判定する。
【0073】
第二伸長部201は、入力信号線211により入力された、第二の圧縮アルゴリズムで圧縮されたデータを伸長し、伸長したデータを信号線213に出力する。
【0074】
圧縮データ判定部204は、入力信号線211に入力された圧縮データが、図5の第一圧縮部101により圧縮されたデータか、第二圧縮部102により圧縮されたデータかを判定し、判定結果をデータ選択信号線212に出力する。
【0075】
圧縮データ判定部204は、例えば、圧縮データに内包されるデータに基づいて、第一の圧縮アルゴリズムによる圧縮データか、第二の圧縮アルゴリズムによる圧縮データか、を判定する。判定した結果はデータ選択信号線212に出力される。例えば、第一のアルゴリズム及び/又は第二のアルゴリズムによって、圧縮データのフォーマットが、常に所定のデータ(値)を含む場合、当該所定のデータで圧縮アルゴリズムを識別することが可能である。
【0076】
他の例において、圧縮データに、第一圧縮部101による圧縮データか、第二圧縮部102による圧縮データかを示すマーカ情報を付加してもよい。このマーカ情報は、図5において第一圧縮部101及び第二圧縮部102において、それぞれの圧縮データ出力に付加してもよく、データ選択部104にて付加してもよい。圧縮データ判定部204は圧縮データから取得したマーカ情報で、圧縮アルゴリズムを識別することが可能である。
【0077】
更には、該データ圧縮システムに図5図6に図示しない圧縮データ記憶部を設ける場合には、マーカ情報を該圧縮データに付加して該圧縮データと同じく記憶蓄積してもよい。圧縮データを一旦該データ圧縮システム外部に出力し、然る後に該データ圧縮システム外部から信号線211に圧縮データを入力する場合には、該圧縮データにマーカ情報を付加して、該マーカ情報を該圧縮データと合わせて該データ圧縮システム外部に一旦出力し、然る後に該データ圧縮システム外部から信号線211により該マーカ情報と該圧縮データとを併せて入力してもよい。
【0078】
圧縮データ判定部204は、このようなマーカ情報がある場合には、該マーカ情報のみを受信すればよく、圧縮データそのものを受信する必要はない。更には圧縮データ全体のデータ形式において、圧縮方法が識別できるようにして、第一圧縮部101による圧縮データか、第二圧縮部102による圧縮データかを判定してもよい。
【0079】
例えば、第二伸長部201は、圧縮データ判定部204からの指示に応答して、入力された圧縮データを伸長してもよい。圧縮データ判定部204は、圧縮データが第二圧縮部102により圧縮されている場合、圧縮データを伸長することを第二伸長部201に指示する。これにより、正確な伸長が可能となると共に、不要な伸長処理を省略することができる。
【0080】
データ選択部202は、圧縮データ判定部204からデータ選択信号線212に出力された判定結果に従って信号線211又は信号線213を選択する。具体的には、信号線211に入力された圧縮データが第一圧縮部101により圧縮されたデータであると判定された場合、信号線211に入力された圧縮データが選択される。信号線211に入力された圧縮データが第二圧縮部102により圧縮されたデータだと判定された場合、第二伸長部201により伸長され、信号線213に出力された伸長データが選択される。データ選択部202は、選択したデータを、データ選択出力信号線214に出力する。
【0081】
データ選択部202は更に、第二伸長部201にてデータを伸長するのに時間を要する場合には、図2に図示しないバッファを備えてもよい。データ選択部202は、入力信号線211に入力された圧縮データと、圧縮データ判定部204による判定によってデータ選択信号線212に出力された判定結果とをそのバッファに一旦記憶蓄積し、第二伸長部201からの伸長データが信号線213に出力されるまで待ち合わせを行ってもよい。
【0082】
第一伸長部203は、第一圧縮部101が用いる第一の圧縮アルゴリズムにより圧縮されたデータを復元する第一の伸長アルゴリズムを用いて、データ選択出力信号線214に出力されたデータを伸長し、伸長したデータを出力信号線215に出力する。
【0083】
これらの信号線211、213、214、215は、信号線111、112、114、116と同様にシリアル伝送線であってもよいし、パラレル伝送線であってもよい。それらの信号線の伝送制御を行うための制御信号は、図6に図示しないサイドバンドの制御信号線で伝送してもよいし、データと制御信号を同じ信号線で伝送してもよい。
【0084】
更にデータはパケット毎に伝達してもよいし、信号線を一定のタイミングで占有してデータを任意に伝送してもよい。またデータ選択信号線212は、選択信号線115と同じく、電圧レベルで選択結果を示してもよいし、一定のタイミングでパルス状の信号で選択結果を示してもよい。更に図6には図示しない制御線を用いて、圧縮データ判定部204から、データ選択を行うタイミングや信号線214にデータを出力するタイミングを、データ選択部202に指示してもよい。データ選択部202の内部でデータを選択するタイミングやデータを出力するタイミングを制御する信号を、生成してもよい。
【0085】
図7は、実施例1に関わるデータ圧縮方法のフローチャートを示す。図7において、ステップ301において、第一圧縮部101は、圧縮する入力データの読み込みを行う。次にステップ302において、第一圧縮部101は、第一の圧縮アルゴリズムを用いてステップ301において読み込んだ入力データを圧縮する。ステップ303において、符号統計部105は、ステップ302において圧縮したデータに含まれる符号の出現数を取集する。
【0086】
ステップ308において、伸長時間推定・判定部103は、ステップ303において収集した符号出現数から伸長時間を推定し、ステップ304において、その推定した伸長時間を予め定める基準値と比較する。推定した伸長時間が基準値以下である場合には(304:YES)、フローは更にステップ306に進む。第二圧縮部102は、ステップ302において第一の圧縮アルゴリズムで圧縮した圧縮データを、更に第二の圧縮アルゴリズムで圧縮する。更にステップ307において、データ選択部104は、第二の圧縮アルゴリズムで圧縮したデータを出力する。
【0087】
ステップ304において、ステップ308において推定した伸長時間が基準値より大きい場合には(304:NO)、フローはステップ305に進む。ステップ305において、データ選択部104は、第一の圧縮アルゴリズムにより圧縮したデータを出力する。
【0088】
上述のように、本実施例のデータ圧縮システムにおいて、第一の圧縮方法は第一の圧縮アルゴリズムによりデータを圧縮し、第二の圧縮方法は、第一の圧縮アルゴリズムによりデータを圧縮した後に、さらに第二の圧縮アルゴリズムにより圧縮する。
【0089】
以上のデータ圧縮方法により、第一の圧縮アルゴリズムにて圧縮したデータに含まれる符号の出現数を用いて推定した伸長時間が基準値以下である場合には、第二の圧縮アルゴリズムによるデータの圧縮を省略した圧縮データを出力するので、データを圧縮する全体時間を短くすることが可能となる。また第一の圧縮アルゴリズムだけで圧縮するか、第一の圧縮アルゴリズムに加えて第二の圧縮アルゴリズムを用いて圧縮するかを、第一の圧縮アルゴリズムの圧縮データを用いるだけで判定できる。判定のために、第二の圧縮アルゴリズムによる圧縮処理を行う必要はない。
【0090】
図8は、図7のデータ圧縮方法で圧縮したデータを復元するデータ伸長方法のフローチャートである。図8において、まずステップ401において、圧縮データ判定部204は、圧縮データを読み込む。次にステップ402において、圧縮データ判定部204は、読み込んだ圧縮データが、図7のステップ302にて圧縮された第一の圧縮アルゴリズムによる圧縮データか、ステップ306にて圧縮された第二の圧縮アルゴリズムによる圧縮データかを判定する。
【0091】
ステップ402は、例えば、圧縮データに内包されるデータに基づいて、図7のステップ302で用いる第一の圧縮アルゴリズムによる圧縮データか、ステップ306で用いる第二の圧縮アルゴリズムによる圧縮データか、を判定する。例えば、第一のアルゴリズム及び/又は第二のアルゴリズムによる圧縮データのフォーマットが、常に所定のデータ(値)を含む場合、当該所定のデータで圧縮アルゴリズムを識別することが可能である。
【0092】
または、第一圧縮部101による圧縮データか、第二圧縮部102による圧縮データかを示すマーカ情報を参照することで、圧縮データの圧縮方法を特定することもできる。データ伸長システムは、圧縮データに内包されるデータや、新たに追加されたマーカ情報、または圧縮データ全体のデータ形式で示される場合も含め、圧縮されたデータに付与されている識別情報に基づいて、第一の圧縮方法及び第二の圧縮方法のいずれの方法により圧縮されたかを特定する。
【0093】
受信したデータが、ステップ306にて圧縮された第二の圧縮アルゴリズムによる圧縮データであると判定されると(402:第二圧縮)、ステップ403において、第二伸長部201が、入力された第二の圧縮アルゴリズムによる圧縮データを伸長し、第一の圧縮アルゴリズムで圧縮されたデータを復元する。ステップ404において、第一伸長部203が、復元された第一の圧縮アルゴリズムで圧縮されたデータを伸長して、圧縮前の元の平文データを復元する。
【0094】
ステップ306にて圧縮された第二の圧縮アルゴリズムによる圧縮データであると判定されると(402:第一圧縮)、ステップ403がスキップされる。ステップ404において、第一伸長部203が、第二伸長部201により伸長がスキップされた圧縮データを伸長して、圧縮前の元の平文データを復元する。
【0095】
以上のデータ伸長方法によって、図7のデータ圧縮方法で、第一の圧縮アルゴリズム、または、第一の圧縮アルゴリズム及び第二の圧縮アルゴリズムにより圧縮したデータを、正しく伸長することができる。
【0096】
上記のデータ圧縮システム、データ伸長システムにおける各機能(具体的には、圧縮部、符号統計部、伸長時間推定・判定部、伸長部、圧縮データ判定部等)は、プログラムに従って動作する1以上のプロセッサ、及び/又は所定の演算を行うように構成された論理回路により実装することができる。この点は他の実施例においても同様である。
【実施例0097】
次に、図9図10により、実施例2を説明する。図9は、実施例2に関わる、データ圧縮システムの構成の例である。図9においてデータ圧縮システムは、第一圧縮部901、第二圧縮部906、第三圧縮部904、符号統計部902、伸長時間推定・判定部903、データ選択部905、7種の信号線911~917を含む。
【0098】
第一圧縮部901は、予め定める第一の圧縮アルゴリズムを用いてデータを圧縮する。第一の圧縮アルゴリズムは、例えば、辞書圧縮である。第二圧縮部906は、その圧縮データを、予め定める第二の圧縮アルゴリズムを用いて圧縮する。第二の圧縮アルゴリズムは、例えば、エントロピ符号化である。第三圧縮部904は、予め定める第三の圧縮アルゴリズムを用いてデータを圧縮する。
【0099】
第三の圧縮アルゴリズムは、第一又は第二の圧縮アルゴリズムと同一又は異なっていてよい。第三の圧縮アルゴリズムは、例えば、エントロピ符号化やハフマン符号を利用することができる。一例において、第三の圧縮アルゴリズムとして、予め定める基準値以下の伸長時間を持つ圧縮データを生成することができるアルゴリズムが選択される。この条件を満たすアルゴリズムは、様々な種類の入力データの圧縮データの伸長時間を測定することで設計可能である。
【0100】
符号統計部902は、第一圧縮部901の圧縮結果を受信し、その圧縮データに含まれる符号の出現数を収集する。伸長時間推定・判定部903は、符号統計部902により収集された符号出現数の情報を基に上述の計算式を用いて、第一と第二の圧縮アルゴリズムによる圧縮データの伸長時間を推定し、上記の基準値と比較し、基準値以下か基準値より大きいかを判定する。データ選択部905は、出力する圧縮データを選択する。
【0101】
第一圧縮部901は、入力信号線911により入力されたデータを、予め定める第一の圧縮アルゴリズムで圧縮し、圧縮した結果の圧縮データを出力信号線912に出力する。符号統計部902は、信号線912に出力された圧縮データを受信し、その圧縮データに含まれる符号の出現数を収集する。収集した符号出現数の情報は、信号線913により伸長時間推定・判定部903に伝達される。
【0102】
第二圧縮部906は、第二の圧縮アルゴリズムを用いて、信号線912を通じて入力された、第一の圧縮アルゴリズムによる圧縮データを圧縮し、その結果を信号線917に出力する。
【0103】
第三圧縮部904は、第三の圧縮アルゴリズムを用いて、信号線911に入力されたデータを圧縮し、その結果を信号線915に出力する。
【0104】
伸長時間推定・判定部903は、信号線913により、符号統計部902が収集した符号出現数の情報を受信し、受信した情報を基に、第一圧縮部901および第二圧縮部906にて圧縮されるデータの伸長時間を推定する。そして、推定した伸長時間を、予め定める基準値と比較する。
【0105】
推定した伸長時間がその基準値以下の場合には、伸長時間推定・判定部903は、第一圧縮部901と第二圧縮部906による圧縮データを選択するように、データ選択部905に対し、信号線914を介して、データ選択信号を出力する。推定した伸長時間がその基準値より大きい場合には、伸長時間推定・判定部903は、第三圧縮部904による圧縮データを選択するように、データ選択部905に対し、信号線914を介して、データ選択信号を出力する。
【0106】
データ選択部905は、伸長時間推定・判定部903より信号線914を介して入力されたデータ選択信号に従って、信号線917から受信した、第一圧縮部901および第二圧縮部906で圧縮された圧縮データ、又は、信号線915から受信した、第三圧縮部904で圧縮された圧縮データのいずれかを選択して、出力信号線916に出力する。
【0107】
上述のように、本実施例のデータ圧縮システムは、第一の圧縮方法は、第一と第二の圧縮アルゴリズムによりデータを圧縮し、第二の圧縮方法は、第三の圧縮アルゴリズムによりデータを圧縮する。第三の圧縮アルゴリズムは、基準値以下の伸長時間を持つ圧縮データを生成する。
【0108】
また、データ圧縮システムは、第一の圧縮アルゴリズムによる圧縮データに含まれる符号の出現数に基づき第一と第二の圧縮アルゴリズムによる圧縮データの伸長時間を推定し、その伸長時間と基準値とを比較することにより、伸長時間が所定の基準を超えているか判定し、基準を超えない伸長時間を与える圧縮データを選択する。
【0109】
以上において、信号線911、912、915、916、917は、実施例1の図5の信号線111、112等と同様に、シリアル伝送線であってもよいし、パラレル伝送線であってもよい。信号の伝送制御のための制御信号は、図9に図示しないサイドバンド制御信号によって伝送してもよいし、データと制御信号を同じ信号線で伝送してもよい。
【0110】
更にデータは、パケット毎に伝達してもよいし、信号線を一定のタイミングで占有してデータを任意に伝送してもよい。符号統計部902による符号出現頻度の情報を伝送する信号線913は、実施例1における図5の信号線113と同じく、シリアル伝送線であってもよいし、パラレル伝送線であってもよい。また、図9に図示しない信号伝送制御に関わるサイドバンド信号線を設けてもよいし、同一の信号線で符号出現頻度の情報と制御信号を伝送してもよい。
【0111】
更にデータ選択信号を伝送する信号線914は、実施例1の図5の選択信号線115と同じく、電圧レベルで選択結果を示してもよいし、一定のタイミングでパルス状の信号で選択結果を示してもよい。更に図9には図示しない制御線を用いて、伸長時間推定・判定部903が、圧縮データの選択を行うタイミングや信号線916に圧縮データを出力するタイミングを、データ選択部905に指示してもよい。データ選択部905の内部で圧縮データを選択するタイミングや圧縮データを出力するタイミングを制御する信号を生成してもよい。
【0112】
上述のように、第一圧縮部901が第一の圧縮アルゴリズムで圧縮した結果について、符号統計部902が符号出現数を収集する。さらに、その収集結果に基づいて、伸長時間推定・判定部903が伸長時間の推定を行って判定する。これにより、第一と第二の圧縮アルゴリズムで圧縮した結果を伸長した場合に伸長時間が予め定める基準値以下であることを確認して、第一圧縮部901と第二圧縮部906で圧縮した結果の圧縮データを出力することができる。
【0113】
また、第一圧縮部901において第一の圧縮アルゴリズムで圧縮した場合に、伸長時間が予め定める基準値より大きいことが分かった場合には、データ圧縮システムは、第三圧縮部904にて第三の圧縮アルゴリズムで圧縮した結果を採用する。第三圧縮部904にて圧縮した結果は、基準値以下の伸長時間を持つ。これにより、伸長時間が基準値を超えることを回避することが可能となる。
【0114】
さらに、データ選択部905における、第一と第二の圧縮アルゴリズムによる圧縮結果を用いるか、第三の圧縮アルゴリズムによる圧縮結果を用いるかの判定は、第一の圧縮アルゴリズムによる圧縮データから得られる符号出現数、及びそれに基づく推定伸長時間のみを計算すれば実施可能である。第二と第三の圧縮アルゴリズムによる圧縮処理については、この判定を行ううえでは、実施する必要はない。
【0115】
図10は、実施例2に関わる、データを圧縮する方法のフローチャートを示す。図10において、ステップ1001において、第一圧縮部901は、圧縮する入力データの読み込みを行う。次にステップ1002において、第一圧縮部901は、予め定める第一の圧縮アルゴリズムを用いて入力データを圧縮する。
【0116】
ステップ1003において、符号統計部902は、ステップ1002において入力データを第一の圧縮アルゴリズムで圧縮した圧縮データに含まれる符号の出現数を収集する。ステップ1004において、伸長時間推定・判定部903は、ステップ1003において収集した符号出現数の情報に基づき、第一と第二の圧縮アルゴリズムで圧縮したデータの伸長に要する時間を推定する。
【0117】
ステップ1005において、伸長時間推定・判定部903は、ステップ1004において推定した伸長時間が、予め定める基準値以下であるかを判定する。予め定める基準値以下である場合には(1005:YES)、フローはステップ1006に進む。ステップ1006において、第二圧縮部906は、ステップ1002で第一圧縮部901が圧縮したデータを第二の圧縮アルゴリズムで圧縮し、ステップ1009において、データ選択部905は、ステップ1006で圧縮したデータを出力する。
【0118】
ステップ1005において、ステップ1004において推定した伸長時間が予め定める基準値より大きい場合には(1005:NO)、フローはステップ1007に進む。第三圧縮部904は、その基準値以下の伸長時間を持つ圧縮データを生成する第三の圧縮アルゴリズムで、ステップ1001で読み込んだ入力データを圧縮する。ステップ1008において、データ選択部905は、ステップ1007で圧縮したデータを出力する。
【0119】
以上のデータ圧縮方法により、第一の圧縮アルゴリズムにて圧縮したデータに含まれる符号の出現数を用いて推定した伸長時間が基準値以下である場合には、第二の圧縮アルゴリズムによるデータの圧縮を省略した圧縮データを出力するので、データを圧縮する全体時間を短くすることが可能となる。また第三の圧縮アルゴリズムだけで圧縮するか、第一と第二の圧縮アルゴリズムを用いて圧縮するかを、第一の圧縮アルゴリズムの圧縮データを用いるだけで判定できる。判定のために、第二と第三の圧縮アルゴリズムによる圧縮処理を行う必要はない。
【実施例0120】
図11は、上記実施例にかかるデータ圧縮システムにおける伸長時間の推定精度を向上させるためのデータ伸長システムの例である。また、図12は、図11のデータ伸長システムにおいて、伸長処理単価の修正を伴うデータ伸長方法のフローチャートである。
【0121】
本実施例において、データ伸長システムは、上記実施例2の図6に示した構成の代わりに、図11に示す構成を含む。また、上記実施例2の図8に示した方法の代わりに、図12に示す方法でデータ伸長を行う。本実施例において、データ圧縮システム、およびデータ圧縮方法は、上記実施例1又は2と同じである。
【0122】
図11は、上記実施例のデータ圧縮システムで圧縮されたデータを元の平文データに復元するデータ伸長システムの例である。図11において、該データ伸長部は、第一伸長部1303と、第二伸長部1301と、第三伸長部1306と、圧縮データ判定部1304と、符号統計部1305と、データ選択部1302と、処理単価修正部1307と、5種の信号線1311~1315とを含む。なお、データ圧縮システムが図5に示すような構成である場合には、第三伸長部1306は備えていなくてもよい。
【0123】
第一伸長部1303は、第一圧縮部(101または901)が第一の圧縮アルゴリズムで圧縮したデータを第一の伸長アルゴリズムで復元する。第二伸長部1301は、第一の伸長アルゴリズムと異なる第二の伸長アルゴリズムで、第二圧縮部(102または906)が第二の圧縮アルゴリズムで圧縮したデータを伸長する。第三伸長部1306は、第一と第二の伸長アルゴリズムと異なる第三の伸長アルゴリズムで、第三圧縮部(904)が第三の圧縮アルゴリズムで圧縮したデータを伸長する。
【0124】
第二伸長部1301は、入力信号線1311により入力された、第二の圧縮アルゴリズムで圧縮されたデータを伸長し、伸長したデータを信号線1313に出力する。
【0125】
圧縮データ判定部1304は、入力信号線1311に入力された圧縮データが、第一圧縮部、第二圧縮部、第三圧縮部のどれで圧縮されたデータかを判定し、判定結果をデータ選択信号線1312に出力する。
【0126】
圧縮データ判定部1304は、例えば、圧縮データに内包されるデータに基づいて判定する。判定結果はデータ選択信号線1312に出力される。例えば、圧縮アルゴリズムによって、圧縮データのフォーマットが、常に所定のデータ(値)を含む場合、当該所定のデータで圧縮アルゴリズムを識別することが可能である。
【0127】
他の例において、圧縮データに、第一圧縮部、第二圧縮部、第三圧縮部のどれで圧縮したデータかを示すマーカ情報を付加してもよい。このマーカ情報は、第一圧縮部、第二圧縮部、第三圧縮部において、それぞれの圧縮データ出力に付加してもよく、データ選択部(104または905)にて付加してもよい。圧縮データ判定部1304は圧縮データから取得したマーカ情報で、圧縮アルゴリズムを識別することが可能である。
【0128】
更には、該データ圧縮システムに、図示しない圧縮データ記憶部を設ける場合には、マーカ情報を該圧縮データに付加して該圧縮データと同じく記憶蓄積してもよい。圧縮データを一旦該データ圧縮システム外部に出力し、然る後に該データ圧縮システム外部から信号線1311に圧縮データを入力してもよい。この場合には、該圧縮データにマーカ情報を付加して、該マーカ情報を該圧縮データと合わせて該データ圧縮システム外部に一旦出力し、然る後に該データ圧縮システム外部から信号線1311により該マーカ情報と該圧縮データとを併せて入力してもよい。
【0129】
圧縮データ判定部1304は、このようなマーカ情報がある場合には、該マーカ情報のみを受信すればよく、圧縮データそのものを受信する必要はない。更には圧縮データ全体のデータ形式において、圧縮方法が識別できるようにして、第一圧縮部、第二圧縮部、第三圧縮部のどれで圧縮したデータかを判定してもよい。
【0130】
例えば、第二伸長部1301は、圧縮データ判定部1304からの指示に応答して、入力された圧縮データを伸長してもよい。圧縮データ判定部1304は、圧縮データが第二圧縮部で圧縮されている場合、圧縮データを伸長することを第二伸長部1301に指示する。これにより、正確な伸長が可能となると共に、不要な伸長処理を省略することができる。
【0131】
データ選択部1302は、圧縮データ判定部1304からデータ選択信号線1312に出力された判定結果に従って信号線1311又は信号線1313を選択する。具体的には、信号線1311に入力された圧縮データが第一圧縮部、第三圧縮部により圧縮されたデータであると判定された場合、信号線1311に入力された圧縮データが選択される。信号線1311に入力された圧縮データが第二圧縮部により圧縮されたデータだと判定された場合、第二伸長部1301により伸長され、信号線1313に出力された伸長データが選択される。データ選択部1302は、選択したデータを、データ選択出力信号線1314に出力する。
【0132】
データ選択部1302は更に、第二伸長部1301にてデータを伸長するのに時間を要する場合には、図11に図示しないバッファを備えてもよい。データ選択部1302は、入力信号線1311に入力された圧縮データと、及び圧縮データ判定部1304による判定によってデータ選択信号線1312に出力された判定結果とをそのバッファに一旦記憶蓄積し、第二伸長部131からの伸長データが信号線1313に出力されるまで待ち合わせを行ってもよい。
【0133】
処理単価修正部1307は、第二伸長部1301における伸長処理時間の測定値と、第二伸長部1301の出力に含まれる符号の出現数Xiに基づいて、伸長処理単価Wiを修正する。
【0134】
第一伸長部1303は、圧縮データ判定部1304からの指示に応答して、第一圧縮部で圧縮されたデータを復元する第一の伸長アルゴリズムを用いて、データ選択出力信号線1314に出力されたデータを伸長し、伸長したデータを出力信号線1315に出力する。
【0135】
第三伸長部1306は、圧縮データ判定部1304からの指示に応答して、第三圧縮部で圧縮されたデータを復元する第三の伸長アルゴリズムを用いて、データ選択出力信号線1314に出力されたデータを伸長し、伸長したデータを出力信号線1315に出力する。
【0136】
これらの信号線1311、1313、1314、1315は、信号線211、213、214、215と同様にシリアル伝送線であってもよいし、パラレル伝送線であってもよい。それらの信号線の伝送制御を行うための制御信号は、図11に図示しないサイドバンドの制御信号線で伝送してもよいし、データと制御信号を同じ信号線で伝送してもよい。
【0137】
更にデータはパケット毎に伝達してもよいし、信号線を一定のタイミングで占有してデータを任意に伝送してもよい。またデータ選択信号線1312は、選択信号線212と同じく、電圧レベルで選択結果を示してもよいし、一定のタイミングでパルス状の信号で選択結果を示してもよい。更に図11には図示しない制御線を用いて、圧縮データ判定部1304から、データ選択を行うタイミングや信号線1314にデータを出力するタイミングを、データ選択部1302に指示してもよい。データ選択部1302の内部でデータを選択するタイミングやデータを出力するタイミングを制御する信号を、生成してもよい。
【0138】
図12において、まずステップ1401において、圧縮データ判定部1304は、圧縮データを読み込む。次にステップ1402において、圧縮データ判定部1304は、読み込んだ圧縮データが、どの圧縮アルゴリズムによる圧縮データかを判定する。
【0139】
ステップ1402は、例えば、圧縮データに内包されるデータに基づいて、どの圧縮アルゴリズムによる圧縮データかを判定する。例えば、圧縮アルゴリズムによって圧縮データのフォーマットが、常に所定のデータ(値)を含む場合、当該所定のデータで圧縮アルゴリズムを識別することが可能である。
【0140】
または、どの圧縮アルゴリズムによる圧縮データかを示すマーカ情報を参照することで、圧縮データの圧縮アルゴリズムを特定することもできる。データ伸長システムは、圧縮データに内包されるデータや、新たに追加されたマーカ情報、または圧縮データ全体のデータ形式で示される場合も含め、圧縮されたデータに付与されている識別情報に基づいて、どの圧縮アルゴリズムにより圧縮されたかを特定する。
【0141】
受信したデータが、第二の圧縮アルゴリズムによる圧縮データであると判定されると(1402:YES)、ステップ1405において、第二伸長部1301が、入力された第二の圧縮アルゴリズムによる圧縮データを伸長し、第一の圧縮アルゴリズムで圧縮されたデータを復元する。ステップ1406において、符号統計部1305は、第二伸長部1301から出力された、第一の圧縮アルゴリズムで圧縮されたデータに含まれる符号の出現数を収集する。
【0142】
ステップ1407において、第一伸長部1303が、復元された第一の圧縮アルゴリズムで圧縮されたデータを伸長して、圧縮前の元の平文データを復元する。ステップ1408では、第二伸長部1301は、第二伸長部1301がデータ伸長の処理に要した時間を算出する。例えば、第二伸長部1301は、伸長開始から伸長終了までの時間を計測し、その結果を保持してもよい。そして、ステップ1409において、伸長結果の平文データを出力する。
【0143】
ステップ1410において、処理単価修正部1307は、ステップ1408で算出した実際の伸長時間と、ステップ1406で収集した符号出現数とを用いて、データ圧縮システムにおける伸長時間の推定誤差が小さくなるように、伸長処理単価Wiを修正する。具体的には、試行的にWiを微小に変化させて伸長時間を推定し、実際の伸長時間との誤差が縮小するならば、その変化を以後の伸長処理単価Wiに施す。実際の伸長時間との誤差が拡大するならば、その変化は破棄する。
【0144】
一方、受信したデータが、第一の圧縮アルゴリズム(実施例1)または第三の圧縮アルゴリズム(実施例2)による圧縮データであると判定されると(1402:NO)、ステップ1403において、第一伸長部1303または第三伸長部1306が、圧縮データを伸長して、圧縮前の元の平文データを復元する。そして、ステップ1404において、伸長結果の平文データを出力する。
【0145】
なお、データ圧縮システムが図5に示すような構成である場合には、ステップ1402で第三の圧縮アルゴリズムによる圧縮データであることを判定しなくてもよいし、ステップ1403で第三伸長部1306による伸長を行わなくてもよい。
【0146】
上記例は、第二伸長部1301のみの伸長処理時間を測定する。他の例において、第二伸長部1301の伸長処理時間に加えて、第一伸長部1303の伸長処理時間を測定してもよい。伸長処理単価は、第一伸長部1303および第二伸長部1301の伸長処理の合計を示す。
【0147】
以上のデータ伸長方法によれば、実施例1または実施例2のデータ圧縮システムおよび圧縮方法において、第一、第一と第二、または第三の圧縮アルゴリズムで圧縮したデータを、正しく伸長することができる。さらに、第一と第二の圧縮アルゴリズムで圧縮したデータの実際の伸長時間と、収集した符号出現数とを用いて、データ圧縮システムにおける伸長時間の推定誤差が小さくなるように伸長処理単価を修正することで、データ圧縮システムの伸長時間推定・判定部の伸長時間推定精度を向上することができる。
【0148】
上記のデータ圧縮システム、データ伸長システムにおける各機能(具体的には、圧縮部、符号統計部、伸長時間推定・判定部、伸長部、圧縮データ判定部等)は、プログラムに従って動作する1以上のプロセッサ、及び/又は所定の演算を行うように構成された論理回路により実装することができる。この点は他の実施例においても同様である。
【実施例0149】
図13は、上記実施例にかかるデータ圧縮システムおよびデータ伸長システム(以下、まとめてデータ圧縮・伸長システムと呼ぶ)を適用したストレージシステムの全体構成の例である。図13においてストレージシステム1101は、データ転送及びデータ処理を行うストレージコントローラ1102と、ドライブ筐体(ドライブボックス)1103とを含む。
【0150】
ストレージコントローラ1102は、フロントエンドインタフェース(I/F)部1111、CPU1112、バックエンドI/F部1114、及び上記実施例にかかるデータ圧縮・伸長システム1110を含む。図13の構成例において、データ圧縮・伸長システム1110はストレージコントローラ1102に実装されている。
【0151】
フロントエンドI/F部1111は、図示しないホスト計算機からストレージシステム1101に対する要求を受信し、結果を送信する。CPU1112は、ストレージシステム1101の全体を制御する。バックエンドI/F部1114は、ドライブ筐体1103と接続する。
【0152】
ドライブ筐体1103は、ストレージコントローラ1102と接続するドライブI/F部1121と、不揮発半導体記憶装置SSD(Solid State Drive)1122A~1122G、これらを収容する筐体構造を含む。SSDはドライブ筐体1103に搭載される記憶デバイスの例である。
【0153】
図13は、7個のSSD1122A~1122Gを図示しているが、SSDの数は7個に限らず、任意な数でよい。図13は一つのみのドライブI/F部1121を図示しているが、2つのドライブI/F部を実装し、2ポートを有する各SSD1122A~1122Gを、二つのドライブI/F部それぞれに接続してもよい。さらには、2個以上のドライブ筐体1103を設けてもよい。
【0154】
ストレージコントローラ1102の数も、1個に限らず2個以上でもよい。ストレージコントローラ1102の内部構成要素それぞれの数は、図13に示すように1つに限らず、それぞれ2つ以上のフロントエンドI/F部1111、CPU1112、メモリ1113、バックエンドI/F部1114、及びデータ圧縮・伸長システム1110が実装されてもよい。
【0155】
更には、図13は、ストレージコントローラ1102とドライブ筐体1103を分けて図示しているが、これを分けなくともよい。この場合、複数のドライブ筐体1103が実装される場合、高々1個のドライブ筐体1103とストレージコントローラ1102を融合し、残りのドライブ筐体1103は、図13に図示した構成と同様の形態でストレージコントローラ1102に接続すればよい。
【0156】
データ圧縮・伸長システム1110は、CPU1112を介して、メモリ1113から圧縮データを取得し、伸長し、平文データをメモリ1113に格納してもよい。または、データ圧縮・伸長システム1110は、フロントエンドI/F部1111を通じ、ホスト計算機から受信したデータをメモリ1113に格納することなく、直接受け取って圧縮してもよい。
【0157】
データ圧縮・伸長システム1110は、バックエンドI/F部1114を通じ、圧縮したデータをメモリ1113に格納することなく、直接SSD1122A~1122Gに格納してもよく、SSD1122からメモリ1113に格納することなく直接圧縮データを取り出して、伸長してもよい。データ圧縮・伸長システム1110は、伸長した平文データを、メモリ1113に格納することなく、フロントエンドI/F部1111を通じ、直接ホスト計算機に返送してもよい。
【0158】
図14は、上記実施例にかかるデータ圧縮・伸長システムを適用したストレージシステムの全体構成の別の例である。図14では、データ圧縮・伸長システム1220は、ストレージコントローラ1202ではなく、ドライブ筐体1203の内部にある。即ち、ストレージコントローラ1202は、フロントエンドI/F部1211、CPU1212、メモリ1213、バックエンドI/F部1214を含む。ドライブ筐体1203は、ドライブI/F部1221、データ圧縮・伸長システム1220、SSD1222A~1222G、及びこれらを収容する筐体構造を含む。
【0159】
図14が示す構成において、ストレージコントローラ1202、ドライブ筐体1203、フロントエンドI/F部1211、CPU1212、メモリ1213、バックエンドI/F部1214、ドライブI/F部1221、データ圧縮・伸長システム1220それぞれの数は高々一つ、SSD1222A~1222Gは高々7個である。しかし、これら構成要素それぞれその数は限定されず、図13に示す構成と同様に、任意である。またストレージコントローラ1202とドライブ筐体1203を特に分けなくともよく、融合してもよいことも図13の構成例と同様である。
【0160】
図14のようにデータ圧縮・伸長システム1220をドライブ筐体1203の内部に実装する構成において、ホスト計算機から受信したデータは、ストレージコントローラ1202において所定の処理が実施された後、ドライブI/F部1221を通じ直接データ圧縮・伸長システム1220に転送される。データ圧縮・伸長システム1220は、データを圧縮した後、直接SSD1222A~1222Gに格納する。
【0161】
またSSD1222A~1222Gに格納した圧縮データを、伸長する時には、SSD1222A~1222Gから圧縮データをストレージコントローラ1202に一旦送ることなく、データ圧縮・伸長システム1220がSSD1222A~1222Gから圧縮データを受信する。データ圧縮・伸長システム1220が圧縮データを伸長した後、データ圧縮・伸長システム1220からドライブI/F部1221を通じて、直接ストレージコントローラ1202に伸長データが転送される。
【0162】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0163】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。
【0164】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0165】
101、901…第一圧縮部
102、906…第二圧縮部
904…第三圧縮部
105、902、1305…符号統計部
103、903…伸長時間推定・判定部
104、202、905、1302…データ選択部
203、1306…第一伸長部
201、1301…第二伸長部
1306…第三伸長部
1307…処理単価修正部
204、1304…圧縮データ判定部
図1A
図1B
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14