JPWO2015019484A1 - データ圧縮装置およびデータ伸張装置 - Google Patents
データ圧縮装置およびデータ伸張装置 Download PDFInfo
- Publication number
- JPWO2015019484A1 JPWO2015019484A1 JP2015530638A JP2015530638A JPWO2015019484A1 JP WO2015019484 A1 JPWO2015019484 A1 JP WO2015019484A1 JP 2015530638 A JP2015530638 A JP 2015530638A JP 2015530638 A JP2015530638 A JP 2015530638A JP WO2015019484 A1 JPWO2015019484 A1 JP WO2015019484A1
- Authority
- JP
- Japan
- Prior art keywords
- data
- plaintext
- compressed
- payload
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000013144 data compression Methods 0.000 title claims abstract description 42
- 230000006837 decompression Effects 0.000 title claims description 79
- 238000007906 compression Methods 0.000 claims abstract description 88
- 230000006835 compression Effects 0.000 claims abstract description 87
- 238000000605 extraction Methods 0.000 claims description 47
- 239000000284 extract Substances 0.000 claims description 12
- 238000003860 storage Methods 0.000 description 52
- 230000006870 function Effects 0.000 description 28
- 238000000034 method Methods 0.000 description 27
- 230000005055 memory storage Effects 0.000 description 26
- 230000015654 memory Effects 0.000 description 24
- 238000012545 processing Methods 0.000 description 23
- 238000006243 chemical reaction Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 16
- 238000004891 communication Methods 0.000 description 13
- 238000012546 transfer Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 230000012447 hatching Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
圧縮データを伸張するスループットを保証する。データ圧縮装置は、入力される平文データを、夫々が所定の平文ブロック長を有する複数の平文ブロックに分割する分割部と、複数の平文ブロックの夫々の平文ブロックに対し、スライド辞書型圧縮アルゴリズムを用いて平文ブロックを圧縮することによりペイロードを生成し、ペイロードの長さを示すヘッダを生成し、ヘッダおよびペイロードを含む圧縮ブロックを生成する圧縮部と、複数の平文ブロックから生成された複数の圧縮ブロックを連結することにより圧縮データを生成する連結部と、を備える。
Description
本発明は、データ圧縮およびデータ伸張の技術に関する。
LZ77は、1977年にレンペル(Lempel)及びジフ(Ziv)によって開発された、最も一般的な可逆データ圧縮アルゴリズムである。LZ77の原理はスライド辞書型圧縮である。LZ77は、文字列ストリームの先頭から末尾に向かってポインタを移動させながら、現在のポインタより過去の所定長さの文字列ストリーム(スライド辞書と呼ぶ)において、現在のポインタから始まる文字列に最も長く一致するものを探す。更にLZ77は、現在のポインタが示す文字列を、コピー記号に変換することで文字列ストリームのデータ量を減らし、文字列ストリームを圧縮する。LZ77は、原理が簡単で実装しやすい上に比較的圧縮率が良いことで知られる。なお、スライド辞書の大きさは任意であり、大きくするほど文字列の一致確率は増すので圧縮率は向上する。
大量のデータを蓄積・管理するためのストレージシステムに、より多くのデータを格納すれば容量当たりのコストを低減することができるため、データ圧縮機能を搭載しているものがある。ストレージシステムは、ファイル単位でデータを管理するファイルストレージ、固定サイズのセクタ単位でデータを管理するブロックストレージの2種類に分類される。どちらのストレージシステムでもデータ圧縮機能に採用されている圧縮方式としては、前述のLZ77、またはLZ77から派生したアルゴリズムがほとんどである。
特許文献1には、LZ77に基づく圧縮データの伸張を高速化する技術が開示されている。また、特許文献1には、汎用プロセッサを用いたソフトウェア処理によって、圧縮データを高速に伸張するための並列化技法が開示されている。この技術は、圧縮すべき平文データを複数ブロックに分割し、それぞれを圧縮する。ブロックの数は、伸張の際に使用するプロセッサの並列処理能力(コア数など)に基づいて決定される。
平文データを同一サイズの複数のブロックに分割して夫々のブロックを圧縮し、ソフトウェアによる伸張を行う場合、各ブロックの伸張に要する時間はデータ内容に依存して変化する。この課題に対し、特許文献1には、各ブロックのサイズを可変にし、試験的な圧縮・伸張を繰り返すことにより分割境界を調整し、伸張時間を平準化する方法が開示されている。
ストレージシステムや通信システムなどにおいて、データを出力するスループットを保証する場合がある。このようなシステムが圧縮データを伸張して出力する場合、ソフトウェアによる伸張では、スループットを保証できない場合がある。
上記課題を解決するために、本発明の一態様であるデータ圧縮装置は、入力される平文データを、夫々が所定の平文ブロック長を有する複数の平文ブロックに分割する分割部と、複数の平文ブロックの夫々の平文ブロックに対し、スライド辞書型圧縮アルゴリズムを用いて平文ブロックを圧縮することによりペイロードを生成し、ペイロードの長さを示すヘッダを生成し、ヘッダおよびペイロードを含む圧縮ブロックを生成する圧縮部と、複数の平文ブロックから生成された複数の圧縮ブロックを連結することにより圧縮データを生成する連結部と、を備える。
本発明の別の一態様であるデータ伸張装置は、平文データが複数の平文ブロックに分割され、複数の平文ブロックの夫々が所定の平文ブロック長を有し、複数の平文ブロックの夫々の平文ブロックに対し、スライド辞書型圧縮アルゴリズムを用いて平文ブロックを圧縮することによりペイロードが生成され、ペイロードの長さを示すヘッダが生成され、ヘッダおよびペイロードを含む圧縮ブロックが生成され、複数の平文ブロックに対して生成された複数の圧縮ブロックを連結することにより生成された圧縮データを用い、圧縮データから複数の圧縮ブロックの夫々のヘッダを認識し、認識されたヘッダに示されているペイロード長に基づいて圧縮データからペイロードを抽出する抽出部と、スライド辞書型圧縮アルゴリズムを用いて抽出されたペイロードを伸張することにより平文ブロックを復元する伸張部と、を備える。
本発明の一態様によれば、圧縮データを伸張するスループットを保証することができる。
本発明の実施例について図面を用いて説明する。
以下、本発明の実施例として、フラッシュメモリを記憶媒体に利用したストレージ装置について説明する。
近年、ストレージシステムの記憶媒体として、HDD(Hard Disk Drive)に加えて又は代えて、不揮発性半導体メモリであるNAND型フラッシュメモリを多量に搭載したSSD(Solid State Drive)などのフラッシュメモリストレージが注目されている。
フラッシュメモリはHDDのようなヘッドシーク機構を持たないため、データアクセスにおいて頭出し遅延(レイテンシ)が少ない。したがって、フラッシュメモリは、ランダムなデータリードにおいて優れた速度性能を有する。そのため、高速なランダムリードが求められるデータベース等のアプリケーションでは、ストレージシステムの記憶媒体としてHDDからフラッシュメモリストレージへの置き換えが進んでいる。ただし、フラッシュメモリストレージのビットコストは、半導体プロセスの微細化によるフラッシュメモリセルの高集積化に伴って年々安くなってきているが、依然HDDのビットコストに比べて3倍から10倍程度と高いままである。ストレージシステムの導入コストを重視するユーザにとって、フラッシュメモリストレージのビットコストは、フラッシュメモリストレージの採用をためらう要因となっている。
そこで、フラッシュメモリストレージにデータ圧縮技術を導入することにより、フラッシュメモリへ格納される物理的なデータサイズを減らすことができる。そうすれば、フラッシュメモリストレージの記憶容量を仮想的に大きく見せることができ、そのビットコストを低下させることができる。
図1は、本発明の実施例の計算機システムの構成を示す。この計算機システムは、上位コントローラ110と、複数のフラッシュメモリストレージ101とを有する。上位コントローラ110は、フラッシュメモリストレージ101に接続され、フラッシュメモリストレージ101を制御する。計算機システムは、一つのフラッシュメモリストレージ101を有していても良い。フラッシュメモリストレージ101は、上位I/F(Interface)102、フラッシュメモリコントローラ103、複数のフラッシュメモリ105、揮発性のメモリであるDRAM(Dynamic Random Access Memory)106を有する。フラッシュメモリ105は、NAND型フラッシュメモリを有するチップである。
フラッシュメモリコントローラ103は、圧縮伸張回路104とマイクロプロセッサ(MP)107とを含む。マイクロプロセッサ107は更に、上位I/F102、フラッシュメモリ105、DRAM106と接続され、それらを制御する。マイクロプロセッサ107は、DRAM106に格納されたプログラムに従って、上位コントローラ110からのリード/ライトコマンドの内容解釈、上位コントローラ110との間のデータ送受信、圧縮伸張回路104によるデータの圧縮・伸張の制御、フラッシュメモリ105やDRAM106との間のデータ転送などを実行する。なお、計算機システムは、ストレージシステムであっても良いし、サーバシステムであっても良い。ストレージシステムにおける上位コントローラ110は例えば、フラッシュメモリストレージ101を用いるRAID(Redundant Arrays of Independent Disks)などを制御するストレージコントローラである。ストレージコントローラは、SAN(Storage Area Network)等のネットワークを介してホスト計算機に接続され、ホスト計算機からのリード/ライトコマンドに応じてフラッシュメモリストレージ101を制御する。サーバシステムにおける上位コントローラ110は例えば、フラッシュメモリストレージ101に対してリード/ライトを行うサーバ計算機である。
上位I/F102は上位コントローラ110と接続するためのインタフェース機構であり、データを上位コントローラ110に送信したり、データを上位コントローラ110から受信したりするために、リード/ライトコマンドに応答する。上位I/F102の機構およびコマンドや、データの送受信のプロトコルは、例えばHDDと互換性のあるインタフェース仕様に準拠する。
圧縮伸張回路104は、データ圧縮およびデータ伸張を行う論理回路である。圧縮伸張回路104は、フラッシュメモリ105に格納するデータ量を削減するために、上位コントローラ110からのライトコマンドに応じて受信したライトデータを可逆的に圧縮し、圧縮データを生成する。更に圧縮伸張回路104は、上位コントローラ110からのリードコマンドに応じて平文データを上位コントローラ110に送信するために、フラッシュメモリ105から読み出した圧縮データを伸張して平文データを生成する。
マイクロプロセッサ107は、上位コントローラ110からのライトデータを、まずDRAM106に格納する。この時点でマイクロプロセッサ107は、上位コントローラ110に対してライト完了の応答を返す。その後、マイクロプロセッサ107は、圧縮伸張回路104にライトデータの圧縮を指示する。この指示に応じて、圧縮伸張回路104は、ライトデータを圧縮して圧縮データへ変換し、圧縮データをDRAM106に格納する。そして、マイクロプロセッサ107は、圧縮データをフラッシュメモリ105にライトする。
マイクロプロセッサ107は、上位コントローラ110からのリードコマンドに応じて、フラッシュメモリ105から圧縮データをリードし、DRAM106に格納する。その後、マイクロプロセッサ107は、圧縮伸張回路104に圧縮データの伸張を指示する。この指示に応じて、圧縮伸張回路104は、圧縮データを伸張して平文データへ変換し、平文データをDRAM106に格納する。そして、マイクロプロセッサ107は、DRAM106に格納された平文データを上位コントローラ110に送信する。
このように、データライトはライト完了を返した後に圧縮処理を実行するので、上位コントローラ110から見えるフラッシュメモリストレージ101のライト性能は圧縮するか否かにかかわらず一定である。一方、データリードは上位コントローラ110にリードデータを返し終わるまで完了しないため、上位コントローラ110から見えるフラッシュメモリストレージ101のリード性能は、圧縮データの伸張時間に依存する。つまり、圧縮伸張回路104が高速なリアルタイム伸張処理を行うことができれば、フラッシュメモリストレージ101のリード性能を向上させることができる。
圧縮伸張回路104は、論理回路として実装される。圧縮伸張回路104は、高速なデータ伸張スループットを持つため、フラッシュメモリストレージ101の特徴である高速なランダムリード性能を、非圧縮データだけでなく圧縮データに対しても実現することができる。ストレージシステムにおいて、上位コントローラ110から圧縮データの読み出し要求がきた場合、圧縮データを伸張し、平文データを上位コントローラ110に返すスループットが、通常の非圧縮データの読み出しの場合と比べて著しく悪化しないように、圧縮データの伸張はできるだけ高速に行うことが好ましい。
なお、本発明のユースケースは、フラッシュメモリストレージ101に限られない。本発明を他のストレージシステムのデータ圧縮機能にも適用できる。従来のストレージシステムにおいても圧縮機能を搭載したストレージを利用して容量コスト低減が図られていた。しかし、従来のストレージシステムでは、圧縮データのリード性能を保証することが難しいため、バックアップやスナップショットイメージなどリードアクセス頻度の低い静的なデータにデータ圧縮機能を利用する場合が多い。本発明を適用したストレージシステムによれば、圧縮データに対しても高速なリード性能を保証できるので、リードアクセス頻度の高い動的なデータに対してもデータ圧縮機能を利用できる。
以下、LZ77に基づく一般的なスライド辞書型アルゴリズムによるデータ圧縮・伸張方法について説明する。
ここでは、RFC(Request for Comments)1951に規定され、最もよく知られているDeflateアルゴリズムについて説明する。データ圧縮を行うデータ圧縮機能と、データ伸張を行うデータ伸張機能とは、ソフトウェアまたはハードウェアで実現される。
図2は、Deflateアルゴリズムによるデータ圧縮の一例を示す。
Deflateアルゴリズムによるデータ圧縮は、LZ77圧縮とビットパタンへの符号化とを含む。この図は、文字列として表された平文データ200と、平文データ200をLZ77により圧縮した文字列であるLZ77圧縮データ210と、LZ77圧縮データ210を符号化したビットパタンである圧縮データ220とを示す。符号化は、例えばハフマン符号化である。
データ圧縮機能は、文字列ストリームである平文データ200において、出現した文字列と同じ文字列が後に再び出現するかどうかを順番に調べていく。これにより、ある文字列が、その先頭文字のJ文字前からL文字連続で一致している場合、データ圧縮機能は、この文字列をコピー記号[L,J]に変換する。Lをコピー長さ、Jをコピー距離と呼ぶことがある。例えば、「b,c,d,e」の4文字の文字列201は、先頭の文字「b」の6文字前から4文字連続で一致している。この場合、データ圧縮機能は、文字列201を[4,6]のコピー記号211に変換する。同様に、「a,b,a,b」の4文字の文字列202は、先頭の文字「a」の2文字前から、互いに重なる部分も含めて4文字連続で一致している。この場合、データ圧縮機能は、文字列202を[4,2]のコピー記号212に変換する。同様に、「c,d,e,f」の4文字の文字列203は、先頭の文字「c」の14文字前から4文字連続で一致している。この場合、データ圧縮機能は、文字列203を[4,14]のコピー記号213に変換する。
これらのコピー記号211、212、213のデータ量は元の文字列201、202、203の持つデータ量よりも少ないので、この変換により平文データ200のデータ量を減らしたLZ77圧縮データ210を生成することができる。一方、データ圧縮機能は、平文データ200の中で初めて出現した文字や、連続で一致する文字数が3文字に満たない文字列(つまりL<3)については、元の文字列の持つデータ量が十分少ないため、このような変換を行わない。
前述の一致検索で参照する文字列ストリーム(以下、辞書と呼ぶ)の範囲は、1文字前から所定の辞書サイズの文字数だけ過去(前方)までの範囲とする。これは、辞書サイズを制限しないとコピー記号[L,J]のJ(戻り量)を表すデータ量が多くなり、データ量の削減効果が低下するからである。また、辞書サイズを制限しないと検索時間が増大して性能が落ちるからである。辞書の範囲が検索の度に後方へスライドしていくので、この辞書はスライド辞書とも呼ばれ、LZ77はスライド辞書型圧縮アルゴリズム(スライド辞書法)の一つである。
なお、一致する文字列がスライド辞書内に複数存在する場合、データ圧縮機能は、連続で最も長く一致する文字列をコピー記号に変換する。これにより、データ量をより多く減らす効果がある。
このようにLZ77圧縮は、辞書サイズまでの過去の範囲の文字列をスライド辞書として用いることにより、データ量を減らす文字列変換である。
LZ77圧縮を行っただけでは、まだ圧縮データを生成したことにはならない。コピー記号はあくまでコピーを行うという動作を表現した記号であり、圧縮データではない。データ圧縮機能は、圧縮データを生成するために、コピー記号に変換されなかった文字(以下、リテラル文字と呼ぶ)とコピー記号とを規定の符号化方法で符号化し、それらを連結してビットストリームにする。このビットストリームは、Deflateの規則に従って符号化した結果であり、最終的に生成される圧縮データ220である。
圧縮データ220の中で、ビットパタン221は13ビット長でコピー記号[4,6]の符号語、ビットパタン222は12ビット長でコピー記号[4,2]の符号語、ビットパタン223は14ビット長でコピー記号[4,14]の符号語である。圧縮データ220の中で、その他の8ビット長のビットパタンは、リテラル文字の符号語である。このように圧縮データ220の中の各符号語のビットパタン長は固定ではない。
図3は、Deflateアルゴリズムによるデータ伸張の一例を示す。
データ伸張機能は、圧縮データ220のビットストリームを入力とし、データ圧縮機能の処理を逆にたどって元の平文データ200を復元する。
まず、データ伸張機能は、圧縮データ220をLZ77圧縮データ210の記号表現に戻すため、複数のビットパタンを連結した圧縮データ220のビットストリームの中から個々のビットパタン(符号語)を抽出する必要がある。しかし、各符号語のビットパタン長は固定ではないため、ランダムな位置から即座にビットパタンを抽出することは困難である。データ伸張機能は、基本的に圧縮データ220のビットストリームの先頭から抽出ポインタを設定し、後方へ1つずつ順番にビットパタンを抽出する。
例えば、データ伸張機能は、抽出ポインタを圧縮データ220の先頭の位置241に設定し、そこから始まる「10010001」というビットパタンが文字「a」を表すことが分かれば、抽出ポインタの移動(242)を行い、抽出ポインタを位置243に設定する。そして、データ伸張機能は、そこから始まる「10010010」というビットパタンが文字「b」を表すことが分かれば、抽出ポインタの移動(244)を行い、抽出ポインタを位置245に設定する。このように、データ伸張機能は、1つ前のビットパタンを判別できてはじめて抽出ポインタの位置を確定する。一般的に、圧縮データ220をLZ77圧縮データ210の記号表現に戻す復号処理は、このような効率の悪い直列処理である。
ただし、この復号処理に並列処理を適用できないわけではない。データ伸張機能は、各符号語のビットパタン長のバリエーションは予め分かっているので、符号語の並び方の全てのケースを示す抽出ポイント候補247を列挙することができる。例えば、データ伸張機能は、抽出ポイント候補247の中に本当の抽出ポイントが1つ存在することを予め知ることができる。そこで、データ伸張機能は、先頭から符号語の抽出を進めるだけでなく、抽出ポイント候補247の中の各ポイントについても暫定的な抽出を同時に開始する。それまでの範囲246の抽出が終われば、候補247の中の正しい抽出ポイントは1つに定まる。定まった時点で、その抽出ポイントから先の抽出はすでに進んでいるため、処理性能は向上する。しかし、この手法をハードウェアで実現しようとすると、大量のビットパタンデコーダを配置する必要があるので非常に回路規模が大きくなる。したがって、この手法は、現実的には困難である。
以下、本実施例の圧縮伸張回路104について説明する。
本実施例の圧縮伸張回路104は、ハードウェア処理によるデータ伸張の回路規模コストの増加を抑え、高速化することができる。
図4は、実施例1の圧縮伸張回路104の構成を示す。
圧縮伸張回路104は、データ圧縮処理を行う圧縮回路610と、データ伸張処理を行う伸張回路620とを有する。
圧縮回路610は、分割部611と、圧縮部617と、連結部616とを有する。分割部611には平文データが入力される。圧縮部617は、ペイロード生成部612と、ヘッダ生成部613とを有する。分割部611は、平文データを複数の平文ブロックに分割する。ペイロード生成部612は、スライド辞書型圧縮アルゴリズムを用いて平文ブロックを圧縮することにより圧縮ペイロードを生成する。ヘッダ生成部613は、圧縮ペイロードの長さを示すヘッダを生成し、圧縮ヘッダおよび圧縮ペイロードを含む圧縮ブロックを生成する。連結部616は、複数の圧縮ブロックを連結することにより、圧縮データを生成する。
なお、圧縮ヘッダをヘッダと呼ぶことがある。また、圧縮ペイロードをペイロードと呼ぶことがある。
伸張回路620は、抽出部627と、伸張部628とを有する。抽出部627は、ペイロード抽出部621を有する。伸張部628は、符号展開部622と、文字解決部623とを有する。ペイロード抽出部621には圧縮データが入力される。ペイロード抽出部621は、圧縮データ内の圧縮ヘッダを認識し、認識された圧縮ヘッダに示されているペイロード長に基づいて圧縮データから圧縮ペイロードを抽出する。符号展開部622は、圧縮ペイロードを、平文ブロックと同じ長さの中間ブロックに変換する。文字解決部623は、スライド辞書を用いて中間ブロック内の未解決の文字を解決することにより、平文ブロックを復元する。符号展開部622および文字解決部623は、圧縮ペイロードを平文ブロックに変換するためのパイプラインを有する。
以下、本実施例のデータ圧縮処理について説明する。
本実施例のデータ圧縮処理では、圧縮したい平文データを等しいサイズの複数の平文ブロックに分割する。その平文ブロック長をN[バイト]とする。Nの値は、伸張回路620が圧縮データを伸張して平文データを出力するスループットである出力スループット値と、伸張回路620の駆動クロック周波数を用いて決定される。出力スループット値は、上位I/F102が上位コントローラ110へリードデータを送信する伝送速度であっても良いし、その伝送速度より高くても良い。例えば、出力スループット値をX[MB/s]、駆動クロック周波数をF[MHz]とするとき、N=X/Fと定める。なお、平文データ400内の1バイトは1つの文字を意味する。つまり、分割された各平文ブロックは、N文字の文字列を含む。これにより、伸張回路620が圧縮データを伸張し、駆動クロックのサイクル毎にNバイトの平文データを出力することにより、予め定められた出力スループットで平文データを出力することができる。
図5は、実施例1のデータ圧縮処理を示す。
まず、分割部611は、入力された平文データをN文字(バイト)単位で複数のブロックに分割する(301)。次に、ペイロード生成部612は、分割された各平文ブロックを前述のようなLZ77圧縮によって圧縮し、ビットパタン符号化によってビットストリームを生成する(302)。このビットストリームを圧縮ペイロードと呼ぶ。
なお、ステップ302においてペイロード生成部612は、各平文ブロックのLZ77圧縮を次の2つの規則に従って行う。
第1の規則は、スライド辞書の範囲は平文ブロック境界をまたいでもよいという規則である。すなわち、スライド辞書は、平文ブロック境界に関わらず、一般的なLZ77圧縮と同じように、所定の辞書サイズを持ち、平文データの後方に向かってスライドする。
第2の規則は、平文ブロック内の文字列とスライド辞書の間で一致検索を行っている間に、文字列が当該平文ブロックの終端に来たら検索を停止するという規則である。すなわち、平文ブロック境界をまたぐ文字列が1つのコピー記号に変換されないようにする。例えば、10文字の文字列がJ文字前にも存在していたが、当該文字列のうち前部の6文字と後部の4文字の間に平文ブロック境界がある場合、前部の6文字はコピー記号[6,J]に変換されて境界の前に含められ、後部の4文字はコピー記号[4,J]に変換されて境界の後に含められる。
ステップ302に続いて、ヘッダ生成部613は、圧縮ペイロードの長さが何ビットであるかを計算し、その長さを示す圧縮ヘッダを生成し、各圧縮ペイロードの直前に当該圧縮ヘッダを付加して圧縮ブロックとする(303)。圧縮ヘッダは、例えば圧縮ペイロードのビット長そのものを表すビットパタン(74ビットなら1001010)である。しかし、圧縮ヘッダはそれに限定されるものではなく、圧縮ペイロードのビット長を特定できればどのようなデータでもよい。
最後に、連結部616は、全ての圧縮ブロックを連結することにより圧縮データ440(ビットストリーム)を生成し(304)、このフローを終了する。
図6は、実施例1のデータ圧縮処理の具体例を示す。
例えば、フラッシュメモリストレージ101のリードデータの出力スループット値を1600MB/s、圧縮伸張回路104の駆動クロック周波数を200MHzとする。前述の平文ブロック長の算出方法により、平文ブロック長Nは8となる。以下の説明においてはNを8とする。分割部611は、平文データを8バイト単位に分割する。この具体例では、平文データ400の先頭から40バイトが平文ブロック401、402、403、404、405、…に分割される。次に、ペイロード生成部612は、各平文ブロックのデータをLZ77圧縮する。
平文ブロック401は、平文データ400の先頭から圧縮対象までの範囲をスライド辞書として24ビットの圧縮ペイロード421へ圧縮されている。平文ブロック402は、平文データ400の先頭から圧縮対象までの範囲412をスライド辞書として40ビットの圧縮ペイロード422へ圧縮されている。平文ブロック403は、平文データ400の先頭から圧縮対象までの範囲413をスライド辞書として48ビットの圧縮ペイロード423へ圧縮されている。平文ブロック404は、平文データ400の先頭から圧縮対象までの範囲414をスライド辞書として16ビットの圧縮ペイロード424へ圧縮されている。平文ブロック405は、平文データ400の先頭から圧縮対象までの範囲415をスライド辞書として40ビットの圧縮ペイロード425へ圧縮されている。以下、同様にして平文データの最終の平文ブロックまで圧縮される。この具体例では、各平文ブロックの辞書範囲が常に平文データ400の先頭から始まっているが、後の平文ブロックにおいては、従来のLZ77圧縮と同様に、スライド辞書に含まれる文字列のサイズが所定の辞書サイズに達したら、スライド辞書の範囲の先頭は平文データ400の後方にスライドする。この後、スライド辞書に含まれる文字列は、圧縮対象より過去へ辞書サイズ分の文字列になる。
圧縮ヘッダ431、432、433、434、435、…は、それぞれ圧縮ペイロード421、422、423、424、425、…のビット長を示すデータである。最終的な圧縮データ440は、圧縮ヘッダおよび圧縮ペイロードの組である圧縮ブロックが連結されたビットストリームである。
このデータ圧縮処理によれば、平文データを同一サイズの複数の平文ブロックに分割し、LZ77圧縮を用いて平文ブロックを圧縮して圧縮ペイロードを生成し、圧縮ペイロードを示す圧縮ヘッダを付加することができる。これにより、データ伸張処理において、複数の圧縮ペイロードの長さが異なっていても、圧縮ヘッダに基づいて圧縮ペイロードを抽出することができると共に、次の圧縮ブロックを抽出することができる。
以下、本実施例のデータ伸張処理について説明する。
図7は、実施例1のデータ伸張処理を示す。
ペイロード抽出部621は、バッファレジスタを有する。まず、ペイロード抽出部621は、入力される圧縮データをバッファレジスタで受け取り、分析するビットパタンの位置を示す分析ポインタを圧縮データのビットストリームの先頭(すなわち、最初の圧縮ヘッダの先頭)に設定する。
ペイロード抽出部621は、分析ポインタから始まる圧縮ヘッダを分析し、圧縮ヘッダに基づいて、それに続く圧縮ペイロードの圧縮ペイロード長を特定し、その圧縮ペイロード長に基づいて当該圧縮ペイロードを抽出する(501)。
ペイロード抽出部621は、抽出した圧縮ペイロードを、符号展開部622および文字解決部623のパイプラインへ送り出す(502)。
ペイロード抽出部621は、抽出した圧縮ペイロードの終端が圧縮データの終端であるか否かを判定する(503)。抽出した圧縮ペイロードの終端が圧縮データの終端であるならば、ペイロード抽出部621は、ステップ505に遷移する。一方、圧縮データの終端ではないならば、ペイロード抽出部621は、分析ポインタを次の圧縮ヘッダに移動させる(504)。そして、ペイロード抽出部621は、処理を再びステップ501に遷移させる。
ステップ505においてペイロード抽出部621は、符号展開部622および文字解決部623のパイプラインに送り出された最後の圧縮ペイロードが、パイプラインを通過し終えるまで待機する(505)。
以上のようにして、元の平文データを構成していた最後の平文ブロックが復元され、文字解決部623から出力されれば、データ伸張処理は完了となる。
ここで、ステップ501〜504の一連の処理は、圧縮データを構成する圧縮ブロックの数だけ繰り返される。ペイロード抽出部621はこの処理を駆動クロック1サイクルの時間で行う。論理回路設計に通じた当業者であれば、ペイロード抽出部621のハードウェアを容易に設計することができる。ペイロード抽出部621は、例えば、以下の構成を有する論理回路である。
(1)外部から入力された圧縮データを格納するためのバッファレジスタ
(2)バッファレジスタの先頭部分に接続され、圧縮ヘッダを分析するビットパタンデコーダ
(3)ビットパタンデコーダのデコード結果に基づきペイロードを抽出し、前述のパイプラインに渡すためのデータローダ
(4)ビットパタンデコーダのデコード結果に基づき、次の圧縮ヘッダがバッファレジスタの先頭に来るようにデータを動かすバレルシフタ
(2)バッファレジスタの先頭部分に接続され、圧縮ヘッダを分析するビットパタンデコーダ
(3)ビットパタンデコーダのデコード結果に基づきペイロードを抽出し、前述のパイプラインに渡すためのデータローダ
(4)ビットパタンデコーダのデコード結果に基づき、次の圧縮ヘッダがバッファレジスタの先頭に来るようにデータを動かすバレルシフタ
ペイロード抽出部621では、これらの回路要素が同時に動作する。これにより、圧縮データのビットストリームの中から1サイクル毎に1つの圧縮ペイロードが抽出される。各圧縮ペイロードは、1サイクル毎に符号展開部622および文字解決部623のパイプラインへと渡される。
図8は、ペイロード抽出部621の動作の具体例を示す。
この図は、圧縮データ700の構成と、パイプラインの動作を示すタイミングチャート750とを示す。
駆動クロックの最初のサイクルにおいてペイロード抽出部621は、圧縮データ700の中の先頭の圧縮ヘッダ711に示された圧縮ペイロード長に基づいて、それに続く圧縮ペイロード721を抽出してパイプラインに送り、分析ポインタを次の圧縮ヘッダ712に移動させる。次のサイクルにおいてペイロード抽出部621は、圧縮ヘッダ712に示された圧縮ペイロード長に基づいて、それに続く圧縮ペイロード721を抽出してパイプラインへ送り、分析ポインタを次の圧縮ヘッダ713に移動させる。次のサイクルにおいてペイロード抽出部621は、圧縮ヘッダ713に示された圧縮ペイロード長に基づいて、それに続く圧縮ペイロード723を抽出してパイプラインに送り、分析ポインタを次の圧縮ヘッダ714に移動させる。以下、同様にしてペイロード抽出部621は、圧縮データの最後までの圧縮ペイロードを抽出する。
タイミングチャート750は、各圧縮ペイロードに対し、符号展開部622および文字解決部623のパイプラインによるデータ伸張の動作期間を示している。
動作期間731は圧縮ペイロード721が符号展開部622で処理されるタイミングを示す。動作期間732は圧縮ペイロード722が符号展開部622で処理されるタイミングを示す。動作期間733は圧縮ペイロード723が符号展開部622で処理されるタイミングを示す。
動作期間741は圧縮ペイロード721が文字解決部623で処理されるタイミングを示す。動作期間742は圧縮ペイロード722が文字解決部623で処理されるタイミングを示す。動作期間743は圧縮ペイロード723が文字解決部623で処理されるタイミングを示す。
このように、圧縮データ700を構成する複数の圧縮ペイロードのそれぞれが、符号展開部622および文字解決部623のパイプライン処理のタイミングは、1サイクルずつずれている。平文ブロック長が8バイトである場合、符号展開部622および文字解決部623は8個のパイプライン処理を同時に行う。符号展開部622のパイプラインは、8サイクルで圧縮ペイロードを中間ブロックに変換し、文字解決部623のパイプラインは、1サイクルで中間ブロックを平文ブロックに変換する。
図9は、符号展開部622の構成および動作の具体例を示す。
符号展開部622は、ビットパタンデコーダ800を有し、各圧縮ペイロードのビットストリームの先頭部分をビットパタンデコーダ800で分析する。ビットパタンデコーダ800は、その圧縮ペイロードに対応する中間ブロックを生成する機能を持つ。中間ブロックとはデータ伸張処理の中間データであり、平文ブロックと同じ長さを有し、N文字(8文字)の要素を有する。
前述のように、圧縮ペイロードの要素はリテラル文字を示すビットパタン、またはコピー記号[L,J]を示すビットパタンである。ビットパタンデコーダ800は、ビットストリームの先頭でリテラル文字を示すビットパタンを検出した場合、中間ブロック上に当該リテラル文字を追記する。また、ビットパタンデコーダ800は、コピー記号[L,J]を示すビットパタンを検出した場合、中間ブロック上にコピー長Lと同じ数の未確定文字[J]を追記する。
この具体例は、前述の圧縮ペイロード723に対する符号展開部622の動作を示す。例えば、圧縮ペイロード723は、「e,g,c,[3,J],a,b」のビットストリームである。この図の圧縮ペイロード723において最下段が、先頭のビットパタンを示す。パイプラインにおける圧縮ペイロード723の処理は、タイミングチャート750の時刻T0から時刻T8に渡って行われる。
時刻T0において符号展開部622は、圧縮ペイロード723のビットストリームから最初の「e」のビットパタンを検出する。時刻T1において符号展開部622は、中間ブロックにリテラル文字「e」811を設定する。同時に符号展開部622は、ビットストリームを前方にシフトし、次の「g」のビットパタンを検出する。時刻T2において符号展開部622は、中間ブロックにリテラル文字「g」812を追記する。同時に符号展開部622は、ビットストリームを前方にシフトし、次の「c」のビットパタンを検出する。時刻T3において符号展開部622は、中間ブロックにリテラル文字「c」813を追記する。同時に符号展開部622は、ビットストリームを前方にシフトし、コピー記号[3,J]のビットパタンを検出する。時刻T4において符号展開部622は、中間ブロックに3個の未確定文字[J]814を追記する。同時に符号展開部622は、ビットストリームを前方にシフトし、「a」のビットパタンを検出する。時刻T5において符号展開部622は、中間ブロックにリテラル文字「a」815を追記する。同時に符号展開部622は、ビットストリームを前方にシフトし、「b」のビットパタンを検出する。時刻T6において符号展開部622は、中間ブロックにリテラル文字「b」816を追記する。以上で符号展開部622は、中間ブロックにN文字(8文字)の記入を完了する。同時に符号展開部622は、ビットストリームを前方にシフトし、その結果ビットストリームは空になる。
ここからT8まで符号展開部622は、ビットパタン分析を行なわない。そのため、時刻T7およびT8では中間ブロックの内容も変化しない。タイミングチャート750は、符号展開部622において中間ブロックの内容が変化しない期間を斜線で示す。圧縮ペイロードがどんなビットストリームであっても、最大Nバイト(8バイト)のビットパタン列であるので、符号展開部622に入ってからNサイクル(8サイクル)後において、それに対応する中間ブロックは必ず完成する。
これにより、圧縮ペイロード723は中間ブロック「e,g,c,[J],[J],[J],a,b」に変換される。この中間ブロックにおいて、5つのリテラル文字(e,g,c,a,b)は、その文字が平文ブロックのその位置に入ることを意味している。一方、3つの未確定文字[J]は、数値Jを示し、Jだけ過去に離れたところにあるリテラル文字が平文ブロックのその位置に入るということを意味するだけで、何の文字が入るかはまだ解決していない。この後、文字解決部623が未確定文字の解決を行う。
この具体例における符号展開部622は、N段(8段)パイプライン形式の演算回路なので、横方向に8つ並んでいるビットパタンデコーダ800により、8つの圧縮ペイロードのビットストリームが同時に処理される。この具体例は、圧縮ペイロード723に対する符号展開部622の処理だけを示しているが、同時に他の7つの圧縮ペイロードに対する処理も他のレジスタ上で進行している。例えば、時刻T3において、圧縮ペイロード723に対応する中間ブロックが左から3列目のレジスタ上にあり、圧縮ペイロード722対応する中間ブロックは左から4列目のレジスタ上にあり、圧縮ペイロード721対応する中間ブロックは左から5列目のレジスタ上にある。
符号展開部622が圧縮ペイロード内の符号語がリテラル文字を示す場合に符号語をリテラル文字に変換し、符号語がリテラル文字以外を示す場合に未確定であることを示す未確定文字に変換することにより、圧縮ペイロードからN文字の長さを有する中間ブロックを生成することができる。これにより、後段の文字解決部623が、1サイクルにN文字ずつ処理することができる。
図10は、文字解決部623の構成および動作の具体例を示す。
文字解決部623は、符号展開部622の後に続く処理として設置され、辞書レジスタ900とデータセレクタ910とを有する。辞書レジスタ900は、スライド辞書を実現する。データセレクタ910は、符号展開部622から出力された中間ブロックの中に含まれる未確定文字を検出する。そして、データセレクタ910は、辞書レジスタ900の中から当該未確定文字901が指し示す文字を選択し、当該未確定文字を選択された文字に置き換えることにより平文ブロックを生成して出力すると共に、辞書レジスタ900へ入力する。
この具体例は、圧縮ペイロード723に対応する中間ブロック920に対する文字解決部623の動作を示す。中間ブロック920は、時刻T8に文字解決部623へ入力される。この図の中間ブロック920において最下段が、先頭の文字を示す。データセレクタ910は、中間ブロック920の中から長さ3の未確定文字列901を検出する。その後、データセレクタ910は、未確定文字列901の位置からJ文字前の長さ3の文字列を辞書レジスタ900から選択する。例えば、未確定文字列901においてJが26を示す場合、辞書レジスタ900において26文字前の「x,y,z」の文字列902が対応する。この図の辞書レジスタ900において、各列が平文ブロックを示し、平文ブロック内の文字の下方の位置が過去の文字を示す。平文ブロック内の文字の右方の位置が平文ブロック長だけ過去の文字を示す。したがってデータセレクタ910は、未確定文字列901を文字列902に置き換えることにより、文字列903を確定させる。これにより、時刻T9に、圧縮ペイロード723に対応する平文ブロック904「e,g,c,x,y,z,a,b」が復元される。
復元されたN文字(8文字)の平文ブロック904は、伸張回路620から平文データの一部として出力されると同時に、辞書レジスタ900に追加される。辞書レジスタはN文字(8文字)単位のシフトレジスタになっており、左端から新しい平文ブロックが追加されると、最も古い平文ブロックは右端から捨てられる。辞書レジスタ900の段数は、辞書サイズをNで割った数である。
文字解決部623が未確定文字を辞書レジスタ900内のリテラル文字に置き換えることにより、平文ブロックを復元することができる。また、文字解決部623が1サイクルにN文字ずつ処理することにより、出力スループットを駆動クロックのN倍にすることができる。
このように、伸張回路620は、複数の圧縮ブロックの夫々の圧縮ヘッダを認識することにより、認識されたヘッダ内に示されているペイロード長に基づいて圧縮データからペイロードを抽出することができる。更に、スライド辞書型圧縮アルゴリズムを用いてペイロードを伸張することにより平文ブロックを復元することができる。
また、ペイロード抽出部621が圧縮データから1サイクル当たり1つの圧縮ペイロードを抽出し、符号展開部622および文字解決部623のパイプラインが平文ブロックを復元し、平文データを1サイクル当たりN文字ずつ出力することができる。したがって、スライド辞書型圧縮アルゴリズムによって圧縮されたデータの伸張のスループットがデータ内容によらず常に所定の値となる。そのスループットはハードウェアの設計段階で任意に定めることができる。これにより、例えば、データ圧縮機能を持つストレージシステムにおいて、圧縮されたデータに対しても高速なリード性能を保証できる。
ソフトウェアがスライド辞書型アルゴリズムによりデータ圧縮・伸張を行う場合、ファイル単位で圧縮する場合が多い。したがって、平文データのサイズは大きく、辞書サイズも大きくなる。一方、本実施例のフラッシュメモリストレージ110は例えばページ(数kB)単位で読み書きを行うため、ソフトウェアによるデータ圧縮・伸張に比べて、平文データのサイズを小さくすることができ、辞書サイズも小さくすることができる。
以下、圧縮データのサイズをより小さくして、圧縮率を向上させるための実施例について説明する。
実施例1は、LZ77圧縮を用いて過去の文字列に一致する文字列をコピー記号に変換することにより、データ量を減らしているが、本実施例では、更に二次的圧縮を行う。二次的圧縮は、複数の連続するコピー記号のコピー距離Jが同じである場合に、それらを結合して1つのコピー記号にすることによって、さらにデータ量の削減を行う。
図11は、実施例2の圧縮伸張回路104の構成を示す。
この図において、実施例1と同一符号が付された要素は、実施例1の圧縮伸張回路104の要素と同一または相当物を示す。本実施例の圧縮部617は、実施例1における圧縮部617の要素に加えて、二次的圧縮のための変換部615を有する。本実施例の抽出部627は、実施例1における抽出部627の要素に加えて、二次的圧縮に対する伸張のための逆変換部625を有する。
変換部615は、連続する複数の圧縮ペイロードの夫々が一つのコピー記号であり、且つそれらのコピー記号のコピー距離Jが同じ場合、それらのコピー記号を一つのコピー記号に変換する。
図12は、二次的圧縮の具体例を示す。
この図は、Nが8である場合を示す。ペイロード生成部612が、3つの連続する平文ブロックの文字列と同じ文字列を、スライド辞書中のJ文字だけ過去の位置に発見したとする。この例において3つの連続する平文ブロックの文字列の長さは、8文字×3=24文字である。ペイロード生成部612は、実施例1と同様のデータ圧縮処理により、これら3つの平文ブロックを圧縮ペイロード1011、1012、1013にそれぞれ変換する。圧縮ペイロード1011、1012、1013のそれぞれは、コピー記号[8,J]になり、同じコピー記号が3つ連続して並ぶ。そして、ヘッダ生成部613は、圧縮ペイロード1011、1012、1013に、圧縮ヘッダ1001、1002、1003を付加する。
3つの連続する圧縮ペイロード1011、1012、1013のコピー記号のコピー距離Jが同じなので、変換部615は、3つのコピー記号のコピー長さの8を合計して1つのコピー長さの24にまとめ、3つのコピー記号[8,J]を一つのコピー記号[24,J]に変換することにより、圧縮ペイロード1021を生成する。更に変換部615は、圧縮ヘッダ1001、1002、1003を、圧縮ペイロード1021の長さを示す圧縮ヘッダ1020に変換する。この変換により、圧縮ヘッダおよび圧縮ペイロードの組は3個から1個に減るので、実施例1に比べて圧縮データのデータ量をさらに減らすことができる。更に、圧縮ヘッダ1020は、圧縮ペイロード1021が結合されたコピー記号であることを示す結合情報を含む。
このように圧縮回路610は、変換部615以外の処理について、実施例1と同様に処理することができる。
二次的圧縮を施した圧縮データを伸張するために、逆変換部625は、圧縮ヘッダ1020が結合情報を含むか否かを判定する。圧縮ヘッダ1020が結合情報を含む場合、逆変換部625は、後に続く1個の圧縮ペイロード2011から結合されたコピー記号を取得し、変換部615の逆変換として、それを複数(M個)のコピー記号に変換し、M個の圧縮ペイロード1011、1012、1013を生成する。ここで、結合されたコピー記号におけるコピー長さLはN×Mである。それらを1つずつMサイクルかけて符号展開部622に渡す。圧縮ヘッダ1020が結合情報を含まない場合、ペイロード抽出部621は、実施例1と同様にして1サイクル当たり1つの圧縮ペイロードを符号展開部622に渡す。
このように伸張回路620は、逆変換部625以外の処理について、実施例1と同様に処理することができる。
なお、抽出部627は、結合情報を用いずに、圧縮ペイロードが結合されたコピー記号であることを判定しても良い。例えば、圧縮ペイロードがコピー記号を示し、且つそのコピー長さが平文ブロック長のM倍を示す場合、抽出部627は、圧縮ペイロードを連続するM個のコピー記号に変換しても良い。
以下、前述の実施例の変形例について説明する。
圧縮回路610と伸張回路620は、互いに異なる装置であっても良い。
第1変形例として、ストレージコントローラと、ストレージコントローラに接続されている第1のストレージ装置と、ストレージコントローラに接続されている第2のストレージ装置とを有するストレージシステムの例について説明する。ここで、第1のストレージ装置が圧縮回路610を有し、第2のストレージ装置が伸張回路620を有する。第1のストレージ装置が読み出したデータを圧縮回路610により圧縮して圧縮データに変換し、圧縮データをストレージコントローラへ送信し、ストレージコントローラは、受信した圧縮データを第2のストレージ装置へ送信し、第2のストレージ装置は、受信した圧縮データを伸張回路620により伸張して格納する。この場合、データの転送量を減らすことにより、ストレージコントローラや、ストレージコントローラと第1のストレージ装置の間の通信線や、ストレージコントローラと第2のストレージ装置の間の通信線の負荷を低減することができる。
第2変形例として、第1の通信装置と、ネットワークを介して第1の通信装置に接続されている第2の通信装置とを有する通信システムの例について説明する。ここで、第1の通信装置が圧縮回路610を有し、第2の通信装置が伸張回路620を有する。第1の通信装置が入力されたデータを圧縮回路610により圧縮して圧縮データに変換し、圧縮データを第2の通信装置へ送信し、第2の通信装置は、受信した圧縮データを伸張回路620により伸張して出力する。この場合、データの転送量を減らすことにより、ネットワークの負荷を低減することができる。また、伸張回路620が予め定められた出力スループットで伸張を行うため、ネットワークの通信速度を保証することができる。
フラッシュメモリストレージ101がキャッシュ装置であっても良い。
第3変形例として、フラッシュメモリストレージ101をキャッシュ装置として用いる計算機システムの例について説明する。第3変形例の計算機システムは、実施例1の計算機システムの要素に加え、ストレージ装置としてHDDまたはフラッシュメモリデバイスを有する。ストレージ装置は、上位コントローラ110に接続されている。上位コントローラ110は、ライトコマンドに応じて、ライトデータをキャッシュ装置へ転送する。キャッシュ装置において、圧縮回路610は、ライトデータを圧縮することにより圧縮ライトデータを生成し、フラッシュメモリ105は圧縮ライトデータを格納する。フラッシュメモリ105は、ライトデータを格納しても良い。上位コントローラ110は、圧縮ライトデータをストレージ装置へ転送し、ストレージ装置へ書き込む。また、上位コントローラ110は、リードコマンドに応じて、ストレージ装置内のデータを読み出して圧縮リードデータとし、ストレージ装置からキャッシュ装置へ転送する。キャッシュ装置において、フラッシュメモリ105は圧縮リードデータを格納し、伸張回路620は、圧縮リードデータを伸張することによりリードデータを生成する。フラッシュメモリ105は、リードデータを格納しても良い。上位コントローラ110は、キャッシュ装置からリードデータを転送する。これにより、ストレージ装置へ格納するデータ量を削減できると共に、キャッシュ装置とストレージ装置の間のデータの転送量を削減することができる。また、計算機システムにおけるリードのスループットを保証することができる。
以上に述べた実施例および変形例において、圧縮回路610および伸張回路620は、LZ77以外のスライド辞書型圧縮アルゴリズムを用いても良い。
101:フラッシュメモリストレージ、 103:フラッシュメモリコントローラ、 104:圧縮伸張回路、 105:フラッシュメモリ、 107:マイクロプロセッサ、 110:上位コントローラ、 610:圧縮回路、 611:分割部、 612:ペイロード生成部、 613:ヘッダ生成部、 615:変換部、 616:連結部、 617:圧縮部、 620:伸張回路、 621:ペイロード抽出部、 622:符号展開部、 623:文字解決部、 625:逆変換部、 627:抽出部、 628:伸張部
Claims (10)
- 入力される平文データを、夫々が所定の平文ブロック長を有する複数の平文ブロックに分割する分割部と、
前記複数の平文ブロックの夫々の平文ブロックに対し、スライド辞書型圧縮アルゴリズムを用いて前記平文ブロックを圧縮することによりペイロードを生成し、前記ペイロードの長さを示すヘッダを生成し、前記ヘッダおよび前記ペイロードを含む圧縮ブロックを生成する圧縮部と、
前記複数の平文ブロックから生成された複数の圧縮ブロックを連結することにより圧縮データを生成する連結部と、
を備えるデータ圧縮装置。 - 前記平文ブロック長は、前記圧縮データを伸張する論理回路により伸張されたデータの出力スループットを、前記論理回路の駆動クロックの周波数で除した値である、
請求項1に記載のデータ圧縮装置。 - 前記圧縮部は、前記平文ブロック内の第1データが前記平文データ内の過去の第2データに一致している場合、前記第1データから第2データへの距離を示すコピー距離と前記第1データの長さであるコピー長さとを示すコピー記号を用いて、前記第1データを前記コピー記号に変換し、前記コピー記号を示す符号語を前記ペイロードに含め、
前記複数の平文ブロックから生成された複数のペイロードの中の連続するM個のペイロードの夫々が同一の第1コピー記号を示し、且つ前記第1コピー記号のコピー長さが前記平文ブロック長である場合、前記圧縮部は、前記M個のペイロードを一つの第2コピー記号に変換し、前記第2コピー記号のコピー長さとして前記平文ブロック長のM倍を指定する、
請求項1に記載のデータ圧縮装置。 - 平文データが複数の平文ブロックに分割され、前記複数の平文ブロックの夫々が所定の平文ブロック長を有し、前記複数の平文ブロックの夫々の平文ブロックに対し、スライド辞書型圧縮アルゴリズムを用いて前記平文ブロックを圧縮することによりペイロードが生成され、前記ペイロードの長さを示すヘッダが生成され、前記ヘッダおよび前記ペイロードを含む圧縮ブロックが生成され、前記複数の平文ブロックに対して生成された複数の圧縮ブロックを連結することにより生成された圧縮データを用い、前記圧縮データから前記複数の圧縮ブロックの夫々のヘッダを認識し、前記認識されたヘッダに示されている前記ペイロード長に基づいて前記圧縮データからペイロードを抽出する抽出部と、
前記スライド辞書型圧縮アルゴリズムを用いて前記抽出されたペイロードを伸張することにより前記平文ブロックを復元する伸張部と、
を備えるデータ伸張装置。 - 前記平文ブロック長は、前記伸張部により復元される平文ブロックの出力スループットを、前記伸張部の駆動クロックの周波数で除した値である、
請求項4に記載のデータ伸張装置。 - 前記伸張部は、前記抽出されたペイロード内の符号語がリテラル文字を示す場合に前記符号語をリテラル文字に変換し、前記符号語がリテラル文字以外を示す場合に未確定であることを示す文字である未確定文字に変換することにより、前記抽出されたペイロードから、前記平文ブロック長を有する中間ブロックを生成する、
請求項5に記載のデータ伸張装置。 - 前記伸張部は、前記未確定文字をスライド辞書内のリテラル文字に変換することにより、前記中間ブロックから平文ブロックを生成し、前記生成された平文ブロックを前記スライド辞書に格納する、
請求項6に記載のデータ伸張装置。 - 前記伸張部は、前記抽出されたペイロードを伸張するパイプラインを含む、
請求項7に記載のデータ伸張装置。 - 前記伸張部は、前記駆動クロックのサイクル毎に、一つの平文ブロックを復元する、
請求項8に記載のデータ伸張装置。 - 前記平文ブロック内の第1データが前記平文データ内の過去の第2データに一致している場合、前記第1データから第2データへの距離を示すコピー距離と前記第1データの長さであるコピー長さとを示すコピー記号を用いて、前記第1データが前記コピー記号に変換され、前記コピー記号を示す符号語が前記ペイロードに含められ、
前記抽出されたペイロードが第3コピー記号を示し、且つ前記第3コピー記号のコピー長さが前記平文ブロック長のM倍を示す場合、前記抽出部は、前記抽出されたペイロードを連続するM個の第4コピー記号に変換し、前記第4コピー記号のコピー長さとして前記平文ブロック長を指定する、
請求項4に記載のデータ伸張装置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2013/071617 WO2015019484A1 (ja) | 2013-08-09 | 2013-08-09 | データ圧縮装置およびデータ伸張装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6009676B2 JP6009676B2 (ja) | 2016-10-19 |
JPWO2015019484A1 true JPWO2015019484A1 (ja) | 2017-03-02 |
Family
ID=52460851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015530638A Expired - Fee Related JP6009676B2 (ja) | 2013-08-09 | 2013-08-09 | データ圧縮装置およびデータ伸張装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9479194B2 (ja) |
JP (1) | JP6009676B2 (ja) |
WO (1) | WO2015019484A1 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6613713B2 (ja) * | 2015-08-21 | 2019-12-04 | ブラザー工業株式会社 | データ処理システム及び圧縮デバイス |
FR3051061B1 (fr) * | 2016-05-03 | 2019-09-20 | Idemia Identity And Security | Procede de sauvegarde et de restauration de donnees d'un element securise |
US10606840B2 (en) * | 2017-02-13 | 2020-03-31 | International Business Machines Corporation | Parallel Lempel-Ziv decompression for highly-parallel computer architectures |
US10411732B2 (en) | 2017-02-13 | 2019-09-10 | International Business Machines Corporation | Parallel Lempel-Ziv compression for highly-parallel computer architectures |
KR102659832B1 (ko) | 2019-03-05 | 2024-04-22 | 삼성전자주식회사 | 데이터 저장 장치 및 시스템 |
US10944423B2 (en) * | 2019-03-14 | 2021-03-09 | International Business Machines Corporation | Verifying the correctness of a deflate compression accelerator |
US11050436B2 (en) * | 2019-06-21 | 2021-06-29 | Sap Se | Advanced database compression |
JP7197541B2 (ja) * | 2020-04-01 | 2022-12-27 | 株式会社日立製作所 | ストレージ装置 |
WO2024105793A1 (ja) * | 2022-11-15 | 2024-05-23 | 株式会社メガチップス | メモリシステム、復号回路、及び符号化データ生成方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5831558A (en) * | 1996-06-17 | 1998-11-03 | Digital Equipment Corporation | Method of compressing and decompressing data in a computer system by encoding data using a data dictionary |
US5861827A (en) * | 1996-07-24 | 1999-01-19 | Unisys Corporation | Data compression and decompression system with immediate dictionary updating interleaved with string search |
JP3540109B2 (ja) * | 1996-12-24 | 2004-07-07 | 富士通株式会社 | データ圧縮方法及び装置 |
JP3337633B2 (ja) * | 1997-12-03 | 2002-10-21 | 富士通株式会社 | データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体 |
JP4093193B2 (ja) * | 2004-03-18 | 2008-06-04 | セイコーエプソン株式会社 | データ圧縮方法及びプログラムならびにデータ復元方法及び装置 |
US7167115B1 (en) * | 2005-08-26 | 2007-01-23 | American Megatrends, Inc. | Method, apparatus, and computer-readable medium for data compression and decompression utilizing multiple dictionaries |
WO2009057459A1 (ja) * | 2007-10-30 | 2009-05-07 | Nec Corporation | データ圧縮方法 |
US8326605B2 (en) * | 2008-04-24 | 2012-12-04 | International Business Machines Incorporation | Dictionary for textual data compression and decompression |
DE602008002583D1 (de) | 2008-07-21 | 2010-10-28 | Sony Comp Entertainment Europe | Datenkomprimierung und -dekomprimierung |
JP5533083B2 (ja) | 2010-03-16 | 2014-06-25 | 株式会社リコー | データ処理装置およびデータ処理方法 |
JP5895545B2 (ja) | 2012-01-17 | 2016-03-30 | 富士通株式会社 | プログラム、圧縮ファイル生成方法、圧縮符号伸張方法、情報処理装置、および記録媒体 |
-
2013
- 2013-08-09 WO PCT/JP2013/071617 patent/WO2015019484A1/ja active Application Filing
- 2013-08-09 JP JP2015530638A patent/JP6009676B2/ja not_active Expired - Fee Related
- 2013-08-09 US US14/360,500 patent/US9479194B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
WO2015019484A1 (ja) | 2015-02-12 |
JP6009676B2 (ja) | 2016-10-19 |
US20160233880A1 (en) | 2016-08-11 |
US9479194B2 (en) | 2016-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6009676B2 (ja) | データ圧縮装置およびデータ伸張装置 | |
US7358867B2 (en) | Content independent data compression method and system | |
US8407378B2 (en) | High-speed inline data compression inline with an eight byte data path | |
CN102244518A (zh) | 并行解压缩的硬件实现的系统及方法 | |
US10303402B2 (en) | Data compression using partial statistics | |
US11424761B2 (en) | Multiple symbol decoder | |
US20220368345A1 (en) | Hardware Implementable Data Compression/Decompression Algorithm | |
US20190052284A1 (en) | Data compression apparatus, data decompression apparatus, data compression program, data decompression program, data compression method, and data decompression method | |
KR20240078422A (ko) | 인코딩된 데이터에 대한 조건부 트랜스코딩 | |
US9287893B1 (en) | ASIC block for high bandwidth LZ77 decompression | |
JP2023064241A (ja) | ストレージシステム及びストレージシステムにおけるデータ処理方法 | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
US12001339B2 (en) | Dictionary compression device and memory system | |
US11909423B2 (en) | Compression circuit, storage system, and compression method | |
JP7305609B2 (ja) | 受信したデータを処理する装置 | |
US20240106459A1 (en) | Compression device and compression method | |
Vasanthi et al. | Implementation of Robust Compression Technique Using LZ77 Algorithm on Tensilica's Xtensa Processor | |
US11593311B2 (en) | Compression system with longest match processing for generating compressed data | |
JP2023132713A (ja) | データ伸張装置、メモリシステム、およびデータ伸張方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160727 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160823 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160914 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6009676 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |